sproutit-sproutcore 1.0.0.20090407205609 → 1.0.0.20090408130025
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/frameworks/sproutcore/Buildfile +63 -0
- data/frameworks/sproutcore/HISTORY +682 -0
- data/frameworks/sproutcore/README +22 -0
- data/frameworks/sproutcore/apps/sc_jsdoc/controllers/docs.js +149 -0
- data/frameworks/sproutcore/apps/sc_jsdoc/core.js +16 -0
- data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/body.css +17 -0
- data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/body.js +99 -0
- data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/images/sproutcore-logo.png +0 -0
- data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/strings.js +15 -0
- data/frameworks/sproutcore/apps/sc_jsdoc/main.js +27 -0
- data/frameworks/sproutcore/apps/sc_jsdoc/models/doc.js +21 -0
- data/frameworks/sproutcore/apps/sc_qunit/controllers/runner.js +209 -0
- data/frameworks/sproutcore/apps/sc_qunit/core.js +16 -0
- data/frameworks/sproutcore/apps/sc_qunit/english.lproj/body.css +17 -0
- data/frameworks/sproutcore/apps/sc_qunit/english.lproj/body.js +107 -0
- data/frameworks/sproutcore/apps/sc_qunit/english.lproj/images/sproutcore-logo.png +0 -0
- data/frameworks/sproutcore/apps/sc_qunit/english.lproj/strings.js +15 -0
- data/frameworks/sproutcore/apps/sc_qunit/main.js +18 -0
- data/frameworks/sproutcore/apps/sc_qunit/models/test.js +24 -0
- data/frameworks/sproutcore/apps/sc_qunit/views/test_iframe.js +52 -0
- data/frameworks/sproutcore/apps/tests/controllers/targets.js +47 -0
- data/frameworks/sproutcore/apps/tests/controllers/test.js +20 -0
- data/frameworks/sproutcore/apps/tests/controllers/tests.js +38 -0
- data/frameworks/sproutcore/apps/tests/core.js +35 -0
- data/frameworks/sproutcore/apps/tests/english.lproj/loading.rhtml +9 -0
- data/frameworks/sproutcore/apps/tests/english.lproj/main_page.css +19 -0
- data/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +86 -0
- data/frameworks/sproutcore/apps/tests/english.lproj/strings.js +17 -0
- data/frameworks/sproutcore/apps/tests/fixtures/target.js +43 -0
- data/frameworks/sproutcore/apps/tests/fixtures/test.js +43 -0
- data/frameworks/sproutcore/apps/tests/main.js +39 -0
- data/frameworks/sproutcore/apps/tests/models/target.js +49 -0
- data/frameworks/sproutcore/apps/tests/models/test.js +20 -0
- data/frameworks/sproutcore/apps/tests/tests/controllers/targets.js +15 -0
- data/frameworks/sproutcore/apps/tests/tests/controllers/test.js +15 -0
- data/frameworks/sproutcore/apps/tests/tests/controllers/tests.js +15 -0
- data/frameworks/sproutcore/apps/tests/tests/models/target.js +15 -0
- data/frameworks/sproutcore/apps/tests/tests/models/test.js +15 -0
- data/frameworks/sproutcore/apps/welcome/core.js +23 -0
- data/frameworks/sproutcore/apps/welcome/english.lproj/loading.rhtml +8 -0
- data/frameworks/sproutcore/apps/welcome/english.lproj/main_page.js +43 -0
- data/frameworks/sproutcore/apps/welcome/english.lproj/strings.js +15 -0
- data/frameworks/sproutcore/apps/welcome/main.js +36 -0
- data/frameworks/sproutcore/design/Design Charts.graffle +15819 -0
- data/frameworks/sproutcore/design/Record State Table.numbers +0 -0
- data/frameworks/sproutcore/frameworks/datastore/core.js +14 -0
- data/frameworks/sproutcore/frameworks/datastore/data_sources/cascade.js +113 -0
- data/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +256 -0
- data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +196 -0
- data/frameworks/sproutcore/frameworks/datastore/debug/json.js +71 -0
- data/frameworks/sproutcore/frameworks/datastore/debug/standard_setup.js +96 -0
- data/frameworks/sproutcore/frameworks/datastore/fixtures/author_fixtures.js +2503 -0
- data/frameworks/sproutcore/frameworks/datastore/fixtures/sample.js +17 -0
- data/frameworks/sproutcore/frameworks/datastore/models/fetched_attribute.js +92 -0
- data/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +38 -0
- data/frameworks/sproutcore/frameworks/datastore/models/record.js +430 -0
- data/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +361 -0
- data/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +305 -0
- data/frameworks/sproutcore/frameworks/datastore/system/query.js +128 -0
- data/frameworks/sproutcore/frameworks/datastore/system/record_array.js +149 -0
- data/frameworks/sproutcore/frameworks/datastore/system/store.js +1689 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +86 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/integration/contact_model.js +114 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/integration/mail_model.js +91 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/integration/test_runner_model.js +56 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/destroy.js +73 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/readAttribute.js +48 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/refresh.js +42 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/storeDidChangeProperties.js +138 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/unknownProperty.js +46 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +71 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +115 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +40 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChanges.js +116 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +135 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/dataHashDidChange.js +110 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/discardChanges.js +99 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +180 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readEditableDataHash.js +126 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/removeDataHash.js +163 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/writeDataHash.js +166 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +175 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/cancelRecord.js +54 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +126 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +127 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +57 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataHashDidChange.js +78 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +247 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/destroyRecord.js +106 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/init.js +21 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +61 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/readDataHash.js +74 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/readEditableDataHash.js +74 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/recordDidChange.js +74 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/removeDataHash.js +144 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/retrieveRecord.js +137 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/writeDataHash.js +130 -0
- data/frameworks/sproutcore/frameworks/debug/core.js +1 -0
- data/frameworks/sproutcore/frameworks/deprecated/core.js +61 -0
- data/frameworks/sproutcore/frameworks/deprecated/lib/button_views.rb +330 -0
- data/frameworks/sproutcore/frameworks/deprecated/lib/collection_view.rb +83 -0
- data/frameworks/sproutcore/frameworks/deprecated/lib/core_views.rb +326 -0
- data/frameworks/sproutcore/frameworks/deprecated/lib/form_views.rb +253 -0
- data/frameworks/sproutcore/frameworks/deprecated/lib/index.rhtml +75 -0
- data/frameworks/sproutcore/frameworks/deprecated/lib/menu_views.rb +93 -0
- data/frameworks/sproutcore/frameworks/deprecated/server/rails_server.js +80 -0
- data/frameworks/sproutcore/frameworks/deprecated/server/rest_server.js +178 -0
- data/frameworks/sproutcore/frameworks/deprecated/server/server.js +674 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/animator.js +679 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/binding.js +36 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/browser.js +77 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/classic_responder.js +314 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/event.js +60 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/globals.js +20 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/misc.js +60 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/node_descriptor.js +72 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/object.js +124 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/path_module.js +433 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/string.js +109 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/application/application.rhtml +125 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/clippingFrame.rhtml +401 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/frame.rhtml +357 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/isVisibleInWindow.rhtml +147 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/base.rhtml +298 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/incremental_rendering.rhtml +260 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/source_list_rendering.rhtml +143 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/popup_button.rhtml +128 -0
- data/frameworks/sproutcore/frameworks/deprecated/tests/views/text_field.rhtml +37 -0
- data/frameworks/sproutcore/frameworks/deprecated/views/collection.js +24 -0
- data/frameworks/sproutcore/frameworks/designer/coders/design.js +30 -0
- data/frameworks/sproutcore/frameworks/designer/coders/localization.js +28 -0
- data/frameworks/sproutcore/frameworks/designer/coders/object.js +347 -0
- data/frameworks/sproutcore/frameworks/designer/controllers/page_design.js +102 -0
- data/frameworks/sproutcore/frameworks/designer/css/css_rule.js +22 -0
- data/frameworks/sproutcore/frameworks/designer/css/css_style.js +29 -0
- data/frameworks/sproutcore/frameworks/designer/css/css_style_sheet.js +201 -0
- data/frameworks/sproutcore/frameworks/designer/ext/page.js +88 -0
- data/frameworks/sproutcore/frameworks/designer/ext/view.js +40 -0
- data/frameworks/sproutcore/frameworks/designer/views/controls/button.js +18 -0
- data/frameworks/sproutcore/frameworks/designer/views/designer.js +553 -0
- data/frameworks/sproutcore/frameworks/designer/views/label.js +17 -0
- data/frameworks/sproutcore/frameworks/designer/views/mixins/button.js +13 -0
- data/frameworks/sproutcore/frameworks/designer/views/tab.js +17 -0
- data/frameworks/sproutcore/frameworks/desktop/core.js +6 -0
- data/frameworks/sproutcore/frameworks/desktop/debug/drag.js +41 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/alert.css +56 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/a_sample_image.jpg +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/apple-logo1.jpeg +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/iframe.html +23 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/disclosure.css +71 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/icons.css +943 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/blank.gif +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_222222.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_454545.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_888888.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_ffffff.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/shared.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/indicator.gif +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/panels/sprite-x.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/panels/sprite-y.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/sc-theme-sprite.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/standard_fade/000000.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/standard_fade/ffffff.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/sticky-note.png +0 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/list_item.css +156 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu.css +83 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +99 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/palette.css +3 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/panel.css +94 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/picker.css +39 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/progress.css +31 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/radio.css +10 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/scroller.css +26 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/segmented.css +141 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/separator.css +19 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/slider.css +57 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/split.css +70 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/split_divider.css +8 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/strings.js +14 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/tab.css +12 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/text_field.css +29 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/toolbar.css +6 -0
- data/frameworks/sproutcore/frameworks/desktop/mixins/border.js +53 -0
- data/frameworks/sproutcore/frameworks/desktop/mixins/collection_group.js +22 -0
- data/frameworks/sproutcore/frameworks/desktop/mixins/collection_item.js +22 -0
- data/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +226 -0
- data/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +247 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/alert.js +377 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/menu.js +504 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/modal.js +68 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/palette.js +63 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/panel.js +184 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/picker.js +402 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +46 -0
- data/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +39 -0
- data/frameworks/sproutcore/frameworks/desktop/protocols/drag_source.js +81 -0
- data/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +175 -0
- data/frameworks/sproutcore/frameworks/desktop/protocols/responder.js +280 -0
- data/frameworks/sproutcore/frameworks/desktop/system/drag.js +721 -0
- data/frameworks/sproutcore/frameworks/desktop/system/key_bindings.js +40 -0
- data/frameworks/sproutcore/frameworks/desktop/system/root_responder.js +641 -0
- data/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +187 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +43 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +152 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +57 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/ui.js +36 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +40 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +80 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +38 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +45 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +140 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +145 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/ui.js +99 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectPreviousItem.js +39 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +64 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/grid/ui.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui.js +110 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +255 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/ui.js +44 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/methods.js +128 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +240 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +113 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/radio/ui.js +202 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +139 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +111 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/methods.js +63 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/ui.js +70 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +94 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +206 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/methods.js +81 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +85 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/separator.js +37 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/ui.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +50 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/split/ui.js +52 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +54 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/tab/ui.js +88 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/text_field/methods.js +76 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/text_field/ui.js +198 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/web/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/web/ui.js +110 -0
- data/frameworks/sproutcore/frameworks/desktop/views/button.js +320 -0
- data/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +98 -0
- data/frameworks/sproutcore/frameworks/desktop/views/collection.js +2141 -0
- data/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +44 -0
- data/frameworks/sproutcore/frameworks/desktop/views/form.js +595 -0
- data/frameworks/sproutcore/frameworks/desktop/views/grid.js +199 -0
- data/frameworks/sproutcore/frameworks/desktop/views/list.js +706 -0
- data/frameworks/sproutcore/frameworks/desktop/views/list_item.js +523 -0
- data/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +437 -0
- data/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +62 -0
- data/frameworks/sproutcore/frameworks/desktop/views/progress.js +207 -0
- data/frameworks/sproutcore/frameworks/desktop/views/radio.js +332 -0
- data/frameworks/sproutcore/frameworks/desktop/views/scene.js +56 -0
- data/frameworks/sproutcore/frameworks/desktop/views/scroll.js +648 -0
- data/frameworks/sproutcore/frameworks/desktop/views/scroller.js +203 -0
- data/frameworks/sproutcore/frameworks/desktop/views/segmented.js +509 -0
- data/frameworks/sproutcore/frameworks/desktop/views/select_field.js +292 -0
- data/frameworks/sproutcore/frameworks/desktop/views/separator.js +37 -0
- data/frameworks/sproutcore/frameworks/desktop/views/slider.js +178 -0
- data/frameworks/sproutcore/frameworks/desktop/views/source_list.js +1117 -0
- data/frameworks/sproutcore/frameworks/desktop/views/source_list_group.js +169 -0
- data/frameworks/sproutcore/frameworks/desktop/views/split.js +651 -0
- data/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +55 -0
- data/frameworks/sproutcore/frameworks/desktop/views/tab.js +190 -0
- data/frameworks/sproutcore/frameworks/desktop/views/text_field.js +233 -0
- data/frameworks/sproutcore/frameworks/desktop/views/thumb.js +49 -0
- data/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +49 -0
- data/frameworks/sproutcore/frameworks/desktop/views/web.js +86 -0
- data/frameworks/sproutcore/frameworks/foundation/TESTING +46 -0
- data/frameworks/sproutcore/frameworks/foundation/controllers/array.js +490 -0
- data/frameworks/sproutcore/frameworks/foundation/controllers/controller.js +317 -0
- data/frameworks/sproutcore/frameworks/foundation/controllers/object.js +421 -0
- data/frameworks/sproutcore/frameworks/foundation/core.js +111 -0
- data/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +172 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/blank.gif +0 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +53 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/button_view.css +55 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/core.css +5 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/debug/control-test-pane.css +8 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-logo.png +0 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/static_layout.css +5 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/view.css +40 -0
- data/frameworks/sproutcore/frameworks/foundation/ext/object.js +81 -0
- data/frameworks/sproutcore/frameworks/foundation/ext/run_loop.js +158 -0
- data/frameworks/sproutcore/frameworks/foundation/fixtures/file_exists.json +1 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/button.js +291 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +88 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/control.js +352 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +146 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/responder.js +156 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/selection_support.js +154 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +101 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/string.js +237 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/validatable.js +176 -0
- data/frameworks/sproutcore/frameworks/foundation/panes/main.js +47 -0
- data/frameworks/sproutcore/frameworks/foundation/panes/pane.js +555 -0
- data/frameworks/sproutcore/frameworks/foundation/protocols/inline_editor_delegate.js +84 -0
- data/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +244 -0
- data/frameworks/sproutcore/frameworks/foundation/system/browser.js +64 -0
- data/frameworks/sproutcore/frameworks/foundation/system/builder.js +210 -0
- data/frameworks/sproutcore/frameworks/foundation/system/core_query.js +2015 -0
- data/frameworks/sproutcore/frameworks/foundation/system/cursor.js +129 -0
- data/frameworks/sproutcore/frameworks/foundation/system/error.js +93 -0
- data/frameworks/sproutcore/frameworks/foundation/system/event.js +817 -0
- data/frameworks/sproutcore/frameworks/foundation/system/image_cache.js +433 -0
- data/frameworks/sproutcore/frameworks/foundation/system/json.js +440 -0
- data/frameworks/sproutcore/frameworks/foundation/system/locale.js +288 -0
- data/frameworks/sproutcore/frameworks/foundation/system/page.js +106 -0
- data/frameworks/sproutcore/frameworks/foundation/system/ready.js +189 -0
- data/frameworks/sproutcore/frameworks/foundation/system/render_context.js +865 -0
- data/frameworks/sproutcore/frameworks/foundation/system/request.js +255 -0
- data/frameworks/sproutcore/frameworks/foundation/system/root_responder.js +368 -0
- data/frameworks/sproutcore/frameworks/foundation/system/routes.js +446 -0
- data/frameworks/sproutcore/frameworks/foundation/system/time.js +478 -0
- data/frameworks/sproutcore/frameworks/foundation/system/timer.js +549 -0
- data/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +158 -0
- data/frameworks/sproutcore/frameworks/foundation/system/utils.js +330 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array.js +118 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/controller.js +268 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object.js +433 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/ui.js +113 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/integration/creating_views.js +113 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/content.js +195 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/displayProperties.js +89 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/control/content.js +168 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/control/displayProperties.js +89 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/builder.js +42 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_core.js +1323 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_dimensions.js +387 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_selector.js +405 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/setClass.js +49 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/within.js +66 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/error.js +41 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/json.js +14 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/locale.js +128 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/begin.js +47 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/element.js +44 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/end.js +119 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/get.js +51 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_attr.js +50 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_basic.js +28 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_className.js +179 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_style.js +100 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/init.js +55 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/join.js +28 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/push_text.js +74 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/tag.js +45 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/update.js +205 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/request.js +89 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/makeKeyPane.js +124 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/makeMainPane.js +68 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/root_responder.js +97 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/targetForAction.js +238 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/routes.js +33 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/invalidate.js +38 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/invokeLater.js +201 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/isPaused.js +71 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/performAction.js +67 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/schedule.js +170 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/user_defaults.js +27 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/utils/normalizeURL.js +18 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/system/utils/range.js +62 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/validators/credit_card.js +35 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/validators/date.js +21 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/validators/number.js +47 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/validators/password.js +13 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/container/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +83 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +39 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/main_pane.js +31 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/append_remove.js +89 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/firstResponder.js +148 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/keyPane.js +133 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/sendEvent.js +165 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/clippingFrame.js +132 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/convertFrames.js +246 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/createChildViews.js +87 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/createLayer.js +97 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/destroyLayer.js +85 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/findLayerInParentLayer.js +52 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/init.js +50 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/insertBefore.js +200 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisibleInWindow.js +102 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layer.js +150 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutChildViews.js +162 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutDidChange.js +127 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutStyle.js +248 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/parentViewDidChange.js +67 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/prepareContext.js +166 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/removeChild.js +189 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/render.js +83 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/replaceChild.js +29 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayer.js +142 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayerLocation.js +194 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/viewDidResize.js +185 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +125 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/date.js +52 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/email.js +45 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/not_empty.js +33 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/number.js +82 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/password.js +86 -0
- data/frameworks/sproutcore/frameworks/foundation/validators/validator.js +311 -0
- data/frameworks/sproutcore/frameworks/foundation/views/container.js +136 -0
- data/frameworks/sproutcore/frameworks/foundation/views/field.js +276 -0
- data/frameworks/sproutcore/frameworks/foundation/views/image.js +158 -0
- data/frameworks/sproutcore/frameworks/foundation/views/label.js +261 -0
- data/frameworks/sproutcore/frameworks/foundation/views/view.js +2160 -0
- data/frameworks/sproutcore/frameworks/mobile/english.lproj/core.css +12 -0
- data/frameworks/sproutcore/frameworks/mobile/lib/index.rhtml +126 -0
- data/frameworks/sproutcore/frameworks/mobile/system/root_responder.js +109 -0
- data/frameworks/sproutcore/frameworks/mobile/tests/views/button/ui.js +9 -0
- data/frameworks/sproutcore/frameworks/mobile/views/button.js +190 -0
- data/frameworks/sproutcore/frameworks/runtime/README +11 -0
- data/frameworks/sproutcore/frameworks/runtime/core.js +777 -0
- data/frameworks/sproutcore/frameworks/runtime/license.js +28 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/array.js +403 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/delegate_support.js +70 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +1193 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +1149 -0
- data/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +135 -0
- data/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +108 -0
- data/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +128 -0
- data/frameworks/sproutcore/frameworks/runtime/protocols/sparse_array_delegate.js +131 -0
- data/frameworks/sproutcore/frameworks/runtime/system/binding.js +891 -0
- data/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +107 -0
- data/frameworks/sproutcore/frameworks/runtime/system/object.js +783 -0
- data/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +99 -0
- data/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +214 -0
- data/frameworks/sproutcore/frameworks/runtime/system/set.js +246 -0
- data/frameworks/sproutcore/frameworks/runtime/system/sparse_array.js +286 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/IsEqual.js +56 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/beget.js +23 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/clone.js +66 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/guidFor.js +147 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/inspect.js +27 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/isArray.js +25 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +38 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/keys.js +20 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/makeArray.js +30 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/objectForPropertyPath.js +19 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/tupleForPropertyPath.js +37 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable.js +592 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +467 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/propertyChanges.js +123 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/registerDependentKeys.js +79 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/propertyChanges.js +80 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/array.js +263 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +190 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/object/base.js +135 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/object/bindings.js +339 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +120 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/set.js +313 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/sparse_array.js +84 -0
- data/frameworks/sproutcore/frameworks/testing/core.js +13 -0
- data/frameworks/sproutcore/frameworks/testing/english.lproj/additions.css +8 -0
- data/frameworks/sproutcore/frameworks/testing/english.lproj/testsuite.css +131 -0
- data/frameworks/sproutcore/frameworks/testing/extras.js +43 -0
- data/frameworks/sproutcore/frameworks/testing/jquery.js +3559 -0
- data/frameworks/sproutcore/frameworks/testing/qunit.js +819 -0
- data/frameworks/sproutcore/frameworks/testing/tests/debug/qunit.js +25 -0
- data/frameworks/sproutcore/frameworks/testing/utils.js +55 -0
- data/frameworks/sproutcore/lib/index.rhtml +118 -0
- data/frameworks/sproutcore/license.js +28 -0
- data/frameworks/sproutcore/themes/empty_theme/tests/mini_icons.rhtml +69 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/button.css +41 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/core.css +8 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/backButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/blueButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/cancel.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/grayButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/leftButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listArrow.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listArrowSel.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listGroup.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/loading.gif +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/pinstripes.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/rightButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/selection.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/thumb.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toggle.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toggleOn.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toolButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toolbar.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/whiteButton.png +0 -0
- data/frameworks/sproutcore/themes/iphone_theme/english.lproj/strings.js +15 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/Panel.drawit/Data +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/Panel.drawit/QuickLook/Preview.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/Panel.drawit/QuickLook/Thumbnail.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/Data +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/QuickLook/Preview.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/QuickLook/Thumbnail.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-x.drawit/Data +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-x.drawit/QuickLook/Preview.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-x.drawit/QuickLook/Thumbnail.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-y.drawit/Data +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-y.drawit/QuickLook/Preview.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-y.drawit/QuickLook/Thumbnail.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/button.css +333 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/checkbox.css +90 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/collection.css +53 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/core.css +47 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/disclosure.css +55 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-sprite.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-ysprite.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-toolbar-view.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/label.css +37 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/pane.css +8 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/background-fat.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/background-thin.jpg +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-left-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-right-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/left-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/overlay.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/right-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-edge.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-left-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-right-corner.png +0 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/progress.css +23 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/radio.css +113 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +141 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/slider.css +62 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/split_view.css +27 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/tab.css +12 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/text_field.css +13 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/toolbar.css +4 -0
- data/lib/thor/.autotest +7 -0
- data/lib/thor/CHANGELOG.rdoc +52 -0
- data/lib/thor/LICENSE +20 -0
- data/lib/thor/README.markdown +76 -0
- data/lib/thor/Rakefile +6 -0
- data/lib/thor/Thorfile +45 -0
- data/lib/thor/bin/rake2thor +83 -0
- data/lib/thor/bin/thor +7 -0
- data/lib/thor/lib/thor/error.rb +3 -0
- data/lib/thor/lib/thor/options.rb +267 -0
- data/lib/thor/lib/thor/ordered_hash.rb +64 -0
- data/lib/thor/lib/thor/runner.rb +305 -0
- data/lib/thor/lib/thor/task.rb +83 -0
- data/lib/thor/lib/thor/task_hash.rb +22 -0
- data/lib/thor/lib/thor/tasks/package.rb +18 -0
- data/lib/thor/lib/thor/tasks.rb +77 -0
- data/lib/thor/lib/thor/util.rb +75 -0
- data/lib/thor/lib/thor.rb +170 -0
- data/lib/thor/script/destroy +14 -0
- data/lib/thor/script/generate +14 -0
- data/lib/thor/spec/fixtures/task.thor +10 -0
- data/lib/thor/spec/options_spec.rb +271 -0
- data/lib/thor/spec/ordered_hash_spec.rb +84 -0
- data/lib/thor/spec/spec.opts +1 -0
- data/lib/thor/spec/spec_helper.rb +30 -0
- data/lib/thor/spec/task_spec.rb +11 -0
- data/lib/thor/spec/tasks_spec.rb +28 -0
- data/lib/thor/spec/thor_runner_spec.rb +194 -0
- data/lib/thor/spec/thor_spec.rb +206 -0
- data/lib/thor/spec/util_spec.rb +99 -0
- data/lib/thor/task.thor +15 -0
- data/lib/thor/thor.gemspec +29 -0
- metadata +3 -4
- data/sproutcore.gemspec +0 -47
@@ -0,0 +1,706 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
3
|
+
// Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
|
4
|
+
// Portions ©2008-2009 Apple, Inc. All rights reserved.
|
5
|
+
// License: Licened under MIT license (see license.js)
|
6
|
+
// ==========================================================================
|
7
|
+
|
8
|
+
sc_require('views/collection');
|
9
|
+
|
10
|
+
/** @class
|
11
|
+
|
12
|
+
A list view renders vertical lists of items. It is a specialized form of
|
13
|
+
collection view that is simpler than the table view, but more refined than
|
14
|
+
a generic collection.
|
15
|
+
|
16
|
+
You can use a list view just like a collection view, except that often you
|
17
|
+
also should provide a default rowHeight. Setting this value will allow
|
18
|
+
the ListView to optimize its rendering.
|
19
|
+
|
20
|
+
h2. Variable Row Heights
|
21
|
+
|
22
|
+
ListView now supports variable row heights
|
23
|
+
The ListView adds support for a single delegate method:
|
24
|
+
|
25
|
+
{{{
|
26
|
+
collectionViewRowHeightForContent()
|
27
|
+
}}}
|
28
|
+
|
29
|
+
h2. Using ListView with Very Large Data Sets
|
30
|
+
|
31
|
+
ListView implements incremental rendering, which means it will only render
|
32
|
+
HTML for the items that are current visible on the screen. You can use it
|
33
|
+
to efficiently render lists with 100K+ items very efficiently.
|
34
|
+
|
35
|
+
If you need to work with very large lists of items, however, be aware that
|
36
|
+
calculate variable rows heights can become very expensive since the list
|
37
|
+
view will essentially have to iterate over every item in the collection to
|
38
|
+
collect its row height.
|
39
|
+
|
40
|
+
To work with very large lists, you should consider making your row heights
|
41
|
+
uniform. This will allow the list view to efficiently render content
|
42
|
+
without worrying about the overall performance.
|
43
|
+
|
44
|
+
Alternatively, you may want to consider overriding the offsetForRowAtContentIndex() and heightForRowAtContentIndex() methods to
|
45
|
+
perform some faster calculations that do not require inspecting every
|
46
|
+
item in the collection.
|
47
|
+
|
48
|
+
Note that row heights and offsets are cached so once they are calculated
|
49
|
+
the list view will be able to display very quickly.
|
50
|
+
|
51
|
+
(Can we also have an 'estimate row heights' property that will simply
|
52
|
+
cheat for very long data sets to make rendering more efficient?)
|
53
|
+
|
54
|
+
@extends SC.CollectionView
|
55
|
+
@since SproutCore 1.0
|
56
|
+
*/
|
57
|
+
SC.ListView = SC.CollectionView.extend(
|
58
|
+
/** @scope SC.ListView.prototype */ {
|
59
|
+
|
60
|
+
classNames: ['sc-list-view'],
|
61
|
+
|
62
|
+
/**
|
63
|
+
The default layout for the list view simply fills the entire parentView.
|
64
|
+
*/
|
65
|
+
layout: { left: 0, right: 0, top: 0, height: 100 },
|
66
|
+
|
67
|
+
acceptsFirstResponder: YES,
|
68
|
+
|
69
|
+
// ..........................................................
|
70
|
+
// ROW HEIGHT SUPPORT
|
71
|
+
//
|
72
|
+
|
73
|
+
/**
|
74
|
+
The common row height for list view items.
|
75
|
+
|
76
|
+
If you set this property, then the ListView will be able to use this
|
77
|
+
property to perform absolute layout of its children and to minimize t
|
78
|
+
number of actual views it has to create.
|
79
|
+
|
80
|
+
The value should be an integer expressed in pixels.
|
81
|
+
|
82
|
+
You can alternatively set either the rowHeightKey or implement
|
83
|
+
the collectionViewHeightForRowAtContentIndex() delegate method.
|
84
|
+
*/
|
85
|
+
rowHeight: 20,
|
86
|
+
|
87
|
+
/**
|
88
|
+
If set, this key will be used to calculate the row height for a given
|
89
|
+
content object.
|
90
|
+
*/
|
91
|
+
rowHeightKey: null,
|
92
|
+
|
93
|
+
/**
|
94
|
+
This optional delegate method will be called for each item in your
|
95
|
+
content, giving you a chance to decide what row height to use for the
|
96
|
+
content at the named index.
|
97
|
+
|
98
|
+
The default version will return either the fixed rowHeight you
|
99
|
+
specified or will lookup the row height on the content object using the
|
100
|
+
rowHeightKey.
|
101
|
+
|
102
|
+
@params {SC.CollectionView} the requesting collection view
|
103
|
+
@params {Number} the index into the content
|
104
|
+
@returns {Number} rowHeight
|
105
|
+
*/
|
106
|
+
collectionViewHeightForRowAtContentIndex: function(collectionView, contentIndex) {
|
107
|
+
// console.log('collectionViewHeightForRowAtContentIndex invoked in %@ with index %@'.fmt(this, contentIndex));
|
108
|
+
// console.log('rowHeightKey is %@'.fmt(this.get('rowHeightKey')));
|
109
|
+
// just test for presence of a rowHeightKey..to implement fast path...
|
110
|
+
if (!this.rowHeightKey) return this.get('rowHeight');
|
111
|
+
var key = this.get('rowHeightKey'), content = this.get('content'), rowHeight;
|
112
|
+
if (content) content = content.objectAt(contentIndex);
|
113
|
+
rowHeight = content ? content.get(key) : this.get('rowHeight');
|
114
|
+
// console.log('content.get(key) is %@'.fmt(content ? content.get(key) : undefined));
|
115
|
+
return rowHeight ;
|
116
|
+
},
|
117
|
+
|
118
|
+
/**
|
119
|
+
If some state changes that causes the row height for a range of rows
|
120
|
+
then you should call this method to notify the view that it needs to
|
121
|
+
recalculate the row heights for the collection.
|
122
|
+
|
123
|
+
Anytime your content array changes, the rows are invalidated
|
124
|
+
automatically so you only need to use this for cases where your rows
|
125
|
+
heights may change without changing the content array itself.
|
126
|
+
|
127
|
+
If all rows heights have changed, you can pass null to invalidate the
|
128
|
+
whole range.
|
129
|
+
|
130
|
+
@param {Range} range or null.
|
131
|
+
@returns {SC.CollectionView} reciever
|
132
|
+
*/
|
133
|
+
rowHeightsDidChangeInRange: function(range) {
|
134
|
+
if (this.get('hasUniformRowHeights')) return ; // nothing to do...
|
135
|
+
|
136
|
+
// console.log('rowHeightsDidChangeInRange called on %@ with range %@'.fmt(this, $I(range)));
|
137
|
+
// if no range is passed, just wipe the cached...
|
138
|
+
if (!range) {
|
139
|
+
this._list_rowOffsets = this._list_rowHeights = null ;
|
140
|
+
|
141
|
+
// otherwise, truncate the array of rowOffsets so that everything after
|
142
|
+
// the start of this range will be recalc'd. For cached rowHeights,
|
143
|
+
// set to undefined unless max range exceeds length, in which case you
|
144
|
+
// just truncate.
|
145
|
+
} else {
|
146
|
+
var min = Math.max(0,range.start) ;
|
147
|
+
var offsets = this._list_rowOffsets, heights = this._list_rowHeights;
|
148
|
+
if (offsets) offsets.length = min ;
|
149
|
+
if (heights) {
|
150
|
+
var max = SC.maxRange(range);
|
151
|
+
if (max >= heights.length) {
|
152
|
+
heights.length = min ;
|
153
|
+
} else {
|
154
|
+
while(min<max) heights[min++] = undefined ;
|
155
|
+
}
|
156
|
+
}
|
157
|
+
}
|
158
|
+
|
159
|
+
// now update the layout...
|
160
|
+
this.adjust(this.computeLayout());
|
161
|
+
|
162
|
+
// force recomputation of contentRangeInFrame
|
163
|
+
this.notifyPropertyChange('content');
|
164
|
+
|
165
|
+
// and notify that nowShowingRange may have changed...
|
166
|
+
this.invalidateNowShowingRange() ;
|
167
|
+
},
|
168
|
+
|
169
|
+
/**
|
170
|
+
Set to YES if your list view should have uniform row heights. This will
|
171
|
+
enable an optimization that avoids inspecting actual content objects
|
172
|
+
when calculating the size of the view.
|
173
|
+
|
174
|
+
The default version of this property is set to YES unless you set a
|
175
|
+
delegate or a rowHeightKey.
|
176
|
+
*/
|
177
|
+
hasUniformRowHeights: YES,
|
178
|
+
// function(key, value) {
|
179
|
+
// if (value !== undefined) this._list_hasUniformRowHeights = value ;
|
180
|
+
// value = this._list_hasUniformRowHeights;
|
181
|
+
// return SC.none(value) ? !((this.delegate && this.delegate.collectionViewHeightForRowAtContentIndex) || this.rowHeightKey) : value ;
|
182
|
+
// }.property('delegate', 'rowHeightKey').cacheable(),
|
183
|
+
|
184
|
+
/**
|
185
|
+
Calculates the offset for the row at the specified index. Based on the
|
186
|
+
current setting this may compute the row heights for previous items or
|
187
|
+
it will simply do some math...
|
188
|
+
*/
|
189
|
+
offsetForRowAtContentIndex: function(contentIndex) {
|
190
|
+
if (contentIndex === 0) return 0 ;
|
191
|
+
|
192
|
+
// do some simple math if we have uniform row heights...
|
193
|
+
if (this.get('hasUniformRowHeights')) {
|
194
|
+
return this.get('rowHeight') * contentIndex ;
|
195
|
+
|
196
|
+
// otherwise, use the rowOffsets cache...
|
197
|
+
} else {
|
198
|
+
// get caches
|
199
|
+
var offsets = this._list_rowOffsets;
|
200
|
+
if (!offsets) offsets = this._list_rowOffsets = [] ;
|
201
|
+
|
202
|
+
// OK, now try the fast path...if undefined, loop backwards until we
|
203
|
+
// find an offset that IS cached...
|
204
|
+
var len = offsets.length, cur = contentIndex, height, ret;
|
205
|
+
|
206
|
+
// get the cached offset. Note that if the requested index is longer
|
207
|
+
// than the length of the offsets cache, then just assume the value is
|
208
|
+
// undefined. We don't want to accidentally read an old value...
|
209
|
+
if (contentIndex < len) {
|
210
|
+
ret = offsets[cur];
|
211
|
+
} else {
|
212
|
+
ret = undefined ;
|
213
|
+
cur = len; // start search at current end of offsets...
|
214
|
+
}
|
215
|
+
|
216
|
+
// if the cached value was undefined, loop backwards through the offsets
|
217
|
+
// hash looking for a cached value to start from
|
218
|
+
while((cur>0) && (ret===undefined)) ret = offsets[--cur];
|
219
|
+
|
220
|
+
// now, work our way forward, building the cache of offsets. Use
|
221
|
+
// cached heights...
|
222
|
+
if (ret===undefined) ret = offsets[cur] = 0 ;
|
223
|
+
while (cur < contentIndex) {
|
224
|
+
// get height...recache if needed....
|
225
|
+
height = this._list_heightForRowAtContentIndex(cur) ;
|
226
|
+
|
227
|
+
// console.log('index %@ has height %@'.fmt(cur, height));
|
228
|
+
|
229
|
+
// add to ret and save in cache
|
230
|
+
ret = ret + height ;
|
231
|
+
|
232
|
+
cur++; // go to next offset
|
233
|
+
offsets[cur] = ret ;
|
234
|
+
}
|
235
|
+
|
236
|
+
return ret ;
|
237
|
+
}
|
238
|
+
},
|
239
|
+
|
240
|
+
/**
|
241
|
+
Calculates the height for the row at content index. This method will
|
242
|
+
perform some simple math if hasUniformRowHeights is enabled. Otherwise
|
243
|
+
it will consult the collection view delegate to compute the row heights.
|
244
|
+
*/
|
245
|
+
heightForRowAtContentIndex: function(contentIndex) {
|
246
|
+
if (this.get('hasUniformRowHeights')) {
|
247
|
+
return this.get('rowHeight') ;
|
248
|
+
} else return this._list_heightForRowAtContentIndex(contentIndex);
|
249
|
+
},
|
250
|
+
|
251
|
+
/** @private
|
252
|
+
By-passes the uniform row heights check. Makes offsetForRow... a little
|
253
|
+
faster.
|
254
|
+
*/
|
255
|
+
_list_heightForRowAtContentIndex: function(contentIndex) {
|
256
|
+
// console.log('_list_heightForRowAtContentIndex invoked on %@ with index %@'.fmt(this, index));
|
257
|
+
var heights = this._list_rowHeights;
|
258
|
+
if (!heights) heights = this._list_rowHeights = [] ;
|
259
|
+
|
260
|
+
var height = (contentIndex < heights.length) ?
|
261
|
+
heights[contentIndex] :
|
262
|
+
undefined ;
|
263
|
+
if (height===undefined) {
|
264
|
+
height = heights[contentIndex] = this.invokeDelegateMethod(this.delegate, 'collectionViewHeightForRowAtContentIndex', this, contentIndex) || 0 ;
|
265
|
+
}
|
266
|
+
|
267
|
+
return height ;
|
268
|
+
},
|
269
|
+
|
270
|
+
// ..........................................................
|
271
|
+
// RENDERING
|
272
|
+
//
|
273
|
+
|
274
|
+
render: function(context, firstTime) {
|
275
|
+
if (SC.BENCHMARK_RENDER) {
|
276
|
+
var bkey = '%@.render'.fmt(this) ;
|
277
|
+
SC.Benchmark.start(bkey);
|
278
|
+
}
|
279
|
+
this.beginPropertyChanges() ; // avoid sending notifications
|
280
|
+
|
281
|
+
var content = SC.makeArray(this.get('content')) ;
|
282
|
+
var selection = SC.makeArray(this.get('selection'));
|
283
|
+
var oldRange = this._oldNowShowingRange ;
|
284
|
+
var range = SC.cloneRange(this.get('nowShowingRange')) ;
|
285
|
+
this._oldNowShowingRange = SC.cloneRange(range) ;
|
286
|
+
var key, itemView = this.createExampleView(content), c ;
|
287
|
+
var range2 ; // only used if the old range fits inside the new range
|
288
|
+
var idx, end, childId, maxLen ;
|
289
|
+
|
290
|
+
// keep track of children we've got rendered
|
291
|
+
var childSet = this._childSet ;
|
292
|
+
if (!childSet) childSet = this._childSet = [] ;
|
293
|
+
|
294
|
+
if (SC.ENABLE_COLLECTION_PARTIAL_RENDER) {
|
295
|
+
// used for santity checks during debugging
|
296
|
+
if (SC.SANITY_CHECK_PARTIAL_RENDER) var maxLen = range.length ;
|
297
|
+
|
298
|
+
if (SC.DEBUG_PARTIAL_RENDER) {
|
299
|
+
console.log('oldRange = ') ;
|
300
|
+
console.log(oldRange) ;
|
301
|
+
console.log('range = ') ;
|
302
|
+
console.log(range) ;
|
303
|
+
}
|
304
|
+
|
305
|
+
// if we're dirty, redraw everything visible
|
306
|
+
// (selection changed, content changed, etc.)
|
307
|
+
if (this.get('isDirty')) {
|
308
|
+
childSet.length = 0 ; // full render
|
309
|
+
|
310
|
+
// else, only redaw objects we haven't previously drawn
|
311
|
+
} else if (oldRange) {
|
312
|
+
// ignore ranges that don't overlap above..
|
313
|
+
if (range.start >= oldRange.start + oldRange.length) {
|
314
|
+
childSet.length = 0 ; // full render
|
315
|
+
|
316
|
+
// and below...
|
317
|
+
} else if (range.start + range.length <= oldRange.start) {
|
318
|
+
childSet.length = 0 ; // full render
|
319
|
+
|
320
|
+
// okay, the ranges do overlap. are they equal?
|
321
|
+
} else if (SC.rangesEqual(oldRange, range)) {
|
322
|
+
range = SC.EMPTY_RANGE ; // nothing to render
|
323
|
+
|
324
|
+
// nope, is the old range inside the new range?
|
325
|
+
} else if (range.start <= oldRange.start && range.start + range.length >= oldRange.start + oldRange.length) {
|
326
|
+
// need to render two ranges...all pre-existing views are valid
|
327
|
+
context.partialUpdate = YES ;
|
328
|
+
range2 = { start: oldRange.start + oldRange.length, length: (range.start + range.length) - (oldRange.start + oldRange.length) } ;
|
329
|
+
range.length = oldRange.start - range.start ;
|
330
|
+
|
331
|
+
// nope, is the new range inside the old range?
|
332
|
+
} else if (range.start >= oldRange.start && range.start + range.length <= oldRange.start + oldRange.length) {
|
333
|
+
// need to remove unused childNodes at both ends, start with bottom...
|
334
|
+
idx = oldRange.start ;
|
335
|
+
end = range.start ;
|
336
|
+
while (idx < end) {
|
337
|
+
if (SC.DEBUG_PARTIAL_RENDER) console.log('looping on bottom range');
|
338
|
+
childId = childSet[idx] ;
|
339
|
+
if (childId) context.remove(childId) ;
|
340
|
+
if (SC.DEBUG_PARTIAL_RENDER) console.log('deleting content at index %@'.fmt(idx));
|
341
|
+
delete childSet[idx] ;
|
342
|
+
++idx ;
|
343
|
+
}
|
344
|
+
|
345
|
+
// now remove unused childNodes at the top of the range...
|
346
|
+
idx = range.start + range.length ;
|
347
|
+
end = oldRange.start + oldRange.length ;
|
348
|
+
while (idx < end) {
|
349
|
+
if (SC.DEBUG_PARTIAL_RENDER) console.log('looping on top range');
|
350
|
+
childId = childSet[idx] ;
|
351
|
+
if (childId) context.remove(childId) ;
|
352
|
+
if (SC.DEBUG_PARTIAL_RENDER) console.log('deleting content at index %@'.fmt(idx));
|
353
|
+
delete childSet[idx] ;
|
354
|
+
++idx ;
|
355
|
+
}
|
356
|
+
|
357
|
+
range = SC.EMPTY_RANGE ; // nothing to render
|
358
|
+
|
359
|
+
// nope, is the new range lower than the old range?
|
360
|
+
} else if (range.start < oldRange.start) {
|
361
|
+
context.partialUpdate = YES ;
|
362
|
+
|
363
|
+
// need to remove unused childNodes at the top of the old range
|
364
|
+
idx = range.start + range.length ;
|
365
|
+
end = oldRange.start + oldRange.length ;
|
366
|
+
while (idx < end) {
|
367
|
+
if (SC.DEBUG_PARTIAL_RENDER) console.log('looping on top only');
|
368
|
+
childId = childSet[idx] ;
|
369
|
+
if (childId) context.remove(childId) ;
|
370
|
+
if (SC.DEBUG_PARTIAL_RENDER) console.log('deleting content at index %@'.fmt(idx));
|
371
|
+
delete childSet[idx] ;
|
372
|
+
++idx ;
|
373
|
+
}
|
374
|
+
|
375
|
+
range.length = Math.min(range.length, oldRange.start - range.start) ;
|
376
|
+
|
377
|
+
// nope, so the new range is higher than the old range
|
378
|
+
} else {
|
379
|
+
context.partialUpdate = YES ;
|
380
|
+
|
381
|
+
// need to remove unused childNodes at the bottom of the old range
|
382
|
+
idx = oldRange.start ;
|
383
|
+
end = range.start ;
|
384
|
+
while (idx < end) {
|
385
|
+
if (SC.DEBUG_PARTIAL_RENDER) console.log('looping on bottom only');
|
386
|
+
childId = childSet[idx] ;
|
387
|
+
if (childId) context.remove(childId) ;
|
388
|
+
if (SC.DEBUG_PARTIAL_RENDER) console.log('deleting content at index %@'.fmt(idx));
|
389
|
+
delete childSet[idx] ;
|
390
|
+
++idx ;
|
391
|
+
}
|
392
|
+
|
393
|
+
end = range.start + range.length ;
|
394
|
+
range.start = oldRange.start + oldRange.length ;
|
395
|
+
range.length = end - range.start ;
|
396
|
+
}
|
397
|
+
}
|
398
|
+
|
399
|
+
if (SC.SANITY_CHECK_PARTIAL_RENDER) {
|
400
|
+
if (range.length < 0) throw "range.length is " + range.length ;
|
401
|
+
if (range.length > maxLen) throw "range.length is " + range.length + ', max length is ' + maxLen ;
|
402
|
+
if (range.start < 0) throw "range.start is " + range.start ;
|
403
|
+
if (range2) {
|
404
|
+
if (range2.length < 0) throw "range2.length is " + range2.length ;
|
405
|
+
if (range2.length > maxLen) throw "range2.length is " + range2.length + ', max length is ' + maxLen ;
|
406
|
+
if (range2.start < 0) throw "range2.start is " + range2.start ;
|
407
|
+
}
|
408
|
+
}
|
409
|
+
|
410
|
+
if (SC.DEBUG_PARTIAL_RENDER) {
|
411
|
+
console.log('rendering = ') ;
|
412
|
+
console.log(range) ;
|
413
|
+
if (range2) {
|
414
|
+
console.log('also rendering = ') ;
|
415
|
+
console.log(range2) ;
|
416
|
+
}
|
417
|
+
}
|
418
|
+
}
|
419
|
+
|
420
|
+
idx = SC.maxRange(range) ;
|
421
|
+
|
422
|
+
var baseKey = SC.guidFor(this) + '_' ;
|
423
|
+
var guids = this._itemViewGuids, guid;
|
424
|
+
if (!guids) this._itemViewGuids = guids = {};
|
425
|
+
|
426
|
+
// TODO: Use SC.IndexSet, not separate ranges, once it's ready.
|
427
|
+
// This will also make it possible to do partial updates during content
|
428
|
+
// and selection changes. Now we always do a full update.
|
429
|
+
|
430
|
+
while (--idx >= range.start) {
|
431
|
+
c = content.objectAt(idx) ;
|
432
|
+
if (SC.DEBUG_PARTIAL_RENDER) console.log('rendering content(%@) at index %@'.fmt(c.unread, idx));
|
433
|
+
|
434
|
+
// use cache of item view guids to avoid creating temporary objects
|
435
|
+
guid = SC.guidFor(c);
|
436
|
+
if (!(key = guids[guid])) key = guids[guid] = baseKey+guid;
|
437
|
+
|
438
|
+
itemView.set('content', c) ;
|
439
|
+
itemView.set('isSelected', (selection.indexOf(c) == -1) ? NO : YES) ;
|
440
|
+
itemView.layerId = key ; // cannot use .set, layerId is RO
|
441
|
+
if (SC.SANITY_CHECK_PARTIAL_RENDER && childSet[idx]) throw key + '(' + c.unread + ')'+ ' at index ' + idx ; // should not re-render a child in the index!
|
442
|
+
childSet[idx] = key ;
|
443
|
+
itemView.adjust(this.itemViewLayoutAtContentIndex(idx)) ;
|
444
|
+
context = context.begin(itemView.get('tagName')) ;
|
445
|
+
itemView.prepareContext(context, YES) ;
|
446
|
+
context = context.end() ;
|
447
|
+
}
|
448
|
+
|
449
|
+
if (range2) {
|
450
|
+
idx = SC.maxRange(range2) ;
|
451
|
+
while (--idx >= range2.start) {
|
452
|
+
c = content.objectAt(idx) ;
|
453
|
+
if (SC.DEBUG_PARTIAL_RENDER) console.log('rendering content(%@) at index %@'.fmt(c.unread, idx));
|
454
|
+
|
455
|
+
// use cache of item view guids to avoid creating temporary objects
|
456
|
+
guid = SC.guidFor(c);
|
457
|
+
if (!(key = guids[guid])) key = guids[guid] = baseKey+guid;
|
458
|
+
|
459
|
+
itemView.set('content', c) ;
|
460
|
+
itemView.set('isSelected', (selection.indexOf(c) == -1) ? NO : YES) ;
|
461
|
+
itemView.layerId = key ; // cannot use .set, layerId is RO
|
462
|
+
if (SC.SANITY_CHECK_PARTIAL_RENDER && childSet[idx]) throw key + '(' + c.unread + ')'+ ' at index ' + idx ; // should not re-render a child in the index!
|
463
|
+
childSet[idx] = key ;
|
464
|
+
itemView.adjust(this.itemViewLayoutAtContentIndex(idx)) ;
|
465
|
+
context = context.begin(itemView.get('tagName')) ;
|
466
|
+
itemView.prepareContext(context, YES) ;
|
467
|
+
context = context.end() ;
|
468
|
+
}
|
469
|
+
}
|
470
|
+
|
471
|
+
if (SC.DEBUG_PARTIAL_RENDER) console.log('******************************') ;
|
472
|
+
|
473
|
+
this.set('isDirty', NO);
|
474
|
+
this.endPropertyChanges() ;
|
475
|
+
if (SC.BENCHMARK_RENDER) SC.Benchmark.end(bkey);
|
476
|
+
},
|
477
|
+
|
478
|
+
// ..........................................................
|
479
|
+
// SUBCLASS SUPPORT
|
480
|
+
//
|
481
|
+
|
482
|
+
insertionOrientation: SC.VERTICAL_ORIENTATION,
|
483
|
+
|
484
|
+
/** @private
|
485
|
+
Overrides default CollectionView method to compute the minimim height
|
486
|
+
of the list view.
|
487
|
+
*/
|
488
|
+
computeLayout: function() {
|
489
|
+
var content = this.get('content') ;
|
490
|
+
var rows = (content) ? content.get('length') : 0 ;
|
491
|
+
|
492
|
+
// use this cached layout hash to avoid allocing memory...
|
493
|
+
var ret = this._cachedLayoutHash ;
|
494
|
+
if (!ret) ret = this._cachedLayoutHash = {};
|
495
|
+
|
496
|
+
// set minHeight
|
497
|
+
ret.minHeight = this.offsetForRowAtContentIndex(rows);
|
498
|
+
return ret;
|
499
|
+
},
|
500
|
+
|
501
|
+
/** @private
|
502
|
+
Calculates the visible content range in the specified frame. If
|
503
|
+
uniform rows are set, this will use some simple math. Otherwise it will
|
504
|
+
compute all row offsets leading up to the frame.
|
505
|
+
*/
|
506
|
+
contentRangeInFrame: function(frame) {
|
507
|
+
// console.log('contentRangeInFrame invoked on %@ with frame {%@, %@, %@, %@}'.fmt(this, frame.x, frame.y, frame.width, frame.height));
|
508
|
+
var min, max, ret, rowHeight ;
|
509
|
+
var minY = SC.minY(frame), maxY = SC.maxY(frame);
|
510
|
+
// use some simple math...
|
511
|
+
if (this.get('hasUniformRowHeights')) {
|
512
|
+
rowHeight = this.get('rowHeight') || 20 ;
|
513
|
+
min = Math.max(0,Math.floor(minY / rowHeight)-1) ;
|
514
|
+
max = Math.ceil(maxY / rowHeight) ;
|
515
|
+
|
516
|
+
var content = this.get('content') ;
|
517
|
+
min = Math.min(min, content.get('length')) ;
|
518
|
+
max = Math.min(max, content.get('length')) ;
|
519
|
+
|
520
|
+
// convert to range...
|
521
|
+
ret = { start: min, length: max - min } ;
|
522
|
+
|
523
|
+
// otherwise, get the cached row offsets...
|
524
|
+
} else {
|
525
|
+
content = this.get('content');
|
526
|
+
var len = (content ? content.get('length') : 0), offset = 0;
|
527
|
+
|
528
|
+
// console.log('contentRangeInFrame content length is %@'.fmt(len));
|
529
|
+
|
530
|
+
// console.log('minY = ' + minY) ;
|
531
|
+
// console.log('maxY = ' + maxY) ;
|
532
|
+
|
533
|
+
min = null;
|
534
|
+
max = 0;
|
535
|
+
do {
|
536
|
+
offset = this.offsetForRowAtContentIndex(max); // add offset.
|
537
|
+
// console.log('offset is now %@'.fmt(offset));
|
538
|
+
if ((min===null) && (offset >= minY)) min = max; // set min
|
539
|
+
max++ ;
|
540
|
+
} while (max<len && offset < maxY);
|
541
|
+
|
542
|
+
// console.log('min = ' + min) ;
|
543
|
+
// console.log('max = ' + max) ;
|
544
|
+
|
545
|
+
// convert to range...
|
546
|
+
ret = { start: Math.max(min-1, 0), length: Math.min(max - min + 2, len) } ;
|
547
|
+
}
|
548
|
+
|
549
|
+
// console.log('contentRangeInFrame is {%@, %@}'.fmt(ret.start, ret.length));
|
550
|
+
return ret ;
|
551
|
+
},
|
552
|
+
|
553
|
+
/** @private */
|
554
|
+
itemViewLayoutAtContentIndex: function(contentIndex) {
|
555
|
+
// console.log('%@.itemViewLayoutAtContentIndex(%@)'.fmt(this, contentIndex));
|
556
|
+
var layout = { left: 0, right: 0 } ;
|
557
|
+
|
558
|
+
// set top & height...
|
559
|
+
layout.top = this.offsetForRowAtContentIndex(contentIndex) ;
|
560
|
+
layout.height = this.heightForRowAtContentIndex(contentIndex) ;
|
561
|
+
|
562
|
+
return layout ;
|
563
|
+
},
|
564
|
+
|
565
|
+
insertionPointClass: SC.View.extend({
|
566
|
+
emptyElement: '<div><span class="anchor"></span></div>',
|
567
|
+
classNames: ['sc-list-insertion-point'],
|
568
|
+
layout: { top: -6, height: 2, left: 4, right: 2 }
|
569
|
+
}),
|
570
|
+
|
571
|
+
// TODO refactor code, remove duplication
|
572
|
+
showInsertionPoint: function(itemView, dropOperation) {
|
573
|
+
if (!itemView) {
|
574
|
+
// show insertion point below final itemView
|
575
|
+
var content = this.get('content') ;
|
576
|
+
content = content.objectAt(content.get('length')-1) ;
|
577
|
+
itemView = this.itemViewForContent(content) ;
|
578
|
+
|
579
|
+
if (!itemView) return ;
|
580
|
+
|
581
|
+
var f = itemView.get('frame') ;
|
582
|
+
var top = f.y, height = f.height ;
|
583
|
+
|
584
|
+
if (!this._insertionPointView) {
|
585
|
+
this._insertionPointView = this.insertionPointClass.create() ;
|
586
|
+
}
|
587
|
+
|
588
|
+
var insertionPoint = this._insertionPointView ;
|
589
|
+
if (insertionPoint.get('parentView') !== itemView.get('parentView')) {
|
590
|
+
itemView.get('parentView').appendChild(insertionPoint) ;
|
591
|
+
}
|
592
|
+
|
593
|
+
insertionPoint.adjust({ top: top + height }) ;
|
594
|
+
return ;
|
595
|
+
}
|
596
|
+
|
597
|
+
// if drop on, then just add a class...
|
598
|
+
if (dropOperation === SC.DROP_ON) {
|
599
|
+
if (itemView !== this._dropOnInsertionPoint) {
|
600
|
+
this.hideInsertionPoint() ;
|
601
|
+
itemView.$().addClass('drop-target') ;
|
602
|
+
this._dropOnInsertionPoint = itemView ;
|
603
|
+
}
|
604
|
+
|
605
|
+
} else {
|
606
|
+
if (this._dropOnInsertionPoint) {
|
607
|
+
this._dropOnInsertionPoint.$().removeClass('drop-target') ;
|
608
|
+
this._dropOnInsertionPoint = null ;
|
609
|
+
}
|
610
|
+
|
611
|
+
if (!this._insertionPointView) {
|
612
|
+
this._insertionPointView = this.insertionPointClass.create() ;
|
613
|
+
}
|
614
|
+
|
615
|
+
insertionPoint = this._insertionPointView ;
|
616
|
+
if (insertionPoint.get('parentView') !== itemView.get('parentView')) {
|
617
|
+
itemView.get('parentView').appendChild(insertionPoint) ;
|
618
|
+
}
|
619
|
+
|
620
|
+
var frame = itemView.get('frame') ;
|
621
|
+
insertionPoint.adjust({ top: itemView.get('frame').y }) ;
|
622
|
+
}
|
623
|
+
|
624
|
+
},
|
625
|
+
|
626
|
+
hideInsertionPoint: function() {
|
627
|
+
var insertionPoint = this._insertionPointView ;
|
628
|
+
if (insertionPoint) insertionPoint.removeFromParent() ;
|
629
|
+
|
630
|
+
if (this._dropOnInsertionPoint) {
|
631
|
+
this._dropOnInsertionPoint.removeClassName('drop-target') ;
|
632
|
+
this._dropOnInsertionPoint = null ;
|
633
|
+
}
|
634
|
+
},
|
635
|
+
|
636
|
+
// We can do this much faster programatically using the rowHeight
|
637
|
+
insertionIndexForLocation: function(loc, dropOperation) {
|
638
|
+
// console.log('insertionIndexForLocation called on %@'.fmt(this));
|
639
|
+
var f = this.get('clippingFrame') ;
|
640
|
+
var sf = f ; // FIXME this.get('scrollFrame') ;
|
641
|
+
var retOp = SC.DROP_BEFORE ;
|
642
|
+
|
643
|
+
// find the rowHeight and offset to work with
|
644
|
+
var offset = loc.y - f.y - sf.y ;
|
645
|
+
var rowOffset, rowHeight, idx ;
|
646
|
+
|
647
|
+
// do some simple math if we have uniform row heights...
|
648
|
+
if (this.get('hasUniformRowHeights')) {
|
649
|
+
rowHeight = this.get('rowHeight') || 0 ;
|
650
|
+
idx = Math.floor(offset / rowHeight) ;
|
651
|
+
rowOffset = idx * rowHeight ;
|
652
|
+
// otherwise, use the rowOffsets cache...
|
653
|
+
} else {
|
654
|
+
// get caches
|
655
|
+
var offsets = this._list_rowOffsets;
|
656
|
+
if (!offsets) offsets = this._list_rowOffsets = [] ;
|
657
|
+
|
658
|
+
// console.log('offset of pointer is %@'.fmt(offset));
|
659
|
+
// console.log('offsets are %@'.fmt(offsets.join(', ')));
|
660
|
+
|
661
|
+
// OK, now try the fast path...if undefined, loop backwards until we
|
662
|
+
// find an offset that IS cached...
|
663
|
+
var len = offsets.length, cur = len, ret;
|
664
|
+
|
665
|
+
// if the cached value was undefined, loop backwards through the offsets
|
666
|
+
// hash looking for a cached value to start from
|
667
|
+
while (cur>0) {
|
668
|
+
ret = offsets[--cur];
|
669
|
+
if (ret < offset) break ;
|
670
|
+
}
|
671
|
+
|
672
|
+
rowOffset = offset[cur] ;
|
673
|
+
rowHeight = this._list_heightForRowAtContentIndex(cur) ;
|
674
|
+
|
675
|
+
// console.log('rowHeight is %@'.fmt(rowHeight));
|
676
|
+
|
677
|
+
idx = cur ;
|
678
|
+
}
|
679
|
+
|
680
|
+
// find the percent through the row...
|
681
|
+
var percentage = ((offset - rowOffset) / rowHeight) ;
|
682
|
+
|
683
|
+
// console.log('percentage is %@'.fmt(percentage));
|
684
|
+
|
685
|
+
// if the dropOperation is SC.DROP_ON and we are in the center 60%
|
686
|
+
// then return the current item.
|
687
|
+
if (dropOperation === SC.DROP_ON) {
|
688
|
+
if (percentage > 0.80) idx++ ;
|
689
|
+
if ((percentage >= 0.20) && (percentage <= 0.80)) {
|
690
|
+
retOp = SC.DROP_ON;
|
691
|
+
}
|
692
|
+
} else {
|
693
|
+
if (percentage > 0.45) idx++ ;
|
694
|
+
}
|
695
|
+
|
696
|
+
if (idx !== this._idx || retOp !== this._retOp) {
|
697
|
+
// console.log('insertionIndex is %@, op is %@'.fmt(idx, retOp));
|
698
|
+
this._idx = idx ;
|
699
|
+
this._retOp = retOp ;
|
700
|
+
}
|
701
|
+
|
702
|
+
// console.log('[ret, retOp] is [%@, %@]'.fmt(ret, retOp));
|
703
|
+
return [idx, retOp] ;
|
704
|
+
}
|
705
|
+
|
706
|
+
});
|