sproutcore 1.6.0.beta.2-x86-mingw32
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/.mailmap +32 -0
- data/.rspec +1 -0
- data/CHANGELOG +170 -0
- data/Gemfile +3 -0
- data/History.txt +54 -0
- data/README.txt +129 -0
- data/Rakefile +62 -0
- data/Todo.txt +1 -0
- data/VERSION.yml +4 -0
- data/bin/sc-build +13 -0
- data/bin/sc-build-number +13 -0
- data/bin/sc-docs +14 -0
- data/bin/sc-gen +13 -0
- data/bin/sc-init +13 -0
- data/bin/sc-manifest +13 -0
- data/bin/sc-server +13 -0
- data/bin/sproutcore +13 -0
- data/lib/Buildfile +152 -0
- data/lib/buildtasks/build.rake +119 -0
- data/lib/buildtasks/entry.rake +68 -0
- data/lib/buildtasks/manifest.rake +893 -0
- data/lib/buildtasks/render.rake +21 -0
- data/lib/buildtasks/target.rake +66 -0
- data/lib/doc_templates/jsdoc/allclasses.tmpl +17 -0
- data/lib/doc_templates/jsdoc/allfiles.tmpl +56 -0
- data/lib/doc_templates/jsdoc/class.tmpl +487 -0
- data/lib/doc_templates/jsdoc/index.tmpl +38 -0
- data/lib/doc_templates/jsdoc/publish.js +170 -0
- data/lib/doc_templates/jsdoc/static/default.css +162 -0
- data/lib/doc_templates/jsdoc/static/header.html +2 -0
- data/lib/doc_templates/jsdoc/static/index.html +19 -0
- data/lib/doc_templates/jsdoc/symbol.tmpl +35 -0
- data/lib/doc_templates/sproutcore/allclasses.tmpl +0 -0
- data/lib/doc_templates/sproutcore/allfiles.tmpl +56 -0
- data/lib/doc_templates/sproutcore/class.tmpl +674 -0
- data/lib/doc_templates/sproutcore/classes-json.tmpl +55 -0
- data/lib/doc_templates/sproutcore/index.tmpl +62 -0
- data/lib/doc_templates/sproutcore/publish.js +346 -0
- data/lib/doc_templates/sproutcore/static/default.css +258 -0
- data/lib/doc_templates/sproutcore/static/header.html +2 -0
- data/lib/doc_templates/sproutcore/static/index.html +19 -0
- data/lib/doc_templates/sproutcore/symbol.tmpl +35 -0
- data/lib/frameworks/sproutcore/Buildfile +104 -0
- data/lib/frameworks/sproutcore/CHANGELOG.md +435 -0
- data/lib/frameworks/sproutcore/README.md +139 -0
- data/lib/frameworks/sproutcore/apps/test_controls/Buildfile +0 -0
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/alert.js +39 -0
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/buttons.js +21 -0
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/categories.js +125 -0
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/category.js +36 -0
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/split.js +74 -0
- data/lib/frameworks/sproutcore/apps/test_controls/core.js +29 -0
- data/lib/frameworks/sproutcore/apps/test_controls/main.js +14 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/buttons_page.js +158 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/checkboxes_page.js +53 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/flow_layout_page.js +85 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/list_page.js +40 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/loading.rhtml +9 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.css +60 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.js +151 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/panels_page.js +62 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/progress_page.js +33 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/radio_page.js +55 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/scroll_page.js +77 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/segmented_page.js +99 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/select_page.js +61 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/sliders_page.js +54 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/split_page.js +141 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/strings.js +50 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/tab_page.js +53 -0
- data/lib/frameworks/sproutcore/apps/test_controls/resources/text_field_page.js +65 -0
- data/lib/frameworks/sproutcore/apps/test_controls/theme.js +34 -0
- data/lib/frameworks/sproutcore/apps/tests/controllers/detail.js +25 -0
- data/lib/frameworks/sproutcore/apps/tests/controllers/source.js +29 -0
- data/lib/frameworks/sproutcore/apps/tests/controllers/target.js +26 -0
- data/lib/frameworks/sproutcore/apps/tests/controllers/targets.js +86 -0
- data/lib/frameworks/sproutcore/apps/tests/controllers/tests.js +33 -0
- data/lib/frameworks/sproutcore/apps/tests/core.js +133 -0
- data/lib/frameworks/sproutcore/apps/tests/english.lproj/loading.rhtml +9 -0
- data/lib/frameworks/sproutcore/apps/tests/english.lproj/main_page.css +48 -0
- data/lib/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +233 -0
- data/lib/frameworks/sproutcore/apps/tests/english.lproj/strings.js +26 -0
- data/lib/frameworks/sproutcore/apps/tests/main.js +27 -0
- data/lib/frameworks/sproutcore/apps/tests/states/no_targets.js +26 -0
- data/lib/frameworks/sproutcore/apps/tests/states/ready.js +56 -0
- data/lib/frameworks/sproutcore/apps/tests/states/ready_detail.js +41 -0
- data/lib/frameworks/sproutcore/apps/tests/states/ready_empty.js +48 -0
- data/lib/frameworks/sproutcore/apps/tests/states/ready_list.js +41 -0
- data/lib/frameworks/sproutcore/apps/tests/states/ready_loading.js +44 -0
- data/lib/frameworks/sproutcore/apps/tests/states/ready_no_tests.js +31 -0
- data/lib/frameworks/sproutcore/apps/tests/states/start.js +39 -0
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/detail.js +15 -0
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/source.js +15 -0
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/target.js +15 -0
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/targets.js +15 -0
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/tests.js +15 -0
- data/lib/frameworks/sproutcore/apps/tests/tests/models/target.js +15 -0
- data/lib/frameworks/sproutcore/apps/tests/tests/models/test.js +15 -0
- data/lib/frameworks/sproutcore/apps/tests/tests/views/offset_checkbox.js +15 -0
- data/lib/frameworks/sproutcore/apps/tests/views/offset_checkbox.js +26 -0
- data/lib/frameworks/sproutcore/apps/welcome/controllers/targets.js +55 -0
- data/lib/frameworks/sproutcore/apps/welcome/core.js +30 -0
- data/lib/frameworks/sproutcore/apps/welcome/english.lproj/images/main-bg.png +0 -0
- data/lib/frameworks/sproutcore/apps/welcome/english.lproj/loading.rhtml +10 -0
- data/lib/frameworks/sproutcore/apps/welcome/english.lproj/main_page.css +25 -0
- data/lib/frameworks/sproutcore/apps/welcome/english.lproj/main_page.js +67 -0
- data/lib/frameworks/sproutcore/apps/welcome/english.lproj/strings.js +15 -0
- data/lib/frameworks/sproutcore/apps/welcome/main.js +19 -0
- data/lib/frameworks/sproutcore/apps/welcome/tests/controllers/targets.js +15 -0
- data/lib/frameworks/sproutcore/design/Record State Table.numbers +0 -0
- data/lib/frameworks/sproutcore/design/greenhouse-statechart.pdf +0 -0
- data/lib/frameworks/sproutcore/frameworks/ajax/fixtures/file_exists.json +1 -0
- data/lib/frameworks/sproutcore/frameworks/ajax/fixtures/malformed.json +11 -0
- data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +609 -0
- data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +550 -0
- data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/request.js +276 -0
- data/lib/frameworks/sproutcore/frameworks/animation/Buildfile +3 -0
- data/lib/frameworks/sproutcore/frameworks/animation/LICENSE +25 -0
- data/lib/frameworks/sproutcore/frameworks/animation/README.md +79 -0
- data/lib/frameworks/sproutcore/frameworks/animation/core.js +1205 -0
- data/lib/frameworks/sproutcore/frameworks/animation/tests/core.js +152 -0
- data/lib/frameworks/sproutcore/frameworks/bootstrap/README +9 -0
- data/lib/frameworks/sproutcore/frameworks/bootstrap/core.js +7 -0
- data/lib/frameworks/sproutcore/frameworks/bootstrap/setup_body_class_names.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/bench.js +14 -0
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +225 -0
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +50 -0
- data/lib/frameworks/sproutcore/frameworks/bootstrap/tests/system/browser.js +187 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +524 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/controller.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/object.js +342 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controls/button.js +49 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/core.js +189 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/function.js +39 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/handlebars/bind.js +293 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/handlebars/collection.js +57 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/handlebars/localization.js +5 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/handlebars/view.js +96 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/handlebars.js +73 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/object.js +81 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/run_loop.js +163 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/string.js +60 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/delegate_support.js +110 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/responder_context.js +268 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/selection_support.js +249 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/template_helpers/checkbox_support.js +63 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/template_helpers/text_field_support.js +174 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/keyboard.js +74 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/layout.js +95 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/main.js +50 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/manipulation.js +33 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +670 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/template.js +43 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/visibility.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/observable_protocol.js +40 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/sparse_array_delegate.js +131 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/resources/core.css +378 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/resources/view.css +57 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/application.js +33 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/bindable_span.js +164 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/browser.js +36 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/builder.js +202 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/core_query.js +141 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/cursor.js +131 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/datetime.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/device.js +210 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +991 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +289 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/page.js +106 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/platform.js +419 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/ready.js +103 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +1030 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/responder.js +124 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +2180 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/selection_set.js +693 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +401 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/string.js +162 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/theme.js +316 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/timer.js +548 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils/rect.js +104 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils.js +155 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +301 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/enum_case.js +206 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/null_case.js +64 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/selection_support.js +344 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/single_case.js +136 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/empty_case.js +82 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/multiple_case.js +111 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/single_case.js +193 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/single_enumerable_case.js +265 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controls/button.js +78 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/responder_context.js +76 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +78 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/template_helpers/checkbox_support.js +64 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/template_helpers/text_field_support.js +193 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/panes/template.js +20 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/builder.js +49 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/core_query/within.js +71 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/locale.js +140 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/ready/done.js +40 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/begin.js +47 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/element.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/end.js +124 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/get.js +51 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_attr.js +50 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_basic.js +28 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_className.js +177 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_style.js +109 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/init.js +55 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/join.js +28 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/push_text.js +74 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/tag.js +46 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/update.js +219 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeKeyPane.js +124 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeMainPane.js +68 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeMenuPane.js +48 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/root_responder.js +108 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/targetForAction.js +288 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/add.js +92 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/copy.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/indexSetForSource.js +98 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/isEqual.js +60 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/remove.js +111 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/sparse_array.js +256 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/theme.js +78 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/invalidate.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/invokeLater.js +209 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/isPaused.js +77 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/performAction.js +75 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/schedule.js +176 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/normalizeURL.js +24 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/offset.js +284 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/rect.js +105 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/main_pane.js +49 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/append_remove.js +224 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/child_view.js +26 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/firstResponder.js +148 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/keyPane.js +133 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/layout.js +31 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/sendEvent.js +206 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/collection.js +249 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/core.js +160 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/handlebars.js +937 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/animation.js +382 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/build.js +85 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/build_children.js +89 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/clippingFrame.js +117 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/convertFrames.js +248 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/convertLayouts.js +153 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/createChildViews.js +132 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/createLayer.js +97 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/destroyLayer.js +83 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/didAppendToDocument.js +83 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/findLayerInParentLayer.js +50 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/init.js +50 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/insertBefore.js +217 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/isVisible.js +85 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/isVisibleInWindow.js +122 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/keyboard.js +28 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layer.js +146 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutChildViews.js +162 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +180 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutStyle.js +745 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/parentViewDidChange.js +67 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/prepareContext.js +203 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/removeChild.js +189 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/render.js +203 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/render_delegate_support.js +163 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/replaceChild.js +29 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/static_layout.js +28 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/theme.js +45 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/updateLayer.js +148 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/updateLayerLocation.js +213 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/view.js +64 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/viewDidResize.js +202 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template.js +132 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template_collection.js +244 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +182 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/base.js +4 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/cursor.js +48 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/enabled.js +57 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +223 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +1116 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +624 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +401 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +400 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/touch.js +67 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/visibility.js +118 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +1521 -0
- data/lib/frameworks/sproutcore/frameworks/core_tools/core.js +20 -0
- data/lib/frameworks/sproutcore/frameworks/core_tools/data_source.js +99 -0
- data/lib/frameworks/sproutcore/frameworks/core_tools/english.lproj/strings.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/core_tools/fixtures/target.js +87 -0
- data/lib/frameworks/sproutcore/frameworks/core_tools/fixtures/test.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/core_tools/models/target.js +108 -0
- data/lib/frameworks/sproutcore/frameworks/core_tools/models/test.js +48 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/core.js +8 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/cascade.js +176 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +530 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +393 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/debug/json.js +71 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/debug/standard_setup.js +96 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/fixtures/author_fixtures.js +2503 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/fixtures/sample.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/models/child_attribute.js +105 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/models/child_record.js +21 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +74 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/models/fetched_attribute.js +100 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +152 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +1441 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +604 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/models/single_attribute.js +157 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/system/child_array.js +277 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/system/many_array.js +453 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +613 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +1526 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +758 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +2860 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/data_sources/cascade.js +133 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +122 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/contact_model.js +131 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/cyclical_relationship.js +119 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/mail_model.js +91 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/test_runner_model.js +56 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/datetime_recordattribute.js +73 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +423 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/data_store.js +180 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +313 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +363 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +421 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +304 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/core_methods.js +55 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/destroy.js +92 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/error_methods.js +56 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/normalize.js +336 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/readAttribute.js +53 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/refresh.js +48 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/storeDidChangeProperties.js +170 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/unknownProperty.js +66 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +112 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +252 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/single_attribute.js +284 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/many_array/core_methods.js +204 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +180 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChanges.js +173 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +158 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/core_methods.js +70 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/dataHashDidChange.js +113 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/discardChanges.js +102 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +180 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readEditableDataHash.js +126 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/removeDataHash.js +163 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/writeDataHash.js +166 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/builders.js +219 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/compare.js +144 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/contains.js +131 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/containsRecordTypes.js +81 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/copy.js +30 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation.js +197 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation_of_records.js +117 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/expandedRecordTypes.js +64 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/parse.js +224 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/queryWithScope.js +57 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/record_type_is.js +47 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_comparisons.js +70 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_query_extensions.js +71 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/array_observers.js +82 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +177 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/error_methods.js +50 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/flush.js +230 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/cancelRecord.js +54 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +137 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +221 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +156 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +76 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataHashDidChange.js +157 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +278 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/destroyRecord.js +110 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/error_methods.js +62 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/find.js +530 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/init.js +23 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/loadRecord.js +64 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/loadRecords.js +100 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +61 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/readDataHash.js +74 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/readEditableDataHash.js +74 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/recordDidChange.js +76 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/removeDataHash.js +144 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/retrieveRecord.js +200 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/unloadRecord.js +55 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/unloadRecords.js +90 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/writeDataHash.js +125 -0
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +1103 -0
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/tests/system/datetime.js +390 -0
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/resources/strings.js +14 -0
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/system/datetime.js +91 -0
- data/lib/frameworks/sproutcore/frameworks/debug/core.js +114 -0
- data/lib/frameworks/sproutcore/frameworks/debug/invoke_once_last_debugging.js +259 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/core.js +34 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/debug/drag.js +42 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/alert.css +56 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/a_sample_image.jpg +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/apple-logo1.jpeg +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/iframe.html +23 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/disclosure.css +73 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/drag.css +7 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/icons.css +916 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/images/cap.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/images/downbutton.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/shared.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/images/thumb-bottom.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/images/thumb-center.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/images/thumb-top.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/images/track.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/images/upbutton.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/list_item.css +185 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/menu.css +12 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +101 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/modal.css +9 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/panel.css +91 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/picker.css +35 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/progress.css +33 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/radio.css +10 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/segmented.css +132 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/separator.css +19 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/slider.css +69 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/split.css +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/split_divider.css +6 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/strings.js +14 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/tab.css +7 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/toolbar.css +5 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/touch-scroller.css +196 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/well.css +71 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/border.js +161 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_fast_path.js +711 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_group.js +25 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +97 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +300 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/navigation_builder.js +138 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +267 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +589 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +1081 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/modal.js +76 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/palette.js +96 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +193 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +939 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/select_button.js +950 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +237 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +43 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_source.js +79 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +187 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/responder.js +301 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +112 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/checkbox.js +98 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/collection.js +25 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +59 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/helpers/slicing.js +35 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/image_button.js +51 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/master_detail.js +29 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/menu.js +60 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/panel.js +28 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/picker.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/popup_button.js +21 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +100 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio.js +84 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio_group.js +116 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +58 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +80 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +83 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/source_list.js +8 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/toolbar.js +18 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/well.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/workspace.js +18 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +1017 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/system/key_bindings.js +42 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +224 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +64 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/mixins/border.js +106 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/methods.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +320 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +136 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +283 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/methods.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/ui.js +35 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/pane_page.js +42 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +69 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/methods.js +98 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +92 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/select_button/methods.js +194 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/select_button/ui.js +220 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/methods.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +46 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/content.js +189 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/displayProperties.js +89 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/keyEquivalents.js +57 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +166 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +236 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +126 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/ui.js +121 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/content.js +249 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deleteSelection.js +82 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deselect.js +215 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/displayProperties.js +31 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/itemViewForContentIndex.js +300 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/layerIdFor.js +65 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/length.js +88 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +262 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/nowShowing.js +121 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/reload.js +177 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/select.js +240 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectNextItem.js +205 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectPreviousItem.js +211 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selection.js +141 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/ui_diagram.js +188 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/methods.js +76 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/ui.js +456 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/methods.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +102 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/ui.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/image_button/ui.js +52 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/render.js +92 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +183 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowHeightForContentIndex.js +133 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowOffsetForContentIndex.js +131 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_alternatingrows.js +130 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_outline.js +56 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +205 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_simple.js +131 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +396 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/methods.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/ui.js +46 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/methods.js +128 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +418 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +119 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/ui.js +338 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/integration.js +50 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +143 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +162 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroller.js +118 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +62 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +457 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/methods.js +144 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/ui.js +224 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/methods.js +163 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +180 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/separator.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/methods.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/ui.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +60 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/ui.js +59 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/stacked/ui_comments.js +238 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/static_content.js +46 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +54 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/ui.js +92 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/toolbar/method.js +33 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/toolbar/ui.js +29 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/web/methods.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/web/ui.js +110 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/well/ui.js +54 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +944 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +120 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +3186 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/date_field.js +343 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +85 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/grid.js +243 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/image_button.js +82 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +657 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +995 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/master_detail.js +313 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +720 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +702 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/navigation.js +261 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/navigation_bar.js +191 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +303 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +259 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +404 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scene.js +211 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +1987 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroller.js +995 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segment.js +193 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +1088 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +907 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select_field.js +400 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/separator.js +52 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +299 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/source_list.js +61 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/source_list_group.js +176 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +897 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +58 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/stacked.js +121 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +148 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +286 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/thumb.js +65 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +138 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/web.js +103 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/well.js +81 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/workspace.js +285 -0
- data/lib/frameworks/sproutcore/frameworks/documentation/core.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +8 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/README.md +23 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/README +18 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/TODO +56 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/beautify.js +1058 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/design.js +20 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/file.js +35 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/files.js +40 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/layout.js +53 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/library.js +194 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/page.js +18 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/property.js +19 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/property_editor.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/target.js +20 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/targets.js +43 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/view_configs.js +100 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/core.js +65 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/core_file.js +124 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/data_source.js +250 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/app_page.js +399 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/app-selector.css +107 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/button.css +314 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/dock.css +90 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/general.css +51 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/main-page.css +93 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/menu.css +49 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/modal.css +41 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/picker.css +195 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/search.css +60 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/text-field.css +67 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/dialogs.js +303 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/fonts/museosans_500.eot +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/fonts/museosans_500.otf +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/fonts/museosans_500.woff +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/fonts/museosans_500_italic.eot +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/fonts/museosans_500_italic.otf +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/fonts/museosans_500_italic.woff +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/app-selector/choose-app.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/app-selector/list-item-sel.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule/active-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule/active-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule/disabled-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule/disabled-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule/regular-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule/regular-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule/sel-active-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule/sel-active-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule/sel-disabled-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule/sel-disabled-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule/sel-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule/sel-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule-xl/active-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule-xl/active-m.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule-xl/active-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule-xl/regular-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule-xl/regular-m.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/capsule-xl/regular-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/active-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/active-m.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/active-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/cap-active-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/cap-active-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/cap-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/cap-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/cap-sel-active-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/cap-sel-active-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/cap-sel-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/cap-sel-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/disabled-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/disabled-m.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/disabled-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/regular-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/regular-m.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/regular-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/sel-active-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/sel-active-m.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/sel-active-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/sel-disabled-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/sel-disabled-m.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/sel-disabled-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/sel-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/sel-m.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/dark/sel-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/shared/active-m.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/shared/disabled-m.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/shared/regular-m.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/shared/sel-active-m.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/shared/sel-disabled-m.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/shared/sel-m.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/square/active-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/square/active-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/square/disabled-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/square/disabled-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/square/regular-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/square/regular-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/square/sel-active-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/square/sel-active-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/square/sel-disabled-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/square/sel-disabled-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/square/sel-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/buttons/square/sel-r.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/icons/actions-active.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/icons/actions.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/icons/inspector-active.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/icons/inspector.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/icons/library-active.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/icons/library.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/icons/projects-active.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/icons/projects.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/icons/run-active.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/icons/run.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/icons/save-active.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/icons/save.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/logos/greenhouse-l.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/logos/greenhouse-s.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/logos/sproutcore.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/main-bg.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/bottom-left.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/bottom-right.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/bottom.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/close-active.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/close.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/left.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/pointer-bottom.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/pointer-left.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/pointer-right.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/pointer-top.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/right.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/search-active.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/search.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/top-left.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/top-right.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/picker/top.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/images/toolbar-bg.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/inspectors.js +365 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/loading.rhtml +9 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/main_page.js +95 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/strings.js +93 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/fixtures/file.js +35 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/main.js +28 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/mixins/drop_down.js +97 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/models/design.js +26 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/models/dir.js +93 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/models/file.js +51 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/models/target.js +82 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/models/view_config.js +49 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/resources/test_page.js +37 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/states/inspector.js +152 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/states/library.js +142 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/states/main.js +283 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/states/modals.js +299 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/states/ready.js +235 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/tests/controllers/design.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/tests/controllers/designs.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/tests/controllers/file.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/tests/controllers/files.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/tests/models/file.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/tests/models/view_config.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/tests/views/list_item.js +16 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/tests/views/plist_item.js +20 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/theme.js +25 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/anchor.js +277 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/application_list_item.js +19 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/event_blocker.js +32 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/label_designer.js +16 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/list_item.js +42 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/plist_item.js +178 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/simple_button.js +157 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/tear_off_picker.js +56 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/web.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/coders/design.js +22 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/coders/object.js +349 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/controllers/controllers.js +23 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/controllers/design.js +43 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/controllers/designs.js +139 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/controllers/page_design.js +172 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/controllers/page_files.js +28 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/core.js +28 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/css/css_rule.js +22 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/css/css_style.js +29 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/css/css_style_sheet.js +199 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/button.js +23 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/label.js +18 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/object_designer.js +298 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/tab.js +20 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/text_field.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/view_designer.js +1269 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/css/designer.css +96 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/design_page.js +55 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/high_light.css +10 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/images/controller.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/images/dock-bg.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/images/dock-item-bg.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/images/dock-item-divider.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/images/dock-item-sel-bg.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/images/dock-item-sel-divider.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/images/main-bg.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/images/page.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/images/pane.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/images/view.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/selection_handles.css +58 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/ext/binding.js +39 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/ext/object.js +29 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/ext/page.js +60 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/ext/view.js +30 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/mixins/button.js +13 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/mixins/snap_lines.js +228 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/tests/coders/page.js +54 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/tests/designers/view_designer.js +47 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/designer_drop_target.js +144 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/drawing.js +226 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/high_light.js +66 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/page_item_view.js +130 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/selection_handles.js +78 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/README.md +11 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/device.js +215 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/platform.js +67 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/english.lproj/default_styles.css +5 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/english.lproj/strings.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/mixins/edit_mode.js +48 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/mixins/emptiness.js +94 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/render_delegates/form.js +21 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/render_delegates/form_row.js +20 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_checkbox_field.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_field.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_label.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_radio_field.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_row.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_text_field.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form.js +285 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form_row.js +187 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +46 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +110 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphism/many.js +79 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphism/simple.js +76 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphism/single.js +67 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_child.js +229 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_thumb.js +236 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/render_delegates/split.js +18 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/render_delegates/split_divider.js +26 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/children.js +100 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/dividers.js +243 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/methods.js +294 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/split_child.js +135 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/split_thumb.js +160 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/split.js +929 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/split_divider.js +40 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/thumb.js +26 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/TESTING +46 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +133 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/core.js +23 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +201 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/delegates/inline_text_field.js +90 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/benchmark.css +146 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/blank.gif +0 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +67 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/button_view.css +40 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/checkbox_view.css +5 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/debug/control-test-pane.css +9 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/images/favicon.ico +0 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-logo.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-startup-landscape.jpg +0 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-startup-landscape.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-startup-portrait.jpg +0 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-startup-portrait.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-startup.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/inline_editor.css +12 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/label.css +47 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/radio_view.css +7 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/static_layout.css +5 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/text_field.css +146 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/ext/string.js +89 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/fixtures/file_exists.json +1 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/fixtures/malformed.json +11 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/gestures/pinch.js +119 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/gestures/swipe.js +234 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/gestures/tap.js +157 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/license.js +28 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_mixin.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +355 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/button.js +14 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/collection_content.js +180 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +113 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +227 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/control.js +282 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +153 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +745 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/gestureable.js +214 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editable.js +254 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor.js +188 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor_delegate.js +195 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inner_frame.js +194 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +75 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/tree_item_content.js +164 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/validatable.js +198 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +916 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +110 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/container.js +18 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/helpers/sizing.js +174 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/image.js +99 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +119 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/render_delegate.js +386 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +727 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/chance.js +65 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/cookie.js +176 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/core_query.js +63 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/exception_handler.js +91 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/gesture.js +363 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/image_queue.js +429 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/math.js +57 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +591 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/string.js +422 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/task_queue.js +153 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/text_selection.js +103 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +392 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/colors.js +87 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/misc.js +157 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/range.js +71 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_measurement.js +254 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tasks/preload_bundle.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tasks/task.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/tree/outline_case.js +108 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/tree/selection_support.js +340 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/methods.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/ui.js +113 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/delegates/inline_text_field/inline_text_field.js +150 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/integration/creating_views.js +118 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/content_display.js +57 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/content_value_support/content.js +168 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/control/displayProperties.js +89 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/editable/ui.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/beginEditing.js +194 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/commitEditing.js +150 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/discardEditing.js +151 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/beginEditing.js +114 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/commitEditing.js +151 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/discardEditing.js +152 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/api.js +52 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js +228 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/ui.js +64 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +149 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/validatable/ui.js +74 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/flat_case.js +325 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/group_case.js +718 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/outline_case.js +484 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/render_delegates/render_delegate.js +78 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/cookie.js +182 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/setClass.js +65 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/math.js +39 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/string.js +34 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/task_queue.js +49 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/user_defaults.js +30 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/utils/pointInElement.js +241 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/utils/range.js +68 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/credit_card.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/date.js +24 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/not_empty.js +56 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/number.js +53 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/password.js +19 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/validator.js +26 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/methods.js +18 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +180 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +512 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +173 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +87 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/nextValidKeyView.js +110 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +614 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +125 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/date.js +79 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/date_time.js +48 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/email.js +45 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/not_empty.js +33 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/number.js +99 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/password.js +86 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/positive_integer.js +85 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/validator.js +328 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/views/container.js +141 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +337 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +382 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/views/inline_text_field.js +648 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +225 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +1117 -0
- data/lib/frameworks/sproutcore/frameworks/handlebars/handlebars.js +1435 -0
- data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffer.js +390 -0
- data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffered.js +210 -0
- data/lib/frameworks/sproutcore/frameworks/jquery/jquery-sc.js +12 -0
- data/lib/frameworks/sproutcore/frameworks/jquery/jquery.js +7179 -0
- data/lib/frameworks/sproutcore/frameworks/jquery/tests/set_class.js +40 -0
- data/lib/frameworks/sproutcore/frameworks/media/resources/controls.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/media/resources/playeras3.fla +0 -0
- data/lib/frameworks/sproutcore/frameworks/media/resources/video.css +124 -0
- data/lib/frameworks/sproutcore/frameworks/media/resources/videoCanvas.swf +0 -0
- data/lib/frameworks/sproutcore/frameworks/media/views/audio.js +741 -0
- data/lib/frameworks/sproutcore/frameworks/media/views/controls.js +88 -0
- data/lib/frameworks/sproutcore/frameworks/media/views/media_slider.js +243 -0
- data/lib/frameworks/sproutcore/frameworks/media/views/mini_controls.js +63 -0
- data/lib/frameworks/sproutcore/frameworks/media/views/simple_controls.js +54 -0
- data/lib/frameworks/sproutcore/frameworks/media/views/video.js +832 -0
- data/lib/frameworks/sproutcore/frameworks/mini/license.js +30 -0
- data/lib/frameworks/sproutcore/frameworks/qunit/README.md +24 -0
- data/lib/frameworks/sproutcore/frameworks/qunit/package.json +21 -0
- data/lib/frameworks/sproutcore/frameworks/qunit/qunit/qunit.css +215 -0
- data/lib/frameworks/sproutcore/frameworks/qunit/qunit/qunit.js +1442 -0
- data/lib/frameworks/sproutcore/frameworks/qunit/test/headless.html +24 -0
- data/lib/frameworks/sproutcore/frameworks/qunit/test/index.html +18 -0
- data/lib/frameworks/sproutcore/frameworks/qunit/test/logs.html +17 -0
- data/lib/frameworks/sproutcore/frameworks/qunit/test/logs.js +150 -0
- data/lib/frameworks/sproutcore/frameworks/qunit/test/same.js +1421 -0
- data/lib/frameworks/sproutcore/frameworks/qunit/test/test.js +314 -0
- data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js +503 -0
- data/lib/frameworks/sproutcore/frameworks/routing/tests/system/routes.js +362 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/README +12 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/core.js +758 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +391 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/indexOf.js +33 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/insertAt.js +121 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/objectAt.js +34 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/popObject.js +50 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/pushObject.js +46 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/rangeObserver.js +371 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeAt.js +100 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeObject.js +49 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/replace.js +94 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/shiftObject.js +50 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/unshiftObject.js +47 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array.js +14 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/array.js +92 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/date.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/function.js +189 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/string.js +31 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/license.js +29 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +911 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/comparable.js +48 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +79 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +1341 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +109 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +1499 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +181 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +179 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +124 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/private/property_chain.js +195 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +1013 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +107 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/system/error.js +162 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/system/function.js +76 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +1209 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/system/json.js +515 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +1585 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +940 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +273 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +308 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/system/set.js +538 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/system/string.js +60 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/IsEqual.js +36 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/beget.js +29 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/clone.js +108 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/compare.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/console.js +21 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/guidFor.js +115 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/inspect.js +33 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/isArray.js +27 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +77 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/keys.js +26 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/makeArray.js +50 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/objectForPropertyPath.js +25 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/tupleForPropertyPath.js +43 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +81 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/array_observers.js +23 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/comparable.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable/enumerable.js +623 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable/enumerable_observers.js +81 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/chained.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +868 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observersForKey.js +36 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/propertyChanges.js +161 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/registerDependentKeys.js +155 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/propertyChanges.js +87 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/private/observer_queue/isObservingSuspended.js +55 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +474 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/error.js +59 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/add.js +212 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/addEach.js +49 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/clone.js +43 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/contains.js +74 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/create.js +42 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexAfter.js +38 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexBefore.js +38 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/intersects.js +74 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/max.js +40 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/min.js +50 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/rangeStartForIndex.js +36 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/remove.js +189 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/removeEach.js +49 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/without.js +89 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/json.js +21 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +265 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/base.js +201 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/bindings.js +385 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/concatenated_properties.js +77 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/enhance.js +196 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/observer_set.js +56 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/create.js +59 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/destroy.js +75 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/objectPropertyDidChange.js +117 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/rangeDidChange.js +110 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/update.js +65 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +126 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/set.js +324 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/core.js +5 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/debug/monitor.js +155 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +1253 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +1546 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/advanced/respond_to_event.js +401 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/advanced/without_concurrent_states.js +306 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/basic/with_concurrent_states.js +183 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/basic/without_concurrent_states.js +122 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/pane.js +89 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/responder_chain.js +109 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/root_responder.js +74 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/initial_substate.js +67 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/is_current_state.js +60 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/namespacing.js +248 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/plugin/mixin.js +68 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/plugin/nesting.js +95 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/state_observes.js +235 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/async/core.js +94 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/async/with_concurrent_states.js +123 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/async/without_concurrent_states.js +191 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/initial_substate/core.js +48 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/initial_substate/without_concurrent_states.js +218 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/standard/with_concurrent_states.js +88 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/standard/without_concurrent_states/context.js +191 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/standard/without_concurrent_states/core.js +200 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/with_concurrent_states/advanced.js +239 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/with_concurrent_states/basic.js +131 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/with_concurrent_states/intermediate.js +120 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/without_concurrent_states/context.js +144 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/without_concurrent_states/core.js +281 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/transient/without_concurrent_states.js +162 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/create/assigned_root_state.js +76 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/create/unassigned_root_state.js +162 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/destroy.js +73 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/invoke_state_method.js +241 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/owner.js +236 -0
- data/lib/frameworks/sproutcore/frameworks/table/mixins/table_delegate.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/table/system/table_column.js +125 -0
- data/lib/frameworks/sproutcore/frameworks/table/views/table.js +440 -0
- data/lib/frameworks/sproutcore/frameworks/table/views/table_cell.js +63 -0
- data/lib/frameworks/sproutcore/frameworks/table/views/table_head.js +158 -0
- data/lib/frameworks/sproutcore/frameworks/table/views/table_header.js +214 -0
- data/lib/frameworks/sproutcore/frameworks/table/views/table_row.js +155 -0
- data/lib/frameworks/sproutcore/frameworks/testing/core.js +199 -0
- data/lib/frameworks/sproutcore/frameworks/testing/english.lproj/additions.css +8 -0
- data/lib/frameworks/sproutcore/frameworks/testing/english.lproj/runner.css +128 -0
- data/lib/frameworks/sproutcore/frameworks/testing/english.lproj/testsuite.css +136 -0
- data/lib/frameworks/sproutcore/frameworks/testing/extras.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/testing/system/dump.js +205 -0
- data/lib/frameworks/sproutcore/frameworks/testing/system/equiv.js +201 -0
- data/lib/frameworks/sproutcore/frameworks/testing/system/plan.js +708 -0
- data/lib/frameworks/sproutcore/frameworks/testing/system/runner.js +219 -0
- data/lib/frameworks/sproutcore/frameworks/testing/system/suite.js +222 -0
- data/lib/frameworks/sproutcore/frameworks/testing/utils.js +62 -0
- data/lib/frameworks/sproutcore/lib/index.rhtml +167 -0
- data/lib/frameworks/sproutcore/license.js +32 -0
- data/lib/frameworks/sproutcore/themes/ace/designs/dark.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/designs/light.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_handle.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_off.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_on.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/body.css +13 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/active_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/button.css +33 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/normal_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/selected_active_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/selected_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/active_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/active_button_capsule.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/active_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/button.css +102 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/normal_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/normal_button_capsule.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/normal_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_active_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_active_button_capsule.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_active_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_button_capsule.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/active_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/active_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/button.css +78 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/normal_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/normal_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/selected_active_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/selected_active_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/selected_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/selected_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/active_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/button.css +39 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/normal_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/selected_active_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/selected_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/button.css +41 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/active_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/active_button_capsule.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/active_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/button.css +93 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/normal_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/normal_button_capsule.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/normal_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_active_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_active_button_capsule.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_active_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_button_capsule.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/active_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/active_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/button.css +72 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/normal_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/normal_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/selected_active_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/selected_active_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/selected_button.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/selected_button_pointer.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/button.css +17 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/button.js +5 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/popup/active_select.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/popup/normal_select.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/popup/select.css +21 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox.css +40 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_checked.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_checked_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_mixed.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_mixed_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_unchecked.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_unchecked_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox.css +40 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_checked.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_checked_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_mixed.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_mixed_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_unchecked.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_unchecked_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/checkbox.css +7 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list.css +4 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list_item.css +17 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/collection/source-list/selection.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/collection/source-list/source-list.js +3 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/collection/source-list/source_list_view.css +36 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure.css +24 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure_closed.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure_closed_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure_open.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure_open_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/imagebutton/ace/imagebutton.css +11 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/loading.css +50 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/master-detail/master-detail.css +27 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/menu/checkmark.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/menu/checkmark_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/menu/down.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu.css +79 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu_item.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/menu/up.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/pane/pane.css +3 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/panel/panel.css +13 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/panel/panel.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/ace/panel.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/ace/picker.css +41 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/ace/picker.js +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/ace/pointers.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/picker.js +32 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.css +111 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.js +12 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover_empty.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover_notoolbar.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover_pointers.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover_pointers_notoolbar.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/workspace.js +28 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress.css +27 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress_view_content.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress_view_track.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio.css +57 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_mixed.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_mixed_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_selected.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_selected_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_unselected.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal.css +78 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal_touch.css +91 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/thumb.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/track_and_arrows.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/track_and_arrows_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/thumb.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/track_and_arrows.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/track_and_arrows_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical.css +80 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical_touch.css +92 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented.css +91 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented_normal.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented_selected.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented_selected_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented.css +91 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_normal.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_selected.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_selected_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented.css +91 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_normal.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_selected.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_selected_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented.css +95 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented_normal.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented_selected.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented_selected_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/segmented.css +83 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/knob_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/slider.css +27 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/knob_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/slider.css +27 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/knob_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/slider.css +27 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/track.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.css +8 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/track.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/split/split.css +31 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/tab/tab.css +3 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/toolbar/toolbar.css +8 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/toolbar/toolbar.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/well/well.css +7 -0
- data/lib/frameworks/sproutcore/themes/ace/theme.js +30 -0
- data/lib/frameworks/sproutcore/themes/empty_theme/tests/mini_icons.rhtml +69 -0
- data/lib/frameworks/sproutcore/themes/empty_theme/theme.js +16 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/button.css +41 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/core.css +8 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/backButton.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/blueButton.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/cancel.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/grayButton.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/leftButton.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listArrow.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listArrowSel.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listGroup.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/loading.gif +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/pinstripes.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/rightButton.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/selection.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/thumb.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toggle.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toggleOn.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toolButton.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toolbar.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/whiteButton.png +0 -0
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/strings.js +15 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/10.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/100.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/102.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/110.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/120.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/127.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/18.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/19.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/2.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/24.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/26.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/27.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/28.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/29.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/30.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/31.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/33.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/37.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/41.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/16/99.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/10.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/100.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/102.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/110.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/120.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/127.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/18.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/19.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/2.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/24.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/26.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/27.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/28.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/29.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/30.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/31.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/33.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/37.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/41.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/24/99.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/10.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/100.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/102.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/110.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/120.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/127.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/18.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/19.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/2.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/24.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/26.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/27.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/28.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/29.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/30.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/31.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/33.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/37.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/41.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/32/99.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/48/10.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/48/18.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/48/19.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/Source/icons/48/2.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/button.css +399 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/checkbox.css +78 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/collection.css +135 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/core.css +76 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/disclosure.css +57 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/images/icons/mini_222222.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/images/icons/mini_454545.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/images/icons/mini_888888.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/images/icons/mini_ffffff.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/images/panels/sprite-x.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/images/panels/sprite-y.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/images/sc-scroller-repeat-x.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/images/sc-scroller-repeat-y.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/images/sc-scroller-sprite.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/images/sc-theme-repeat-x.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/images/sc-theme-ysprite.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/images/sc-toolbar-view.png +0 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/label.css +11 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/list_item.css +82 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/menu.css +20 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/menu_item_view.css +36 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/pane.css +18 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/panel.css +33 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/picker.css +17 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/progress.css +27 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/radio.css +125 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/scroller.css +159 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/segmented.css +270 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/slider.css +94 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/split_view.css +11 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/tab.css +14 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/table.css +14 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/text_field.css +5 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/toolbar.css +7 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/well.css +36 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/button.js +89 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/panel.js +28 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/progress.js +194 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/slider.js +67 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/well.js +27 -0
- data/lib/frameworks/sproutcore/themes/legacy_theme/theme.js +13 -0
- data/lib/gen/Buildfile +16 -0
- data/lib/gen/app/Buildfile +36 -0
- data/lib/gen/app/README +1 -0
- data/lib/gen/app/USAGE +13 -0
- data/lib/gen/app/templates/apps/@target_name@/Buildfile +14 -0
- data/lib/gen/app/templates/apps/@target_name@/core.js +27 -0
- data/lib/gen/app/templates/apps/@target_name@/main.js +30 -0
- data/lib/gen/app/templates/apps/@target_name@/resources/loading.rhtml +9 -0
- data/lib/gen/app/templates/apps/@target_name@/resources/main_page.js +24 -0
- data/lib/gen/app/templates/apps/@target_name@/theme.js +27 -0
- data/lib/gen/controller/Buildfile +18 -0
- data/lib/gen/controller/README +1 -0
- data/lib/gen/controller/USAGE +13 -0
- data/lib/gen/controller/templates/controllers/@filename@.js +18 -0
- data/lib/gen/controller/templates/tests/controllers/@filename@.js +15 -0
- data/lib/gen/data-source/Buildfile +18 -0
- data/lib/gen/data-source/README +1 -0
- data/lib/gen/data-source/USAGE +15 -0
- data/lib/gen/data-source/templates/data_sources/@filename@.js +64 -0
- data/lib/gen/design/Buildfile +23 -0
- data/lib/gen/design/README +1 -0
- data/lib/gen/design/USAGE +10 -0
- data/lib/gen/design/templates/resources/@filename@.js +16 -0
- data/lib/gen/framework/Buildfile +36 -0
- data/lib/gen/framework/README +1 -0
- data/lib/gen/framework/USAGE +13 -0
- data/lib/gen/framework/templates/frameworks/@target_name@/core.js +21 -0
- data/lib/gen/framework/templates/frameworks/@target_name@/english.lproj/strings.js +15 -0
- data/lib/gen/html_app/Buildfile +36 -0
- data/lib/gen/html_app/README +1 -0
- data/lib/gen/html_app/USAGE +15 -0
- data/lib/gen/html_app/templates/apps/@target_name@/@target_name@.js +14 -0
- data/lib/gen/html_app/templates/apps/@target_name@/resources/images/.gitkeep +0 -0
- data/lib/gen/html_app/templates/apps/@target_name@/resources/stylesheets/@target_name@.css +4 -0
- data/lib/gen/html_app/templates/apps/@target_name@/resources/templates/@target_name@.handlebars +1 -0
- data/lib/gen/html_project/Buildfile +45 -0
- data/lib/gen/html_project/INIT +3 -0
- data/lib/gen/html_project/README +1 -0
- data/lib/gen/html_project/USAGE +2 -0
- data/lib/gen/html_project/templates/@filename@/Buildfile +8 -0
- data/lib/gen/html_project/templates/@filename@/README +7 -0
- data/lib/gen/language/Buildfile +26 -0
- data/lib/gen/language/README +1 -0
- data/lib/gen/language/USAGE +13 -0
- data/lib/gen/language/templates/@filename@/strings.js +14 -0
- data/lib/gen/model/Buildfile +16 -0
- data/lib/gen/model/README +1 -0
- data/lib/gen/model/USAGE +15 -0
- data/lib/gen/model/templates/fixtures/@filename@.js +35 -0
- data/lib/gen/model/templates/models/@filename@.js +19 -0
- data/lib/gen/model/templates/tests/models/@filename@.js +15 -0
- data/lib/gen/page/Buildfile +36 -0
- data/lib/gen/page/README +1 -0
- data/lib/gen/page/USAGE +15 -0
- data/lib/gen/page/templates/pages/@target_name@/Buildfile +16 -0
- data/lib/gen/page/templates/pages/@target_name@/core.js +22 -0
- data/lib/gen/page/templates/pages/@target_name@/en.lproj/strings.js +14 -0
- data/lib/gen/page/templates/pages/@target_name@/resources/body.css +1 -0
- data/lib/gen/page/templates/pages/@target_name@/resources/body.rhtml +7 -0
- data/lib/gen/project/Buildfile +45 -0
- data/lib/gen/project/INIT +3 -0
- data/lib/gen/project/README +1 -0
- data/lib/gen/project/USAGE +2 -0
- data/lib/gen/project/templates/@filename@/Buildfile +12 -0
- data/lib/gen/project/templates/@filename@/README +7 -0
- data/lib/gen/responder/Buildfile +18 -0
- data/lib/gen/responder/README +1 -0
- data/lib/gen/responder/USAGE +15 -0
- data/lib/gen/responder/templates/states/@filename@.js +39 -0
- data/lib/gen/test/Buildfile +25 -0
- data/lib/gen/test/README +1 -0
- data/lib/gen/test/USAGE +12 -0
- data/lib/gen/test/templates/tests/@filename@.js +15 -0
- data/lib/gen/theme/Buildfile +36 -0
- data/lib/gen/theme/README +1 -0
- data/lib/gen/theme/USAGE +13 -0
- data/lib/gen/theme/templates/themes/@target_name@/Buildfile +3 -0
- data/lib/gen/theme/templates/themes/@target_name@/resources/theme_styles.css +11 -0
- data/lib/gen/theme/templates/themes/@target_name@/theme.js +23 -0
- data/lib/gen/view/Buildfile +18 -0
- data/lib/gen/view/README +1 -0
- data/lib/gen/view/USAGE +13 -0
- data/lib/gen/view/templates/tests/views/@filename@.js +15 -0
- data/lib/gen/view/templates/views/@filename@.js +18 -0
- data/lib/sproutcore/builders/base.rb +97 -0
- data/lib/sproutcore/builders/chance_file.rb +78 -0
- data/lib/sproutcore/builders/combine.rb +61 -0
- data/lib/sproutcore/builders/handlebars.rb +30 -0
- data/lib/sproutcore/builders/html.rb +213 -0
- data/lib/sproutcore/builders/javascript.rb +107 -0
- data/lib/sproutcore/builders/less.rb +41 -0
- data/lib/sproutcore/builders/minify.rb +148 -0
- data/lib/sproutcore/builders/module.rb +74 -0
- data/lib/sproutcore/builders/sass.rb +65 -0
- data/lib/sproutcore/builders/string_wrapper.rb +41 -0
- data/lib/sproutcore/builders/strings.rb +45 -0
- data/lib/sproutcore/builders/stylesheet.rb +49 -0
- data/lib/sproutcore/builders/test.rb +59 -0
- data/lib/sproutcore/builders/test_index.rb +26 -0
- data/lib/sproutcore/builders.rb +15 -0
- data/lib/sproutcore/buildfile/build_task.rb +33 -0
- data/lib/sproutcore/buildfile/buildfile_dsl.rb +169 -0
- data/lib/sproutcore/buildfile/early_time.rb +30 -0
- data/lib/sproutcore/buildfile/invocation_chain.rb +64 -0
- data/lib/sproutcore/buildfile/namespace.rb +33 -0
- data/lib/sproutcore/buildfile/string_ext.rb +202 -0
- data/lib/sproutcore/buildfile/task.rb +325 -0
- data/lib/sproutcore/buildfile/task_arguments.rb +106 -0
- data/lib/sproutcore/buildfile/task_manager.rb +204 -0
- data/lib/sproutcore/buildfile.rb +490 -0
- data/lib/sproutcore/deprecated/view_helper.rb +662 -0
- data/lib/sproutcore/helpers/capture_helper.rb +30 -0
- data/lib/sproutcore/helpers/cssmin.rb +202 -0
- data/lib/sproutcore/helpers/dom_id_helper.rb +21 -0
- data/lib/sproutcore/helpers/entry_sorter.rb +125 -0
- data/lib/sproutcore/helpers/html5_manifest.rb +88 -0
- data/lib/sproutcore/helpers/minifier.rb +106 -0
- data/lib/sproutcore/helpers/packed_optimizer.rb +102 -0
- data/lib/sproutcore/helpers/static_helper.rb +444 -0
- data/lib/sproutcore/helpers/tag_helper.rb +182 -0
- data/lib/sproutcore/helpers/text_helper.rb +303 -0
- data/lib/sproutcore/helpers.rb +11 -0
- data/lib/sproutcore/models/generator.rb +509 -0
- data/lib/sproutcore/models/hash_struct.rb +124 -0
- data/lib/sproutcore/models/manifest.rb +387 -0
- data/lib/sproutcore/models/manifest_entry.rb +362 -0
- data/lib/sproutcore/models/project.rb +267 -0
- data/lib/sproutcore/models/target.rb +870 -0
- data/lib/sproutcore/models.rb +8 -0
- data/lib/sproutcore/rack/builder.rb +344 -0
- data/lib/sproutcore/rack/dev.rb +92 -0
- data/lib/sproutcore/rack/docs.rb +24 -0
- data/lib/sproutcore/rack/filesystem.rb +324 -0
- data/lib/sproutcore/rack/proxy.rb +165 -0
- data/lib/sproutcore/rack/service.rb +153 -0
- data/lib/sproutcore/rack/test_runner.rb +24 -0
- data/lib/sproutcore/rack.rb +7 -0
- data/lib/sproutcore/render_engines/erubis.rb +55 -0
- data/lib/sproutcore/render_engines/haml.rb +39 -0
- data/lib/sproutcore/tools/build.rb +100 -0
- data/lib/sproutcore/tools/build_number.rb +23 -0
- data/lib/sproutcore/tools/docs.rb +53 -0
- data/lib/sproutcore/tools/gen.rb +101 -0
- data/lib/sproutcore/tools/init.rb +56 -0
- data/lib/sproutcore/tools/manifest.rb +85 -0
- data/lib/sproutcore/tools/server.rb +56 -0
- data/lib/sproutcore/tools.rb +419 -0
- data/lib/sproutcore/version.rb +12 -0
- data/lib/sproutcore.rb +169 -0
- data/spec/buildtasks/build/copy_spec.rb +60 -0
- data/spec/buildtasks/build/spec_helper.rb +36 -0
- data/spec/buildtasks/manifest/catalog_spec.rb +48 -0
- data/spec/buildtasks/manifest/hide_buildfiles_spec.rb +126 -0
- data/spec/buildtasks/manifest/localize_spec.rb +97 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/chance_2x_spec.rb +100 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/chance_spec.rb +104 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/combine_spec.rb +331 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/css_spec.rb +87 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/handlebars_spec.rb +39 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/html_spec.rb +175 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/javascript_spec.rb +65 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/minify_spec.rb +70 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/module_info_spec.rb +96 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/module_spec.rb +83 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/packed_2x_indirect_spec.rb +191 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/packed_2x_spec.rb +185 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/packed_spec.rb +187 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/sass_spec.rb +98 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/strings_spec.rb +64 -0
- data/spec/buildtasks/manifest/prepare_build_tasks/tests_spec.rb +163 -0
- data/spec/buildtasks/manifest/prepare_spec.rb +43 -0
- data/spec/buildtasks/manifest/spec_helper.rb +39 -0
- data/spec/buildtasks/target_spec.rb +270 -0
- data/spec/fixtures/builder_tests/Buildfile +22 -0
- data/spec/fixtures/builder_tests/apps/chance_test/Buildfile +14 -0
- data/spec/fixtures/builder_tests/apps/chance_test/core.js +27 -0
- data/spec/fixtures/builder_tests/apps/chance_test/main.js +30 -0
- data/spec/fixtures/builder_tests/apps/chance_test/resources/demo.css +6 -0
- data/spec/fixtures/builder_tests/apps/chance_test/resources/force@2x.png +0 -0
- data/spec/fixtures/builder_tests/apps/chance_test/resources/last_file.css +7 -0
- data/spec/fixtures/builder_tests/apps/chance_test/resources/loading.rhtml +9 -0
- data/spec/fixtures/builder_tests/apps/chance_test/resources/main_page.js +24 -0
- data/spec/fixtures/builder_tests/apps/chance_test/resources/z_first_file.css +6 -0
- data/spec/fixtures/builder_tests/apps/chance_test/theme.js +27 -0
- data/spec/fixtures/builder_tests/apps/combine_test/a.js +1 -0
- data/spec/fixtures/builder_tests/apps/combine_test/b.js +1 -0
- data/spec/fixtures/builder_tests/apps/combine_test/c.js +1 -0
- data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/a.css +1 -0
- data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/b.css +1 -0
- data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/c.css +1 -0
- data/spec/fixtures/builder_tests/apps/handlebars_test/template.handlebars +5 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/bar1_sample.rhtml +2 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/erb_sample.html.erb +1 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/icons/image.png +0 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/image.jpg +0 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/rhtml_sample.rhtml +1 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/strings.js +4 -0
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/style.css +0 -0
- data/spec/fixtures/builder_tests/apps/html_test/french.lproj/french-icons/fr.png +0 -0
- data/spec/fixtures/builder_tests/apps/html_test/french.lproj/strings.js +4 -0
- data/spec/fixtures/builder_tests/apps/html_test/lib/layout_template.rhtml +1 -0
- data/spec/fixtures/builder_tests/apps/html_test/scripts.js +0 -0
- data/spec/fixtures/builder_tests/apps/javascript_test/sc_static.js +15 -0
- data/spec/fixtures/builder_tests/apps/javascript_test/sc_super.js +4 -0
- data/spec/fixtures/builder_tests/apps/javascript_test/strings.js +7 -0
- data/spec/fixtures/builder_tests/apps/less_test/sample.less +4 -0
- data/spec/fixtures/builder_tests/apps/module_test/module.js +1 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/english.lproj/req_style_2.css +0 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/english.lproj/test.rhtml +1 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/javascript.js +1 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/lib/alt_layout.rhtml +0 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/req_js_2.js +0 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/dynamic_req_target_1/dynamic_req_js_1.js +0 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/dynamic_req_target_1/english.lproj/dynamic_req_style_1.css +0 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/inlined_module/README +0 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/req_style_1.css +0 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/strings.js +4 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/test.rhtml +1 -0
- data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/req_js_1.js +0 -0
- data/spec/fixtures/builder_tests/apps/sass_test/sample.sass +4 -0
- data/spec/fixtures/builder_tests/apps/sass_test/sample.scss +4 -0
- data/spec/fixtures/builder_tests/apps/strings_test/lproj/strings.js +8 -0
- data/spec/fixtures/builder_tests/apps/stylesheet_test/build_directives.css +9 -0
- data/spec/fixtures/builder_tests/apps/stylesheet_test/sc_static.css +12 -0
- data/spec/fixtures/builder_tests/apps/test_test/lib/alt_layout.rhtml +1 -0
- data/spec/fixtures/builder_tests/apps/test_test/lib/test_layout.rhtml +3 -0
- data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test.js +1 -0
- data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test2.js +1 -0
- data/spec/fixtures/builder_tests/apps/test_test/tests/rhtml_test.rhtml +4 -0
- data/spec/fixtures/builder_tests/frameworks/debug/core.js +0 -0
- data/spec/fixtures/builder_tests/frameworks/debug/english.lproj/dummy.css +0 -0
- data/spec/fixtures/builder_tests/frameworks/dynamic_req_target_1/dynamic_req_js_1.js +0 -0
- data/spec/fixtures/builder_tests/frameworks/dynamic_req_target_1/english.lproj/dynamic_req_style_1.css +0 -0
- data/spec/fixtures/builder_tests/frameworks/qunit/core.js +0 -0
- data/spec/fixtures/builder_tests/frameworks/qunit/english.lproj/dummy.css +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/req_style_1.css +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/strings.js +4 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/test.rhtml +1 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_1/req_js_1.js +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_2/english.lproj/req_style_2.css +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_2/english.lproj/test.rhtml +1 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_2/javascript.js +1 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_2/lib/alt_layout.rhtml +0 -0
- data/spec/fixtures/builder_tests/frameworks/req_target_2/req_js_2.js +0 -0
- data/spec/fixtures/builder_tests/themes/sample_theme/Buildfile +1 -0
- data/spec/fixtures/buildfiles/basic/Buildfile +11 -0
- data/spec/fixtures/buildfiles/basic/task_module.rake +6 -0
- data/spec/fixtures/buildfiles/installed/Buildfile +5 -0
- data/spec/fixtures/buildfiles/installed/Buildfile2 +5 -0
- data/spec/fixtures/buildfiles/project_test/Buildfile +4 -0
- data/spec/fixtures/buildfiles/project_test/not_project/Buildfile +2 -0
- data/spec/fixtures/buildfiles/project_test/not_project/child/PLACEHOLDER +0 -0
- data/spec/fixtures/entry_for_project/Buildfile +1 -0
- data/spec/fixtures/entry_for_project/apps/test_app/entry.txt +0 -0
- data/spec/fixtures/entry_for_project/apps/test_app/frameworks/nested/PLACEHOLDER +0 -0
- data/spec/fixtures/entry_for_project/frameworks/shared/PLACEHOLDER +0 -0
- data/spec/fixtures/entry_for_project/frameworks/unrelated/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/Buildfile +8 -0
- data/spec/fixtures/find_targets/custom/bars/bar1/bars/bar1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/bars/bar1/bars/bar2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/bars/bar1/foos/foo1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/bars/bar1/foos/foo2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/custom_foos/Buildfile +5 -0
- data/spec/fixtures/find_targets/custom/foos/custom_foos/custom_foodir/foo1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/custom_foos/custom_foodir/foo2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/custom_foos/foos/not_foo1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/foo1/bars/bar1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/custom/foos/foo1/bars/bar2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/nested/Buildfile +8 -0
- data/spec/fixtures/find_targets/nested/apps/app1/Buildfile +1 -0
- data/spec/fixtures/find_targets/nested/apps/app1/apps/nested_app/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/Apps/app1/frameworks/framework1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/Apps/app1/frameworks/framework2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/clients/client1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/frameworks/framework1/frameworks/framework1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/frameworks/framework2/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/themes/theme1/PLACEHOLDER +0 -0
- data/spec/fixtures/find_targets/standard/themes/theme2/PLACEHOLDER +0 -0
- data/spec/fixtures/helper_tests/apps/minifier_test/core.js +8 -0
- data/spec/fixtures/languages/apps/caps_long_names/English.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/caps_long_names/FreNCH.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/caps_long_names/UnknOWN.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/english.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/french.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/german.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/italian.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/japanese.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/spanish.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/long_names/unknown.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/no_names/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/de.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/en-CA.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/en-GB.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/en-US.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/en.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/es.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/foo.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/fr.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/it.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/languages/apps/short_names/ja.lproj/PLACEHOLDER +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/1.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/B.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/a/a.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/a/b.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/a.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/b/a.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/c.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/core.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/B.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a/a.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a/b.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/b/a.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/c.css +0 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/strings.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/main.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/resources/main_page.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/t.js +1 -0
- data/spec/fixtures/ordered_entries/apps/no_requires/utils.js +1 -0
- data/spec/fixtures/ordered_entries/apps/with_requires/a.js +2 -0
- data/spec/fixtures/ordered_entries/apps/with_requires/b.js +3 -0
- data/spec/fixtures/ordered_entries/apps/with_requires/c.js +2 -0
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/a.css +2 -0
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/b.css +2 -0
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/c.css +2 -0
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/d.js +1 -0
- data/spec/fixtures/real_world/Buildfile +22 -0
- data/spec/fixtures/real_world/apps/account/README +1 -0
- data/spec/fixtures/real_world/apps/account/modules/preferences/README +0 -0
- data/spec/fixtures/real_world/apps/calendar/README +1 -0
- data/spec/fixtures/real_world/apps/calendar/modules/preferences/README +0 -0
- data/spec/fixtures/real_world/apps/contacts/README_BEFORE_EDITING +1 -0
- data/spec/fixtures/real_world/apps/contacts/modules/preferences/README +0 -0
- data/spec/fixtures/real_world/apps/contacts/modules/printing/README +0 -0
- data/spec/fixtures/real_world/apps/files/README +1 -0
- data/spec/fixtures/real_world/apps/mail/README +1 -0
- data/spec/fixtures/real_world/apps/mail/modules/preferences/README +0 -0
- data/spec/fixtures/real_world/apps/mail/modules/printing/README +0 -0
- data/spec/fixtures/real_world/apps/mobile_photos/README +1 -0
- data/spec/fixtures/real_world/apps/photos/README +1 -0
- data/spec/fixtures/real_world/apps/photos/modules/email/README +0 -0
- data/spec/fixtures/real_world/apps/photos/modules/preferences/README +0 -0
- data/spec/fixtures/real_world/apps/uploader/README +1 -0
- data/spec/fixtures/real_world/frameworks/core_files/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/core_photos/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/no_2x/resources/test.css +1 -0
- data/spec/fixtures/real_world/frameworks/no_2x/resources/test.png +0 -0
- data/spec/fixtures/real_world/frameworks/shared/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/Buildfile +26 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/README +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/apps/docs/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/apps/test_runner/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/core.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/debug/debug-resource.html +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/debug/sample_debug.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/demo2.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/demo3.scss +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/debug/sample_debug-loc.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.css +4 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.html +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo2.sass +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo3.scss +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo4.less +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.haml +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.html.erb +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.rhtml +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/fixtures/sample_fixtures-loc.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/has_require.css +4 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_require.css +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_sc_resource.rhtml +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/protocols/sample-loc.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.css +6 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.rhtml +3 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/strings.js +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/templates/demo.handlebars +4 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/tests/sample-loc.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/fixtures/sample-json-fixture.json +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/fixtures/sample_fixtures.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/application/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/costello/core.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/data_store/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/debug/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/desktop/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/empty_theme/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/foundation/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/mobile/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/qunit/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/uploader/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/french.lproj/french-resource.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/french.lproj/strings.js +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/german.lproj/german-resource.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/german.lproj/strings.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/has_require.js +4 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/lib/index.html +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/no_require.js +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/protocols/sample.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/resources/boo.png +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/resources/force@2x.png +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/sc_resource.js +6 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/tests/nested/sample1.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/tests/nested/sample2.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/tests/sample.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/tests/sample.rhtml +1 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/themes/standard_theme/README +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/views/view.js +1 -0
- data/spec/fixtures/real_world/generators/sample_custom/Buildfile +0 -0
- data/spec/fixtures/real_world/generators/sample_custom/templates/{filename}.js +1 -0
- data/spec/fixtures/recursive_project/Buildfile +8 -0
- data/spec/fixtures/recursive_project/frameworks/sproutcore/frameworks/costello/PLACEHOLDER +0 -0
- data/spec/lib/builders/chance_file_spec.rb +44 -0
- data/spec/lib/builders/combine_spec.rb +67 -0
- data/spec/lib/builders/handlebars_spec.rb +29 -0
- data/spec/lib/builders/html_spec.rb +580 -0
- data/spec/lib/builders/javascript_spec.rb +82 -0
- data/spec/lib/builders/less_spec.rb +51 -0
- data/spec/lib/builders/module_spec.rb +133 -0
- data/spec/lib/builders/sass_spec.rb +72 -0
- data/spec/lib/builders/spec_helper.rb +30 -0
- data/spec/lib/builders/strings_spec.rb +56 -0
- data/spec/lib/builders/stylesheet_spec.rb +64 -0
- data/spec/lib/builders/test_index_spec.rb +45 -0
- data/spec/lib/builders/test_spec.rb +137 -0
- data/spec/lib/buildfile/config_for_spec.rb +81 -0
- data/spec/lib/buildfile/define_spec.rb +59 -0
- data/spec/lib/buildfile/dup_spec.rb +65 -0
- data/spec/lib/buildfile/invoke_spec.rb +135 -0
- data/spec/lib/buildfile/load_spec.rb +51 -0
- data/spec/lib/buildfile/task/dup_spec.rb +55 -0
- data/spec/lib/buildfile/task_defined_spec.rb +17 -0
- data/spec/lib/buildfile_commands/build_task_spec.rb +19 -0
- data/spec/lib/buildfile_commands/config_spec.rb +97 -0
- data/spec/lib/buildfile_commands/import_spec.rb +17 -0
- data/spec/lib/buildfile_commands/namespace_spec.rb +18 -0
- data/spec/lib/buildfile_commands/proxies_spec.rb +38 -0
- data/spec/lib/buildfile_commands/replace_task_spec.rb +29 -0
- data/spec/lib/buildfile_commands/task_spec.rb +36 -0
- data/spec/lib/helpers/minifier.rb +31 -0
- data/spec/lib/helpers/packing_optimizer/optimize_spec.rb +26 -0
- data/spec/lib/models/hash_struct/deep_clone_spec.rb +27 -0
- data/spec/lib/models/hash_struct/has_options_spec.rb +32 -0
- data/spec/lib/models/hash_struct/hash_spec.rb +29 -0
- data/spec/lib/models/hash_struct/merge_spec.rb +19 -0
- data/spec/lib/models/hash_struct/method_missing.rb +41 -0
- data/spec/lib/models/manifest/add_entry_spec.rb +36 -0
- data/spec/lib/models/manifest/add_transform_spec.rb +93 -0
- data/spec/lib/models/manifest/build_spec.rb +78 -0
- data/spec/lib/models/manifest/entry_for_spec.rb +94 -0
- data/spec/lib/models/manifest/find_entry.rb +119 -0
- data/spec/lib/models/manifest/prepare_spec.rb +62 -0
- data/spec/lib/models/manifest_entry/cacheable_url_spec.rb +31 -0
- data/spec/lib/models/manifest_entry/hyperdomain_prefix.rb +34 -0
- data/spec/lib/models/manifest_entry/prepare_spec.rb +54 -0
- data/spec/lib/models/project/add_target_spec.rb +44 -0
- data/spec/lib/models/project/buildfile_spec.rb +35 -0
- data/spec/lib/models/project/find_targets_for_spec.rb +78 -0
- data/spec/lib/models/project/load_nearest_project_spec.rb +23 -0
- data/spec/lib/models/project/target_for_spec.rb +33 -0
- data/spec/lib/models/project/targets_spec.rb +62 -0
- data/spec/lib/models/target/compute_build_number_spec.rb +126 -0
- data/spec/lib/models/target/config_spec.rb +30 -0
- data/spec/lib/models/target/expand_required_targets_spec.rb +48 -0
- data/spec/lib/models/target/installed_languages_spec.rb +47 -0
- data/spec/lib/models/target/lproj_for_spec.rb +38 -0
- data/spec/lib/models/target/manifest_for_spec.rb +42 -0
- data/spec/lib/models/target/parent_target_spec.rb +21 -0
- data/spec/lib/models/target/prepare_spec.rb +53 -0
- data/spec/lib/models/target/required_targets_spec.rb +129 -0
- data/spec/lib/models/target/target_for_spec.rb +56 -0
- data/spec/lib/tools/build_number_spec.rb +35 -0
- data/spec/lib/tools/gen_spec.rb +209 -0
- data/spec/lib/tools/tools_spec.rb +96 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +138 -0
- data/sproutcore.gemspec +65 -0
- data/vendor/chance/.gitignore +5 -0
- data/vendor/chance/Gemfile +4 -0
- data/vendor/chance/Rakefile +2 -0
- data/vendor/chance/bin/chance +46 -0
- data/vendor/chance/chance.gemspec +28 -0
- data/vendor/chance/lib/chance/instance/data_url.rb +85 -0
- data/vendor/chance/lib/chance/instance/javascript.rb +19 -0
- data/vendor/chance/lib/chance/instance/slicing.rb +181 -0
- data/vendor/chance/lib/chance/instance/spriting.rb +311 -0
- data/vendor/chance/lib/chance/instance.rb +330 -0
- data/vendor/chance/lib/chance/parser.rb +835 -0
- data/vendor/chance/lib/chance/perf.rb +17 -0
- data/vendor/chance/lib/chance/version.rb +3 -0
- data/vendor/chance/lib/chance.rb +158 -0
- data/vendor/chance/lib/tester/test.rb +108 -0
- data/vendor/chance/lib/tester/test_runner.rb +27 -0
- data/vendor/chance/test/case/abc.png +0 -0
- data/vendor/chance/test/case/more/abc.png +0 -0
- data/vendor/chance/test/case/more/another.css +4 -0
- data/vendor/chance/test/case/test1.css +22 -0
- data/vendor/chance/test/case/test2.css +6 -0
- data/vendor/chance/tests/parser/basic/input/test.css +4 -0
- data/vendor/chance/tests/parser/basic/output/test.parsed.css +5 -0
- data/vendor/jsdoc/README.txt +151 -0
- data/vendor/jsdoc/app/frame/Chain.js +102 -0
- data/vendor/jsdoc/app/frame/Dumper.js +144 -0
- data/vendor/jsdoc/app/frame/Hash.js +47 -0
- data/vendor/jsdoc/app/frame/Link.js +142 -0
- data/vendor/jsdoc/app/frame/Namespace.js +10 -0
- data/vendor/jsdoc/app/frame/Opt.js +134 -0
- data/vendor/jsdoc/app/frame/Reflection.js +26 -0
- data/vendor/jsdoc/app/frame/String.js +93 -0
- data/vendor/jsdoc/app/frame/Testrun.js +129 -0
- data/vendor/jsdoc/app/frame.js +33 -0
- data/vendor/jsdoc/app/handlers/FOODOC.js +26 -0
- data/vendor/jsdoc/app/handlers/XMLDOC/DomReader.js +159 -0
- data/vendor/jsdoc/app/handlers/XMLDOC/XMLDoc.js +16 -0
- data/vendor/jsdoc/app/handlers/XMLDOC/XMLParse.js +292 -0
- data/vendor/jsdoc/app/handlers/XMLDOC.js +26 -0
- data/vendor/jsdoc/app/lib/JSDOC/DocComment.js +200 -0
- data/vendor/jsdoc/app/lib/JSDOC/DocTag.js +294 -0
- data/vendor/jsdoc/app/lib/JSDOC/JsDoc.js +162 -0
- data/vendor/jsdoc/app/lib/JSDOC/JsPlate.js +100 -0
- data/vendor/jsdoc/app/lib/JSDOC/Lang.js +144 -0
- data/vendor/jsdoc/app/lib/JSDOC/Parser.js +109 -0
- data/vendor/jsdoc/app/lib/JSDOC/PluginManager.js +33 -0
- data/vendor/jsdoc/app/lib/JSDOC/Symbol.js +681 -0
- data/vendor/jsdoc/app/lib/JSDOC/SymbolSet.js +226 -0
- data/vendor/jsdoc/app/lib/JSDOC/TextStream.js +41 -0
- data/vendor/jsdoc/app/lib/JSDOC/Token.js +18 -0
- data/vendor/jsdoc/app/lib/JSDOC/TokenReader.js +332 -0
- data/vendor/jsdoc/app/lib/JSDOC/TokenStream.js +133 -0
- data/vendor/jsdoc/app/lib/JSDOC/Util.js +32 -0
- data/vendor/jsdoc/app/lib/JSDOC/Walker.js +453 -0
- data/vendor/jsdoc/app/lib/JSDOC.js +98 -0
- data/vendor/jsdoc/app/main.js +74 -0
- data/vendor/jsdoc/app/plugins/commentSrcJson.js +19 -0
- data/vendor/jsdoc/app/plugins/frameworkPrototype.js +16 -0
- data/vendor/jsdoc/app/plugins/functionCall.js +10 -0
- data/vendor/jsdoc/app/plugins/publishSrcHilite.js +62 -0
- data/vendor/jsdoc/app/plugins/sproutcoreTags.js +26 -0
- data/vendor/jsdoc/app/plugins/symbolLink.js +9 -0
- data/vendor/jsdoc/app/plugins/tagParamConfig.js +31 -0
- data/vendor/jsdoc/app/plugins/tagSynonyms.js +43 -0
- data/vendor/jsdoc/app/run.js +346 -0
- data/vendor/jsdoc/app/t/TestDoc.js +144 -0
- data/vendor/jsdoc/app/t/runner.js +13 -0
- data/vendor/jsdoc/app/test/addon.js +24 -0
- data/vendor/jsdoc/app/test/anon_inner.js +14 -0
- data/vendor/jsdoc/app/test/augments.js +31 -0
- data/vendor/jsdoc/app/test/augments2.js +26 -0
- data/vendor/jsdoc/app/test/borrows.js +41 -0
- data/vendor/jsdoc/app/test/borrows2.js +23 -0
- data/vendor/jsdoc/app/test/config.js +22 -0
- data/vendor/jsdoc/app/test/constructs.js +18 -0
- data/vendor/jsdoc/app/test/encoding.js +10 -0
- data/vendor/jsdoc/app/test/encoding_other.js +12 -0
- data/vendor/jsdoc/app/test/functions_anon.js +39 -0
- data/vendor/jsdoc/app/test/functions_nested.js +33 -0
- data/vendor/jsdoc/app/test/global.js +13 -0
- data/vendor/jsdoc/app/test/globals.js +25 -0
- data/vendor/jsdoc/app/test/ignore.js +10 -0
- data/vendor/jsdoc/app/test/inner.js +16 -0
- data/vendor/jsdoc/app/test/jsdoc_test.js +477 -0
- data/vendor/jsdoc/app/test/lend.js +33 -0
- data/vendor/jsdoc/app/test/memberof.js +20 -0
- data/vendor/jsdoc/app/test/memberof_constructor.js +15 -0
- data/vendor/jsdoc/app/test/name.js +19 -0
- data/vendor/jsdoc/app/test/namespace_nested.js +23 -0
- data/vendor/jsdoc/app/test/nocode.js +13 -0
- data/vendor/jsdoc/app/test/oblit_anon.js +20 -0
- data/vendor/jsdoc/app/test/overview.js +20 -0
- data/vendor/jsdoc/app/test/param_inline.js +37 -0
- data/vendor/jsdoc/app/test/params_optional.js +8 -0
- data/vendor/jsdoc/app/test/prototype.js +17 -0
- data/vendor/jsdoc/app/test/prototype_nested.js +9 -0
- data/vendor/jsdoc/app/test/prototype_oblit.js +13 -0
- data/vendor/jsdoc/app/test/prototype_oblit_constructor.js +24 -0
- data/vendor/jsdoc/app/test/public.js +10 -0
- data/vendor/jsdoc/app/test/shared.js +42 -0
- data/vendor/jsdoc/app/test/shared2.js +2 -0
- data/vendor/jsdoc/app/test/shortcuts.js +22 -0
- data/vendor/jsdoc/app/test/static_this.js +13 -0
- data/vendor/jsdoc/app/test/synonyms.js +23 -0
- data/vendor/jsdoc/app/test/tosource.js +23 -0
- data/vendor/jsdoc/app/test/variable_redefine.js +14 -0
- data/vendor/jsdoc/app/test.js +304 -0
- data/vendor/jsdoc/changes.txt +47 -0
- data/vendor/jsdoc/conf/sample.conf +31 -0
- data/vendor/jsdoc/java/build.xml +36 -0
- data/vendor/jsdoc/java/build_1.4.xml +36 -0
- data/vendor/jsdoc/java/classes/js.jar +0 -0
- data/vendor/jsdoc/java/src/JsDebugRun.java +21 -0
- data/vendor/jsdoc/java/src/JsRun.java +21 -0
- data/vendor/jsdoc/jsdebug.jar +0 -0
- data/vendor/jsdoc/jsrun.jar +0 -0
- data/vendor/jsdoc/t/TestDoc.js +144 -0
- data/vendor/jsdoc/t/runner.js +13 -0
- data/vendor/jsdoc/test/addon.js +24 -0
- data/vendor/jsdoc/test/anon_inner.js +14 -0
- data/vendor/jsdoc/test/augments.js +31 -0
- data/vendor/jsdoc/test/augments2.js +26 -0
- data/vendor/jsdoc/test/borrows.js +41 -0
- data/vendor/jsdoc/test/borrows2.js +23 -0
- data/vendor/jsdoc/test/config.js +22 -0
- data/vendor/jsdoc/test/constructs.js +18 -0
- data/vendor/jsdoc/test/encoding.js +10 -0
- data/vendor/jsdoc/test/encoding_other.js +12 -0
- data/vendor/jsdoc/test/functions_anon.js +39 -0
- data/vendor/jsdoc/test/functions_nested.js +33 -0
- data/vendor/jsdoc/test/global.js +13 -0
- data/vendor/jsdoc/test/globals.js +25 -0
- data/vendor/jsdoc/test/ignore.js +10 -0
- data/vendor/jsdoc/test/inner.js +16 -0
- data/vendor/jsdoc/test/jsdoc_test.js +477 -0
- data/vendor/jsdoc/test/lend.js +33 -0
- data/vendor/jsdoc/test/memberof.js +20 -0
- data/vendor/jsdoc/test/memberof_constructor.js +15 -0
- data/vendor/jsdoc/test/name.js +19 -0
- data/vendor/jsdoc/test/namespace_nested.js +23 -0
- data/vendor/jsdoc/test/nocode.js +13 -0
- data/vendor/jsdoc/test/oblit_anon.js +20 -0
- data/vendor/jsdoc/test/overview.js +20 -0
- data/vendor/jsdoc/test/param_inline.js +37 -0
- data/vendor/jsdoc/test/params_optional.js +8 -0
- data/vendor/jsdoc/test/prototype.js +17 -0
- data/vendor/jsdoc/test/prototype_nested.js +9 -0
- data/vendor/jsdoc/test/prototype_oblit.js +13 -0
- data/vendor/jsdoc/test/prototype_oblit_constructor.js +24 -0
- data/vendor/jsdoc/test/public.js +10 -0
- data/vendor/jsdoc/test/shared.js +42 -0
- data/vendor/jsdoc/test/shared2.js +2 -0
- data/vendor/jsdoc/test/shortcuts.js +22 -0
- data/vendor/jsdoc/test/static_this.js +13 -0
- data/vendor/jsdoc/test/synonyms.js +23 -0
- data/vendor/jsdoc/test/tosource.js +23 -0
- data/vendor/jsdoc/test/variable_redefine.js +14 -0
- data/vendor/jsdoc/test.js +304 -0
- data/vendor/sproutcore/lib/htmlcompressor-0.9.3.jar +0 -0
- data/vendor/sproutcore/lib/yuicompressor-2.4.6.jar +0 -0
- metadata +2339 -0
@@ -0,0 +1,3186 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
3
|
+
// Copyright: ©2006-2011 Strobe Inc. and contributors.
|
4
|
+
// Portions ©2008-2011 Apple Inc. All rights reserved.
|
5
|
+
// License: Licensed under MIT license (see license.js)
|
6
|
+
// ==========================================================================
|
7
|
+
|
8
|
+
sc_require('mixins/collection_view_delegate') ;
|
9
|
+
sc_require('views/list_item');
|
10
|
+
|
11
|
+
/**
|
12
|
+
Special drag operation passed to delegate if the collection view proposes
|
13
|
+
to perform a reorder event.
|
14
|
+
|
15
|
+
@static
|
16
|
+
@constant
|
17
|
+
*/
|
18
|
+
SC.DRAG_REORDER = 0x0010;
|
19
|
+
|
20
|
+
/**
|
21
|
+
@static
|
22
|
+
@static
|
23
|
+
@default NO
|
24
|
+
*/
|
25
|
+
SC.BENCHMARK_RELOAD = NO;
|
26
|
+
|
27
|
+
/*
|
28
|
+
TODO Document SC.CollectionView
|
29
|
+
*/
|
30
|
+
|
31
|
+
/**
|
32
|
+
@class
|
33
|
+
|
34
|
+
Renders a collection of views from a source array of model objects.
|
35
|
+
|
36
|
+
The `CollectionView` is the root view class for rendering collections of
|
37
|
+
views based on a source array of objects. It can automatically create the
|
38
|
+
and layout the views, including displaying them in groups. It also
|
39
|
+
handles event input for the entire collection.
|
40
|
+
|
41
|
+
To use `CollectionView`, just create the view and set the 'content' property
|
42
|
+
to an array of objects. (Note that if you setup a binding, it will
|
43
|
+
always transform content to an array.) The view will create instances of
|
44
|
+
exampleView to render the array. You can also bind to the selection
|
45
|
+
property if you want to monitor selection. (be sure to set the isEnabled
|
46
|
+
property to allow selection.)
|
47
|
+
|
48
|
+
@extends SC.View
|
49
|
+
@extends SC.CollectionViewDelegate
|
50
|
+
@extends SC.CollectionContent
|
51
|
+
@since SproutCore 0.9
|
52
|
+
*/
|
53
|
+
SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate, SC.CollectionContent,
|
54
|
+
/** @scope SC.CollectionView.prototype */ {
|
55
|
+
|
56
|
+
/**
|
57
|
+
@type Array
|
58
|
+
@default ['sc-collection-view']
|
59
|
+
@see SC.View#classNames
|
60
|
+
*/
|
61
|
+
classNames: ['sc-collection-view'],
|
62
|
+
|
63
|
+
/**
|
64
|
+
@type Array
|
65
|
+
@default ['isFirstResponder', 'isEnabled', 'isActive']
|
66
|
+
*/
|
67
|
+
displayProperties: ['isFirstResponder', 'isEnabled', 'isActive'],
|
68
|
+
|
69
|
+
/**
|
70
|
+
@type String
|
71
|
+
@default 'collectionRenderDelegate'
|
72
|
+
*/
|
73
|
+
renderDelegateName: 'collectionRenderDelegate',
|
74
|
+
|
75
|
+
/**
|
76
|
+
@type Number
|
77
|
+
@default 200
|
78
|
+
*/
|
79
|
+
ACTION_DELAY: 200,
|
80
|
+
|
81
|
+
// ......................................
|
82
|
+
// PROPERTIES
|
83
|
+
//
|
84
|
+
|
85
|
+
/**
|
86
|
+
If `YES`, uses the experimental fast `CollectionView` path.
|
87
|
+
|
88
|
+
@type Boolean
|
89
|
+
@default NO
|
90
|
+
*/
|
91
|
+
useFastPath: NO,
|
92
|
+
|
93
|
+
/**
|
94
|
+
An array of content objects
|
95
|
+
|
96
|
+
This array should contain the content objects you want the collection view
|
97
|
+
to display. An item view (based on the `exampleView` view class) will be
|
98
|
+
created for each content object, in the order the content objects appear
|
99
|
+
in this array.
|
100
|
+
|
101
|
+
If you make the collection editable, the collection view will also modify
|
102
|
+
this array using the observable array methods of `SC.Array`.
|
103
|
+
|
104
|
+
Usually you will want to bind this property to a controller property
|
105
|
+
that actually contains the array of objects you to display.
|
106
|
+
|
107
|
+
@type SC.Array
|
108
|
+
@default null
|
109
|
+
*/
|
110
|
+
content: null,
|
111
|
+
|
112
|
+
/** @private */
|
113
|
+
contentBindingDefault: SC.Binding.multiple(),
|
114
|
+
|
115
|
+
/**
|
116
|
+
The current length of the content.
|
117
|
+
|
118
|
+
@type Number
|
119
|
+
@default 0
|
120
|
+
*/
|
121
|
+
length: 0,
|
122
|
+
|
123
|
+
/**
|
124
|
+
The set of indexes that are currently tracked by the collection view.
|
125
|
+
This property is used to determine the range of items the collection view
|
126
|
+
should monitor for changes.
|
127
|
+
|
128
|
+
The default implementation of this property returns an index set covering
|
129
|
+
the entire range of the content. It changes automatically whenever the
|
130
|
+
length changes.
|
131
|
+
|
132
|
+
Note that the returned index set for this property will always be frozen.
|
133
|
+
To change the nowShowing index set, you must create a new index set and
|
134
|
+
apply it.
|
135
|
+
|
136
|
+
@field
|
137
|
+
@type SC.IndexSet
|
138
|
+
@observes length
|
139
|
+
@observes clippingFrame
|
140
|
+
*/
|
141
|
+
nowShowing: function() {
|
142
|
+
return this.computeNowShowing();
|
143
|
+
}.property('length', 'clippingFrame').cacheable(),
|
144
|
+
|
145
|
+
/**
|
146
|
+
Indexes of selected content objects. This `SC.SelectionSet` is modified
|
147
|
+
automatically by the collection view when the user changes the selection
|
148
|
+
on the collection.
|
149
|
+
|
150
|
+
Any item views representing content objects in this set will have their
|
151
|
+
isSelected property set to `YES` automatically.
|
152
|
+
|
153
|
+
@type SC.SelectionSet
|
154
|
+
@default null
|
155
|
+
*/
|
156
|
+
selection: null,
|
157
|
+
|
158
|
+
/**
|
159
|
+
Allow user to select content using the mouse and keyboard.
|
160
|
+
|
161
|
+
Set this property to `NO` to disallow the user from selecting items. If you
|
162
|
+
have items in your `selectedIndexes property, they will still be reflected
|
163
|
+
visually.
|
164
|
+
|
165
|
+
@type Boolean
|
166
|
+
@default YES
|
167
|
+
*/
|
168
|
+
isSelectable: YES,
|
169
|
+
|
170
|
+
/** @private */
|
171
|
+
isSelectableBindingDefault: SC.Binding.bool(),
|
172
|
+
|
173
|
+
/**
|
174
|
+
Enable or disable the view.
|
175
|
+
|
176
|
+
The collection view will set the `isEnabled` property of its item views to
|
177
|
+
reflect the same view of this property. Whenever ``isEnabled` is false,
|
178
|
+
the collection view will also be not selectable or editable, regardless of
|
179
|
+
the settings for isEditable` & `isSelectable`.
|
180
|
+
|
181
|
+
@type Boolean
|
182
|
+
@default YES
|
183
|
+
*/
|
184
|
+
isEnabled: YES,
|
185
|
+
|
186
|
+
/** @private */
|
187
|
+
isEnabledBindingDefault: SC.Binding.bool(),
|
188
|
+
|
189
|
+
/**
|
190
|
+
Allow user to edit content views.
|
191
|
+
|
192
|
+
The collection view will set the `isEditable` property on its item views to
|
193
|
+
reflect the same value of this property. Whenever `isEditable` is false,
|
194
|
+
the user will not be able to reorder, add, or delete items regardless of
|
195
|
+
the `canReorderContent` and `canDeleteContent` and `isDropTarget`
|
196
|
+
properties.
|
197
|
+
|
198
|
+
@type Boolean
|
199
|
+
@default YES
|
200
|
+
*/
|
201
|
+
isEditable: YES,
|
202
|
+
|
203
|
+
/** @private */
|
204
|
+
isEditableBindingDefault: SC.Binding.bool(),
|
205
|
+
|
206
|
+
/**
|
207
|
+
Allow user to reorder items using drag and drop.
|
208
|
+
|
209
|
+
If true, the user will can use drag and drop to reorder items in the list.
|
210
|
+
If you also accept drops, this will allow the user to drop items into
|
211
|
+
specific points in the list. Otherwise items will be added to the end.
|
212
|
+
|
213
|
+
@type Boolean
|
214
|
+
@default NO
|
215
|
+
*/
|
216
|
+
canReorderContent: NO,
|
217
|
+
|
218
|
+
/** @private */
|
219
|
+
canReorderContentBindingDefault: SC.Binding.bool(),
|
220
|
+
|
221
|
+
/**
|
222
|
+
Allow the user to delete items using the delete key
|
223
|
+
|
224
|
+
If true the user will be allowed to delete selected items using the delete
|
225
|
+
key. Otherwise deletes will not be permitted.
|
226
|
+
|
227
|
+
@type Boolean
|
228
|
+
@default NO
|
229
|
+
*/
|
230
|
+
canDeleteContent: NO,
|
231
|
+
|
232
|
+
/** @private */
|
233
|
+
canDeleteContentBindingDefault: SC.Binding.bool(),
|
234
|
+
|
235
|
+
/**
|
236
|
+
Allow user to edit the content by double clicking on it or hitting return.
|
237
|
+
This will only work if isEditable is `YES` and the item view implements
|
238
|
+
the `beginEditing()` method.
|
239
|
+
|
240
|
+
@type Boolean
|
241
|
+
*/
|
242
|
+
canEditContent: NO,
|
243
|
+
|
244
|
+
/** @private */
|
245
|
+
canEditContentBindingDefault: SC.Binding.bool(),
|
246
|
+
|
247
|
+
/**
|
248
|
+
Accept drops for data other than reordering.
|
249
|
+
|
250
|
+
Setting this property to return true when the view is instantiated will
|
251
|
+
cause it to be registered as a drop target, activating the other drop
|
252
|
+
machinery.
|
253
|
+
|
254
|
+
@type Boolean
|
255
|
+
@default NO
|
256
|
+
*/
|
257
|
+
isDropTarget: NO,
|
258
|
+
|
259
|
+
/**
|
260
|
+
Use toggle selection instead of normal click behavior.
|
261
|
+
|
262
|
+
If set to true, then selection will use a toggle instead of the normal
|
263
|
+
click behavior. Command modifiers will be ignored and instead clicking
|
264
|
+
once will select an item and clicking on it again will deselect it.
|
265
|
+
|
266
|
+
@type Boolean
|
267
|
+
@default NO
|
268
|
+
*/
|
269
|
+
useToggleSelection: NO,
|
270
|
+
|
271
|
+
/**
|
272
|
+
Trigger the action method on a single click.
|
273
|
+
|
274
|
+
Normally, clicking on an item view in a collection will select the content
|
275
|
+
object and double clicking will trigger the action method on the
|
276
|
+
collection view.
|
277
|
+
|
278
|
+
If you set this property to `YES`, then clicking on a view will both select
|
279
|
+
it (if `isSelected` is true) and trigger the action method.
|
280
|
+
|
281
|
+
Use this if you are using the collection view as a menu of items.
|
282
|
+
|
283
|
+
@type Boolean
|
284
|
+
@default NO
|
285
|
+
*/
|
286
|
+
actOnSelect: NO,
|
287
|
+
|
288
|
+
|
289
|
+
/**
|
290
|
+
Select an item immediately on mouse down
|
291
|
+
|
292
|
+
Normally as soon as you begin a click the item will be selected.
|
293
|
+
|
294
|
+
In some UI scenarios, you might want to prevent selection until
|
295
|
+
the mouse is released, so you can perform, for instance, a drag operation
|
296
|
+
without actually selecting the target item.
|
297
|
+
|
298
|
+
@type Boolean
|
299
|
+
@default YES
|
300
|
+
*/
|
301
|
+
selectOnMouseDown: YES,
|
302
|
+
|
303
|
+
/**
|
304
|
+
The view class to use when creating new item views.
|
305
|
+
|
306
|
+
The collection view will automatically create an instance of the view
|
307
|
+
class you set here for each item in its content array. You should provide
|
308
|
+
your own subclass for this property to display the type of content you
|
309
|
+
want.
|
310
|
+
|
311
|
+
For best results, the view you set here should understand the following
|
312
|
+
properties:
|
313
|
+
|
314
|
+
- `content` -- The content object from the content array your view should display
|
315
|
+
- `isEnabled` -- True if the view should appear enabled
|
316
|
+
- `isSelected` -- True if the view should appear selected
|
317
|
+
|
318
|
+
In general you do not want your child views to actually respond to mouse
|
319
|
+
and keyboard events themselves. It is better to let the collection view
|
320
|
+
do that.
|
321
|
+
|
322
|
+
If you do implement your own event handlers such as mouseDown or mouseUp,
|
323
|
+
you should be sure to actually call the same method on the collection view
|
324
|
+
to give it the chance to perform its own selection housekeeping.
|
325
|
+
|
326
|
+
@type SC.View
|
327
|
+
@default SC.ListItemView
|
328
|
+
*/
|
329
|
+
exampleView: SC.ListItemView,
|
330
|
+
|
331
|
+
/**
|
332
|
+
If set, this key will be used to get the example view for a given
|
333
|
+
content object. The exampleView property will be ignored.
|
334
|
+
|
335
|
+
@type String
|
336
|
+
@default null
|
337
|
+
*/
|
338
|
+
contentExampleViewKey: null,
|
339
|
+
|
340
|
+
/**
|
341
|
+
The view class to use when creating new group item views.
|
342
|
+
|
343
|
+
The collection view will automatically create an instance of the view
|
344
|
+
class you set here for each item in its content array. You should provide
|
345
|
+
your own subclass for this property to display the type of content you
|
346
|
+
want.
|
347
|
+
|
348
|
+
If you leave this set to null then the regular example view will be used
|
349
|
+
with the isGroupView property set to YES on the item view.
|
350
|
+
|
351
|
+
@type SC.View
|
352
|
+
@default null
|
353
|
+
*/
|
354
|
+
groupExampleView: null,
|
355
|
+
|
356
|
+
/**
|
357
|
+
If set, this key will be used to get the example view for a given
|
358
|
+
content object. The `groupExampleView` property will be ignored.
|
359
|
+
|
360
|
+
@type String
|
361
|
+
@default null
|
362
|
+
*/
|
363
|
+
contentGroupExampleViewKey: null,
|
364
|
+
|
365
|
+
/**
|
366
|
+
Invoked when the user double clicks on an item (or single clicks of
|
367
|
+
actOnSelect is true)
|
368
|
+
|
369
|
+
Set this to the name of the action you want to send down the
|
370
|
+
responder chain when the user double clicks on an item (or single clicks
|
371
|
+
if `actOnSelect` is true). You can optionally specify a specific target as
|
372
|
+
well using the target property.
|
373
|
+
|
374
|
+
If you do not specify an action, then the collection view will also try to
|
375
|
+
invoke the action named on the target item view.
|
376
|
+
|
377
|
+
Older versions of SproutCore expected the action property to contain an
|
378
|
+
actual function that would be run. This format is still supported but is
|
379
|
+
deprecated for future use. You should generally use the responder chain
|
380
|
+
to handle your action for you.
|
381
|
+
|
382
|
+
@type String
|
383
|
+
@default null
|
384
|
+
*/
|
385
|
+
action: null,
|
386
|
+
|
387
|
+
/**
|
388
|
+
Optional target to send the action to when the user double clicks.
|
389
|
+
|
390
|
+
If you set the action property to the name of an action, you can
|
391
|
+
optionally specify the target object you want the action to be sent to.
|
392
|
+
This can be either an actual object or a property path that will resolve
|
393
|
+
to an object at the time that the action is invoked.
|
394
|
+
|
395
|
+
This property is ignored if you use the deprecated approach of making the
|
396
|
+
action property a function.
|
397
|
+
|
398
|
+
@type String|Object
|
399
|
+
@default null
|
400
|
+
*/
|
401
|
+
target: null,
|
402
|
+
|
403
|
+
/**
|
404
|
+
Property on content items to use for display.
|
405
|
+
|
406
|
+
Built-in item views such as the `LabelView`s and `ImageView`s will use the
|
407
|
+
value of this property as a key on the content object to determine the
|
408
|
+
value they should display.
|
409
|
+
|
410
|
+
For example, if you set `contentValueKey` to 'name' and set the
|
411
|
+
exampleView to an `SC.LabelView`, then the label views created by the
|
412
|
+
colleciton view will display the value of the content.name.
|
413
|
+
|
414
|
+
If you are writing your own custom item view for a collection, you can
|
415
|
+
get this behavior automatically by including the SC.Control mixin on your
|
416
|
+
view. You can also ignore this property if you like. The collection view
|
417
|
+
itself does not use this property to impact rendering.
|
418
|
+
|
419
|
+
@type String
|
420
|
+
@default null
|
421
|
+
*/
|
422
|
+
contentValueKey: null,
|
423
|
+
|
424
|
+
/**
|
425
|
+
Enables keyboard-based navigate, deletion, etc. if set to true.
|
426
|
+
|
427
|
+
@type Boolean
|
428
|
+
@default NO
|
429
|
+
*/
|
430
|
+
acceptsFirstResponder: NO,
|
431
|
+
|
432
|
+
/**
|
433
|
+
Changing this property value by default will cause the `CollectionView` to
|
434
|
+
add/remove an 'active' class name to the root element.
|
435
|
+
|
436
|
+
@type Boolean
|
437
|
+
@default NO
|
438
|
+
*/
|
439
|
+
isActive: NO,
|
440
|
+
|
441
|
+
|
442
|
+
/**
|
443
|
+
This property is used to store the calculated height to have
|
444
|
+
a consistent scrolling behavior due to the issues generated by using top
|
445
|
+
instead of `scrollTop`. We could look at the min-height set in the view, but
|
446
|
+
to avoid perf hits we simply store it and the scrollView will use it if
|
447
|
+
different than 0.
|
448
|
+
|
449
|
+
@type Number
|
450
|
+
@default 0
|
451
|
+
*/
|
452
|
+
calculatedHeight: 0,
|
453
|
+
|
454
|
+
/**
|
455
|
+
This property is used to store the calculated width to have
|
456
|
+
a consistent scrolling behavior due to the issues generated by using left
|
457
|
+
instead of `scrollLeft`. We could look at the min-width set in the view, but
|
458
|
+
to avoid perf hits we simply store it and the scrollView will use it if
|
459
|
+
different than 0.
|
460
|
+
|
461
|
+
@type Number
|
462
|
+
@default 0
|
463
|
+
*/
|
464
|
+
calculatedWidth: 0,
|
465
|
+
|
466
|
+
|
467
|
+
// ..........................................................
|
468
|
+
// SUBCLASS METHODS
|
469
|
+
//
|
470
|
+
|
471
|
+
/**
|
472
|
+
Override to return the computed layout dimensions of the collection view.
|
473
|
+
You can omit any dimensions you don't care about setting in your
|
474
|
+
computed value.
|
475
|
+
|
476
|
+
This layout is automatically applied whenever the content changes.
|
477
|
+
|
478
|
+
If you don't care about computing the layout at all, you can return null.
|
479
|
+
|
480
|
+
@returns {Hash} layout properties
|
481
|
+
*/
|
482
|
+
computeLayout: function() {
|
483
|
+
return null;
|
484
|
+
},
|
485
|
+
|
486
|
+
/**
|
487
|
+
Override to compute the layout of the itemView for the content at the
|
488
|
+
specified index. This layout will be applied to the view just before it
|
489
|
+
is rendered.
|
490
|
+
|
491
|
+
@param {Number} contentIndex the index of content being rendered by
|
492
|
+
itemView
|
493
|
+
@returns {Hash} a view layout
|
494
|
+
*/
|
495
|
+
layoutForContentIndex: function(contentIndex) {
|
496
|
+
return null;
|
497
|
+
},
|
498
|
+
|
499
|
+
/**
|
500
|
+
This computed property returns an index set selecting all content indexes.
|
501
|
+
It will recompute anytime the length of the collection view changes.
|
502
|
+
|
503
|
+
This is used by the default `contentIndexesInRect()` implementation.
|
504
|
+
|
505
|
+
@field
|
506
|
+
@type SC.IndexSet
|
507
|
+
@observes length
|
508
|
+
*/
|
509
|
+
allContentIndexes: function() {
|
510
|
+
return SC.IndexSet.create(0, this.get('length')).freeze();
|
511
|
+
}.property('length').cacheable(),
|
512
|
+
|
513
|
+
/**
|
514
|
+
Override to return an IndexSet with the indexes that are at least
|
515
|
+
partially visible in the passed rectangle. This method is used by the
|
516
|
+
default implementation of `computeNowShowing()` to determine the new
|
517
|
+
`nowShowing` range after a scroll.
|
518
|
+
|
519
|
+
Override this method to implement incremental rendering.
|
520
|
+
|
521
|
+
@param {Rect} rect the visible rect
|
522
|
+
@returns {SC.IndexSet} now showing indexes
|
523
|
+
*/
|
524
|
+
contentIndexesInRect: function(rect) {
|
525
|
+
return null; // select all
|
526
|
+
},
|
527
|
+
|
528
|
+
/**
|
529
|
+
Compute the nowShowing index set. The default implementation simply
|
530
|
+
returns the full range. Override to implement incremental rendering.
|
531
|
+
|
532
|
+
You should not normally call this method yourself. Instead get the
|
533
|
+
nowShowing property.
|
534
|
+
|
535
|
+
@returns {SC.IndexSet} new now showing range
|
536
|
+
*/
|
537
|
+
computeNowShowing: function() {
|
538
|
+
var r = this.contentIndexesInRect(this.get('clippingFrame'));
|
539
|
+
if (!r) r = this.get('allContentIndexes'); // default show all
|
540
|
+
|
541
|
+
// make sure the index set doesn't contain any indexes greater than the
|
542
|
+
// actual content.
|
543
|
+
else {
|
544
|
+
var len = this.get('length'),
|
545
|
+
max = r.get('max');
|
546
|
+
if (max > len) r = r.copy().remove(len, max-len).freeze();
|
547
|
+
}
|
548
|
+
|
549
|
+
return r;
|
550
|
+
},
|
551
|
+
|
552
|
+
/**
|
553
|
+
Override to show the insertion point during a drag.
|
554
|
+
|
555
|
+
Called during a drag to show the insertion point. Passed value is the
|
556
|
+
item view that you should display the insertion point before. If the
|
557
|
+
passed value is `null`, then you should show the insertion point *AFTER* that
|
558
|
+
last item view returned by the itemViews property.
|
559
|
+
|
560
|
+
Once this method is called, you are guaranteed to also recieve a call to
|
561
|
+
`hideInsertionPoint()` at some point in the future.
|
562
|
+
|
563
|
+
The default implementation of this method does nothing.
|
564
|
+
|
565
|
+
@param itemView {SC.ClassicView} view the insertion point should appear directly before. If null, show insertion point at end.
|
566
|
+
@param dropOperation {Number} the drop operation. will be SC.DROP_BEFORE, SC.DROP_AFTER, or SC.DROP_ON
|
567
|
+
|
568
|
+
@returns {void}
|
569
|
+
*/
|
570
|
+
showInsertionPoint: function(itemView, dropOperation) {},
|
571
|
+
|
572
|
+
/**
|
573
|
+
Override to hide the insertion point when a drag ends.
|
574
|
+
|
575
|
+
Called during a drag to hide the insertion point. This will be called
|
576
|
+
when the user exits the view, cancels the drag or completes the drag. It
|
577
|
+
will not be called when the insertion point changes during a drag.
|
578
|
+
|
579
|
+
You should expect to receive one or more calls to
|
580
|
+
`showInsertionPointBefore()` during a drag followed by at least one call to
|
581
|
+
this method at the end. Your method should not raise an error if it is
|
582
|
+
called more than once.
|
583
|
+
|
584
|
+
@returns {void}
|
585
|
+
*/
|
586
|
+
hideInsertionPoint: function() {},
|
587
|
+
|
588
|
+
|
589
|
+
// ..........................................................
|
590
|
+
// DELEGATE SUPPORT
|
591
|
+
//
|
592
|
+
|
593
|
+
|
594
|
+
/**
|
595
|
+
Delegate used to implement fine-grained control over collection view
|
596
|
+
behaviors.
|
597
|
+
|
598
|
+
You can assign a delegate object to this property that will be consulted
|
599
|
+
for various decisions regarding drag and drop, selection behavior, and
|
600
|
+
even rendering. The object you place here must implement some or all of
|
601
|
+
the `SC.CollectionViewDelegate` mixin.
|
602
|
+
|
603
|
+
If you do not supply a delegate but the content object you set implements
|
604
|
+
the `SC.CollectionViewDelegate` mixin, then the content will be
|
605
|
+
automatically set as the delegate. Usually you will work with a
|
606
|
+
`CollectionView` in this way rather than setting a delegate explicitly.
|
607
|
+
|
608
|
+
@type SC.CollectionViewDelegate
|
609
|
+
@default null
|
610
|
+
*/
|
611
|
+
delegate: null,
|
612
|
+
|
613
|
+
/**
|
614
|
+
The delegate responsible for handling selection changes. This property
|
615
|
+
will be either the delegate, content, or the collection view itself,
|
616
|
+
whichever implements the `SC.CollectionViewDelegate` mixin.
|
617
|
+
|
618
|
+
@field
|
619
|
+
@type Object
|
620
|
+
*/
|
621
|
+
selectionDelegate: function() {
|
622
|
+
var del = this.get('delegate'), content = this.get('content');
|
623
|
+
return this.delegateFor('isCollectionViewDelegate', del, content);
|
624
|
+
}.property('delegate', 'content').cacheable(),
|
625
|
+
|
626
|
+
/**
|
627
|
+
The delegate responsible for providing additional display information
|
628
|
+
about the content. If you bind a collection view to a controller, this
|
629
|
+
the content will usually also be the content delegate, though you
|
630
|
+
could implement your own delegate if you prefer.
|
631
|
+
|
632
|
+
@field
|
633
|
+
@type Object
|
634
|
+
*/
|
635
|
+
contentDelegate: function() {
|
636
|
+
var del = this.get('delegate'), content = this.get('content');
|
637
|
+
return this.delegateFor('isCollectionContent', del, content);
|
638
|
+
}.property('delegate', 'content').cacheable(),
|
639
|
+
|
640
|
+
|
641
|
+
/** @private
|
642
|
+
A cache of the `contentGroupIndexes` value returned by the delegate. This
|
643
|
+
is frequently accessed and usually involves creating an `SC.IndexSet`
|
644
|
+
object, so it's worthwhile to cache.
|
645
|
+
*/
|
646
|
+
_contentGroupIndexes: function() {
|
647
|
+
return this.get('contentDelegate').contentGroupIndexes(this, this.get('content'));
|
648
|
+
}.property('contentDelegate', 'content').cacheable(),
|
649
|
+
|
650
|
+
|
651
|
+
// ..........................................................
|
652
|
+
// CONTENT CHANGES
|
653
|
+
//
|
654
|
+
|
655
|
+
/**
|
656
|
+
Called whenever the content array or an item in the content array or a
|
657
|
+
property on an item in the content array changes. Reloads the appropriate
|
658
|
+
item view when the content array itself changes or calls
|
659
|
+
`contentPropertyDidChange()` if a property changes.
|
660
|
+
|
661
|
+
Normally you will not call this method directly though you may override
|
662
|
+
it if you need to change the way changes to observed ranges are handled.
|
663
|
+
|
664
|
+
@param {SC.Array} content the content array generating the change
|
665
|
+
@param {Object} object the changed object
|
666
|
+
@param {String} key the changed property or '[]' or an array change
|
667
|
+
@param {SC.IndexSet} indexes affected indexes or null for all items
|
668
|
+
@returns {void}
|
669
|
+
*/
|
670
|
+
contentRangeDidChange: function(content, object, key, indexes) {
|
671
|
+
if (!object && (key === '[]')) {
|
672
|
+
this.notifyPropertyChange('_contentGroupIndexes');
|
673
|
+
this.reload(indexes); // note: if indexes == null, reloads all
|
674
|
+
} else {
|
675
|
+
this.contentPropertyDidChange(object, key, indexes);
|
676
|
+
}
|
677
|
+
},
|
678
|
+
|
679
|
+
/**
|
680
|
+
Called whenever a property on an item in the content array changes. This
|
681
|
+
is only called if you have set `observesContentProperties` to `YES`.
|
682
|
+
|
683
|
+
Override this property if you want to do some custom work whenever a
|
684
|
+
property on a content object changes.
|
685
|
+
|
686
|
+
The default implementation does nothing.
|
687
|
+
|
688
|
+
@param {Object} target the object that changed
|
689
|
+
@param {String} key the property that changed value
|
690
|
+
@param {SC.IndexSet} indexes the indexes in the content array affected
|
691
|
+
@returns {void}
|
692
|
+
*/
|
693
|
+
contentPropertyDidChange: function(target, key, indexes) {},
|
694
|
+
|
695
|
+
/**
|
696
|
+
Called whenever the view needs to updates its `contentRangeObserver` to
|
697
|
+
reflect the current nowShowing index set. You will not usually call this
|
698
|
+
method yourself but you may override it if you need to provide some
|
699
|
+
custom range observer behavior.
|
700
|
+
|
701
|
+
Note that if you do implement this method, you are expected to maintain
|
702
|
+
the range observer object yourself. If a range observer has not been
|
703
|
+
created yet, this method should create it. If an observer already exists
|
704
|
+
this method should udpate it.
|
705
|
+
|
706
|
+
When you create a new range observer, the oberver must eventually call
|
707
|
+
`contentRangeDidChange()` for the collection view to function properly.
|
708
|
+
|
709
|
+
If you override this method you probably also need to override
|
710
|
+
`destroyRangeObserver()` to cleanup any existing range observer.
|
711
|
+
|
712
|
+
@returns {void}
|
713
|
+
*/
|
714
|
+
updateContentRangeObserver: function() {
|
715
|
+
var nowShowing = this.get('nowShowing'),
|
716
|
+
observer = this._cv_contentRangeObserver,
|
717
|
+
content = this.get('content');
|
718
|
+
|
719
|
+
if (!content) return ; // nothing to do
|
720
|
+
|
721
|
+
if (observer) {
|
722
|
+
content.updateRangeObserver(observer, nowShowing);
|
723
|
+
} else {
|
724
|
+
var func = this.contentRangeDidChange;
|
725
|
+
observer = content.addRangeObserver(nowShowing, this, func, null);
|
726
|
+
this._cv_contentRangeObserver = observer ;
|
727
|
+
}
|
728
|
+
|
729
|
+
},
|
730
|
+
|
731
|
+
/**
|
732
|
+
Called whever the view needs to invalidate the current content range
|
733
|
+
observer. This is called whenever the content array changes. You will
|
734
|
+
not usually call this method yourself but you may override it if you
|
735
|
+
provide your own range observer behavior.
|
736
|
+
|
737
|
+
Note that if you override this method you should probably also override
|
738
|
+
`updateRangeObserver()` to create or update a range oberver as needed.
|
739
|
+
|
740
|
+
@returns {void}
|
741
|
+
*/
|
742
|
+
removeContentRangeObserver: function() {
|
743
|
+
var content = this.get('content'),
|
744
|
+
observer = this._cv_contentRangeObserver ;
|
745
|
+
|
746
|
+
if (observer) {
|
747
|
+
if (content) content.removeRangeObserver(observer);
|
748
|
+
this._cv_contentRangeObserver = null ;
|
749
|
+
}
|
750
|
+
},
|
751
|
+
|
752
|
+
/**
|
753
|
+
Called whenever the content length changes. This will invalidate the
|
754
|
+
length property of the view itself causing the nowShowing to recompute
|
755
|
+
which will in turn update the UI accordingly.
|
756
|
+
|
757
|
+
@returns {void}
|
758
|
+
*/
|
759
|
+
contentLengthDidChange: function() {
|
760
|
+
var content = this.get('content');
|
761
|
+
this.set('length', content ? content.get('length') : 0);
|
762
|
+
},
|
763
|
+
|
764
|
+
/** @private
|
765
|
+
Whenever content property changes to a new value:
|
766
|
+
|
767
|
+
- remove any old observers
|
768
|
+
- setup new observers (maybe wait until end of runloop to do this?)
|
769
|
+
- recalc height/reload content
|
770
|
+
- set content as delegate if delegate was old content
|
771
|
+
- reset selection
|
772
|
+
|
773
|
+
Whenever content array mutates:
|
774
|
+
|
775
|
+
- possibly stop observing property changes on objects, observe new objs
|
776
|
+
- reload effected item views
|
777
|
+
- update layout for receiver
|
778
|
+
*/
|
779
|
+
_cv_contentDidChange: function() {
|
780
|
+
var content = this.get('content'),
|
781
|
+
lfunc = this.contentLengthDidChange ;
|
782
|
+
|
783
|
+
if (content === this._content) return; // nothing to do
|
784
|
+
|
785
|
+
// cleanup old content
|
786
|
+
this.removeContentRangeObserver();
|
787
|
+
if (this._content) {
|
788
|
+
this._content.removeObserver('length', this, lfunc);
|
789
|
+
}
|
790
|
+
|
791
|
+
// cache
|
792
|
+
this._content = content;
|
793
|
+
|
794
|
+
// add new observers - range observer will be added lazily
|
795
|
+
if (content) {
|
796
|
+
content.addObserver('length', this, lfunc);
|
797
|
+
}
|
798
|
+
|
799
|
+
// notify all items changed
|
800
|
+
this.contentLengthDidChange();
|
801
|
+
this.contentRangeDidChange(content, null, '[]', null);
|
802
|
+
|
803
|
+
}.observes('content'),
|
804
|
+
|
805
|
+
// ..........................................................
|
806
|
+
// ITEM VIEWS
|
807
|
+
//
|
808
|
+
|
809
|
+
/** @private
|
810
|
+
The indexes that need to be reloaded. Must be one of YES, NO, or an
|
811
|
+
SC.IndexSet.
|
812
|
+
*/
|
813
|
+
_invalidIndexes: NO,
|
814
|
+
|
815
|
+
/**
|
816
|
+
Regenerates the item views for the content items at the specified indexes.
|
817
|
+
If you pass null instead of an index set, regenerates all item views.
|
818
|
+
|
819
|
+
This method is called automatically whenever the content array changes in
|
820
|
+
an observable way, but you can call its yourself also if you need to
|
821
|
+
refresh the collection view for some reason.
|
822
|
+
|
823
|
+
Note that if the length of the content is shorter than the child views
|
824
|
+
and you call this method, then the child views will be removed no matter
|
825
|
+
what the index.
|
826
|
+
|
827
|
+
@param {SC.IndexSet} indexes
|
828
|
+
@returns {SC.CollectionView} receiver
|
829
|
+
*/
|
830
|
+
reload: function(indexes) {
|
831
|
+
var invalid = this._invalidIndexes ;
|
832
|
+
if (indexes && invalid !== YES) {
|
833
|
+
if (invalid) invalid.add(indexes);
|
834
|
+
else invalid = this._invalidIndexes = indexes.clone();
|
835
|
+
|
836
|
+
}
|
837
|
+
else {
|
838
|
+
this._invalidIndexes = YES ; // force a total reload
|
839
|
+
}
|
840
|
+
|
841
|
+
if (this.get('isVisibleInWindow')) this.invokeOnce(this.reloadIfNeeded);
|
842
|
+
|
843
|
+
return this ;
|
844
|
+
},
|
845
|
+
|
846
|
+
/**
|
847
|
+
Invoked once per runloop to actually reload any needed item views.
|
848
|
+
You can call this method at any time to actually force the reload to
|
849
|
+
happen immediately if any item views need to be reloaded.
|
850
|
+
|
851
|
+
Note that this method will also invoke two other callback methods if you
|
852
|
+
define them on your subclass:
|
853
|
+
|
854
|
+
- *willReload()* is called just before the items are reloaded
|
855
|
+
- *didReload()* is called jsut after items are reloaded
|
856
|
+
|
857
|
+
You can use these two methods to setup and teardown caching, which may
|
858
|
+
reduce overall cost of a reload. Each method will be passed an index set
|
859
|
+
of items that are reloaded or null if all items are reloaded.
|
860
|
+
|
861
|
+
@returns {SC.CollectionView} receiver
|
862
|
+
*/
|
863
|
+
reloadIfNeeded: function() {
|
864
|
+
var invalid = this._invalidIndexes;
|
865
|
+
if (!invalid || !this.get('isVisibleInWindow')) return this ; // delay
|
866
|
+
this._invalidIndexes = NO ;
|
867
|
+
|
868
|
+
var content = this.get('content'),
|
869
|
+
i, len, existing,
|
870
|
+
layout = this.computeLayout(),
|
871
|
+
bench = SC.BENCHMARK_RELOAD,
|
872
|
+
nowShowing = this.get('nowShowing'),
|
873
|
+
itemViews = this._sc_itemViews,
|
874
|
+
containerView = this.get('containerView') || this,
|
875
|
+
exampleView, groupExampleView,
|
876
|
+
shouldReuseViews, shouldReuseGroupViews, shouldReuse,
|
877
|
+
viewsToRemove, viewsToRedraw, viewsToCreate,
|
878
|
+
views, idx, view, layer, parentNode, viewPool,
|
879
|
+
del, groupIndexes, isGroupView;
|
880
|
+
|
881
|
+
// if the set is defined but it contains the entire nowShowing range, just
|
882
|
+
// replace
|
883
|
+
if (invalid.isIndexSet && invalid.contains(nowShowing)) invalid = YES ;
|
884
|
+
if (this.willReload) this.willReload(invalid === YES ? null : invalid);
|
885
|
+
|
886
|
+
|
887
|
+
// Up-front, figure out whether the view class (and, if applicable,
|
888
|
+
// group view class) is re-usable. If so, it's beneficial for us to
|
889
|
+
// first return all no-longer-needed views to the pool before allocating
|
890
|
+
// new ones, because that will maximize the potential for re-use.
|
891
|
+
exampleView = this.get('exampleView');
|
892
|
+
shouldReuseViews = exampleView ? exampleView.isReusableInCollections : NO;
|
893
|
+
groupExampleView = this.get('groupExampleView');
|
894
|
+
shouldReuseGroupViews = groupExampleView ? groupExampleView.isReusableInCollections : NO;
|
895
|
+
|
896
|
+
// if an index set, just update indexes
|
897
|
+
if (invalid.isIndexSet) {
|
898
|
+
if (bench) {
|
899
|
+
SC.Benchmark.start(bench="%@#reloadIfNeeded (Partial)".fmt(this),YES);
|
900
|
+
}
|
901
|
+
|
902
|
+
// Each of these arrays holds indexes.
|
903
|
+
viewsToRemove = [];
|
904
|
+
viewsToRedraw = [];
|
905
|
+
viewsToCreate = [];
|
906
|
+
|
907
|
+
invalid.forEach(function(idx) {
|
908
|
+
// get the existing item view, if there is one
|
909
|
+
existing = itemViews ? itemViews[idx] : null;
|
910
|
+
|
911
|
+
// if nowShowing, then reload the item view.
|
912
|
+
if (nowShowing.contains(idx)) {
|
913
|
+
if (existing && existing.parentView === containerView) {
|
914
|
+
viewsToRedraw.push(idx);
|
915
|
+
|
916
|
+
} else {
|
917
|
+
viewsToCreate.push(idx);
|
918
|
+
}
|
919
|
+
|
920
|
+
// if not nowShowing, then remove the item view if needed
|
921
|
+
} else if (existing && existing.parentView === containerView) {
|
922
|
+
viewsToRemove.push(idx);
|
923
|
+
}
|
924
|
+
},this);
|
925
|
+
|
926
|
+
|
927
|
+
// Now that we know what operations we need to perform, let's perform
|
928
|
+
// all the removals first…
|
929
|
+
for (i = 0, len = viewsToRemove.length; i < len; ++i) {
|
930
|
+
idx = viewsToRemove[i];
|
931
|
+
existing = itemViews ? itemViews[idx] : null;
|
932
|
+
delete itemViews[idx];
|
933
|
+
|
934
|
+
// If this view class is reusable, then add it back to the pool.
|
935
|
+
del = this.get('contentDelegate');
|
936
|
+
groupIndexes = this.get('_contentGroupIndexes');
|
937
|
+
isGroupView = groupIndexes && groupIndexes.contains(idx);
|
938
|
+
if (isGroupView) isGroupView = del.contentIndexIsGroup(this, content, idx);
|
939
|
+
shouldReuse = isGroupView ? shouldReuseGroupViews : shouldReuseViews;
|
940
|
+
if (shouldReuse) {
|
941
|
+
viewPool = isGroupView ? this._GROUP_VIEW_POOL : this._VIEW_POOL;
|
942
|
+
|
943
|
+
viewPool.push(existing);
|
944
|
+
|
945
|
+
// Because it's possible that we'll return this view to the pool
|
946
|
+
// and then immediately re-use it, there's the potential that the
|
947
|
+
// layer will not be correctly destroyed, because that support
|
948
|
+
// (built into removeChild) is coalesced at the runloop, and we
|
949
|
+
// will likely change the layerId when re-using the view. So
|
950
|
+
// we'll destroy the layer now.
|
951
|
+
existing.destroyLayer();
|
952
|
+
}
|
953
|
+
|
954
|
+
// We don't want the old layer hanging around, even if we are going
|
955
|
+
// to reuse it.
|
956
|
+
// (Charles Jolley personally guarantees this code)
|
957
|
+
layer = existing.get('layer');
|
958
|
+
if (layer && layer.parentNode) layer.parentNode.removeChild(layer);
|
959
|
+
|
960
|
+
containerView.removeChild(existing);
|
961
|
+
if (!shouldReuse) existing.destroy();
|
962
|
+
}
|
963
|
+
|
964
|
+
// …then the redraws…
|
965
|
+
for (i = 0, len = viewsToRedraw.length; i < len; ++i) {
|
966
|
+
idx = viewsToRedraw[i];
|
967
|
+
existing = itemViews ? itemViews[idx] : null;
|
968
|
+
view = this.itemViewForContentIndex(idx, YES);
|
969
|
+
|
970
|
+
// if the existing view has a layer, remove it immediately from
|
971
|
+
// the parent. This is necessary because the old and new views
|
972
|
+
// will use the same layerId
|
973
|
+
existing.destroyLayer();
|
974
|
+
containerView.replaceChild(view, existing);
|
975
|
+
}
|
976
|
+
|
977
|
+
// …and finally the creations.
|
978
|
+
for (i = 0, len = viewsToCreate.length; i < len; ++i) {
|
979
|
+
idx = viewsToCreate[i];
|
980
|
+
view = this.itemViewForContentIndex(idx, YES);
|
981
|
+
containerView.insertBefore(view, null); // Equivalent to 'append()', but avoids one more function call
|
982
|
+
}
|
983
|
+
|
984
|
+
|
985
|
+
if (bench) SC.Benchmark.end(bench);
|
986
|
+
|
987
|
+
// if set is NOT defined, replace entire content with nowShowing
|
988
|
+
} else {
|
989
|
+
if (bench) {
|
990
|
+
SC.Benchmark.start(bench="%@#reloadIfNeeded (Full)".fmt(this),YES);
|
991
|
+
}
|
992
|
+
|
993
|
+
// truncate cached item views since they will all be removed from the
|
994
|
+
// container anyway.
|
995
|
+
if (itemViews) itemViews.length = 0 ;
|
996
|
+
|
997
|
+
views = containerView.get('childViews');
|
998
|
+
if (views) views = views.copy();
|
999
|
+
|
1000
|
+
// below is an optimized version of:
|
1001
|
+
//this.replaceAllChildren(views);
|
1002
|
+
containerView.beginPropertyChanges();
|
1003
|
+
// views = containerView.get('views');
|
1004
|
+
if (this.willRemoveAllChildren) this.willRemoveAllChildren() ;
|
1005
|
+
containerView.destroyLayer().removeAllChildren();
|
1006
|
+
|
1007
|
+
// For all previous views that can be re-used, return them to the pool.
|
1008
|
+
if (views) {
|
1009
|
+
for (i = 0, len = views.length; i < len; ++i) {
|
1010
|
+
view = views[i];
|
1011
|
+
isGroupView = view.get('isGroupView');
|
1012
|
+
shouldReuse = isGroupView ? shouldReuseGroupViews : shouldReuseViews;
|
1013
|
+
if (shouldReuse) {
|
1014
|
+
viewPool = isGroupView ? this._GROUP_VIEW_POOL : this._VIEW_POOL;
|
1015
|
+
|
1016
|
+
viewPool.push(view);
|
1017
|
+
|
1018
|
+
// Because it's possible that we'll return this view to the pool
|
1019
|
+
// and then immediately re-use it, there's the potential that the
|
1020
|
+
// layer will not be correctly destroyed, because that support
|
1021
|
+
// (built into removeChild) is coalesced at the runloop, and we
|
1022
|
+
// will likely change the layerId when re-using the view. So
|
1023
|
+
// we'll destroy the layer now.
|
1024
|
+
view.destroyLayer();
|
1025
|
+
} else {
|
1026
|
+
view.destroy();
|
1027
|
+
}
|
1028
|
+
}
|
1029
|
+
}
|
1030
|
+
|
1031
|
+
|
1032
|
+
// Only after the children are removed should we create the new views.
|
1033
|
+
// We do this in order to maximize the change of re-use should the view
|
1034
|
+
// be marked as such.
|
1035
|
+
views = [];
|
1036
|
+
nowShowing.forEach(function(idx) {
|
1037
|
+
views.push(this.itemViewForContentIndex(idx, YES));
|
1038
|
+
}, this);
|
1039
|
+
|
1040
|
+
|
1041
|
+
containerView.set('childViews', views); // quick swap
|
1042
|
+
containerView.replaceLayer();
|
1043
|
+
containerView.endPropertyChanges();
|
1044
|
+
|
1045
|
+
if (bench) SC.Benchmark.end(bench);
|
1046
|
+
|
1047
|
+
}
|
1048
|
+
|
1049
|
+
// adjust my own layout if computed
|
1050
|
+
if (layout) this.adjust(layout);
|
1051
|
+
if (this.didReload) this.didReload(invalid === YES ? null : invalid);
|
1052
|
+
|
1053
|
+
return this ;
|
1054
|
+
},
|
1055
|
+
|
1056
|
+
/** @private */
|
1057
|
+
_TMP_ATTRS: {},
|
1058
|
+
|
1059
|
+
/** @private */
|
1060
|
+
_COLLECTION_CLASS_NAMES: ['sc-collection-item'],
|
1061
|
+
|
1062
|
+
/** @private */
|
1063
|
+
_GROUP_COLLECTION_CLASS_NAMES: ['sc-collection-item', 'sc-group-item'],
|
1064
|
+
|
1065
|
+
/** @private */
|
1066
|
+
_VIEW_POOL: null,
|
1067
|
+
|
1068
|
+
/** @private */
|
1069
|
+
_GROUP_VIEW_POOL: null,
|
1070
|
+
|
1071
|
+
/**
|
1072
|
+
Returns the item view for the content object at the specified index. Call
|
1073
|
+
this method instead of accessing child views directly whenever you need
|
1074
|
+
to get the view associated with a content index.
|
1075
|
+
|
1076
|
+
Although this method take two parameters, you should almost always call
|
1077
|
+
it with just the content index. The other two parameters are used
|
1078
|
+
internally by the CollectionView.
|
1079
|
+
|
1080
|
+
If you need to change the way the collection view manages item views
|
1081
|
+
you can override this method as well. If you just want to change the
|
1082
|
+
default options used when creating item views, override createItemView()
|
1083
|
+
instead.
|
1084
|
+
|
1085
|
+
Note that if you override this method, then be sure to implement this
|
1086
|
+
method so that it uses a cache to return the same item view for a given
|
1087
|
+
index unless "force" is YES. In that case, generate a new item view and
|
1088
|
+
replace the old item view in your cache with the new item view.
|
1089
|
+
|
1090
|
+
@param {Number} idx the content index
|
1091
|
+
@param {Boolean} rebuild internal use only
|
1092
|
+
@returns {SC.View} instantiated view
|
1093
|
+
*/
|
1094
|
+
itemViewForContentIndex: function(idx, rebuild) {
|
1095
|
+
var ret;
|
1096
|
+
|
1097
|
+
// Use the cached view for this index, if we have it. We'll do this up-
|
1098
|
+
// front to avoid
|
1099
|
+
var itemViews = this._sc_itemViews;
|
1100
|
+
if (!itemViews) {
|
1101
|
+
itemViews = this._sc_itemViews = [] ;
|
1102
|
+
}
|
1103
|
+
else if (!rebuild && (ret = itemViews[idx])) {
|
1104
|
+
return ret ;
|
1105
|
+
}
|
1106
|
+
|
1107
|
+
// return from cache if possible
|
1108
|
+
var content = this.get('content'),
|
1109
|
+
item = content.objectAt(idx),
|
1110
|
+
del = this.get('contentDelegate'),
|
1111
|
+
groupIndexes = this.get('_contentGroupIndexes'),
|
1112
|
+
isGroupView = NO,
|
1113
|
+
key, E, layout, layerId,
|
1114
|
+
viewPoolKey, viewPool, reuseFunc, parentView, isEnabled, isSelected,
|
1115
|
+
outlineLevel, disclosureState, isVisibleInWindow;
|
1116
|
+
|
1117
|
+
// otherwise generate...
|
1118
|
+
|
1119
|
+
// first, determine the class to use
|
1120
|
+
isGroupView = groupIndexes && groupIndexes.contains(idx);
|
1121
|
+
if (isGroupView) isGroupView = del.contentIndexIsGroup(this, content,idx);
|
1122
|
+
if (isGroupView) {
|
1123
|
+
key = this.get('contentGroupExampleViewKey');
|
1124
|
+
if (key && item) E = item.get(key);
|
1125
|
+
if (!E) E = this.get('groupExampleView') || this.get('exampleView');
|
1126
|
+
viewPoolKey = '_GROUP_VIEW_POOL';
|
1127
|
+
} else {
|
1128
|
+
key = this.get('contentExampleViewKey');
|
1129
|
+
if (key && item) E = item.get(key);
|
1130
|
+
if (!E) E = this.get('exampleView');
|
1131
|
+
viewPoolKey = '_VIEW_POOL';
|
1132
|
+
}
|
1133
|
+
|
1134
|
+
|
1135
|
+
// Collect other state that we'll need whether we're re-using a previous
|
1136
|
+
// view or creating a new view.
|
1137
|
+
parentView = this.get('containerView') || this;
|
1138
|
+
layerId = this.layerIdFor(idx);
|
1139
|
+
isEnabled = del.contentIndexIsEnabled(this, content, idx);
|
1140
|
+
isSelected = del.contentIndexIsSelected(this, content, idx);
|
1141
|
+
outlineLevel = del.contentIndexOutlineLevel(this, content, idx);
|
1142
|
+
disclosureState = del.contentIndexDisclosureState(this, content, idx);
|
1143
|
+
isVisibleInWindow = this.isVisibleInWindow;
|
1144
|
+
layout = this.layoutForContentIndex(idx);
|
1145
|
+
|
1146
|
+
|
1147
|
+
// If the view is reusable and there is an appropriate view inside the
|
1148
|
+
// pool, simply reuse it to avoid having to create a new view.
|
1149
|
+
if (E && E.isReusableInCollections) {
|
1150
|
+
// Lazily create the view pool.
|
1151
|
+
viewPool = this[viewPoolKey];
|
1152
|
+
if (!viewPool) viewPool = this[viewPoolKey] = [];
|
1153
|
+
|
1154
|
+
// Is there a view we can re-use?
|
1155
|
+
if (viewPool.length > 0) {
|
1156
|
+
ret = viewPool.pop();
|
1157
|
+
|
1158
|
+
// Tell the view it's about to be re-used.
|
1159
|
+
reuseFunc = ret.prepareForReuse;
|
1160
|
+
if (reuseFunc) reuseFunc.call(ret);
|
1161
|
+
|
1162
|
+
// Set the new state. We'll set content last, because it's the most
|
1163
|
+
// likely to have observers.
|
1164
|
+
ret.beginPropertyChanges();
|
1165
|
+
ret.set('contentIndex', idx);
|
1166
|
+
ret.set('layerId', layerId);
|
1167
|
+
ret.set('isEnabled', isEnabled);
|
1168
|
+
ret.set('isSelected', isSelected);
|
1169
|
+
ret.set('outlineLevel', outlineLevel);
|
1170
|
+
ret.set('disclosureState', disclosureState);
|
1171
|
+
ret.set('isVisibleInWindow', isVisibleInWindow);
|
1172
|
+
|
1173
|
+
// TODO: In theory this shouldn't be needed, but without it, we
|
1174
|
+
// sometimes get errors when doing a full reload, because
|
1175
|
+
// 'childViews' contains the view but the parent is not set.
|
1176
|
+
// This implies a timing issue with the general flow of
|
1177
|
+
// collection view.
|
1178
|
+
ret.set('parentView', parentView);
|
1179
|
+
|
1180
|
+
// Since we re-use layerIds, we need to reset SproutCore's internal
|
1181
|
+
// mapping table.
|
1182
|
+
SC.View.views[layerId] = ret;
|
1183
|
+
|
1184
|
+
if (layout) {
|
1185
|
+
ret.set('layout', layout);
|
1186
|
+
}
|
1187
|
+
else {
|
1188
|
+
ret.set('layout', E.prototype.layout);
|
1189
|
+
}
|
1190
|
+
ret.set('content', item);
|
1191
|
+
ret.endPropertyChanges();
|
1192
|
+
}
|
1193
|
+
}
|
1194
|
+
|
1195
|
+
// If we weren't able to re-use a view, then create a new one.
|
1196
|
+
if (!ret) {
|
1197
|
+
// collect some other state
|
1198
|
+
var attrs = this._TMP_ATTRS;
|
1199
|
+
attrs.contentIndex = idx;
|
1200
|
+
attrs.content = item;
|
1201
|
+
attrs.owner = attrs.displayDelegate = this;
|
1202
|
+
attrs.parentView = parentView; // Same here; shouldn't be needed
|
1203
|
+
attrs.page = this.page;
|
1204
|
+
attrs.layerId = layerId;
|
1205
|
+
attrs.isEnabled = isEnabled;
|
1206
|
+
attrs.isSelected = isSelected;
|
1207
|
+
attrs.outlineLevel = outlineLevel;
|
1208
|
+
attrs.disclosureState = disclosureState;
|
1209
|
+
attrs.isGroupView = isGroupView;
|
1210
|
+
attrs.isVisibleInWindow = isVisibleInWindow;
|
1211
|
+
if (isGroupView) attrs.classNames = this._GROUP_COLLECTION_CLASS_NAMES;
|
1212
|
+
else attrs.classNames = this._COLLECTION_CLASS_NAMES;
|
1213
|
+
|
1214
|
+
if (layout) {
|
1215
|
+
attrs.layout = layout;
|
1216
|
+
} else {
|
1217
|
+
delete attrs.layout ;
|
1218
|
+
}
|
1219
|
+
|
1220
|
+
ret = this.createItemView(E, idx, attrs);
|
1221
|
+
}
|
1222
|
+
|
1223
|
+
itemViews[idx] = ret ;
|
1224
|
+
return ret ;
|
1225
|
+
},
|
1226
|
+
|
1227
|
+
/**
|
1228
|
+
Helper method for getting the item view of a specific content object
|
1229
|
+
|
1230
|
+
@param {Object} object
|
1231
|
+
*/
|
1232
|
+
itemViewForContentObject: function(object) {
|
1233
|
+
return this.itemViewForContentIndex(this.get('content').indexOf(object));
|
1234
|
+
},
|
1235
|
+
|
1236
|
+
/** @private */
|
1237
|
+
_TMP_LAYERID: [],
|
1238
|
+
|
1239
|
+
/**
|
1240
|
+
Primitive to instantiate an item view. You will be passed the class
|
1241
|
+
and a content index. You can override this method to perform any other
|
1242
|
+
one time setup.
|
1243
|
+
|
1244
|
+
Note that item views may be created somewhat frequently so keep this fast.
|
1245
|
+
|
1246
|
+
*IMPORTANT:* The attrs hash passed is reused each time this method is
|
1247
|
+
called. If you add properties to this hash be sure to delete them before
|
1248
|
+
returning from this method.
|
1249
|
+
|
1250
|
+
@param {Class} exampleClass example view class
|
1251
|
+
@param {Number} idx the content index
|
1252
|
+
@param {Hash} attrs expected attributes
|
1253
|
+
@returns {SC.View} item view instance
|
1254
|
+
*/
|
1255
|
+
createItemView: function(exampleClass, idx, attrs) {
|
1256
|
+
return exampleClass.create(attrs);
|
1257
|
+
},
|
1258
|
+
|
1259
|
+
/**
|
1260
|
+
Generates a layerId for the passed index and item. Usually the default
|
1261
|
+
implementation is suitable.
|
1262
|
+
|
1263
|
+
@param {Number} idx the content index
|
1264
|
+
@returns {String} layer id, must be suitable for use in HTML id attribute
|
1265
|
+
*/
|
1266
|
+
layerIdFor: function(idx) {
|
1267
|
+
var ret = this._TMP_LAYERID;
|
1268
|
+
ret[0] = SC.guidFor(this);
|
1269
|
+
ret[1] = idx;
|
1270
|
+
return ret.join('-');
|
1271
|
+
},
|
1272
|
+
|
1273
|
+
/**
|
1274
|
+
Extracts the content index from the passed layerID. If the layer id does
|
1275
|
+
not belong to the receiver or if no value could be extracted, returns NO.
|
1276
|
+
|
1277
|
+
@param {String} id the layer id
|
1278
|
+
*/
|
1279
|
+
contentIndexForLayerId: function(id) {
|
1280
|
+
if (!id || !(id = id.toString())) return null ; // nothing to do
|
1281
|
+
|
1282
|
+
var base = this._baseLayerId;
|
1283
|
+
if (!base) base = this._baseLayerId = SC.guidFor(this)+"-";
|
1284
|
+
|
1285
|
+
// no match
|
1286
|
+
if ((id.length <= base.length) || (id.indexOf(base) !== 0)) return null ;
|
1287
|
+
var ret = Number(id.slice(id.lastIndexOf('-')+1));
|
1288
|
+
return isNaN(ret) ? null : ret ;
|
1289
|
+
},
|
1290
|
+
|
1291
|
+
|
1292
|
+
/**
|
1293
|
+
Find the first content item view for the passed event.
|
1294
|
+
|
1295
|
+
This method will go up the view chain, starting with the view that was the
|
1296
|
+
target of the passed event, looking for a child item. This will become
|
1297
|
+
the view that is selected by the mouse event.
|
1298
|
+
|
1299
|
+
This method only works for mouseDown & mouseUp events. mouseMoved events
|
1300
|
+
do not have a target.
|
1301
|
+
|
1302
|
+
@param {SC.Event} evt An event
|
1303
|
+
@returns {SC.View} the item view or null
|
1304
|
+
*/
|
1305
|
+
itemViewForEvent: function(evt) {
|
1306
|
+
var responder = this.getPath('pane.rootResponder') ;
|
1307
|
+
if (!responder) return null ; // fast path
|
1308
|
+
|
1309
|
+
var base = SC.guidFor(this) + '-',
|
1310
|
+
baseLen = base.length,
|
1311
|
+
element = evt.target,
|
1312
|
+
layer = this.get('layer'),
|
1313
|
+
contentIndex = null,
|
1314
|
+
id, itemView, ret ;
|
1315
|
+
|
1316
|
+
// walk up the element hierarchy until we find this or an element with an
|
1317
|
+
// id matching the base guid (i.e. a collection item)
|
1318
|
+
while (element && element !== document && element !== layer) {
|
1319
|
+
id = element ? SC.$(element).attr('id') : null ;
|
1320
|
+
if (id && (contentIndex = this.contentIndexForLayerId(id)) !== null) {
|
1321
|
+
break;
|
1322
|
+
}
|
1323
|
+
element = element.parentNode ;
|
1324
|
+
}
|
1325
|
+
|
1326
|
+
// no matching element found?
|
1327
|
+
if (contentIndex===null || (element === layer)) {
|
1328
|
+
element = layer = null; // avoid memory leaks
|
1329
|
+
return null;
|
1330
|
+
}
|
1331
|
+
|
1332
|
+
// okay, found the DOM node for the view, go ahead and create it
|
1333
|
+
// first, find the contentIndex
|
1334
|
+
if (contentIndex >= this.get('length')) {
|
1335
|
+
throw "layout for item view %@ was found when item view does not exist (%@)".fmt(id, this);
|
1336
|
+
}
|
1337
|
+
|
1338
|
+
return this.itemViewForContentIndex(contentIndex);
|
1339
|
+
},
|
1340
|
+
|
1341
|
+
// ..........................................................
|
1342
|
+
// DISCLOSURE SUPPORT
|
1343
|
+
//
|
1344
|
+
|
1345
|
+
/**
|
1346
|
+
Expands any items in the passed selection array that have a disclosure
|
1347
|
+
state.
|
1348
|
+
|
1349
|
+
@param {SC.IndexSet} indexes the indexes to expand
|
1350
|
+
@returns {SC.CollectionView} receiver
|
1351
|
+
*/
|
1352
|
+
expand: function(indexes) {
|
1353
|
+
if (!indexes) return this; // nothing to do
|
1354
|
+
var del = this.get('contentDelegate'),
|
1355
|
+
content = this.get('content');
|
1356
|
+
|
1357
|
+
indexes.forEach(function(i) {
|
1358
|
+
var state = del.contentIndexDisclosureState(this, content, i);
|
1359
|
+
if (state === SC.BRANCH_CLOSED) del.contentIndexExpand(this,content,i);
|
1360
|
+
}, this);
|
1361
|
+
return this;
|
1362
|
+
},
|
1363
|
+
|
1364
|
+
/**
|
1365
|
+
Collapses any items in the passed selection array that have a disclosure
|
1366
|
+
state.
|
1367
|
+
|
1368
|
+
@param {SC.IndexSet} indexes the indexes to expand
|
1369
|
+
@returns {SC.CollectionView} receiver
|
1370
|
+
*/
|
1371
|
+
collapse: function(indexes) {
|
1372
|
+
if (!indexes) return this; // nothing to do
|
1373
|
+
var del = this.get('contentDelegate'),
|
1374
|
+
content = this.get('content');
|
1375
|
+
|
1376
|
+
indexes.forEach(function(i) {
|
1377
|
+
var state = del.contentIndexDisclosureState(this, content, i);
|
1378
|
+
if (state === SC.BRANCH_OPEN) del.contentIndexCollapse(this,content,i);
|
1379
|
+
}, this);
|
1380
|
+
return this;
|
1381
|
+
},
|
1382
|
+
|
1383
|
+
// ..........................................................
|
1384
|
+
// SELECTION SUPPORT
|
1385
|
+
//
|
1386
|
+
|
1387
|
+
/** @private
|
1388
|
+
Called whenever the selection object is changed to a new value. Begins
|
1389
|
+
observing the selection for changes.
|
1390
|
+
*/
|
1391
|
+
_cv_selectionDidChange: function() {
|
1392
|
+
var sel = this.get('selection'),
|
1393
|
+
last = this._cv_selection,
|
1394
|
+
func = this._cv_selectionContentDidChange;
|
1395
|
+
|
1396
|
+
if (sel === last) return; // nothing to do
|
1397
|
+
if (last) last.removeObserver('[]', this, func);
|
1398
|
+
if (sel) sel.addObserver('[]', this, func);
|
1399
|
+
|
1400
|
+
this._cv_selection = sel ;
|
1401
|
+
this._cv_selectionContentDidChange();
|
1402
|
+
}.observes('selection'),
|
1403
|
+
|
1404
|
+
/** @private
|
1405
|
+
Called whenever the selection object or its content changes. This will
|
1406
|
+
repaint any items that changed their selection state.
|
1407
|
+
*/
|
1408
|
+
_cv_selectionContentDidChange: function() {
|
1409
|
+
var sel = this.get('selection'),
|
1410
|
+
last = this._cv_selindexes, // clone of last known indexes
|
1411
|
+
content = this.get('content'),
|
1412
|
+
diff ;
|
1413
|
+
|
1414
|
+
// save new last
|
1415
|
+
this._cv_selindexes = sel ? sel.frozenCopy() : null;
|
1416
|
+
|
1417
|
+
// determine which indexes are now invalid
|
1418
|
+
if (last) last = last.indexSetForSource(content);
|
1419
|
+
if (sel) sel = sel.indexSetForSource(content);
|
1420
|
+
|
1421
|
+
if (sel && last) diff = sel.without(last).add(last.without(sel));
|
1422
|
+
else diff = sel || last;
|
1423
|
+
|
1424
|
+
if (diff && diff.get('length')>0) this.reloadSelectionIndexes(diff);
|
1425
|
+
},
|
1426
|
+
|
1427
|
+
/** @private
|
1428
|
+
Contains the current item views that need their selection to be repainted.
|
1429
|
+
This may be either NO, YES, or an IndexSet.
|
1430
|
+
*/
|
1431
|
+
_invalidSelection: NO,
|
1432
|
+
|
1433
|
+
/**
|
1434
|
+
Called whenever the selection changes. The passed index set will contain
|
1435
|
+
any affected indexes including those indexes that were previously
|
1436
|
+
selected and now should be deselected.
|
1437
|
+
|
1438
|
+
Pass null to reload the selection state for all items.
|
1439
|
+
|
1440
|
+
@param {SC.IndexSet} indexes affected indexes
|
1441
|
+
@returns {SC.CollectionView} reciever
|
1442
|
+
*/
|
1443
|
+
reloadSelectionIndexes: function(indexes) {
|
1444
|
+
var invalid = this._invalidSelection ;
|
1445
|
+
if (indexes && (invalid !== YES)) {
|
1446
|
+
if (invalid) { invalid.add(indexes) ; }
|
1447
|
+
else { invalid = this._invalidSelection = indexes.copy(); }
|
1448
|
+
|
1449
|
+
} else this._invalidSelection = YES ; // force a total reload
|
1450
|
+
|
1451
|
+
if (this.get('isVisibleInWindow')) {
|
1452
|
+
this.invokeOnce(this.reloadSelectionIndexesIfNeeded);
|
1453
|
+
}
|
1454
|
+
|
1455
|
+
return this ;
|
1456
|
+
},
|
1457
|
+
|
1458
|
+
/**
|
1459
|
+
Reloads the selection state if needed on any dirty indexes. Normally this
|
1460
|
+
will run once at the end of the runloop, but you can force the item views
|
1461
|
+
to reload their selection immediately by calling this method.
|
1462
|
+
|
1463
|
+
You can also override this method if needed to change the way the
|
1464
|
+
selection is reloaded on item views. The default behavior will simply
|
1465
|
+
find any item views in the nowShowing range that are affected and
|
1466
|
+
modify them.
|
1467
|
+
|
1468
|
+
@returns {SC.CollectionView} receiver
|
1469
|
+
*/
|
1470
|
+
reloadSelectionIndexesIfNeeded: function() {
|
1471
|
+
var invalid = this._invalidSelection;
|
1472
|
+
if (!invalid || !this.get('isVisibleInWindow')) return this ;
|
1473
|
+
|
1474
|
+
var nowShowing = this.get('nowShowing'),
|
1475
|
+
reload = this._invalidIndexes,
|
1476
|
+
content = this.get('content'),
|
1477
|
+
sel = this.get('selection');
|
1478
|
+
|
1479
|
+
this._invalidSelection = NO; // reset invalid
|
1480
|
+
|
1481
|
+
// fast path. if we are going to reload everything anyway, just forget
|
1482
|
+
// about it. Also if we don't have a nowShowing, nothing to do.
|
1483
|
+
if (reload === YES || !nowShowing) return this ;
|
1484
|
+
|
1485
|
+
// if invalid is YES instead of index set, just reload everything
|
1486
|
+
if (invalid === YES) invalid = nowShowing;
|
1487
|
+
|
1488
|
+
// if we will reload some items anyway, don't bother
|
1489
|
+
if (reload && reload.isIndexSet) invalid = invalid.without(reload);
|
1490
|
+
|
1491
|
+
// iterate through each item and set the isSelected state.
|
1492
|
+
invalid.forEach(function(idx) {
|
1493
|
+
if (!nowShowing.contains(idx)) return; // not showing
|
1494
|
+
var view = this.itemViewForContentIndex(idx, NO);
|
1495
|
+
if (view) view.set('isSelected', sel ? sel.contains(content, idx) : NO);
|
1496
|
+
},this);
|
1497
|
+
|
1498
|
+
return this ;
|
1499
|
+
},
|
1500
|
+
|
1501
|
+
/**
|
1502
|
+
Selection primitive. Selects the passed IndexSet of items, optionally
|
1503
|
+
extending the current selection. If extend is NO or not passed then this
|
1504
|
+
will replace the selection with the passed value. Otherwise the indexes
|
1505
|
+
will be added to the current selection.
|
1506
|
+
|
1507
|
+
@param {Number|SC.IndexSet} indexes index or indexes to select
|
1508
|
+
@param extend {Boolean} optionally extend the selection
|
1509
|
+
@returns {SC.CollectionView} receiver
|
1510
|
+
*/
|
1511
|
+
select: function(indexes, extend) {
|
1512
|
+
var content = this.get('content'),
|
1513
|
+
del = this.get('selectionDelegate'),
|
1514
|
+
groupIndexes = this.get('_contentGroupIndexes'),
|
1515
|
+
sel;
|
1516
|
+
|
1517
|
+
if(!this.get('isSelectable') || !this.get('isEnabled')) return this;
|
1518
|
+
|
1519
|
+
// normalize
|
1520
|
+
if (SC.typeOf(indexes) === SC.T_NUMBER) {
|
1521
|
+
indexes = SC.IndexSet.create(indexes, 1);
|
1522
|
+
}
|
1523
|
+
|
1524
|
+
// if we are passed an empty index set or null, clear the selection.
|
1525
|
+
if (indexes && indexes.get('length')>0) {
|
1526
|
+
|
1527
|
+
// first remove any group indexes - these can never be selected
|
1528
|
+
if (groupIndexes && groupIndexes.get('length')>0) {
|
1529
|
+
indexes = indexes.copy().remove(groupIndexes);
|
1530
|
+
}
|
1531
|
+
|
1532
|
+
// give the delegate a chance to alter the items
|
1533
|
+
indexes = del.collectionViewShouldSelectIndexes(this, indexes, extend);
|
1534
|
+
if (!indexes || indexes.get('length')===0) return this; // nothing to do
|
1535
|
+
|
1536
|
+
} else indexes = null;
|
1537
|
+
|
1538
|
+
// build the selection object, merging if needed
|
1539
|
+
if (extend && (sel = this.get('selection'))) sel = sel.copy();
|
1540
|
+
else sel = SC.SelectionSet.create();
|
1541
|
+
|
1542
|
+
if (indexes && indexes.get('length')>0) {
|
1543
|
+
|
1544
|
+
// when selecting only one item, always select by content
|
1545
|
+
if (indexes.get('length')===1) {
|
1546
|
+
sel.addObject(content.objectAt(indexes.get('firstObject')));
|
1547
|
+
|
1548
|
+
// otherwise select an index range
|
1549
|
+
} else sel.add(content, indexes);
|
1550
|
+
|
1551
|
+
}
|
1552
|
+
|
1553
|
+
// give delegate one last chance
|
1554
|
+
sel = del.collectionViewSelectionForProposedSelection(this, sel);
|
1555
|
+
if (!sel) sel = SC.SelectionSet.create(); // empty
|
1556
|
+
|
1557
|
+
// if we're not extending the selection, clear the selection anchor
|
1558
|
+
this._selectionAnchor = null ;
|
1559
|
+
this.set('selection', sel.freeze()) ;
|
1560
|
+
return this;
|
1561
|
+
},
|
1562
|
+
|
1563
|
+
/**
|
1564
|
+
Primtive to remove the indexes from the selection.
|
1565
|
+
|
1566
|
+
@param {Number|SC.IndexSet} indexes index or indexes to deselect
|
1567
|
+
@returns {SC.CollectionView} receiver
|
1568
|
+
*/
|
1569
|
+
deselect: function(indexes) {
|
1570
|
+
var sel = this.get('selection'),
|
1571
|
+
content = this.get('content'),
|
1572
|
+
del = this.get('selectionDelegate');
|
1573
|
+
|
1574
|
+
if(!this.get('isSelectable') || !this.get('isEnabled')) return this;
|
1575
|
+
if (!sel || sel.get('length')===0) return this; // nothing to do
|
1576
|
+
|
1577
|
+
// normalize
|
1578
|
+
if (SC.typeOf(indexes) === SC.T_NUMBER) {
|
1579
|
+
indexes = SC.IndexSet.create(indexes, 1);
|
1580
|
+
}
|
1581
|
+
|
1582
|
+
// give the delegate a chance to alter the items
|
1583
|
+
indexes = del.collectionViewShouldDeselectIndexes(this, indexes) ;
|
1584
|
+
if (!indexes || indexes.get('length')===0) return this; // nothing to do
|
1585
|
+
|
1586
|
+
// now merge change - note we expect sel && indexes to not be null
|
1587
|
+
sel = sel.copy().remove(content, indexes);
|
1588
|
+
sel = del.collectionViewSelectionForProposedSelection(this, sel);
|
1589
|
+
if (!sel) sel = SC.SelectionSet.create(); // empty
|
1590
|
+
|
1591
|
+
this.set('selection', sel.freeze()) ;
|
1592
|
+
return this ;
|
1593
|
+
},
|
1594
|
+
|
1595
|
+
/** @private
|
1596
|
+
Finds the next selectable item, up to content length, by asking the
|
1597
|
+
delegate. If a non-selectable item is found, the index is skipped. If
|
1598
|
+
no item is found, selection index is returned unmodified.
|
1599
|
+
|
1600
|
+
Return value will always be in the range of the bottom of the current
|
1601
|
+
selection index and the proposed index.
|
1602
|
+
|
1603
|
+
@param {Number} proposedIndex the desired index to select
|
1604
|
+
@param {Number} bottom optional bottom of selection use as fallback
|
1605
|
+
@returns {Number} next selectable index.
|
1606
|
+
*/
|
1607
|
+
_findNextSelectableItemFromIndex: function(proposedIndex, bottom) {
|
1608
|
+
var lim = this.get('length'),
|
1609
|
+
range = SC.IndexSet.create(),
|
1610
|
+
content = this.get('content'),
|
1611
|
+
del = this.get('selectionDelegate'),
|
1612
|
+
groupIndexes = this.get('_contentGroupIndexes'),
|
1613
|
+
ret, sel ;
|
1614
|
+
|
1615
|
+
// fast path
|
1616
|
+
if (!groupIndexes && (del.collectionViewShouldSelectIndexes === this.collectionViewShouldSelectIndexes)) {
|
1617
|
+
return proposedIndex;
|
1618
|
+
}
|
1619
|
+
|
1620
|
+
// loop forwards looking for an index that is allowed by delegate
|
1621
|
+
// we could alternatively just pass the whole range but this might be
|
1622
|
+
// slow for the delegate
|
1623
|
+
while (proposedIndex < lim) {
|
1624
|
+
if (!groupIndexes || !groupIndexes.contains(proposedIndex)) {
|
1625
|
+
range.add(proposedIndex);
|
1626
|
+
ret = del.collectionViewShouldSelectIndexes(this, range);
|
1627
|
+
if (ret && ret.get('length') >= 1) return proposedIndex ;
|
1628
|
+
range.remove(proposedIndex);
|
1629
|
+
}
|
1630
|
+
proposedIndex++;
|
1631
|
+
}
|
1632
|
+
|
1633
|
+
// if nothing was found, return top of selection
|
1634
|
+
if (bottom === undefined) {
|
1635
|
+
sel = this.get('selection');
|
1636
|
+
bottom = sel ? sel.get('max') : -1 ;
|
1637
|
+
}
|
1638
|
+
return bottom ;
|
1639
|
+
},
|
1640
|
+
|
1641
|
+
/** @private
|
1642
|
+
Finds the previous selectable item, up to the first item, by asking the
|
1643
|
+
delegate. If a non-selectable item is found, the index is skipped. If
|
1644
|
+
no item is found, selection index is returned unmodified.
|
1645
|
+
|
1646
|
+
@param {Integer} proposedIndex the desired index to select
|
1647
|
+
@returns {Integer} the previous selectable index. This will always be in the range of the top of the current selection index and the proposed index.
|
1648
|
+
*/
|
1649
|
+
_findPreviousSelectableItemFromIndex: function(proposedIndex, top) {
|
1650
|
+
var range = SC.IndexSet.create(),
|
1651
|
+
content = this.get('content'),
|
1652
|
+
del = this.get('selectionDelegate'),
|
1653
|
+
groupIndexes = this.get('_contentGroupIndexes'),
|
1654
|
+
ret ;
|
1655
|
+
|
1656
|
+
if (SC.none(proposedIndex)) proposedIndex = -1;
|
1657
|
+
|
1658
|
+
// fast path
|
1659
|
+
if (!groupIndexes && (del.collectionViewShouldSelectIndexes === this.collectionViewShouldSelectIndexes)) {
|
1660
|
+
return proposedIndex;
|
1661
|
+
}
|
1662
|
+
|
1663
|
+
// loop backwards looking for an index that is allowed by delegate
|
1664
|
+
// we could alternatively just pass the whole range but this might be
|
1665
|
+
// slow for the delegate
|
1666
|
+
while (proposedIndex >= 0) {
|
1667
|
+
if (!groupIndexes || !groupIndexes.contains(proposedIndex)) {
|
1668
|
+
range.add(proposedIndex);
|
1669
|
+
ret = del.collectionViewShouldSelectIndexes(this, range);
|
1670
|
+
if (ret && ret.get('length') >= 1) return proposedIndex ;
|
1671
|
+
range.remove(proposedIndex);
|
1672
|
+
}
|
1673
|
+
proposedIndex--;
|
1674
|
+
}
|
1675
|
+
|
1676
|
+
// if nothing was found, return top of selection
|
1677
|
+
if (top === undefined) {
|
1678
|
+
var sel = this.get('selection');
|
1679
|
+
top = sel ? sel.get('min') : -1 ;
|
1680
|
+
}
|
1681
|
+
if (SC.none(top)) top = -1;
|
1682
|
+
return top ;
|
1683
|
+
},
|
1684
|
+
|
1685
|
+
/**
|
1686
|
+
Select one or more items before the current selection, optionally
|
1687
|
+
extending the current selection. Also scrolls the selected item into
|
1688
|
+
view.
|
1689
|
+
|
1690
|
+
Selection does not wrap around.
|
1691
|
+
|
1692
|
+
@param {Boolean} [extend] If true, the selection will be extended
|
1693
|
+
instead of replaced. Defaults to false.
|
1694
|
+
@param {Integer} [numberOfItems] The number of previous to be
|
1695
|
+
selected. Defaults to 1
|
1696
|
+
@returns {SC.CollectionView} receiver
|
1697
|
+
*/
|
1698
|
+
selectPreviousItem: function(extend, numberOfItems) {
|
1699
|
+
if (SC.none(numberOfItems)) numberOfItems = 1;
|
1700
|
+
if (SC.none(extend)) extend = false;
|
1701
|
+
|
1702
|
+
var sel = this.get('selection'),
|
1703
|
+
content = this.get('content');
|
1704
|
+
if (sel) sel = sel.indexSetForSource(content);
|
1705
|
+
|
1706
|
+
var selTop = sel ? sel.get('min') : -1,
|
1707
|
+
selBottom = sel ? sel.get('max')-1 : -1,
|
1708
|
+
anchor = this._selectionAnchor;
|
1709
|
+
if (SC.none(anchor)) anchor = selTop;
|
1710
|
+
|
1711
|
+
// if extending, then we need to do some fun stuff to build the array
|
1712
|
+
if (extend) {
|
1713
|
+
|
1714
|
+
// If the selBottom is after the anchor, then reduce the selection
|
1715
|
+
if (selBottom > anchor) {
|
1716
|
+
selBottom = selBottom - numberOfItems ;
|
1717
|
+
|
1718
|
+
// otherwise, select the previous item from the top
|
1719
|
+
} else {
|
1720
|
+
selTop = this._findPreviousSelectableItemFromIndex(selTop - numberOfItems);
|
1721
|
+
}
|
1722
|
+
|
1723
|
+
// Ensure we are not out of bounds
|
1724
|
+
if (SC.none(selTop) || (selTop < 0)) selTop = 0 ;
|
1725
|
+
if (!content.objectAt(selTop)) selTop = sel ? sel.get('min') : -1;
|
1726
|
+
if (selBottom < selTop) selBottom = selTop ;
|
1727
|
+
|
1728
|
+
// if not extending, just select the item previous to the selTop
|
1729
|
+
} else {
|
1730
|
+
selTop = this._findPreviousSelectableItemFromIndex(selTop - numberOfItems);
|
1731
|
+
if (SC.none(selTop) || (selTop < 0)) selTop = 0 ;
|
1732
|
+
if (!content.objectAt(selTop)) selTop = sel ? sel.get('min') : -1;
|
1733
|
+
selBottom = selTop ;
|
1734
|
+
anchor = null ;
|
1735
|
+
}
|
1736
|
+
|
1737
|
+
var scrollToIndex = selTop ;
|
1738
|
+
|
1739
|
+
// now build new selection
|
1740
|
+
sel = SC.IndexSet.create(selTop, selBottom+1-selTop);
|
1741
|
+
|
1742
|
+
// ensure that the item is visible and set the selection
|
1743
|
+
this.scrollToContentIndex(scrollToIndex) ;
|
1744
|
+
this.select(sel) ;
|
1745
|
+
this._selectionAnchor = anchor ;
|
1746
|
+
return this ;
|
1747
|
+
},
|
1748
|
+
|
1749
|
+
/**
|
1750
|
+
Select one or more items following the current selection, optionally
|
1751
|
+
extending the current selection. Also scrolls to selected item.
|
1752
|
+
|
1753
|
+
Selection does not wrap around.
|
1754
|
+
|
1755
|
+
@param {Boolean} [extend] If true, the selection will be extended
|
1756
|
+
instead of replaced. Defaults to false.
|
1757
|
+
@param {Integer} [numberOfItems] The number of items to be
|
1758
|
+
selected. Defaults to 1.
|
1759
|
+
@returns {SC.CollectionView} receiver
|
1760
|
+
*/
|
1761
|
+
selectNextItem: function(extend, numberOfItems) {
|
1762
|
+
if (SC.none(numberOfItems)) numberOfItems = 1 ;
|
1763
|
+
if (SC.none(extend)) extend = false ;
|
1764
|
+
|
1765
|
+
var sel = this.get('selection'),
|
1766
|
+
content = this.get('content');
|
1767
|
+
if (sel) sel = sel.indexSetForSource(content);
|
1768
|
+
|
1769
|
+
var selTop = sel ? sel.get('min') : -1,
|
1770
|
+
selBottom = sel ? sel.get('max')-1 : -1,
|
1771
|
+
anchor = this._selectionAnchor,
|
1772
|
+
lim = this.get('length');
|
1773
|
+
|
1774
|
+
if (SC.none(anchor)) anchor = selTop;
|
1775
|
+
|
1776
|
+
// if extending, then we need to do some fun stuff to build the array
|
1777
|
+
if (extend) {
|
1778
|
+
|
1779
|
+
// If the selTop is before the anchor, then reduce the selection
|
1780
|
+
if (selTop < anchor) {
|
1781
|
+
selTop = selTop + numberOfItems ;
|
1782
|
+
|
1783
|
+
// otherwise, select the next item after the bottom
|
1784
|
+
} else {
|
1785
|
+
selBottom = this._findNextSelectableItemFromIndex(selBottom + numberOfItems, selBottom);
|
1786
|
+
}
|
1787
|
+
|
1788
|
+
// Ensure we are not out of bounds
|
1789
|
+
if (selBottom >= lim) selBottom = lim-1;
|
1790
|
+
|
1791
|
+
// we also need to check that the item exists
|
1792
|
+
if (!content.objectAt(selBottom)) selBottom = sel ? sel.get('max') - 1 : -1;
|
1793
|
+
|
1794
|
+
// and if top has eclipsed bottom, handle that too.
|
1795
|
+
if (selTop > selBottom) selTop = selBottom ;
|
1796
|
+
|
1797
|
+
// if not extending, just select the item next to the selBottom
|
1798
|
+
} else {
|
1799
|
+
selBottom = this._findNextSelectableItemFromIndex(selBottom + numberOfItems, selBottom);
|
1800
|
+
|
1801
|
+
if (selBottom >= lim) selBottom = lim-1;
|
1802
|
+
if (!content.objectAt(selBottom)) selBottom = sel ? sel.get('max') - 1 : -1;
|
1803
|
+
selTop = selBottom ;
|
1804
|
+
anchor = null ;
|
1805
|
+
}
|
1806
|
+
|
1807
|
+
var scrollToIndex = selBottom ;
|
1808
|
+
|
1809
|
+
// now build new selection
|
1810
|
+
sel = SC.IndexSet.create(selTop, selBottom-selTop+1);
|
1811
|
+
|
1812
|
+
// ensure that the item is visible and set the selection
|
1813
|
+
this.scrollToContentIndex(scrollToIndex) ;
|
1814
|
+
this.select(sel) ;
|
1815
|
+
this._selectionAnchor = anchor ;
|
1816
|
+
return this ;
|
1817
|
+
},
|
1818
|
+
|
1819
|
+
/**
|
1820
|
+
Deletes the selected content if canDeleteContent is YES. This will invoke
|
1821
|
+
delegate methods to provide fine-grained control. Returns YES if the
|
1822
|
+
deletion was possible, even if none actually occurred.
|
1823
|
+
|
1824
|
+
@returns {Boolean} YES if deletion is possible.
|
1825
|
+
*/
|
1826
|
+
deleteSelection: function() {
|
1827
|
+
// perform some basic checks...
|
1828
|
+
if (!this.get('canDeleteContent')) return NO;
|
1829
|
+
|
1830
|
+
var sel = this.get('selection'),
|
1831
|
+
content = this.get('content'),
|
1832
|
+
del = this.get('selectionDelegate'),
|
1833
|
+
indexes = sel&&content ? sel.indexSetForSource(content) : null;
|
1834
|
+
|
1835
|
+
if (!content || !indexes || indexes.get('length') === 0) return NO ;
|
1836
|
+
|
1837
|
+
// let the delegate decide what to actually delete. If this returns an
|
1838
|
+
// empty index set or null, just do nothing.
|
1839
|
+
indexes = del.collectionViewShouldDeleteIndexes(this, indexes);
|
1840
|
+
if (!indexes || indexes.get('length') === 0) return NO ;
|
1841
|
+
|
1842
|
+
// now have the delegate (or us) perform the deletion. The default
|
1843
|
+
// delegate implementation just uses standard SC.Array methods to do the
|
1844
|
+
// right thing.
|
1845
|
+
del.collectionViewDeleteContent(this, this.get('content'), indexes);
|
1846
|
+
|
1847
|
+
return YES ;
|
1848
|
+
},
|
1849
|
+
|
1850
|
+
// ..........................................................
|
1851
|
+
// SCROLLING
|
1852
|
+
//
|
1853
|
+
|
1854
|
+
/**
|
1855
|
+
Scroll the rootElement (if needed) to ensure that the item is visible.
|
1856
|
+
|
1857
|
+
@param {Number} contentIndex The index of the item to scroll to
|
1858
|
+
@returns {SC.CollectionView} receiver
|
1859
|
+
*/
|
1860
|
+
scrollToContentIndex: function(contentIndex) {
|
1861
|
+
var itemView = this.itemViewForContentIndex(contentIndex) ;
|
1862
|
+
if (itemView) this.scrollToItemView(itemView) ;
|
1863
|
+
return this;
|
1864
|
+
},
|
1865
|
+
|
1866
|
+
/**
|
1867
|
+
Scroll to the passed item view. If the item view is not visible on screen
|
1868
|
+
this method will not work.
|
1869
|
+
|
1870
|
+
@param {SC.View} view The item view to scroll to
|
1871
|
+
@returns {SC.CollectionView} receiver
|
1872
|
+
*/
|
1873
|
+
scrollToItemView: function(view) {
|
1874
|
+
if (view) view.scrollToVisible();
|
1875
|
+
return this ;
|
1876
|
+
},
|
1877
|
+
|
1878
|
+
// ..........................................................
|
1879
|
+
// KEYBOARD EVENTS
|
1880
|
+
//
|
1881
|
+
|
1882
|
+
/** @private */
|
1883
|
+
keyDown: function(evt) {
|
1884
|
+
var ret = this.interpretKeyEvents(evt) ;
|
1885
|
+
return !ret ? NO : ret ;
|
1886
|
+
},
|
1887
|
+
|
1888
|
+
/** @private */
|
1889
|
+
keyUp: function() { return true; },
|
1890
|
+
|
1891
|
+
/** @private
|
1892
|
+
Handle space key event. Do action
|
1893
|
+
*/
|
1894
|
+
insertText: function(chr, evt) {
|
1895
|
+
if (chr === ' ') {
|
1896
|
+
var sel = this.get('selection');
|
1897
|
+
if (sel && sel.get('length')>0) {
|
1898
|
+
this.invokeLater(this._cv_action, 0, null, evt);
|
1899
|
+
}
|
1900
|
+
return YES ;
|
1901
|
+
} else return NO ;
|
1902
|
+
},
|
1903
|
+
|
1904
|
+
/** @private
|
1905
|
+
Handle select all keyboard event.
|
1906
|
+
*/
|
1907
|
+
selectAll: function(evt) {
|
1908
|
+
var content = this.get('content'),
|
1909
|
+
sel = content ? SC.IndexSet.create(0, content.get('length')) : null;
|
1910
|
+
this.select(sel, NO) ;
|
1911
|
+
return YES ;
|
1912
|
+
},
|
1913
|
+
|
1914
|
+
/** @private
|
1915
|
+
Remove selection of any selected items.
|
1916
|
+
*/
|
1917
|
+
deselectAll: function() {
|
1918
|
+
var content = this.get('content'),
|
1919
|
+
sel = content ? SC.IndexSet.create(0, content.get('length')) : null;
|
1920
|
+
this.deselect(sel, NO) ;
|
1921
|
+
return YES ;
|
1922
|
+
},
|
1923
|
+
|
1924
|
+
/** @private
|
1925
|
+
Handle delete keyboard event.
|
1926
|
+
*/
|
1927
|
+
deleteBackward: function(evt) {
|
1928
|
+
return this.deleteSelection() ;
|
1929
|
+
},
|
1930
|
+
|
1931
|
+
/** @private
|
1932
|
+
Handle delete keyboard event.
|
1933
|
+
*/
|
1934
|
+
deleteForward: function(evt) {
|
1935
|
+
return this.deleteSelection() ;
|
1936
|
+
},
|
1937
|
+
|
1938
|
+
/** @private
|
1939
|
+
Selects the same item on the next row or moves down one if itemsPerRow = 1
|
1940
|
+
*/
|
1941
|
+
moveDown: function(sender, evt) {
|
1942
|
+
this.selectNextItem(false, this.get('itemsPerRow') || 1) ;
|
1943
|
+
this._cv_performSelectAction(null, evt, this.ACTION_DELAY);
|
1944
|
+
return true ;
|
1945
|
+
},
|
1946
|
+
|
1947
|
+
/** @private
|
1948
|
+
Selects the same item on the next row or moves up one if itemsPerRow = 1
|
1949
|
+
*/
|
1950
|
+
moveUp: function(sender, evt) {
|
1951
|
+
this.selectPreviousItem(false, this.get('itemsPerRow') || 1) ;
|
1952
|
+
this._cv_performSelectAction(null, evt, this.ACTION_DELAY);
|
1953
|
+
return true ;
|
1954
|
+
},
|
1955
|
+
|
1956
|
+
/** @private
|
1957
|
+
Selects the previous item if itemsPerRow > 1. Otherwise does nothing.
|
1958
|
+
If item is expandable, will collapse.
|
1959
|
+
*/
|
1960
|
+
moveLeft: function(evt) {
|
1961
|
+
// If the control key is down, this may be a browser shortcut and
|
1962
|
+
// we should not handle the arrow key.
|
1963
|
+
if (evt.ctrlKey || evt.metaKey) return NO;
|
1964
|
+
|
1965
|
+
if ((this.get('itemsPerRow') || 1) > 1) {
|
1966
|
+
this.selectPreviousItem(false, 1);
|
1967
|
+
this._cv_performSelectAction(null, evt, this.ACTION_DELAY);
|
1968
|
+
|
1969
|
+
} else {
|
1970
|
+
var sel = this.get('selection'),
|
1971
|
+
content = this.get('content'),
|
1972
|
+
indexes = sel ? sel.indexSetForSource(content) : null;
|
1973
|
+
|
1974
|
+
// Collapse the element if it is expanded. However, if there is exactly
|
1975
|
+
// one item selected and the item is already collapsed or is a leaf
|
1976
|
+
// node, then select the (expanded) parent element instead as a
|
1977
|
+
// convenience to the user.
|
1978
|
+
if ( indexes ) {
|
1979
|
+
var del = undefined, // We'll load it lazily
|
1980
|
+
selectParent = false,
|
1981
|
+
index = undefined;
|
1982
|
+
|
1983
|
+
if ( indexes.get('length') === 1 ) {
|
1984
|
+
index = indexes.get('firstObject');
|
1985
|
+
del = this.get('contentDelegate');
|
1986
|
+
var state = del.contentIndexDisclosureState(this, content, index);
|
1987
|
+
if (state !== SC.BRANCH_OPEN) selectParent = true;
|
1988
|
+
}
|
1989
|
+
|
1990
|
+
if ( selectParent ) {
|
1991
|
+
// TODO: PERFORMANCE: It would be great to have a function like
|
1992
|
+
// SC.CollectionView.selectParentItem() or something similar
|
1993
|
+
// for performance reasons. But since we don't currently
|
1994
|
+
// have such a function, let's just iterate through the
|
1995
|
+
// previous items until we find the first one with a outline
|
1996
|
+
// level of one less than the selected item.
|
1997
|
+
var desiredOutlineLevel = del.contentIndexOutlineLevel(this, content, index) - 1;
|
1998
|
+
if ( desiredOutlineLevel >= 0 ) {
|
1999
|
+
var parentIndex = -1;
|
2000
|
+
while ( parentIndex < 0 ) {
|
2001
|
+
var previousItemIndex = this._findPreviousSelectableItemFromIndex(index - 1);
|
2002
|
+
if (previousItemIndex < 0 ) return false; // Sanity-check.
|
2003
|
+
index = previousItemIndex;
|
2004
|
+
var outlineLevel = del.contentIndexOutlineLevel(this, content, index);
|
2005
|
+
if ( outlineLevel === desiredOutlineLevel ) {
|
2006
|
+
parentIndex = previousItemIndex;
|
2007
|
+
}
|
2008
|
+
}
|
2009
|
+
|
2010
|
+
// If we found the parent, select it now.
|
2011
|
+
if ( parentIndex !== -1 ) {
|
2012
|
+
this.select(index);
|
2013
|
+
}
|
2014
|
+
}
|
2015
|
+
}
|
2016
|
+
else {
|
2017
|
+
this.collapse(indexes);
|
2018
|
+
}
|
2019
|
+
}
|
2020
|
+
}
|
2021
|
+
|
2022
|
+
return true ;
|
2023
|
+
},
|
2024
|
+
|
2025
|
+
/** @private
|
2026
|
+
Selects the next item if itemsPerRow > 1. Otherwise does nothing.
|
2027
|
+
*/
|
2028
|
+
moveRight: function(evt) {
|
2029
|
+
// If the control key is down, this may be a browser shortcut and
|
2030
|
+
// we should not handle the arrow key.
|
2031
|
+
if (evt.ctrlKey || evt.metaKey) return NO;
|
2032
|
+
|
2033
|
+
if ((this.get('itemsPerRow') || 1) > 1) {
|
2034
|
+
this.selectNextItem(false, 1) ;
|
2035
|
+
this._cv_performSelectAction(null, evt, this.ACTION_DELAY);
|
2036
|
+
} else {
|
2037
|
+
var sel = this.get('selection'),
|
2038
|
+
content = this.get('content'),
|
2039
|
+
indexes = sel ? sel.indexSetForSource(content) : null;
|
2040
|
+
if (indexes) this.expand(indexes);
|
2041
|
+
}
|
2042
|
+
|
2043
|
+
return true ;
|
2044
|
+
},
|
2045
|
+
|
2046
|
+
/** @private */
|
2047
|
+
moveDownAndModifySelection: function(sender, evt) {
|
2048
|
+
this.selectNextItem(true, this.get('itemsPerRow') || 1) ;
|
2049
|
+
this._cv_performSelectAction(null, evt, this.ACTION_DELAY);
|
2050
|
+
return true ;
|
2051
|
+
},
|
2052
|
+
|
2053
|
+
/** @private */
|
2054
|
+
moveUpAndModifySelection: function(sender, evt) {
|
2055
|
+
this.selectPreviousItem(true, this.get('itemsPerRow') || 1) ;
|
2056
|
+
this._cv_performSelectAction(null, evt, this.ACTION_DELAY);
|
2057
|
+
return true ;
|
2058
|
+
},
|
2059
|
+
|
2060
|
+
/** @private
|
2061
|
+
Selects the previous item if itemsPerRow > 1. Otherwise does nothing.
|
2062
|
+
*/
|
2063
|
+
moveLeftAndModifySelection: function(sender, evt) {
|
2064
|
+
if ((this.get('itemsPerRow') || 1) > 1) {
|
2065
|
+
this.selectPreviousItem(true, 1) ;
|
2066
|
+
this._cv_performSelectAction(null, evt, this.ACTION_DELAY);
|
2067
|
+
}
|
2068
|
+
return true ;
|
2069
|
+
},
|
2070
|
+
|
2071
|
+
/** @private
|
2072
|
+
Selects the next item if itemsPerRow > 1. Otherwise does nothing.
|
2073
|
+
*/
|
2074
|
+
moveRightAndModifySelection: function(sender, evt) {
|
2075
|
+
if ((this.get('itemsPerRow') || 1) > 1) {
|
2076
|
+
this.selectNextItem(true, 1) ;
|
2077
|
+
this._cv_performSelectAction(null, evt, this.ACTION_DELAY);
|
2078
|
+
}
|
2079
|
+
return true ;
|
2080
|
+
},
|
2081
|
+
|
2082
|
+
/** @private
|
2083
|
+
if content value is editable and we have one item selected, then edit.
|
2084
|
+
otherwise, invoke action.
|
2085
|
+
*/
|
2086
|
+
insertNewline: function(sender, evt) {
|
2087
|
+
var canEdit = this.get('isEditable') && this.get('canEditContent'),
|
2088
|
+
sel, content, set, idx, itemView;
|
2089
|
+
|
2090
|
+
// first make sure we have a single item selected; get idx
|
2091
|
+
if (canEdit) {
|
2092
|
+
sel = this.get('selection') ;
|
2093
|
+
content = this.get('content');
|
2094
|
+
if (sel && sel.get('length') === 1) {
|
2095
|
+
set = sel.indexSetForSource(content);
|
2096
|
+
idx = set ? set.get('min') : -1;
|
2097
|
+
canEdit = idx>=0;
|
2098
|
+
}
|
2099
|
+
}
|
2100
|
+
|
2101
|
+
// next find itemView and ensure it supports editing
|
2102
|
+
if (canEdit) {
|
2103
|
+
itemView = this.itemViewForContentIndex(idx);
|
2104
|
+
canEdit = itemView && SC.typeOf(itemView.beginEditing)===SC.T_FUNCTION;
|
2105
|
+
}
|
2106
|
+
|
2107
|
+
// ok, we can edit..
|
2108
|
+
if (canEdit) {
|
2109
|
+
this.scrollToContentIndex(idx);
|
2110
|
+
itemView = this.itemViewForContentIndex(idx); // just in case
|
2111
|
+
itemView.beginEditing();
|
2112
|
+
|
2113
|
+
// invoke action
|
2114
|
+
} else {
|
2115
|
+
this.invokeLater(this._cv_action, 0, itemView, null) ;
|
2116
|
+
}
|
2117
|
+
|
2118
|
+
return YES ; // always handle
|
2119
|
+
},
|
2120
|
+
|
2121
|
+
// ..........................................................
|
2122
|
+
// MOUSE EVENTS
|
2123
|
+
//
|
2124
|
+
|
2125
|
+
/** @private
|
2126
|
+
Handles mouse down events on the collection view or on any of its
|
2127
|
+
children.
|
2128
|
+
|
2129
|
+
The default implementation of this method can handle a wide variety
|
2130
|
+
of user behaviors depending on how you have configured the various
|
2131
|
+
options for the collection view.
|
2132
|
+
|
2133
|
+
@param ev {Event} the mouse down event
|
2134
|
+
@returns {Boolean} Usually YES.
|
2135
|
+
*/
|
2136
|
+
mouseDown: function(ev) {
|
2137
|
+
var itemView = this.itemViewForEvent(ev),
|
2138
|
+
content = this.get('content'),
|
2139
|
+
contentIndex = itemView ? itemView.get('contentIndex') : -1,
|
2140
|
+
info, anchor, sel, isSelected, modifierKeyPressed, didSelect = NO,
|
2141
|
+
allowsMultipleSel = content.get('allowsMultipleSelection');
|
2142
|
+
|
2143
|
+
if (!this.get('isEnabled')) return contentIndex > -1;
|
2144
|
+
|
2145
|
+
info = this.mouseDownInfo = {
|
2146
|
+
event: ev,
|
2147
|
+
itemView: itemView,
|
2148
|
+
contentIndex: contentIndex,
|
2149
|
+
at: Date.now()
|
2150
|
+
};
|
2151
|
+
|
2152
|
+
// become first responder if possible.
|
2153
|
+
this.becomeFirstResponder() ;
|
2154
|
+
|
2155
|
+
// Toggle the selection if selectOnMouseDown is true
|
2156
|
+
if (this.get('useToggleSelection')) {
|
2157
|
+
if (this.get('selectOnMouseDown')) {
|
2158
|
+
if (!itemView) return ; // do nothing when clicked outside of elements
|
2159
|
+
|
2160
|
+
// determine if item is selected. If so, then go on.
|
2161
|
+
sel = this.get('selection') ;
|
2162
|
+
isSelected = sel && sel.containsObject(itemView.get('content')) ;
|
2163
|
+
|
2164
|
+
if (isSelected) {
|
2165
|
+
this.deselect(contentIndex);
|
2166
|
+
} else if (!allowsMultipleSel) {
|
2167
|
+
this.select(contentIndex, NO);
|
2168
|
+
didSelect = YES;
|
2169
|
+
} else {
|
2170
|
+
this.select(contentIndex, YES);
|
2171
|
+
didSelect = YES;
|
2172
|
+
}
|
2173
|
+
|
2174
|
+
if (didSelect && this.get('actOnSelect')) {
|
2175
|
+
// handle actions on editing
|
2176
|
+
this._cv_performSelectAction(itemView, ev);
|
2177
|
+
}
|
2178
|
+
}
|
2179
|
+
|
2180
|
+
return YES;
|
2181
|
+
}
|
2182
|
+
|
2183
|
+
// recieved a mouseDown on the collection element, but not on one of the
|
2184
|
+
// childItems... unless we do not allow empty selections, set it to empty.
|
2185
|
+
if (!itemView) {
|
2186
|
+
if (this.get('allowDeselectAll')) this.select(null, false);
|
2187
|
+
return YES ;
|
2188
|
+
}
|
2189
|
+
|
2190
|
+
// collection some basic setup info
|
2191
|
+
sel = this.get('selection');
|
2192
|
+
if (sel) sel = sel.indexSetForSource(content);
|
2193
|
+
|
2194
|
+
isSelected = sel ? sel.contains(contentIndex) : NO;
|
2195
|
+
info.modifierKeyPressed = modifierKeyPressed = ev.ctrlKey || ev.metaKey ;
|
2196
|
+
|
2197
|
+
|
2198
|
+
// holding down a modifier key while clicking a selected item should
|
2199
|
+
// deselect that item...deselect and bail.
|
2200
|
+
if (modifierKeyPressed && isSelected) {
|
2201
|
+
info.shouldDeselect = contentIndex >= 0;
|
2202
|
+
|
2203
|
+
// if the shiftKey was pressed, then we want to extend the selection
|
2204
|
+
// from the last selected item
|
2205
|
+
} else if (ev.shiftKey && sel && sel.get('length') > 0 && allowsMultipleSel) {
|
2206
|
+
sel = this._findSelectionExtendedByShift(sel, contentIndex);
|
2207
|
+
anchor = this._selectionAnchor ;
|
2208
|
+
this.select(sel) ;
|
2209
|
+
this._selectionAnchor = anchor; //save the anchor
|
2210
|
+
|
2211
|
+
// If no modifier key was pressed, then clicking on the selected item
|
2212
|
+
// should clear the selection and reselect only the clicked on item.
|
2213
|
+
} else if (!modifierKeyPressed && isSelected) {
|
2214
|
+
info.shouldReselect = contentIndex >= 0;
|
2215
|
+
|
2216
|
+
// Otherwise, if selecting on mouse down, simply select the clicked on
|
2217
|
+
// item, adding it to the current selection if a modifier key was pressed.
|
2218
|
+
} else {
|
2219
|
+
|
2220
|
+
if((ev.shiftKey || modifierKeyPressed) && !allowsMultipleSel){
|
2221
|
+
this.select(null, false);
|
2222
|
+
}
|
2223
|
+
|
2224
|
+
if (this.get("selectOnMouseDown")) {
|
2225
|
+
this.select(contentIndex, modifierKeyPressed);
|
2226
|
+
} else {
|
2227
|
+
info.shouldSelect = contentIndex >= 0 ;
|
2228
|
+
}
|
2229
|
+
}
|
2230
|
+
|
2231
|
+
// saved for extend by shift ops.
|
2232
|
+
info.previousContentIndex = contentIndex;
|
2233
|
+
|
2234
|
+
return YES;
|
2235
|
+
},
|
2236
|
+
|
2237
|
+
/** @private */
|
2238
|
+
mouseUp: function(ev) {
|
2239
|
+
var view = this.itemViewForEvent(ev),
|
2240
|
+
info = this.mouseDownInfo,
|
2241
|
+
content = this.get('content'),
|
2242
|
+
contentIndex = view ? view.get('contentIndex') : -1,
|
2243
|
+
sel, isSelected, canEdit, itemView, idx,
|
2244
|
+
allowsMultipleSel = content.get('allowsMultipleSelection');
|
2245
|
+
|
2246
|
+
if (!this.get('isEnabled')) return contentIndex > -1;
|
2247
|
+
|
2248
|
+
if (this.get('useToggleSelection')) {
|
2249
|
+
// Return if clicked outside of elements or if toggle was handled by mouseDown
|
2250
|
+
if (!view || this.get('selectOnMouseDown')) return NO;
|
2251
|
+
|
2252
|
+
// determine if item is selected. If so, then go on.
|
2253
|
+
sel = this.get('selection') ;
|
2254
|
+
isSelected = sel && sel.containsObject(view.get('content')) ;
|
2255
|
+
|
2256
|
+
if (isSelected) {
|
2257
|
+
this.deselect(contentIndex) ;
|
2258
|
+
} else if (!allowsMultipleSel) {
|
2259
|
+
this.select(contentIndex, NO) ;
|
2260
|
+
} else {
|
2261
|
+
this.select(contentIndex, YES) ;
|
2262
|
+
}
|
2263
|
+
|
2264
|
+
} else if(info) {
|
2265
|
+
idx = info.contentIndex;
|
2266
|
+
contentIndex = (view) ? view.get('contentIndex') : -1 ;
|
2267
|
+
|
2268
|
+
// this will be set if the user simply clicked on an unselected item and
|
2269
|
+
// selectOnMouseDown was NO.
|
2270
|
+
if (info.shouldSelect) this.select(idx, info.modifierKeyPressed);
|
2271
|
+
|
2272
|
+
// This is true if the user clicked on a selected item with a modifier
|
2273
|
+
// key pressed.
|
2274
|
+
if (info.shouldDeselect) this.deselect(idx);
|
2275
|
+
|
2276
|
+
// This is true if the user clicked on a selected item without a
|
2277
|
+
// modifier-key pressed. When this happens we try to begin editing
|
2278
|
+
// on the content. If that is not allowed, then simply clear the
|
2279
|
+
// selection and reselect the clicked on item.
|
2280
|
+
if (info.shouldReselect) {
|
2281
|
+
|
2282
|
+
// - contentValueIsEditable is true
|
2283
|
+
canEdit = this.get('isEditable') && this.get('canEditContent') ;
|
2284
|
+
|
2285
|
+
// - the user clicked on an item that was already selected
|
2286
|
+
// ^ this is the only way shouldReset is set to YES
|
2287
|
+
|
2288
|
+
// - is the only item selected
|
2289
|
+
if (canEdit) {
|
2290
|
+
sel = this.get('selection') ;
|
2291
|
+
canEdit = sel && (sel.get('length') === 1);
|
2292
|
+
}
|
2293
|
+
|
2294
|
+
// - the item view responds to contentHitTest() and returns YES.
|
2295
|
+
// - the item view responds to beginEditing and returns YES.
|
2296
|
+
if (canEdit) {
|
2297
|
+
itemView = this.itemViewForContentIndex(idx) ;
|
2298
|
+
canEdit = itemView && (!itemView.contentHitTest || itemView.contentHitTest(ev)) ;
|
2299
|
+
canEdit = (canEdit && itemView.beginEditing) ? itemView.beginEditing() : NO ;
|
2300
|
+
}
|
2301
|
+
|
2302
|
+
// if cannot edit, schedule a reselect (but give doubleClick a chance)
|
2303
|
+
if (!canEdit) {
|
2304
|
+
if (this._cv_reselectTimer) this._cv_reselectTimer.invalidate() ;
|
2305
|
+
this._cv_reselectTimer = this.invokeLater(this.select, 300, idx, false) ;
|
2306
|
+
}
|
2307
|
+
}
|
2308
|
+
|
2309
|
+
this._cleanupMouseDown() ;
|
2310
|
+
}
|
2311
|
+
|
2312
|
+
// handle actions on editing
|
2313
|
+
this._cv_performSelectAction(view, ev, 0, ev.clickCount);
|
2314
|
+
|
2315
|
+
return NO; // bubble event to allow didDoubleClick to be called...
|
2316
|
+
},
|
2317
|
+
|
2318
|
+
/** @private */
|
2319
|
+
_cleanupMouseDown: function() {
|
2320
|
+
|
2321
|
+
// delete items explicitly to avoid leaks on IE
|
2322
|
+
var info = this.mouseDownInfo, key;
|
2323
|
+
if (info) {
|
2324
|
+
for(key in info) {
|
2325
|
+
if (!info.hasOwnProperty(key)) continue;
|
2326
|
+
delete info[key];
|
2327
|
+
}
|
2328
|
+
}
|
2329
|
+
this.mouseDownInfo = null;
|
2330
|
+
},
|
2331
|
+
|
2332
|
+
/** @private */
|
2333
|
+
mouseMoved: function(ev) {
|
2334
|
+
var view = this.itemViewForEvent(ev),
|
2335
|
+
last = this._lastHoveredItem ;
|
2336
|
+
|
2337
|
+
// handle hover events.
|
2338
|
+
if (view !== last) {
|
2339
|
+
if (last && last.mouseExited) last.mouseExited(ev);
|
2340
|
+
if (view && view.mouseEntered) view.mouseEntered(ev);
|
2341
|
+
}
|
2342
|
+
this._lastHoveredItem = view ;
|
2343
|
+
|
2344
|
+
if (view && view.mouseMoved) view.mouseMoved(ev);
|
2345
|
+
return YES;
|
2346
|
+
},
|
2347
|
+
|
2348
|
+
/** @private */
|
2349
|
+
mouseExited: function(ev) {
|
2350
|
+
var view = this._lastHoveredItem ;
|
2351
|
+
this._lastHoveredItem = null ;
|
2352
|
+
if (view && view.mouseExited) view.mouseExited(ev) ;
|
2353
|
+
return YES ;
|
2354
|
+
},
|
2355
|
+
|
2356
|
+
// ..........................................................
|
2357
|
+
// TOUCH EVENTS
|
2358
|
+
//
|
2359
|
+
|
2360
|
+
/** @private */
|
2361
|
+
touchStart: function(touch, evt) {
|
2362
|
+
var itemView = this.itemViewForEvent(touch),
|
2363
|
+
contentIndex = itemView ? itemView.get('contentIndex') : -1;
|
2364
|
+
|
2365
|
+
if (!this.get('isEnabled')) return contentIndex > -1;
|
2366
|
+
|
2367
|
+
// become first responder if possible.
|
2368
|
+
this.becomeFirstResponder() ;
|
2369
|
+
|
2370
|
+
if (!this.get('useToggleSelection')) {
|
2371
|
+
// We're faking the selection visually here
|
2372
|
+
// Only track this if we added a selection so we can remove it later
|
2373
|
+
if (itemView && !itemView.get('isSelected')) {
|
2374
|
+
itemView.set('isSelected', YES);
|
2375
|
+
this._touchSelectedView = itemView;
|
2376
|
+
} else {
|
2377
|
+
this._touchSelectedView = null;
|
2378
|
+
}
|
2379
|
+
}
|
2380
|
+
|
2381
|
+
return YES;
|
2382
|
+
},
|
2383
|
+
|
2384
|
+
/** @private */
|
2385
|
+
touchesDragged: function(evt, touches) {
|
2386
|
+
touches.forEach(function(touch){
|
2387
|
+
if (
|
2388
|
+
Math.abs(touch.pageX - touch.startX) > 5 ||
|
2389
|
+
Math.abs(touch.pageY - touch.startY) > 5
|
2390
|
+
) {
|
2391
|
+
// This calls touchCancelled
|
2392
|
+
touch.makeTouchResponder(touch.nextTouchResponder);
|
2393
|
+
}
|
2394
|
+
}, this);
|
2395
|
+
|
2396
|
+
},
|
2397
|
+
|
2398
|
+
/** @private */
|
2399
|
+
touchEnd: function(touch) {
|
2400
|
+
/*
|
2401
|
+
TODO [CC] We should be using itemViewForEvent here, but because
|
2402
|
+
ListItemView re-renders itself once isSelected is called
|
2403
|
+
in touchStart, the elements attached to this event are
|
2404
|
+
getting orphaned and this event is basically a complete
|
2405
|
+
fail when using touch events.
|
2406
|
+
*/
|
2407
|
+
// var itemView = this.itemViewForEvent(touch),
|
2408
|
+
var itemView = this._touchSelectedView,
|
2409
|
+
contentIndex = itemView ? itemView.get('contentIndex') : -1,
|
2410
|
+
isSelected = NO, sel;
|
2411
|
+
|
2412
|
+
if (!this.get('isEnabled')) return contentIndex > -1;
|
2413
|
+
|
2414
|
+
// Remove fake selection in case our contentIndex is -1, a select event will add it back
|
2415
|
+
if (itemView) { itemView.set('isSelected', NO); }
|
2416
|
+
|
2417
|
+
if (contentIndex > -1) {
|
2418
|
+
if (this.get('useToggleSelection')) {
|
2419
|
+
sel = this.get('selection');
|
2420
|
+
isSelected = sel && sel.containsObject(itemView.get('content'));
|
2421
|
+
}
|
2422
|
+
|
2423
|
+
if (isSelected) {
|
2424
|
+
this.deselect(contentIndex);
|
2425
|
+
} else {
|
2426
|
+
this.select(contentIndex, NO);
|
2427
|
+
|
2428
|
+
// If actOnSelect is implemented, the action will be fired.
|
2429
|
+
this._cv_performSelectAction(itemView, touch, 0);
|
2430
|
+
}
|
2431
|
+
}
|
2432
|
+
|
2433
|
+
this._touchSelectedView = null;
|
2434
|
+
},
|
2435
|
+
|
2436
|
+
/** @private */
|
2437
|
+
touchCancelled: function(evt) {
|
2438
|
+
// Remove fake selection
|
2439
|
+
if (this._touchSelectedView) {
|
2440
|
+
this._touchSelectedView.set('isSelected', NO);
|
2441
|
+
this._touchSelectedView = null;
|
2442
|
+
}
|
2443
|
+
},
|
2444
|
+
|
2445
|
+
/** @private */
|
2446
|
+
_findSelectionExtendedByShift: function(sel, contentIndex) {
|
2447
|
+
|
2448
|
+
// fast path. if we don't have a selection, just select index
|
2449
|
+
if (!sel || sel.get('length')===0) {
|
2450
|
+
return SC.IndexSet.create(contentIndex);
|
2451
|
+
}
|
2452
|
+
|
2453
|
+
// if we do have a selection, then figure out how to extend it.
|
2454
|
+
var content = this.get('content'),
|
2455
|
+
lim = content.get('length')-1,
|
2456
|
+
min = sel.get('min'),
|
2457
|
+
max = sel.get('max')-1,
|
2458
|
+
info = this.mouseDownInfo,
|
2459
|
+
anchor = this._selectionAnchor ;
|
2460
|
+
if (SC.none(anchor)) anchor = -1;
|
2461
|
+
|
2462
|
+
// clicked before the current selection set... extend it's beginning...
|
2463
|
+
if (contentIndex < min) {
|
2464
|
+
min = contentIndex;
|
2465
|
+
if (anchor<0) this._selectionAnchor = anchor = max; //anchor at end
|
2466
|
+
|
2467
|
+
// clicked after the current selection set... extend it's ending...
|
2468
|
+
} else if (contentIndex > max) {
|
2469
|
+
max = contentIndex;
|
2470
|
+
if (anchor<0) this._selectionAnchor = anchor = min; // anchor at start
|
2471
|
+
|
2472
|
+
// clicked inside the selection set... need to determine where the last
|
2473
|
+
// selection was and use that as an anchor.
|
2474
|
+
} else if (contentIndex >= min && contentIndex <= max) {
|
2475
|
+
if (anchor<0) this._selectionAnchor = anchor = min; //anchor at start
|
2476
|
+
|
2477
|
+
if (contentIndex === anchor) min = max = contentIndex ;
|
2478
|
+
else if (contentIndex > anchor) {
|
2479
|
+
min = anchor;
|
2480
|
+
max = contentIndex ;
|
2481
|
+
} else if (contentIndex < anchor) {
|
2482
|
+
min = contentIndex;
|
2483
|
+
max = anchor ;
|
2484
|
+
}
|
2485
|
+
}
|
2486
|
+
|
2487
|
+
return SC.IndexSet.create(min, max - min + 1);
|
2488
|
+
},
|
2489
|
+
|
2490
|
+
// ......................................
|
2491
|
+
// DRAG AND DROP SUPPORT
|
2492
|
+
//
|
2493
|
+
|
2494
|
+
/**
|
2495
|
+
When reordering its content, the collection view will store its reorder
|
2496
|
+
data using this special data type. The data type is unique to each
|
2497
|
+
collection view instance. You can use this data type to detect reorders
|
2498
|
+
if necessary.
|
2499
|
+
|
2500
|
+
@field
|
2501
|
+
@type String
|
2502
|
+
*/
|
2503
|
+
reorderDataType: function() {
|
2504
|
+
return 'SC.CollectionView.Reorder.'+SC.guidFor(this) ;
|
2505
|
+
}.property().cacheable(),
|
2506
|
+
|
2507
|
+
/**
|
2508
|
+
This property is set to the IndexSet of content objects that are the
|
2509
|
+
subject of a drag whenever a drag is initiated on the collection view.
|
2510
|
+
You can consult this property when implementing your collection view
|
2511
|
+
delegate methods, but otherwise you should not use this property in your
|
2512
|
+
code.
|
2513
|
+
|
2514
|
+
@type SC.IndexSet
|
2515
|
+
@default null
|
2516
|
+
*/
|
2517
|
+
dragContent: null,
|
2518
|
+
|
2519
|
+
/**
|
2520
|
+
This property is set to the proposed insertion index during a call to
|
2521
|
+
collectionViewValidateDragOperation(). Your delegate implementations can
|
2522
|
+
change the value of this property to enforce a drop some in some other
|
2523
|
+
location.
|
2524
|
+
|
2525
|
+
@type Number
|
2526
|
+
@default null
|
2527
|
+
*/
|
2528
|
+
proposedInsertionIndex: null,
|
2529
|
+
|
2530
|
+
/**
|
2531
|
+
This property is set to the proposed drop operation during a call to
|
2532
|
+
collectionViewValidateDragOperation(). Your delegate implementations can
|
2533
|
+
change the value of this property to enforce a different type of drop
|
2534
|
+
operation.
|
2535
|
+
|
2536
|
+
@type Number
|
2537
|
+
@default null
|
2538
|
+
*/
|
2539
|
+
proposedDropOperation: null,
|
2540
|
+
|
2541
|
+
/** @private
|
2542
|
+
mouseDragged event handler. Initiates a drag if the following conditions
|
2543
|
+
are met:
|
2544
|
+
|
2545
|
+
- collectionViewShouldBeginDrag() returns YES *OR*
|
2546
|
+
- the above method is not implemented and canReorderContent is true.
|
2547
|
+
- the dragDataTypes property returns a non-empty array
|
2548
|
+
- a mouse down event was saved by the mouseDown method.
|
2549
|
+
*/
|
2550
|
+
mouseDragged: function(ev) {
|
2551
|
+
var del = this.get('selectionDelegate'),
|
2552
|
+
content = this.get('content'),
|
2553
|
+
sel = this.get('selection'),
|
2554
|
+
info = this.mouseDownInfo,
|
2555
|
+
groupIndexes = this.get('_contentGroupIndexes'),
|
2556
|
+
dragContent, dragDataTypes, dragView;
|
2557
|
+
|
2558
|
+
// if the mouse down event was cleared, there is nothing to do; return.
|
2559
|
+
if (!info || info.contentIndex<0) return YES ;
|
2560
|
+
|
2561
|
+
// Don't do anything unless the user has been dragging for 123msec
|
2562
|
+
if ((Date.now() - info.at) < 123) return YES ;
|
2563
|
+
|
2564
|
+
// OK, they must be serious, decide if a drag will be allowed.
|
2565
|
+
if (del.collectionViewShouldBeginDrag(this)) {
|
2566
|
+
|
2567
|
+
// First, get the selection to drag. Drag an array of selected
|
2568
|
+
// items appearing in this collection, in the order of the
|
2569
|
+
// collection.
|
2570
|
+
//
|
2571
|
+
// Compute the dragContent - the indexes we will be dragging.
|
2572
|
+
// if we don't select on mouse down, then the selection has not been
|
2573
|
+
// updated to whatever the user clicked. Instead use
|
2574
|
+
// mouse down content.
|
2575
|
+
if (!this.get("selectOnMouseDown")) {
|
2576
|
+
dragContent = SC.IndexSet.create(info.contentIndex);
|
2577
|
+
} else dragContent = sel ? sel.indexSetForSource(content) : null;
|
2578
|
+
|
2579
|
+
// remove any group indexes. groups cannot be dragged.
|
2580
|
+
if (dragContent && groupIndexes && groupIndexes.get('length')>0) {
|
2581
|
+
dragContent = dragContent.copy().remove(groupIndexes);
|
2582
|
+
if (dragContent.get('length')===0) dragContent = null;
|
2583
|
+
else dragContent.freeze();
|
2584
|
+
}
|
2585
|
+
|
2586
|
+
if (!dragContent) return YES; // nothing to drag
|
2587
|
+
else dragContent = dragContent.frozenCopy(); // so it doesn't change
|
2588
|
+
|
2589
|
+
dragContent = { content: content, indexes: dragContent };
|
2590
|
+
this.set('dragContent', dragContent) ;
|
2591
|
+
|
2592
|
+
// Get the set of data types supported by the delegate. If this returns
|
2593
|
+
// a null or empty array and reordering content is not also supported
|
2594
|
+
// then do not start the drag.
|
2595
|
+
dragDataTypes = this.get('dragDataTypes');
|
2596
|
+
if (dragDataTypes && dragDataTypes.get('length') > 0) {
|
2597
|
+
|
2598
|
+
// Build the drag view to use for the ghost drag. This
|
2599
|
+
// should essentially contain any visible drag items.
|
2600
|
+
dragView = del.collectionViewDragViewFor(this, dragContent.indexes);
|
2601
|
+
if (!dragView) dragView = this._cv_dragViewFor(dragContent.indexes);
|
2602
|
+
|
2603
|
+
// Make sure the dragView has created its layer.
|
2604
|
+
dragView.createLayer();
|
2605
|
+
|
2606
|
+
// Initiate the drag
|
2607
|
+
SC.Drag.start({
|
2608
|
+
event: info.event,
|
2609
|
+
source: this,
|
2610
|
+
dragView: dragView,
|
2611
|
+
ghost: NO,
|
2612
|
+
ghostActsLikeCursor: del.ghostActsLikeCursor,
|
2613
|
+
slideBack: YES,
|
2614
|
+
dataSource: this
|
2615
|
+
});
|
2616
|
+
|
2617
|
+
// Also use this opportunity to clean up since mouseUp won't
|
2618
|
+
// get called.
|
2619
|
+
this._cleanupMouseDown() ;
|
2620
|
+
this._lastInsertionIndex = null ;
|
2621
|
+
|
2622
|
+
// Drag was not allowed by the delegate, so bail.
|
2623
|
+
} else this.set('dragContent', null) ;
|
2624
|
+
|
2625
|
+
return YES ;
|
2626
|
+
}
|
2627
|
+
},
|
2628
|
+
|
2629
|
+
/** @private
|
2630
|
+
Compute a default drag view by grabbing the raw layers and inserting them
|
2631
|
+
into a drag view.
|
2632
|
+
*/
|
2633
|
+
_cv_dragViewFor: function(dragContent) {
|
2634
|
+
// find only the indexes that are in both dragContent and nowShowing.
|
2635
|
+
var indexes = this.get('nowShowing').without(dragContent),
|
2636
|
+
dragLayer = this.get('layer').cloneNode(false),
|
2637
|
+
view = SC.View.create({ layer: dragLayer, parentView: this }),
|
2638
|
+
height=0, layout;
|
2639
|
+
|
2640
|
+
indexes = this.get('nowShowing').without(indexes);
|
2641
|
+
|
2642
|
+
// cleanup weird stuff that might make the drag look out of place
|
2643
|
+
SC.$(dragLayer).css('backgroundColor', 'transparent')
|
2644
|
+
.css('border', 'none')
|
2645
|
+
.css('top', 0).css('left', 0);
|
2646
|
+
|
2647
|
+
indexes.forEach(function(i) {
|
2648
|
+
var itemView = this.itemViewForContentIndex(i),
|
2649
|
+
isSelected, layer;
|
2650
|
+
|
2651
|
+
// render item view without isSelected state.
|
2652
|
+
if (itemView) {
|
2653
|
+
isSelected = itemView.get('isSelected');
|
2654
|
+
itemView.set('isSelected', NO);
|
2655
|
+
|
2656
|
+
itemView.updateLayerIfNeeded();
|
2657
|
+
layer = itemView.get('layer');
|
2658
|
+
if (layer) layer = layer.cloneNode(true);
|
2659
|
+
|
2660
|
+
itemView.set('isSelected', isSelected);
|
2661
|
+
itemView.updateLayerIfNeeded();
|
2662
|
+
}
|
2663
|
+
|
2664
|
+
if (layer) {
|
2665
|
+
dragLayer.appendChild(layer);
|
2666
|
+
layout = itemView.get('layout');
|
2667
|
+
if(layout.height+layout.top>height){
|
2668
|
+
height = layout.height+layout.top;
|
2669
|
+
}
|
2670
|
+
}
|
2671
|
+
layer = null;
|
2672
|
+
|
2673
|
+
}, this);
|
2674
|
+
// we don't want to show the scrollbars, resize the dragview'
|
2675
|
+
view.set('layout', {height:height});
|
2676
|
+
|
2677
|
+
dragLayer = null;
|
2678
|
+
return view ;
|
2679
|
+
},
|
2680
|
+
|
2681
|
+
|
2682
|
+
/**
|
2683
|
+
Implements the drag data source protocol for the collection view. This
|
2684
|
+
property will consult the collection view delegate if one is provided. It
|
2685
|
+
will also do the right thing if you have set canReorderContent to YES.
|
2686
|
+
|
2687
|
+
@field
|
2688
|
+
@type Array
|
2689
|
+
*/
|
2690
|
+
dragDataTypes: function() {
|
2691
|
+
// consult delegate.
|
2692
|
+
var del = this.get('selectionDelegate'),
|
2693
|
+
ret = del.collectionViewDragDataTypes(this),
|
2694
|
+
key ;
|
2695
|
+
|
2696
|
+
if (this.get('canReorderContent')) {
|
2697
|
+
ret = ret ? ret.copy() : [];
|
2698
|
+
key = this.get('reorderDataType');
|
2699
|
+
if (ret.indexOf(key) < 0) ret.push(key);
|
2700
|
+
}
|
2701
|
+
|
2702
|
+
return ret ? ret : [];
|
2703
|
+
}.property(),
|
2704
|
+
|
2705
|
+
/**
|
2706
|
+
Implements the drag data source protocol method. The implementation of
|
2707
|
+
this method will consult the collection view delegate if one has been
|
2708
|
+
provided. It also respects the canReoderContent method.
|
2709
|
+
*/
|
2710
|
+
dragDataForType: function(drag, dataType) {
|
2711
|
+
|
2712
|
+
// if this is a reorder, then return drag content.
|
2713
|
+
if (this.get('canReorderContent')) {
|
2714
|
+
if (dataType === this.get('reorderDataType')) {
|
2715
|
+
return this.get('dragContent') ;
|
2716
|
+
}
|
2717
|
+
}
|
2718
|
+
|
2719
|
+
// otherwise, just pass along to the delegate
|
2720
|
+
var del = this.get('selectionDelegate');
|
2721
|
+
return del.collectionViewDragDataForType(this, drag, dataType);
|
2722
|
+
},
|
2723
|
+
|
2724
|
+
/**
|
2725
|
+
Implements the SC.DropTarget interface. The default implementation will
|
2726
|
+
consult the collection view delegate, if you implement those methods.
|
2727
|
+
|
2728
|
+
This method is called once when the drag enters the view area. It's
|
2729
|
+
return value will be stored on the drag object as allowedDragOperations,
|
2730
|
+
possibly further constrained by the drag source.
|
2731
|
+
|
2732
|
+
@param {SC.Drag} drag the drag object
|
2733
|
+
@param {SC.Event} evt the event triggering this change, if available
|
2734
|
+
@returns {Number} logical OR'd mask of allowed drag operations.
|
2735
|
+
*/
|
2736
|
+
computeDragOperations: function(drag, evt) {
|
2737
|
+
// the proposed drag operation is DRAG_REORDER only if we can reorder
|
2738
|
+
// content and the drag contains reorder content.
|
2739
|
+
var op = SC.DRAG_NONE,
|
2740
|
+
del = this.get('selectionDelegate');
|
2741
|
+
|
2742
|
+
if (this.get('canReorderContent')) {
|
2743
|
+
if (drag.get('dataTypes').indexOf(this.get('reorderDataType')) >= 0) {
|
2744
|
+
op = SC.DRAG_REORDER ;
|
2745
|
+
}
|
2746
|
+
}
|
2747
|
+
|
2748
|
+
// Now pass this onto the delegate.
|
2749
|
+
op = del.collectionViewComputeDragOperations(this, drag, op);
|
2750
|
+
if (op & SC.DRAG_REORDER) op = SC.DRAG_MOVE ;
|
2751
|
+
|
2752
|
+
return op ;
|
2753
|
+
},
|
2754
|
+
|
2755
|
+
/** @private
|
2756
|
+
Determines the allowed drop operation insertion point, operation type,
|
2757
|
+
and the drag operation to be performed. Used by dragUpdated() and
|
2758
|
+
performDragOperation().
|
2759
|
+
|
2760
|
+
@param {SC.Drag} drag the drag object
|
2761
|
+
@param {SC.Event} evt source of this request, if available
|
2762
|
+
@param {Number} dragOp allowed drag operation mask
|
2763
|
+
Returns three params: [drop index, drop operation, allowed drag ops]
|
2764
|
+
*/
|
2765
|
+
_computeDropOperationState: function(drag, evt, dragOp) {
|
2766
|
+
// get the insertion index for this location. This can be computed
|
2767
|
+
// by a subclass using whatever method. This method is not expected to
|
2768
|
+
// do any data valdidation, just to map the location to an insertion
|
2769
|
+
// index.
|
2770
|
+
var loc = this.convertFrameFromView(drag.get('location'), null),
|
2771
|
+
dropOp = SC.DROP_BEFORE,
|
2772
|
+
del = this.get('selectionDelegate'),
|
2773
|
+
canReorder = this.get('canReorderContent'),
|
2774
|
+
objects, content, isPreviousInDrag, isNextInDrag, len, tmp;
|
2775
|
+
|
2776
|
+
// STEP 1: Try with a DROP_ON option -- send straight to delegate if
|
2777
|
+
// supported by view.
|
2778
|
+
|
2779
|
+
// get the computed insertion index and possibly drop operation.
|
2780
|
+
// prefer to drop ON.
|
2781
|
+
var idx = this.insertionIndexForLocation(loc, SC.DROP_ON) ;
|
2782
|
+
if (SC.typeOf(idx) === SC.T_ARRAY) {
|
2783
|
+
dropOp = idx[1] ; // order matters here
|
2784
|
+
idx = idx[0] ;
|
2785
|
+
}
|
2786
|
+
|
2787
|
+
// if the return drop operation is DROP_ON, then just check it with the
|
2788
|
+
// delegate method. If the delegate method does not support dropping on,
|
2789
|
+
// then it will return DRAG_NONE, in which case we will try again with
|
2790
|
+
// drop before.
|
2791
|
+
if (dropOp === SC.DROP_ON) {
|
2792
|
+
|
2793
|
+
// Now save the insertion index and the dropOp. This may be changed by
|
2794
|
+
// the collection delegate.
|
2795
|
+
this.set('proposedInsertionIndex', idx) ;
|
2796
|
+
this.set('proposedDropOperation', dropOp) ;
|
2797
|
+
tmp = del.collectionViewValidateDragOperation(this, drag, dragOp, idx, dropOp) ;
|
2798
|
+
idx = this.get('proposedInsertionIndex') ;
|
2799
|
+
dropOp = this.get('proposedDropOperation') ;
|
2800
|
+
this._dropInsertionIndex = this._dropOperation = null ;
|
2801
|
+
|
2802
|
+
// The delegate is OK with a drop on also, so just return.
|
2803
|
+
if (tmp !== SC.DRAG_NONE) return [idx, dropOp, tmp] ;
|
2804
|
+
|
2805
|
+
// The delegate is NOT OK with a drop on, try to get the insertion
|
2806
|
+
// index again, but this time prefer SC.DROP_BEFORE, then let the
|
2807
|
+
// rest of the method run...
|
2808
|
+
else {
|
2809
|
+
dropOp = SC.DROP_BEFORE ;
|
2810
|
+
idx = this.insertionIndexForLocation(loc, SC.DROP_BEFORE) ;
|
2811
|
+
if (SC.typeOf(idx) === SC.T_ARRAY) {
|
2812
|
+
dropOp = idx[1] ; // order matters here
|
2813
|
+
idx = idx[0] ;
|
2814
|
+
}
|
2815
|
+
}
|
2816
|
+
}
|
2817
|
+
|
2818
|
+
// if this is a reorder drag, set the proposed op to SC.DRAG_REORDER and
|
2819
|
+
// validate the insertion point. This only works if the insertion point
|
2820
|
+
// is DROP_BEFORE or DROP_AFTER. DROP_ON is not handled by reordering
|
2821
|
+
// content.
|
2822
|
+
if ((idx >= 0) && canReorder && (dropOp !== SC.DROP_ON)) {
|
2823
|
+
|
2824
|
+
objects = drag.dataForType(this.get('reorderDataType')) ;
|
2825
|
+
if (objects) {
|
2826
|
+
content = this.get('content') ;
|
2827
|
+
|
2828
|
+
// if the insertion index is in between two items in the drag itself,
|
2829
|
+
// then this is not allowed. Either use the last insertion index or
|
2830
|
+
// find the first index that is not in between selections. Stop when
|
2831
|
+
// we get to the beginning.
|
2832
|
+
if (dropOp === SC.DROP_BEFORE) {
|
2833
|
+
isPreviousInDrag = objects.indexes.contains(idx-1);
|
2834
|
+
isNextInDrag = objects.indexes.contains(idx);
|
2835
|
+
} else {
|
2836
|
+
isPreviousInDrag = objects.indexes.contains(idx);
|
2837
|
+
isNextInDrag = objects.indexes.contains(idx-1);
|
2838
|
+
}
|
2839
|
+
|
2840
|
+
if (isPreviousInDrag && isNextInDrag) {
|
2841
|
+
if (SC.none(this._lastInsertionIndex)) {
|
2842
|
+
if (dropOp === SC.DROP_BEFORE) {
|
2843
|
+
while ((idx >= 0) && objects.indexes.contains(idx)) idx--;
|
2844
|
+
} else {
|
2845
|
+
len = content ? content.get('length') : 0;
|
2846
|
+
while ((idx < len) && objects.indexes.contains(idx)) idx++;
|
2847
|
+
}
|
2848
|
+
} else idx = this._lastInsertionIndex ;
|
2849
|
+
}
|
2850
|
+
|
2851
|
+
// If we found a valid insertion point to reorder at, then set the op
|
2852
|
+
// to custom DRAG_REORDER.
|
2853
|
+
if (idx >= 0) dragOp = SC.DRAG_REORDER ;
|
2854
|
+
}
|
2855
|
+
}
|
2856
|
+
|
2857
|
+
// Now save the insertion index and the dropOp. This may be changed by
|
2858
|
+
// the collection delegate.
|
2859
|
+
this.set('proposedInsertionIndex', idx) ;
|
2860
|
+
this.set('proposedDropOperation', dropOp) ;
|
2861
|
+
dragOp = del.collectionViewValidateDragOperation(this, drag, dragOp, idx, dropOp) ;
|
2862
|
+
idx = this.get('proposedInsertionIndex') ;
|
2863
|
+
dropOp = this.get('proposedDropOperation') ;
|
2864
|
+
this._dropInsertionIndex = this._dropOperation = null ;
|
2865
|
+
|
2866
|
+
// return generated state
|
2867
|
+
return [idx, dropOp, dragOp] ;
|
2868
|
+
},
|
2869
|
+
|
2870
|
+
/**
|
2871
|
+
Implements the SC.DropTarget interface. The default implementation will
|
2872
|
+
determine the drop location and then consult the collection view delegate
|
2873
|
+
if you implement those methods. Otherwise it will handle reordering
|
2874
|
+
content on its own.
|
2875
|
+
|
2876
|
+
@param {SC.Drag} drag The drag that was updated
|
2877
|
+
@param {SC.Event} evt The event for the drag
|
2878
|
+
*/
|
2879
|
+
dragUpdated: function(drag, evt) {
|
2880
|
+
var op = drag.get('allowedDragOperations'),
|
2881
|
+
state = this._computeDropOperationState(drag, evt, op),
|
2882
|
+
idx = state[0], dropOp = state[1], dragOp = state[2];
|
2883
|
+
|
2884
|
+
// if the insertion index or dropOp have changed, update the insertion
|
2885
|
+
// point
|
2886
|
+
if (dragOp !== SC.DRAG_NONE) {
|
2887
|
+
if ((this._lastInsertionIndex !== idx) || (this._lastDropOperation !== dropOp)) {
|
2888
|
+
var itemView = this.itemViewForContentIndex(idx) ;
|
2889
|
+
this.showInsertionPoint(itemView, dropOp) ;
|
2890
|
+
}
|
2891
|
+
|
2892
|
+
this._lastInsertionIndex = idx ;
|
2893
|
+
this._lastDropOperation = dropOp ;
|
2894
|
+
} else {
|
2895
|
+
this.hideInsertionPoint() ;
|
2896
|
+
this._lastInsertionIndex = this._lastDropOperation = null ;
|
2897
|
+
}
|
2898
|
+
|
2899
|
+
// Normalize drag operation to the standard kinds accepted by the drag
|
2900
|
+
// system.
|
2901
|
+
return (dragOp & SC.DRAG_REORDER) ? SC.DRAG_MOVE : dragOp;
|
2902
|
+
},
|
2903
|
+
|
2904
|
+
/**
|
2905
|
+
Implements the SC.DropTarget protocol. Hides any visible insertion
|
2906
|
+
point and clears some cached values.
|
2907
|
+
*/
|
2908
|
+
dragExited: function() {
|
2909
|
+
this.hideInsertionPoint() ;
|
2910
|
+
this._lastInsertionIndex = this._lastDropOperation = null ;
|
2911
|
+
},
|
2912
|
+
|
2913
|
+
/**
|
2914
|
+
Implements the SC.DropTarget protocol.
|
2915
|
+
|
2916
|
+
@returns {Boolean} YES
|
2917
|
+
*/
|
2918
|
+
acceptDragOperation: function(drag, op) {
|
2919
|
+
return YES;
|
2920
|
+
},
|
2921
|
+
|
2922
|
+
/**
|
2923
|
+
Implements the SC.DropTarget protocol. Consults the collection view
|
2924
|
+
delegate to actually perform the operation unless the operation is
|
2925
|
+
reordering content.
|
2926
|
+
|
2927
|
+
@param {SC.Drag} drag The drag to perform the operation on
|
2928
|
+
@param {Number} op The drag operation to perform
|
2929
|
+
@return {Number} The operation performed
|
2930
|
+
*/
|
2931
|
+
performDragOperation: function(drag, op) {
|
2932
|
+
// Get the correct insertion point, drop operation, etc.
|
2933
|
+
var state = this._computeDropOperationState(drag, null, op),
|
2934
|
+
idx = state[0], dropOp = state[1], dragOp = state[2],
|
2935
|
+
del = this.get('selectionDelegate'),
|
2936
|
+
performed, objects, data, content, shift, indexes;
|
2937
|
+
|
2938
|
+
// The dragOp is the kinds of ops allowed. The drag operation must
|
2939
|
+
// be included in that set.
|
2940
|
+
if (dragOp & SC.DRAG_REORDER) {
|
2941
|
+
op = (op & SC.DRAG_MOVE) ? SC.DRAG_REORDER : SC.DRAG_NONE ;
|
2942
|
+
} else op = op & dragOp ;
|
2943
|
+
|
2944
|
+
// If no allowed drag operation could be found, just return.
|
2945
|
+
if (op === SC.DRAG_NONE) return op;
|
2946
|
+
|
2947
|
+
// Some operation is allowed through, give the delegate a chance to
|
2948
|
+
// handle it.
|
2949
|
+
performed = del.collectionViewPerformDragOperation(this, drag, op, idx, dropOp) ;
|
2950
|
+
|
2951
|
+
// If the delegate did not handle the drag (i.e. returned SC.DRAG_NONE),
|
2952
|
+
// and the op type is REORDER, then do the reorder here.
|
2953
|
+
if ((performed === SC.DRAG_NONE) && (op & SC.DRAG_REORDER)) {
|
2954
|
+
|
2955
|
+
data = drag.dataForType(this.get('reorderDataType')) ;
|
2956
|
+
if (!data) return SC.DRAG_NONE ;
|
2957
|
+
|
2958
|
+
content = this.get('content') ;
|
2959
|
+
|
2960
|
+
// check for special case - inserting BEFORE ourself...
|
2961
|
+
// in this case just pretend the move happened since it's a no-op
|
2962
|
+
// anyway
|
2963
|
+
indexes = data.indexes;
|
2964
|
+
if (indexes.get('length')===1) {
|
2965
|
+
if (((dropOp === SC.DROP_BEFORE) || (dropOp === SC.DROP_AFTER)) &&
|
2966
|
+
(indexes.get('min')===idx)) return SC.DRAG_MOVE;
|
2967
|
+
}
|
2968
|
+
|
2969
|
+
content.beginPropertyChanges(); // suspend notifications
|
2970
|
+
|
2971
|
+
// get each object, then remove it from the content. they will be
|
2972
|
+
// added again later.
|
2973
|
+
objects = [];
|
2974
|
+
shift = 0;
|
2975
|
+
data.indexes.forEach(function(i) {
|
2976
|
+
objects.push(content.objectAt(i-shift));
|
2977
|
+
content.removeAt(i-shift);
|
2978
|
+
shift++;
|
2979
|
+
if (i < idx) idx--;
|
2980
|
+
}, this);
|
2981
|
+
|
2982
|
+
// now insert objects into new insertion locaiton
|
2983
|
+
if (dropOp === SC.DROP_AFTER) idx++;
|
2984
|
+
content.replace(idx, 0, objects, dropOp);
|
2985
|
+
this.select(SC.IndexSet.create(idx, objects.length));
|
2986
|
+
content.endPropertyChanges(); // restart notifications
|
2987
|
+
|
2988
|
+
// make the op into its actual value
|
2989
|
+
op = SC.DRAG_MOVE ;
|
2990
|
+
}
|
2991
|
+
|
2992
|
+
return op;
|
2993
|
+
},
|
2994
|
+
|
2995
|
+
/**
|
2996
|
+
Default delegate method implementation, returns YES if canReorderContent
|
2997
|
+
is also true.
|
2998
|
+
|
2999
|
+
@param {SC.View} view
|
3000
|
+
*/
|
3001
|
+
collectionViewShouldBeginDrag: function(view) {
|
3002
|
+
return this.get('canReorderContent');
|
3003
|
+
},
|
3004
|
+
|
3005
|
+
|
3006
|
+
// ..........................................................
|
3007
|
+
// INSERTION POINT
|
3008
|
+
//
|
3009
|
+
|
3010
|
+
|
3011
|
+
/**
|
3012
|
+
Get the preferred insertion point for the given location, including
|
3013
|
+
an insertion preference of before, after or on the named index.
|
3014
|
+
|
3015
|
+
You can implement this method in a subclass if you like to perform a
|
3016
|
+
more efficient check. The default implementation will loop through the
|
3017
|
+
item views looking for the first view to "switch sides" in the orientation
|
3018
|
+
you specify.
|
3019
|
+
|
3020
|
+
This method should return an array with two values. The first value is
|
3021
|
+
the insertion point index and the second value is the drop operation,
|
3022
|
+
which should be one of SC.DROP_BEFORE, SC.DROP_AFTER, or SC.DROP_ON.
|
3023
|
+
|
3024
|
+
The preferred drop operation passed in should be used as a hint as to
|
3025
|
+
the type of operation the view would prefer to receive. If the
|
3026
|
+
dropOperation is SC.DROP_ON, then you should return a DROP_ON mode if
|
3027
|
+
possible. Otherwise, you should never return DROP_ON.
|
3028
|
+
|
3029
|
+
For compatibility, you can also return just the insertion index. If you
|
3030
|
+
do this, then the collction view will assume the drop operation is
|
3031
|
+
SC.DROP_BEFORE.
|
3032
|
+
|
3033
|
+
If an insertion is NOT allowed, you should return -1 as the insertion
|
3034
|
+
point. In this case, the drop operation will be ignored.
|
3035
|
+
|
3036
|
+
@param {Point} loc the mouse location.
|
3037
|
+
@param {DropOp} dropOperation the preferred drop operation.
|
3038
|
+
@returns {Array} format: [index, op]
|
3039
|
+
*/
|
3040
|
+
insertionIndexForLocation: function(loc, dropOperation) {
|
3041
|
+
return -1;
|
3042
|
+
},
|
3043
|
+
|
3044
|
+
// ..........................................................
|
3045
|
+
// INTERNAL SUPPORT
|
3046
|
+
//
|
3047
|
+
|
3048
|
+
/** @private - when we become visible, reload if needed. */
|
3049
|
+
_cv_isVisibleInWindowDidChange: function() {
|
3050
|
+
if (this.get('isVisibleInWindow')) {
|
3051
|
+
if (this._invalidIndexes) this.invokeOnce(this.reloadIfNeeded);
|
3052
|
+
if (this._invalidSelection) {
|
3053
|
+
this.invokeOnce(this.reloadSelectionIndexesIfNeeded);
|
3054
|
+
}
|
3055
|
+
}
|
3056
|
+
}.observes('isVisibleInWindow'),
|
3057
|
+
|
3058
|
+
|
3059
|
+
/**
|
3060
|
+
Default delegate method implementation, returns YES if isSelectable
|
3061
|
+
is also true.
|
3062
|
+
*/
|
3063
|
+
collectionViewShouldSelectItem: function(view, item) {
|
3064
|
+
return this.get('isSelectable') ;
|
3065
|
+
},
|
3066
|
+
|
3067
|
+
/** @private */
|
3068
|
+
_TMP_DIFF1: SC.IndexSet.create(),
|
3069
|
+
|
3070
|
+
/** @private */
|
3071
|
+
_TMP_DIFF2: SC.IndexSet.create(),
|
3072
|
+
|
3073
|
+
/** @private
|
3074
|
+
|
3075
|
+
Whenever the nowShowing range changes, update the range observer on the
|
3076
|
+
content item and instruct the view to reload any indexes that are not in
|
3077
|
+
the previous nowShowing range.
|
3078
|
+
|
3079
|
+
*/
|
3080
|
+
_cv_nowShowingDidChange: function() {
|
3081
|
+
var nowShowing = this.get('nowShowing'),
|
3082
|
+
last = this._sccv_lastNowShowing,
|
3083
|
+
diff, diff1, diff2;
|
3084
|
+
|
3085
|
+
// find the differences between the two
|
3086
|
+
// NOTE: reuse a TMP IndexSet object to avoid creating lots of objects
|
3087
|
+
// during scrolling
|
3088
|
+
if (last !== nowShowing) {
|
3089
|
+
if (last && nowShowing) {
|
3090
|
+
diff1 = this._TMP_DIFF1.add(last).remove(nowShowing);
|
3091
|
+
diff2 = this._TMP_DIFF2.add(nowShowing).remove(last);
|
3092
|
+
diff = diff1.add(diff2);
|
3093
|
+
} else diff = last || nowShowing ;
|
3094
|
+
}
|
3095
|
+
|
3096
|
+
// if nowShowing has actually changed, then update
|
3097
|
+
if (diff && diff.get('length') > 0) {
|
3098
|
+
this._sccv_lastNowShowing = nowShowing ? nowShowing.frozenCopy() : null;
|
3099
|
+
this.updateContentRangeObserver();
|
3100
|
+
this.reload(diff);
|
3101
|
+
}
|
3102
|
+
|
3103
|
+
// cleanup tmp objects
|
3104
|
+
if (diff1) diff1.clear();
|
3105
|
+
if (diff2) diff2.clear();
|
3106
|
+
|
3107
|
+
}.observes('nowShowing'),
|
3108
|
+
|
3109
|
+
/** @private */
|
3110
|
+
init: function() {
|
3111
|
+
sc_super();
|
3112
|
+
if (this.useFastPath) this.mixin(SC.CollectionFastPath);
|
3113
|
+
if (this.get('canReorderContent')) this._cv_canReorderContentDidChange();
|
3114
|
+
this._sccv_lastNowShowing = this.get('nowShowing').clone();
|
3115
|
+
if (this.content) this._cv_contentDidChange();
|
3116
|
+
if (this.selection) this._cv_selectionDidChange();
|
3117
|
+
},
|
3118
|
+
|
3119
|
+
/** @private
|
3120
|
+
Become a drop target whenever reordering content is enabled.
|
3121
|
+
*/
|
3122
|
+
_cv_canReorderContentDidChange: function() {
|
3123
|
+
if (this.get('canReorderContent')) {
|
3124
|
+
if (!this.get('isDropTarget')) this.set('isDropTarget', YES);
|
3125
|
+
SC.Drag.addDropTarget(this);
|
3126
|
+
}
|
3127
|
+
}.observes('canReorderContent'),
|
3128
|
+
|
3129
|
+
/** @private
|
3130
|
+
Fires an action after a selection if enabled.
|
3131
|
+
|
3132
|
+
if actOnSelect is YES, then try to invoke the action, passing the
|
3133
|
+
current selection (saved as a separate array so that a change in sel
|
3134
|
+
in the meantime will not be lost)
|
3135
|
+
*/
|
3136
|
+
_cv_performSelectAction: function(view, ev, delay, clickCount) {
|
3137
|
+
var sel;
|
3138
|
+
if (delay === undefined) delay = 0 ;
|
3139
|
+
if (clickCount === undefined) clickCount = 1;
|
3140
|
+
if ((clickCount>1) || this.get('actOnSelect')) {
|
3141
|
+
if (this._cv_reselectTimer) this._cv_reselectTimer.invalidate() ;
|
3142
|
+
sel = this.get('selection');
|
3143
|
+
sel = sel ? sel.toArray() : [];
|
3144
|
+
if (this._cv_actionTimer) this._cv_actionTimer.invalidate();
|
3145
|
+
this._cv_actionTimer = this.invokeLater(this._cv_action, delay, view, ev, sel) ;
|
3146
|
+
}
|
3147
|
+
},
|
3148
|
+
|
3149
|
+
/** @private
|
3150
|
+
Perform the action. Supports legacy behavior as well as newer style
|
3151
|
+
action dispatch.
|
3152
|
+
*/
|
3153
|
+
_cv_action: function(view, evt, context) {
|
3154
|
+
var action = this.get('action');
|
3155
|
+
var target = this.get('target') || null;
|
3156
|
+
|
3157
|
+
this._cv_actionTimer = null;
|
3158
|
+
if (action) {
|
3159
|
+
// if the action is a function, just call it
|
3160
|
+
if (SC.typeOf(action) === SC.T_FUNCTION) return this.action(view, evt) ;
|
3161
|
+
|
3162
|
+
// otherwise, use the new sendAction style
|
3163
|
+
var pane = this.get('pane') ;
|
3164
|
+
if (pane) {
|
3165
|
+
pane.rootResponder.sendAction(action, target, this, pane, context);
|
3166
|
+
}
|
3167
|
+
// SC.app.sendAction(action, target, this) ;
|
3168
|
+
|
3169
|
+
// if no action is specified, then trigger the support action,
|
3170
|
+
// if supported.
|
3171
|
+
} else if (!view) {
|
3172
|
+
return ; // nothing to do
|
3173
|
+
|
3174
|
+
// if the target view has its own internal action handler,
|
3175
|
+
// trigger that.
|
3176
|
+
} else if (SC.typeOf(view._action) == SC.T_FUNCTION) {
|
3177
|
+
return view._action(evt) ;
|
3178
|
+
|
3179
|
+
// otherwise call the action method to support older styles.
|
3180
|
+
} else if (SC.typeOf(view.action) == SC.T_FUNCTION) {
|
3181
|
+
return view.action(evt) ;
|
3182
|
+
}
|
3183
|
+
}
|
3184
|
+
|
3185
|
+
|
3186
|
+
});
|