sproutit-sproutcore 1.0.20090721145236 → 1.0.20090721145251
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/Rakefile +189 -54
- data/VERSION.yml +5 -0
- data/frameworks/sproutcore/Buildfile +64 -0
- data/frameworks/sproutcore/HISTORY +682 -0
- data/frameworks/sproutcore/README +23 -0
- data/frameworks/sproutcore/apps/docs/core.js +27 -0
- data/frameworks/sproutcore/apps/docs/english.lproj/loading.rhtml +9 -0
- data/frameworks/sproutcore/apps/docs/english.lproj/main_page.js +22 -0
- data/frameworks/sproutcore/apps/docs/english.lproj/strings.js +15 -0
- data/frameworks/sproutcore/apps/docs/main.js +30 -0
- data/frameworks/sproutcore/apps/tests/controllers/detail.js +16 -0
- data/frameworks/sproutcore/apps/tests/controllers/source.js +29 -0
- data/frameworks/sproutcore/apps/tests/controllers/target.js +26 -0
- data/frameworks/sproutcore/apps/tests/controllers/targets.js +86 -0
- data/frameworks/sproutcore/apps/tests/controllers/tests.js +33 -0
- data/frameworks/sproutcore/apps/tests/core.js +133 -0
- data/frameworks/sproutcore/apps/tests/data_source.js +96 -0
- data/frameworks/sproutcore/apps/tests/english.lproj/loading.rhtml +9 -0
- data/frameworks/sproutcore/apps/tests/english.lproj/main_page.css +39 -0
- data/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +232 -0
- data/frameworks/sproutcore/apps/tests/english.lproj/strings.js +26 -0
- data/frameworks/sproutcore/apps/tests/fixtures/target.js +87 -0
- data/frameworks/sproutcore/apps/tests/fixtures/test.js +44 -0
- data/frameworks/sproutcore/apps/tests/main.js +28 -0
- data/frameworks/sproutcore/apps/tests/models/target.js +92 -0
- data/frameworks/sproutcore/apps/tests/models/test.js +48 -0
- data/frameworks/sproutcore/apps/tests/states/no_targets.js +26 -0
- data/frameworks/sproutcore/apps/tests/states/ready.js +56 -0
- data/frameworks/sproutcore/apps/tests/states/ready_detail.js +41 -0
- data/frameworks/sproutcore/apps/tests/states/ready_empty.js +48 -0
- data/frameworks/sproutcore/apps/tests/states/ready_list.js +41 -0
- data/frameworks/sproutcore/apps/tests/states/ready_loading.js +44 -0
- data/frameworks/sproutcore/apps/tests/states/ready_no_tests.js +31 -0
- data/frameworks/sproutcore/apps/tests/states/start.js +39 -0
- data/frameworks/sproutcore/apps/tests/tests/controllers/detail.js +15 -0
- data/frameworks/sproutcore/apps/tests/tests/controllers/source.js +15 -0
- data/frameworks/sproutcore/apps/tests/tests/controllers/target.js +15 -0
- data/frameworks/sproutcore/apps/tests/tests/controllers/targets.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/tests/tests/views/offset_checkbox.js +15 -0
- data/frameworks/sproutcore/apps/tests/views/offset_checkbox.js +26 -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/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 +273 -0
- data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +311 -0
- data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures_with_queries.js +238 -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 +54 -0
- data/frameworks/sproutcore/frameworks/datastore/models/record.js +561 -0
- data/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +423 -0
- data/frameworks/sproutcore/frameworks/datastore/system/many_array.js +158 -0
- data/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +488 -0
- data/frameworks/sproutcore/frameworks/datastore/system/query.js +979 -0
- data/frameworks/sproutcore/frameworks/datastore/system/record_array.js +287 -0
- data/frameworks/sproutcore/frameworks/datastore/system/store.js +2007 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +121 -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/many_attribute.js +94 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/core_methods.js +30 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/destroy.js +73 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/models/record/normalize.js +238 -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 +204 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/many_array/core_methods.js +178 -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 +117 -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/query/compare_records.js +126 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation.js +165 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation_of_records.js +82 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/find_all.js +362 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/parsing.js +170 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/record_type_is.js +43 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_comparisons.js +60 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_query_extensions.js +67 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +164 -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 +126 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +73 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +72 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataHashDidChange.js +78 -0
- data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +249 -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 +61 -0
- data/frameworks/sproutcore/frameworks/deprecated/core.js +59 -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 +673 -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 +75 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/classic_responder.js +312 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/event.js +58 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/globals.js +20 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/misc.js +58 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/node_descriptor.js +72 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/object.js +122 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/path_module.js +432 -0
- data/frameworks/sproutcore/frameworks/deprecated/system/string.js +107 -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 +29 -0
- data/frameworks/sproutcore/frameworks/designer/coders/localization.js +27 -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 +86 -0
- data/frameworks/sproutcore/frameworks/designer/ext/view.js +38 -0
- data/frameworks/sproutcore/frameworks/designer/views/controls/button.js +17 -0
- data/frameworks/sproutcore/frameworks/designer/views/designer.js +569 -0
- data/frameworks/sproutcore/frameworks/designer/views/label.js +16 -0
- data/frameworks/sproutcore/frameworks/designer/views/mixins/button.js +11 -0
- data/frameworks/sproutcore/frameworks/designer/views/tab.js +16 -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/drag.css +6 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/icons.css +943 -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 +209 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +100 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/modal.css +5 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/panel.css +95 -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 +62 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/split.css +70 -0
- data/frameworks/sproutcore/frameworks/desktop/english.lproj/split_divider.css +9 -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/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_row_delegate.js +61 -0
- data/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +283 -0
- data/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +247 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/alert.js +408 -0
- data/frameworks/sproutcore/frameworks/desktop/panes/menu.js +651 -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 +400 -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 +827 -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 +55 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +59 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/methods.js +10 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/ui.js +35 -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 +84 -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 +159 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +144 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/ui.js +99 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/content.js +249 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deleteSelection.js +82 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deselect.js +199 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/itemViewForContentIndex.js +288 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/layerIdFor.js +65 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/length.js +88 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +165 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/nowShowing.js +121 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/reload.js +177 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/select.js +240 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectNextItem.js +191 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectPreviousItem.js +197 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selection.js +141 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/ui_diagram.js +182 -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/rowDelegate.js +183 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowHeightForContentIndex.js +133 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowOffsetForContentIndex.js +132 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_outline.js +56 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +167 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_simple.js +127 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +284 -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 +102 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/ui.js +70 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +95 -0
- data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +222 -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 +100 -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/stacked/ui_comments.js +231 -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/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 +331 -0
- data/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +105 -0
- data/frameworks/sproutcore/frameworks/desktop/views/collection.js +2757 -0
- data/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +44 -0
- data/frameworks/sproutcore/frameworks/desktop/views/form.js +594 -0
- data/frameworks/sproutcore/frameworks/desktop/views/grid.js +201 -0
- data/frameworks/sproutcore/frameworks/desktop/views/list.js +540 -0
- data/frameworks/sproutcore/frameworks/desktop/views/list_item.js +660 -0
- data/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +587 -0
- data/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +68 -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 +204 -0
- data/frameworks/sproutcore/frameworks/desktop/views/scroll.js +690 -0
- data/frameworks/sproutcore/frameworks/desktop/views/scroller.js +226 -0
- data/frameworks/sproutcore/frameworks/desktop/views/segmented.js +525 -0
- data/frameworks/sproutcore/frameworks/desktop/views/select_field.js +331 -0
- data/frameworks/sproutcore/frameworks/desktop/views/separator.js +37 -0
- data/frameworks/sproutcore/frameworks/desktop/views/slider.js +180 -0
- data/frameworks/sproutcore/frameworks/desktop/views/source_list.js +47 -0
- data/frameworks/sproutcore/frameworks/desktop/views/source_list_group.js +169 -0
- data/frameworks/sproutcore/frameworks/desktop/views/split.js +677 -0
- data/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +55 -0
- data/frameworks/sproutcore/frameworks/desktop/views/stacked.js +101 -0
- data/frameworks/sproutcore/frameworks/desktop/views/tab.js +191 -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 +509 -0
- data/frameworks/sproutcore/frameworks/foundation/controllers/controller.js +45 -0
- data/frameworks/sproutcore/frameworks/foundation/controllers/object.js +323 -0
- data/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +109 -0
- data/frameworks/sproutcore/frameworks/foundation/core.js +136 -0
- data/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +194 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/blank.gif +0 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +68 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/button_view.css +55 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/core.css +221 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/debug/control-test-pane.css +9 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-logo.png +0 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/label.css +30 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/static_layout.css +5 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/strings.js +15 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/text_field.css +45 -0
- data/frameworks/sproutcore/frameworks/foundation/english.lproj/view.css +45 -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/license.js +19 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/button.js +299 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/collection_content.js +171 -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/inline_text_field.js +462 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/selection_support.js +232 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +132 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/string.js +251 -0
- data/frameworks/sproutcore/frameworks/foundation/mixins/tree_item_content.js +159 -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 +584 -0
- data/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +887 -0
- data/frameworks/sproutcore/frameworks/foundation/protocols/inline_editor_delegate.js +84 -0
- data/frameworks/sproutcore/frameworks/foundation/system/application.js +36 -0
- data/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +492 -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/datetime.js +729 -0
- data/frameworks/sproutcore/frameworks/foundation/system/error.js +93 -0
- data/frameworks/sproutcore/frameworks/foundation/system/event.js +853 -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 +195 -0
- data/frameworks/sproutcore/frameworks/foundation/system/render_context.js +904 -0
- data/frameworks/sproutcore/frameworks/foundation/system/request.js +380 -0
- data/frameworks/sproutcore/frameworks/foundation/system/responder.js +120 -0
- data/frameworks/sproutcore/frameworks/foundation/system/responder_context.js +243 -0
- data/frameworks/sproutcore/frameworks/foundation/system/root_responder.js +391 -0
- data/frameworks/sproutcore/frameworks/foundation/system/routes.js +487 -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 +165 -0
- data/frameworks/sproutcore/frameworks/foundation/system/utils.js +425 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/array_case.js +182 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/enum_case.js +193 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/null_case.js +64 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/single_case.js +136 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/empty_case.js +82 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/multiple_case.js +111 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/single_case.js +193 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/single_enumerable_case.js +179 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/controllers/tree/outline_case.js +108 -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/button/keyEquivalents.js +35 -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/mixins/staticLayout.js +128 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/mixins/string.js +17 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/flat_case.js +325 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/group_case.js +718 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/outline_case.js +484 -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/datetime.js +151 -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 +127 -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 +101 -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 +23 -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/label/ui.js +148 -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/text_field/methods.js +76 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +250 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/clippingFrame.js +133 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/convertFrames.js +246 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/createChildViews.js +122 -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/isVisible.js +51 -0
- data/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisibleInWindow.js +113 -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 +328 -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 +146 -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 +287 -0
- data/frameworks/sproutcore/frameworks/foundation/views/image.js +161 -0
- data/frameworks/sproutcore/frameworks/foundation/views/label.js +271 -0
- data/frameworks/sproutcore/frameworks/foundation/views/text_field.js +257 -0
- data/frameworks/sproutcore/frameworks/foundation/views/view.js +2405 -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 +12 -0
- data/frameworks/sproutcore/frameworks/runtime/core.js +856 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +238 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/indexOf.js +33 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/insertAt.js +121 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/objectAt.js +34 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/popObject.js +50 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/pushObject.js +46 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/rangeObserver.js +371 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeAt.js +100 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeObject.js +49 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/replace.js +94 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/shiftObject.js +50 -0
- data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/unshiftObject.js +47 -0
- data/frameworks/sproutcore/frameworks/runtime/license.js +28 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/array.js +613 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +64 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/delegate_support.js +108 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +1258 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +104 -0
- data/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +1305 -0
- data/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +141 -0
- data/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +148 -0
- data/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +152 -0
- data/frameworks/sproutcore/frameworks/runtime/protocols/observable_protocol.js +40 -0
- data/frameworks/sproutcore/frameworks/runtime/protocols/sparse_array_delegate.js +131 -0
- data/frameworks/sproutcore/frameworks/runtime/system/binding.js +915 -0
- data/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +107 -0
- data/frameworks/sproutcore/frameworks/runtime/system/index_set.js +1166 -0
- data/frameworks/sproutcore/frameworks/runtime/system/object.js +801 -0
- data/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +265 -0
- data/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +241 -0
- data/frameworks/sproutcore/frameworks/runtime/system/selection_set.js +649 -0
- data/frameworks/sproutcore/frameworks/runtime/system/set.js +375 -0
- data/frameworks/sproutcore/frameworks/runtime/system/sparse_array.js +295 -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/compare.js +44 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/console.js +16 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/core/guidFor.js +147 -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/array.js +57 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable.js +611 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +587 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/propertyChanges.js +132 -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/private/observer_queue/isObservingSuspended.js +55 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +265 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/add.js +195 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/clone.js +43 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/contains.js +74 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/create.js +42 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexAfter.js +38 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexBefore.js +38 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/intersects.js +74 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/max.js +40 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/min.js +40 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/rangeStartForIndex.js +36 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/remove.js +189 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/without.js +89 -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/range_observer/create.js +59 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/destroy.js +75 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/objectPropertyDidChange.js +117 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/rangeDidChange.js +110 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/update.js +65 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +120 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/add.js +92 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/copy.js +17 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/indexSetForSource.js +85 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/isEqual.js +60 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/remove.js +87 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/set.js +292 -0
- data/frameworks/sproutcore/frameworks/runtime/tests/system/sparse_array.js +122 -0
- data/frameworks/sproutcore/frameworks/testing/core.js +196 -0
- data/frameworks/sproutcore/frameworks/testing/english.lproj/additions.css +8 -0
- data/frameworks/sproutcore/frameworks/testing/english.lproj/runner.css +126 -0
- data/frameworks/sproutcore/frameworks/testing/english.lproj/testsuite.css +131 -0
- data/frameworks/sproutcore/frameworks/testing/extras.js +17 -0
- data/frameworks/sproutcore/frameworks/testing/jquery.js +3559 -0
- data/frameworks/sproutcore/frameworks/testing/qunit.js +827 -0
- data/frameworks/sproutcore/frameworks/testing/system/dump.js +205 -0
- data/frameworks/sproutcore/frameworks/testing/system/equiv.js +201 -0
- data/frameworks/sproutcore/frameworks/testing/system/plan.js +691 -0
- data/frameworks/sproutcore/frameworks/testing/system/runner.js +209 -0
- data/frameworks/sproutcore/frameworks/testing/system/suite.js +228 -0
- data/frameworks/sproutcore/frameworks/testing/utils.js +62 -0
- data/frameworks/sproutcore/lib/index.rhtml +121 -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/english.lproj/button.css +331 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/checkbox.css +91 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/collection.css +134 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/core.css +60 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/disclosure.css +55 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-repeat-x.png +0 -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 +11 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/list_item.css +30 -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 +26 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/radio.css +122 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +279 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/slider.css +94 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/split_view.css +27 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/tab.css +18 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/text_field.css +10 -0
- data/frameworks/sproutcore/themes/standard_theme/english.lproj/toolbar.css +7 -0
- data/lib/sproutcore.rb +9 -1
- data/lib/sproutcore/tools/build.rb +1 -1
- 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.rb +170 -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.rb +77 -0
- data/lib/thor/lib/thor/tasks/package.rb +18 -0
- data/lib/thor/lib/thor/util.rb +75 -0
- data/lib/thor/script/destroy +14 -0
- data/lib/thor/script/generate +14 -0
- data/lib/thor/task.thor +15 -0
- metadata +664 -351
- data/VERSION +0 -1
- data/spec/buildtasks/build/copy_spec.rb +0 -60
- data/spec/buildtasks/build/spec_helper.rb +0 -36
- data/spec/buildtasks/manifest/catalog_spec.rb +0 -48
- data/spec/buildtasks/manifest/hide_buildfiles_spec.rb +0 -125
- data/spec/buildtasks/manifest/localize_spec.rb +0 -97
- data/spec/buildtasks/manifest/prepare_build_tasks/combine_spec.rb +0 -246
- data/spec/buildtasks/manifest/prepare_build_tasks/css_spec.rb +0 -87
- data/spec/buildtasks/manifest/prepare_build_tasks/html_spec.rb +0 -175
- data/spec/buildtasks/manifest/prepare_build_tasks/javascript_spec.rb +0 -65
- data/spec/buildtasks/manifest/prepare_build_tasks/minify_spec.rb +0 -70
- data/spec/buildtasks/manifest/prepare_build_tasks/packed_spec.rb +0 -152
- data/spec/buildtasks/manifest/prepare_build_tasks/sass_spec.rb +0 -98
- data/spec/buildtasks/manifest/prepare_build_tasks/strings_spec.rb +0 -64
- data/spec/buildtasks/manifest/prepare_build_tasks/tests_spec.rb +0 -163
- data/spec/buildtasks/manifest/prepare_spec.rb +0 -43
- data/spec/buildtasks/manifest/spec_helper.rb +0 -35
- data/spec/buildtasks/target_spec.rb +0 -214
- data/spec/fixtures/builder_tests/Buildfile +0 -15
- data/spec/fixtures/builder_tests/apps/combine_test/a.js +0 -1
- data/spec/fixtures/builder_tests/apps/combine_test/b.js +0 -1
- data/spec/fixtures/builder_tests/apps/combine_test/c.js +0 -1
- data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/a.css +0 -1
- data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/b.css +0 -1
- data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/c.css +0 -1
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/bar1_sample.rhtml +0 -2
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/erb_sample.html.erb +0 -1
- 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 +0 -1
- data/spec/fixtures/builder_tests/apps/html_test/english.lproj/strings.js +0 -4
- 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 +0 -4
- data/spec/fixtures/builder_tests/apps/html_test/lib/layout_template.rhtml +0 -1
- data/spec/fixtures/builder_tests/apps/html_test/scripts.js +0 -0
- data/spec/fixtures/builder_tests/apps/javascript_test/sc_static.js +0 -15
- data/spec/fixtures/builder_tests/apps/javascript_test/sc_super.js +0 -4
- data/spec/fixtures/builder_tests/apps/javascript_test/strings.js +0 -7
- data/spec/fixtures/builder_tests/apps/sass_test/sample.sass +0 -3
- data/spec/fixtures/builder_tests/apps/strings_test/lproj/strings.js +0 -8
- data/spec/fixtures/builder_tests/apps/stylesheet_test/build_directives.css +0 -9
- data/spec/fixtures/builder_tests/apps/stylesheet_test/sc_static.css +0 -12
- data/spec/fixtures/builder_tests/apps/test_test/lib/alt_layout.rhtml +0 -1
- data/spec/fixtures/builder_tests/apps/test_test/lib/test_layout.rhtml +0 -3
- data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test.js +0 -1
- data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test2.js +0 -1
- data/spec/fixtures/builder_tests/apps/test_test/tests/rhtml_test.rhtml +0 -4
- 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/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 +0 -4
- data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/test.rhtml +0 -1
- 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 +0 -1
- data/spec/fixtures/builder_tests/frameworks/req_target_2/javascript.js +0 -1
- 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 +0 -1
- data/spec/fixtures/buildfiles/basic/Buildfile +0 -16
- data/spec/fixtures/buildfiles/basic/task_module.rake +0 -6
- data/spec/fixtures/buildfiles/installed/Buildfile +0 -7
- data/spec/fixtures/buildfiles/installed/Buildfile2 +0 -5
- data/spec/fixtures/buildfiles/project_test/Buildfile +0 -4
- data/spec/fixtures/buildfiles/project_test/not_project/Buildfile +0 -2
- data/spec/fixtures/buildfiles/project_test/not_project/child/PLACEHOLDER +0 -0
- data/spec/fixtures/entry_for_project/Buildfile +0 -1
- 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/find_targets/custom/Buildfile +0 -8
- 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 +0 -5
- 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 +0 -8
- data/spec/fixtures/find_targets/nested/apps/app1/Buildfile +0 -1
- 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/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 +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/B.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/a.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/a/a.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/a/b.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/b/a.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/c.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/core.js +0 -1
- 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.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/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/lproj/strings.js +0 -1
- data/spec/fixtures/ordered_entries/apps/no_requires/utils.js +0 -1
- data/spec/fixtures/ordered_entries/apps/with_requires/a.js +0 -2
- data/spec/fixtures/ordered_entries/apps/with_requires/b.js +0 -3
- data/spec/fixtures/ordered_entries/apps/with_requires/c.js +0 -2
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/a.css +0 -2
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/b.css +0 -2
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/c.css +0 -2
- data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/d.js +0 -1
- data/spec/fixtures/real_world/Buildfile +0 -12
- data/spec/fixtures/real_world/apps/account/README +0 -1
- data/spec/fixtures/real_world/apps/calendar/README +0 -1
- data/spec/fixtures/real_world/apps/contacts/README_BEFORE_EDITING +0 -1
- data/spec/fixtures/real_world/apps/files/README +0 -1
- data/spec/fixtures/real_world/apps/mail/README +0 -1
- data/spec/fixtures/real_world/apps/mobile_photos/README +0 -1
- data/spec/fixtures/real_world/apps/photos/README +0 -1
- data/spec/fixtures/real_world/apps/uploader/README +0 -1
- 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/shared/PLACEHOLDER +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/Buildfile +0 -26
- data/spec/fixtures/real_world/frameworks/sproutcore/README +0 -1
- 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/english.lproj/debug/sample_debug-loc.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.css +0 -4
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.html +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo2.sass +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 +0 -1
- 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 +0 -4
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_require.css +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_sc_resource.rhtml +0 -1
- 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 +0 -6
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.rhtml +0 -3
- data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/strings.js +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -4
- data/spec/fixtures/real_world/frameworks/sproutcore/lib/index.html +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/no_require.js +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/protocols/sample.js +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/sc_resource.js +0 -6
- 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 +0 -1
- data/spec/fixtures/real_world/frameworks/sproutcore/themes/standard_theme/README +0 -0
- data/spec/fixtures/real_world/frameworks/sproutcore/views/view.js +0 -1
- data/spec/fixtures/real_world/generators/sample_custom/Buildfile +0 -0
- data/spec/fixtures/recursive_project/Buildfile +0 -8
- data/spec/fixtures/recursive_project/frameworks/sproutcore/frameworks/costello/PLACEHOLDER +0 -0
- data/spec/lib/builders/combine_spec.rb +0 -67
- data/spec/lib/builders/html_spec.rb +0 -577
- data/spec/lib/builders/javascript_spec.rb +0 -81
- data/spec/lib/builders/sass_spec.rb +0 -43
- data/spec/lib/builders/spec_helper.rb +0 -30
- data/spec/lib/builders/strings_spec.rb +0 -52
- data/spec/lib/builders/stylesheet_spec.rb +0 -63
- data/spec/lib/builders/test_index_spec.rb +0 -44
- data/spec/lib/builders/test_spec.rb +0 -135
- data/spec/lib/buildfile/config_for_spec.rb +0 -81
- data/spec/lib/buildfile/define_spec.rb +0 -59
- data/spec/lib/buildfile/dup_spec.rb +0 -65
- data/spec/lib/buildfile/invoke_spec.rb +0 -130
- data/spec/lib/buildfile/load_spec.rb +0 -49
- data/spec/lib/buildfile/task/dup_spec.rb +0 -55
- data/spec/lib/buildfile/task_defined_spec.rb +0 -17
- data/spec/lib/buildfile_commands/build_task_spec.rb +0 -19
- data/spec/lib/buildfile_commands/config_spec.rb +0 -97
- data/spec/lib/buildfile_commands/import_spec.rb +0 -17
- data/spec/lib/buildfile_commands/namespace_spec.rb +0 -18
- data/spec/lib/buildfile_commands/proxies_spec.rb +0 -38
- data/spec/lib/buildfile_commands/replace_task_spec.rb +0 -29
- data/spec/lib/buildfile_commands/task_spec.rb +0 -36
- data/spec/lib/helpers/packing_optimizer/optimize_spec.rb +0 -26
- data/spec/lib/models/hash_struct/deep_clone_spec.rb +0 -27
- data/spec/lib/models/hash_struct/has_options_spec.rb +0 -32
- data/spec/lib/models/hash_struct/hash_spec.rb +0 -64
- data/spec/lib/models/hash_struct/merge_spec.rb +0 -26
- data/spec/lib/models/hash_struct/method_missing.rb +0 -41
- data/spec/lib/models/manifest/add_entry_spec.rb +0 -36
- data/spec/lib/models/manifest/add_transform_spec.rb +0 -90
- data/spec/lib/models/manifest/build_spec.rb +0 -78
- data/spec/lib/models/manifest/entry_for_spec.rb +0 -94
- data/spec/lib/models/manifest/find_entry.rb +0 -84
- data/spec/lib/models/manifest/prepare_spec.rb +0 -62
- data/spec/lib/models/manifest_entry/cacheable_url_spec.rb +0 -31
- data/spec/lib/models/manifest_entry/prepare_spec.rb +0 -54
- data/spec/lib/models/project/add_target_spec.rb +0 -44
- data/spec/lib/models/project/buildfile_spec.rb +0 -35
- data/spec/lib/models/project/find_targets_for_spec.rb +0 -77
- data/spec/lib/models/project/load_nearest_project_spec.rb +0 -23
- data/spec/lib/models/project/target_for_spec.rb +0 -33
- data/spec/lib/models/project/targets_spec.rb +0 -62
- data/spec/lib/models/target/compute_build_number_spec.rb +0 -125
- data/spec/lib/models/target/config_spec.rb +0 -30
- data/spec/lib/models/target/expand_required_targets_spec.rb +0 -48
- data/spec/lib/models/target/installed_languages_spec.rb +0 -47
- data/spec/lib/models/target/lproj_for_spec.rb +0 -38
- data/spec/lib/models/target/manifest_for_spec.rb +0 -42
- data/spec/lib/models/target/parent_target_spec.rb +0 -21
- data/spec/lib/models/target/prepare_spec.rb +0 -53
- data/spec/lib/models/target/required_targets_spec.rb +0 -119
- data/spec/lib/models/target/target_for_spec.rb +0 -56
- data/spec/lib/tools/build_number_spec.rb +0 -28
- data/spec/lib/tools/gen_spec.rb +0 -207
- data/spec/lib/tools/tools_spec.rb +0 -78
- data/spec/spec_helper.rb +0 -138
- data/sproutcore-abbot.gemspec +0 -640
- data/vendor/jsdoc/templates/jsdoc/allclasses.tmpl +0 -17
- data/vendor/jsdoc/templates/jsdoc/allfiles.tmpl +0 -56
- data/vendor/jsdoc/templates/jsdoc/class.tmpl +0 -487
- data/vendor/jsdoc/templates/jsdoc/index.tmpl +0 -38
- data/vendor/jsdoc/templates/jsdoc/symbol.tmpl +0 -35
- data/vendor/jsdoc/templates/sproutcore/allclasses.tmpl +0 -0
- data/vendor/jsdoc/templates/sproutcore/allfiles.tmpl +0 -56
- data/vendor/jsdoc/templates/sproutcore/class.tmpl +0 -674
- data/vendor/jsdoc/templates/sproutcore/index.tmpl +0 -55
- data/vendor/jsdoc/templates/sproutcore/symbol.tmpl +0 -35
@@ -0,0 +1,93 @@
|
|
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
|
+
/**
|
9
|
+
@class
|
10
|
+
|
11
|
+
An error, used to represent an error state.
|
12
|
+
|
13
|
+
Many API's within SproutCore will return an instance of this object whenever
|
14
|
+
they have an error occur. An error includes an error code, description,
|
15
|
+
and optional human readable label that indicates the item that failed.
|
16
|
+
|
17
|
+
Depending on the error, other properties may also be added to the object
|
18
|
+
to help you recover from the failure.
|
19
|
+
|
20
|
+
You can pass error objects to various UI elements to display the error in
|
21
|
+
the interface. You can easily determine if the value returned by some API is
|
22
|
+
an error or not using the helper SC.$ok(value).
|
23
|
+
|
24
|
+
@extends SC.Object
|
25
|
+
@since SproutCore 1.0
|
26
|
+
*/
|
27
|
+
SC.Error = SC.Object.extend(
|
28
|
+
/** @scope SC.Error.prototype */ {
|
29
|
+
|
30
|
+
/**
|
31
|
+
error code. Used to designate the error type.
|
32
|
+
*/
|
33
|
+
code: -1,
|
34
|
+
|
35
|
+
/**
|
36
|
+
Human readable description of the error. This can also be a non-localized
|
37
|
+
key.
|
38
|
+
*/
|
39
|
+
description: '',
|
40
|
+
|
41
|
+
/**
|
42
|
+
Human readable name of the item with the error.
|
43
|
+
*/
|
44
|
+
label: null,
|
45
|
+
|
46
|
+
toString: function() {
|
47
|
+
return "SC.Error:%@:%@ (%@)".fmt(SC.guidFor(this), this.description, this.code);
|
48
|
+
}
|
49
|
+
}) ;
|
50
|
+
|
51
|
+
/**
|
52
|
+
Creates a new SC.Error instance with the passed description, label, and
|
53
|
+
code. All parameters are optional.
|
54
|
+
|
55
|
+
@param description {String} human readable description of the error
|
56
|
+
@param label {String} human readable name of the item with the error
|
57
|
+
@param code {Number} an error code to use for testing.
|
58
|
+
@returns {SC.Error} new error instance.
|
59
|
+
*/
|
60
|
+
SC.Error.desc = function(description, label, code) {
|
61
|
+
var opts = { description: description } ;
|
62
|
+
if (label !== undefined) opts.label = label ;
|
63
|
+
if (code !== undefined) opts.code = code ;
|
64
|
+
return this.create(opts) ;
|
65
|
+
} ;
|
66
|
+
|
67
|
+
/**
|
68
|
+
Shorthand form of the SC.Error.desc method.
|
69
|
+
|
70
|
+
@param description {String} human readable description of the error
|
71
|
+
@param label {String} human readable name of the item with the error
|
72
|
+
@param code {Number} an error code to use for testing.
|
73
|
+
@returns {SC.Error} new error instance.
|
74
|
+
*/
|
75
|
+
SC.$error = function(description, label, c) {
|
76
|
+
return SC.Error.desc(description,label, c);
|
77
|
+
} ;
|
78
|
+
var $error = SC.$error ; // export globally
|
79
|
+
|
80
|
+
/**
|
81
|
+
Returns YES if the passed value is an error object, otherwise NO.
|
82
|
+
*/
|
83
|
+
SC.$ok = function(ret) {
|
84
|
+
return (ret !== false) && (SC.typeOf(ret) != SC.T_ERROR) ;
|
85
|
+
};
|
86
|
+
var $ok = SC.$ok ; // export globally.
|
87
|
+
|
88
|
+
// STANDARD ERROR OBJECTS
|
89
|
+
|
90
|
+
/**
|
91
|
+
Standard error code for errors that do not support multiple values.
|
92
|
+
*/
|
93
|
+
SC.Error.HAS_MULTIPLE_VALUES = -100 ;
|
@@ -0,0 +1,853 @@
|
|
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('system/core_query') ;
|
9
|
+
|
10
|
+
/**
|
11
|
+
The event class provides a simple cross-platform library for capturing and
|
12
|
+
delivering events on DOM elements and other objects. While this library
|
13
|
+
is based on code from both jQuery and Prototype.js, it includes a number of
|
14
|
+
additional features including support for handler objects and event
|
15
|
+
delegation.
|
16
|
+
|
17
|
+
Since native events are implemented very unevenly across browsers,
|
18
|
+
SproutCore will convert all native events into a standardized instance of
|
19
|
+
this special event class.
|
20
|
+
|
21
|
+
SproutCore events implement the standard W3C event API as well as some
|
22
|
+
additional helper methods.
|
23
|
+
|
24
|
+
@constructor
|
25
|
+
@param {Event} originalEvent
|
26
|
+
@returns {SC.Event} event instance
|
27
|
+
|
28
|
+
@since SproutCore 1.0
|
29
|
+
*/
|
30
|
+
SC.Event = function(originalEvent) {
|
31
|
+
|
32
|
+
// copy properties from original event, if passed in.
|
33
|
+
if (originalEvent) {
|
34
|
+
this.originalEvent = originalEvent ;
|
35
|
+
var props = SC.Event._props, len = props.length, idx = len ;
|
36
|
+
while(--idx >= 0) {
|
37
|
+
var key = props[idx] ;
|
38
|
+
this[key] = originalEvent[key] ;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
// Fix timeStamp
|
43
|
+
this.timeStamp = this.timeStamp || Date.now();
|
44
|
+
|
45
|
+
// Fix target property, if necessary
|
46
|
+
// Fixes #1925 where srcElement might not be defined either
|
47
|
+
if (!this.target) this.target = this.srcElement || document;
|
48
|
+
|
49
|
+
// check if target is a textnode (safari)
|
50
|
+
if (this.target.nodeType === 3 ) this.target = this.target.parentNode;
|
51
|
+
|
52
|
+
// Add relatedTarget, if necessary
|
53
|
+
if (!this.relatedTarget && this.fromElement) {
|
54
|
+
this.relatedTarget = (this.fromElement === this.target) ? this.toElement : this.fromElement;
|
55
|
+
}
|
56
|
+
|
57
|
+
// Calculate pageX/Y if missing and clientX/Y available
|
58
|
+
if (SC.none(this.pageX) && !SC.none(this.clientX)) {
|
59
|
+
var doc = document.documentElement, body = document.body;
|
60
|
+
this.pageX = this.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
|
61
|
+
this.pageY = this.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
|
62
|
+
}
|
63
|
+
|
64
|
+
// Add which for key events
|
65
|
+
if (!this.which && ((this.charCode || originalEvent.charCode === 0) ? this.charCode : this.keyCode)) {
|
66
|
+
this.which = this.charCode || this.keyCode;
|
67
|
+
}
|
68
|
+
|
69
|
+
// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
|
70
|
+
if (!this.metaKey && this.ctrlKey) this.metaKey = this.ctrlKey;
|
71
|
+
|
72
|
+
// Add which for click: 1 == left; 2 == middle; 3 == right
|
73
|
+
// Note: button is not normalized, so don't use it
|
74
|
+
if (!this.which && this.button) {
|
75
|
+
this.which = ((this.button & 1) ? 1 : ((this.button & 2) ? 3 : ( (this.button & 4) ? 2 : 0 ) ));
|
76
|
+
}
|
77
|
+
|
78
|
+
// normalize wheelDelta, wheelDeltaX, & wheelDeltaY for Safari
|
79
|
+
if (SC.browser.safari && originalEvent.wheelDelta!==undefined) {
|
80
|
+
this.wheelDelta = this.wheelDeltaY = 0-(originalEvent.wheelDeltaY || originalEvent.wheelDelta);
|
81
|
+
this.wheelDeltaX = 0-(originalEvent.wheelDeltaX||0) ;
|
82
|
+
|
83
|
+
// normalize wheelDelta for Firefox
|
84
|
+
// note that we multiple the delta on FF to make it's acceleration more
|
85
|
+
// natural.
|
86
|
+
} else if (!SC.none(originalEvent.detail)) {
|
87
|
+
var detail = Math.floor(originalEvent.detail * 2);
|
88
|
+
if (originalEvent.axis && (originalEvent.axis === originalEvent.HORIZONTAL_AXIS)) {
|
89
|
+
this.wheelDeltaX = detail;
|
90
|
+
this.wheelDeltaY = this.wheelDelta = 0;
|
91
|
+
} else {
|
92
|
+
this.wheelDeltaY = this.wheelDelta = detail ;
|
93
|
+
this.wheelDeltaX = 0 ;
|
94
|
+
}
|
95
|
+
|
96
|
+
// handle all other legacy browser
|
97
|
+
} else {
|
98
|
+
this.wheelDelta = this.wheelDeltaY = SC.browser.msie ? 0-originalEvent.wheelDelta : originalEvent.wheelDelta ;
|
99
|
+
this.wheelDeltaX = 0 ;
|
100
|
+
}
|
101
|
+
|
102
|
+
return this;
|
103
|
+
} ;
|
104
|
+
|
105
|
+
SC.mixin(SC.Event, /** @scope SC.Event */ {
|
106
|
+
|
107
|
+
/**
|
108
|
+
Standard method to create a new event. Pass the native browser event you
|
109
|
+
wish to wrap if needed.
|
110
|
+
*/
|
111
|
+
create: function(e) { return new SC.Event(e); },
|
112
|
+
|
113
|
+
// the code below was borrowed from jQuery, Dean Edwards, and Prototype.js
|
114
|
+
|
115
|
+
/**
|
116
|
+
Bind an event to an element.
|
117
|
+
|
118
|
+
This method will cause the passed handler to be executed whenever a
|
119
|
+
relevant event occurs on the named element. This method supports a
|
120
|
+
variety of handler types, depending on the kind of support you need.
|
121
|
+
|
122
|
+
h2. Simple Function Handlers
|
123
|
+
|
124
|
+
SC.Event.add(anElement, "click", myClickHandler) ;
|
125
|
+
|
126
|
+
The most basic type of handler you can pass is a function. This function
|
127
|
+
will be executed everytime an event of the type you specify occurs on the
|
128
|
+
named element. You can optionally pass an additional context object which
|
129
|
+
will be included on the event in the event.data property.
|
130
|
+
|
131
|
+
When your handler function is called the, the function's "this" property
|
132
|
+
will point to the element the event occurred on.
|
133
|
+
|
134
|
+
The click handler for this method must have a method signature like:
|
135
|
+
|
136
|
+
function(event) { return YES|NO; }
|
137
|
+
|
138
|
+
h2. Method Invocations
|
139
|
+
|
140
|
+
SC.Event.add(anElement, "click", myObject, myObject.aMethod) ;
|
141
|
+
|
142
|
+
Optionally you can specify a target object and a method on the object to
|
143
|
+
be invoked when the event occurs. This will invoke the method function
|
144
|
+
with the target object you pass as "this". The method should have a
|
145
|
+
signature like:
|
146
|
+
|
147
|
+
function(event, targetElement) { return YES|NO; }
|
148
|
+
|
149
|
+
Like function handlers, you can pass an additional context data paramater
|
150
|
+
that will be included on the event in the event.data property.
|
151
|
+
|
152
|
+
h2. Handler Return Values
|
153
|
+
|
154
|
+
Both handler functions should return YES if you want the event to
|
155
|
+
continue to propagate and NO if you want it to stop. Returning NO will
|
156
|
+
both stop bubbling of the event and will prevent any default action
|
157
|
+
taken by the browser. You can also control these two behaviors separately
|
158
|
+
by calling the stopPropagation() or preventDefault() methods on the event
|
159
|
+
itself, returning YES from your method.
|
160
|
+
|
161
|
+
h2. Limitations
|
162
|
+
|
163
|
+
Although SproutCore's event implementation is based on jQuery, it is
|
164
|
+
much simpler in design. Notably, it does not support namespaced events
|
165
|
+
and you can only pass a single type at a time.
|
166
|
+
|
167
|
+
If you need more advanced event handling, consider the SC.ClassicResponder
|
168
|
+
functionality provided by SproutCore or use your favorite DOM library.
|
169
|
+
|
170
|
+
@param {Element} elem a DOM element, window, or document object
|
171
|
+
@param {String} eventType the event type you want to respond to
|
172
|
+
@param {Object} target The target object for a method call or a function.
|
173
|
+
@param {Object} method optional method or method name if target passed
|
174
|
+
@param {Object} context optional context to pass to the handler as event.data
|
175
|
+
@returns {Object} receiver
|
176
|
+
*/
|
177
|
+
add: function(elem, eventType, target, method, context) {
|
178
|
+
|
179
|
+
// if a CQ object is passed in, either call add on each item in the
|
180
|
+
// matched set, or simply get the first element and use that.
|
181
|
+
if (elem && elem.isCoreQuery) {
|
182
|
+
if (elem.length > 0) {
|
183
|
+
elem.forEach(function(e) {
|
184
|
+
this.add(e, eventType, target, method, context);
|
185
|
+
}, this);
|
186
|
+
return this;
|
187
|
+
} else elem = elem.get(0);
|
188
|
+
}
|
189
|
+
if (!elem) return this; // nothing to do
|
190
|
+
|
191
|
+
// cannot register events on text nodes, etc.
|
192
|
+
if ( elem.nodeType == 3 || elem.nodeType == 8 ) return SC.Event;
|
193
|
+
|
194
|
+
// For whatever reason, IE has trouble passing the window object
|
195
|
+
// around, causing it to be cloned in the process
|
196
|
+
if (SC.browser.msie && elem.setInterval) elem = window;
|
197
|
+
|
198
|
+
// if target is a function, treat it as the method, with optional context
|
199
|
+
if (SC.typeOf(target) === SC.T_FUNCTION) {
|
200
|
+
context = method; method = target; target = null;
|
201
|
+
|
202
|
+
// handle case where passed method is a key on the target.
|
203
|
+
} else if (target && SC.typeOf(method) === SC.T_STRING) {
|
204
|
+
method = target[method] ;
|
205
|
+
}
|
206
|
+
|
207
|
+
// Get the handlers queue for this element/eventType. If the queue does
|
208
|
+
// not exist yet, create it and also setup the shared listener for this
|
209
|
+
// eventType.
|
210
|
+
var events = SC.data(elem, "events") || SC.data(elem, "events", {}) ;
|
211
|
+
var handlers = events[eventType];
|
212
|
+
if (!handlers) {
|
213
|
+
handlers = events[eventType] = {} ;
|
214
|
+
this._addEventListener(elem, eventType) ;
|
215
|
+
}
|
216
|
+
|
217
|
+
// Build the handler array and add to queue
|
218
|
+
handlers[SC.guidFor(method)] = [target, method, context];
|
219
|
+
SC.Event._global[eventType] = YES ; // optimization for global triggers
|
220
|
+
|
221
|
+
// Nullify elem to prevent memory leaks in IE
|
222
|
+
elem = events = handlers = null ;
|
223
|
+
return this ;
|
224
|
+
},
|
225
|
+
|
226
|
+
/**
|
227
|
+
Removes a specific handler or all handlers for an event or event+type.
|
228
|
+
|
229
|
+
To remove a specific handler, you must pass in the same function or the
|
230
|
+
same target and method as you passed into SC.Event.add(). See that method
|
231
|
+
for full documentation on the parameters you can pass in.
|
232
|
+
|
233
|
+
If you omit a specific handler but provide both an element and eventType,
|
234
|
+
then all handlers for that element will be removed. If you provide only
|
235
|
+
and element, then all handlers for all events on that element will be
|
236
|
+
removed.
|
237
|
+
|
238
|
+
h2. Limitations
|
239
|
+
|
240
|
+
Although SproutCore's event implementation is based on jQuery, it is
|
241
|
+
much simpler in design. Notably, it does not support namespaced events
|
242
|
+
and you can only pass a single type at a time.
|
243
|
+
|
244
|
+
If you need more advanced event handling, consider the SC.ClassicResponder
|
245
|
+
functionality provided by SproutCore or use your favorite DOM library.
|
246
|
+
|
247
|
+
@param {Element} elem a DOM element, window, or document object
|
248
|
+
@param {String} eventType the event type to remove
|
249
|
+
@param {Object} target The target object for a method call. Or a function.
|
250
|
+
@param {Object} method optional name of method
|
251
|
+
@returns {Object} receiver
|
252
|
+
*/
|
253
|
+
remove: function(elem, eventType, target, method) {
|
254
|
+
|
255
|
+
// if a CQ object is passed in, either call add on each item in the
|
256
|
+
// matched set, or simply get the first element and use that.
|
257
|
+
if (elem && elem.isCoreQuery) {
|
258
|
+
if (elem.length > 0) {
|
259
|
+
elem.forEach(function(e) {
|
260
|
+
this.remove(e, eventType, target, method);
|
261
|
+
}, this);
|
262
|
+
return this;
|
263
|
+
} else elem = elem.get(0);
|
264
|
+
}
|
265
|
+
if (!elem) return this; // nothing to do
|
266
|
+
|
267
|
+
// don't do events on text and comment nodes
|
268
|
+
if ( elem.nodeType == 3 || elem.nodeType == 8 ) return SC.Event;
|
269
|
+
|
270
|
+
// For whatever reason, IE has trouble passing the window object
|
271
|
+
// around, causing it to be cloned in the process
|
272
|
+
if (SC.browser.msie && elem.setInterval) elem = window;
|
273
|
+
|
274
|
+
var handlers, key, events = SC.data(elem, "events") ;
|
275
|
+
if (!events) return this ; // nothing to do if no events are registered
|
276
|
+
|
277
|
+
// if no type is provided, remove all types for this element.
|
278
|
+
if (eventType === undefined) {
|
279
|
+
for(eventType in events) this.remove(elem, eventType) ;
|
280
|
+
|
281
|
+
// otherwise, remove the handler for this specific eventType if found
|
282
|
+
} else if (handlers = events[eventType]) {
|
283
|
+
|
284
|
+
var cleanupHandlers = NO ;
|
285
|
+
|
286
|
+
// if a target/method is provided, remove only that one
|
287
|
+
if (target || method) {
|
288
|
+
|
289
|
+
// normalize the target/method
|
290
|
+
if (SC.typeOf(target) === SC.T_FUNCTION) {
|
291
|
+
method = target; target = null ;
|
292
|
+
} else if (SC.typeOf(method) === SC.T_STRING) {
|
293
|
+
method = target[method] ;
|
294
|
+
}
|
295
|
+
|
296
|
+
delete events[SC.guidFor(method)] ;
|
297
|
+
|
298
|
+
// check to see if there are handlers left on this event/eventType.
|
299
|
+
// if not, then cleanup the handlers.
|
300
|
+
key = null ;
|
301
|
+
for(key in handlers) break ;
|
302
|
+
if (key===null) cleanupHandlers = YES ;
|
303
|
+
|
304
|
+
// otherwise, just cleanup all handlers
|
305
|
+
} else cleanupHandlers = YES ;
|
306
|
+
|
307
|
+
// If there are no more handlers left on this event type, remove
|
308
|
+
// eventType hash from queue.
|
309
|
+
if (cleanupHandlers) {
|
310
|
+
delete events[eventType] ;
|
311
|
+
this._removeEventListener(elem, eventType) ;
|
312
|
+
}
|
313
|
+
|
314
|
+
// verify that there are still events registered on this element. If
|
315
|
+
// there aren't, cleanup the element completely to avoid memory leaks.
|
316
|
+
key = null ;
|
317
|
+
for(key in events) break;
|
318
|
+
if(!key) {
|
319
|
+
SC.removeData(elem, "events") ;
|
320
|
+
delete this._elements[SC.guidFor(elem)]; // important to avoid leaks
|
321
|
+
}
|
322
|
+
|
323
|
+
}
|
324
|
+
|
325
|
+
elem = events = handlers = null ; // avoid memory leaks
|
326
|
+
return this ;
|
327
|
+
},
|
328
|
+
|
329
|
+
NO_BUBBLE: ['blur', 'focus', 'change'],
|
330
|
+
|
331
|
+
/**
|
332
|
+
Generates a simulated event object. This is mostly useful for unit
|
333
|
+
testing. You can pass the return value of this property into the
|
334
|
+
trigger() method to actually send the event.
|
335
|
+
|
336
|
+
@param {Element} elem the element the event targets
|
337
|
+
@param {String} eventType event type. mousedown, mouseup, etc
|
338
|
+
@param {Hash} attrs optional additonal attributes to apply to event.
|
339
|
+
@returns {Hash} simulated event object
|
340
|
+
*/
|
341
|
+
simulateEvent: function(elem, eventType, attrs) {
|
342
|
+
var ret = SC.Event.create({
|
343
|
+
type: eventType,
|
344
|
+
target: elem,
|
345
|
+
preventDefault: function(){ this.cancelled = YES; },
|
346
|
+
stopPropagation: function(){ this.bubbles = NO; },
|
347
|
+
allowDefault: function() { this.hasCustomEventHandling = YES; },
|
348
|
+
timeStamp: Date.now(),
|
349
|
+
bubbles: (this.NO_BUBBLE.indexOf(eventType)<0),
|
350
|
+
cancelled: NO,
|
351
|
+
normalized: YES
|
352
|
+
});
|
353
|
+
if (attrs) SC.mixin(ret, attrs) ;
|
354
|
+
return ret ;
|
355
|
+
},
|
356
|
+
|
357
|
+
/**
|
358
|
+
Trigger an event execution immediately. You can use this method to
|
359
|
+
simulate arbitrary events on arbitary elements.
|
360
|
+
|
361
|
+
h2. Limitations
|
362
|
+
|
363
|
+
Note that although this is based on the jQuery implementation, it is
|
364
|
+
much simpler. Notably namespaced events are not supported and you cannot
|
365
|
+
trigger events globally.
|
366
|
+
|
367
|
+
If you need more advanced event handling, consider the SC.Responder
|
368
|
+
functionality provided by SproutCore or use your favorite DOM library.
|
369
|
+
|
370
|
+
h2. Example
|
371
|
+
|
372
|
+
{{{
|
373
|
+
SC.Event.trigger(view.get('layer'), 'mousedown');
|
374
|
+
}}}
|
375
|
+
|
376
|
+
@param elem {Element} the target element
|
377
|
+
@param eventType {String} the event type
|
378
|
+
@param args {Array} optional argument or arguments to pass to handler.
|
379
|
+
@param donative ??
|
380
|
+
@returns {Boolean} Return value of trigger or undefined if not fired
|
381
|
+
*/
|
382
|
+
trigger: function(elem, eventType, args, donative) {
|
383
|
+
|
384
|
+
// if a CQ object is passed in, either call add on each item in the
|
385
|
+
// matched set, or simply get the first element and use that.
|
386
|
+
if (elem && elem.isCoreQuery) {
|
387
|
+
if (elem.length > 0) {
|
388
|
+
elem.forEach(function(e) {
|
389
|
+
this.trigger(e, eventType, args, donative);
|
390
|
+
}, this);
|
391
|
+
return this;
|
392
|
+
} else elem = elem.get(0);
|
393
|
+
}
|
394
|
+
if (!elem) return this; // nothing to do
|
395
|
+
|
396
|
+
// don't do events on text and comment nodes
|
397
|
+
if ( elem.nodeType == 3 || elem.nodeType == 8 ) return undefined;
|
398
|
+
|
399
|
+
// Normalize to an array
|
400
|
+
args = SC.A(args) ;
|
401
|
+
|
402
|
+
var ret, fn = SC.typeOf(elem[eventType] || null) === SC.T_FUNCTION ;
|
403
|
+
|
404
|
+
// Get the event to pass, creating a fake one if necessary
|
405
|
+
var event = args[0];
|
406
|
+
if (!event || !event.preventDefault) {
|
407
|
+
event = this.simulateEvent(elem, eventType) ;
|
408
|
+
args.unshift(event) ;
|
409
|
+
}
|
410
|
+
|
411
|
+
event.type = eventType ;
|
412
|
+
|
413
|
+
// Trigger the event - bubble if enabled
|
414
|
+
var current = elem;
|
415
|
+
do {
|
416
|
+
ret = SC.Event.handle.apply(current, args);
|
417
|
+
current = (current===document) ? null : (current.parentNode || document);
|
418
|
+
} while(!ret && event.bubbles && current);
|
419
|
+
current = null ;
|
420
|
+
|
421
|
+
// Handle triggering native .onfoo handlers
|
422
|
+
var onfoo = elem["on" + eventType] ;
|
423
|
+
var isClick = SC.CoreQuery.nodeName(elem, 'a') && eventType === 'click';
|
424
|
+
if ((!fn || isClick) && onfoo && onfoo.apply(elem, args) === NO) ret = NO;
|
425
|
+
|
426
|
+
// Trigger the native events (except for clicks on links)
|
427
|
+
if (fn && donative !== NO && ret !== NO && !isClick) {
|
428
|
+
this.triggered = YES;
|
429
|
+
try {
|
430
|
+
elem[ eventType ]();
|
431
|
+
// prevent IE from throwing an error for some hidden elements
|
432
|
+
} catch (e) {}
|
433
|
+
}
|
434
|
+
|
435
|
+
this.triggered = NO;
|
436
|
+
|
437
|
+
return ret;
|
438
|
+
},
|
439
|
+
|
440
|
+
/**
|
441
|
+
This method will handle the passed event, finding any registered listeners
|
442
|
+
and executing them. If you have an event you want handled, you can
|
443
|
+
manually invoke this method. This function expects it's "this" value to
|
444
|
+
be the element the event occurred on, so you should always call this
|
445
|
+
method like:
|
446
|
+
|
447
|
+
SC.Event.handle.call(element, event) ;
|
448
|
+
|
449
|
+
Note that like other parts of this library, the handle function does not
|
450
|
+
support namespaces.
|
451
|
+
|
452
|
+
@param event {Event} the event to handle
|
453
|
+
@returns {Boolean}
|
454
|
+
*/
|
455
|
+
handle: function(event) {
|
456
|
+
|
457
|
+
// ignore events triggered after window is unloaded or if double-called
|
458
|
+
// from within a trigger.
|
459
|
+
if ((typeof SC === "undefined") || SC.Event.triggered) return YES ;
|
460
|
+
|
461
|
+
// returned undefined or NO
|
462
|
+
var val, ret, namespace, all, handlers, args;
|
463
|
+
|
464
|
+
// normalize event across browsers. The new event will actually wrap the
|
465
|
+
// real event with a normalized API.
|
466
|
+
args = SC.A(arguments);
|
467
|
+
args[0] = event = SC.Event.normalizeEvent(event || window.event);
|
468
|
+
|
469
|
+
// get the handlers for this event type
|
470
|
+
handlers = (SC.data(this, "events") || {})[event.type];
|
471
|
+
if (!handlers) return NO ; // nothing to do
|
472
|
+
|
473
|
+
// invoke all handlers
|
474
|
+
for (var key in handlers ) {
|
475
|
+
var handler = handlers[key];
|
476
|
+
var method = handler[1] ;
|
477
|
+
|
478
|
+
// Pass in a reference to the handler function itself
|
479
|
+
// So that we can later remove it
|
480
|
+
event.handler = method;
|
481
|
+
event.data = event.context = handler[2];
|
482
|
+
|
483
|
+
var target = handler[0] || this ;
|
484
|
+
ret = method.apply( target, args );
|
485
|
+
|
486
|
+
if (val !== NO) val = ret;
|
487
|
+
|
488
|
+
// if method returned NO, do not continue. Stop propogation and
|
489
|
+
// return default. Note that we test explicitly for NO since
|
490
|
+
// if the handler returns no specific value, we do not want to stop.
|
491
|
+
if ( ret === NO ) {
|
492
|
+
event.preventDefault();
|
493
|
+
event.stopPropagation();
|
494
|
+
}
|
495
|
+
}
|
496
|
+
|
497
|
+
return val;
|
498
|
+
},
|
499
|
+
|
500
|
+
/**
|
501
|
+
This method is called just before the window unloads to unhook all
|
502
|
+
registered events.
|
503
|
+
*/
|
504
|
+
unload: function() {
|
505
|
+
var key, elements = this._elements ;
|
506
|
+
for(key in elements) this.remove(elements[key]) ;
|
507
|
+
|
508
|
+
// just in case some book-keeping was screwed up. avoid memory leaks
|
509
|
+
for(key in elements) delete elements[key] ;
|
510
|
+
delete this._elements ;
|
511
|
+
},
|
512
|
+
|
513
|
+
/**
|
514
|
+
This hash contains handlers for special or custom events. You can add
|
515
|
+
your own handlers for custom events here by simply naming the event and
|
516
|
+
including a hash with the following properties:
|
517
|
+
|
518
|
+
- setup: this function should setup the handler or return NO
|
519
|
+
- teardown: this function should remove the event listener
|
520
|
+
|
521
|
+
*/
|
522
|
+
special: {
|
523
|
+
|
524
|
+
ready: {
|
525
|
+
setup: function() {
|
526
|
+
// Make sure the ready event is setup
|
527
|
+
SC._bindReady() ;
|
528
|
+
return;
|
529
|
+
},
|
530
|
+
|
531
|
+
teardown: function() { return; }
|
532
|
+
|
533
|
+
},
|
534
|
+
|
535
|
+
/** @private
|
536
|
+
Implement support for mouseenter on browsers other than IE */
|
537
|
+
mouseenter: {
|
538
|
+
setup: function() {
|
539
|
+
if ( SC.browser.msie ) return NO;
|
540
|
+
SC.Event.add(this, 'mouseover', SC.Event.special.mouseover.handler);
|
541
|
+
return YES;
|
542
|
+
},
|
543
|
+
|
544
|
+
teardown: function() {
|
545
|
+
if ( SC.browser.msie ) return NO;
|
546
|
+
SC.Event.remove(this, 'mouseover', SC.Event.special.mouseover.handler);
|
547
|
+
return YES;
|
548
|
+
},
|
549
|
+
|
550
|
+
handler: function(event) {
|
551
|
+
// If we actually just moused on to a sub-element, ignore it
|
552
|
+
if ( SC.Event._withinElement(event, this) ) return YES;
|
553
|
+
// Execute the right handlers by setting the event type to mouseenter
|
554
|
+
event.type = "mouseenter";
|
555
|
+
return SC.Event.handle.apply(this, arguments);
|
556
|
+
}
|
557
|
+
},
|
558
|
+
|
559
|
+
/** @private
|
560
|
+
Implement support for mouseleave on browsers other than IE */
|
561
|
+
mouseleave: {
|
562
|
+
setup: function() {
|
563
|
+
if ( SC.browser.msie ) return NO;
|
564
|
+
SC.Event.add(this, "mouseout", SC.Event.special.mouseleave.handler);
|
565
|
+
return YES;
|
566
|
+
},
|
567
|
+
|
568
|
+
teardown: function() {
|
569
|
+
if ( SC.browser.msie ) return NO;
|
570
|
+
SC.Event.remove(this, "mouseout", SC.Event.special.mouseleave.handler);
|
571
|
+
return YES;
|
572
|
+
},
|
573
|
+
|
574
|
+
handler: function(event) {
|
575
|
+
// If we actually just moused on to a sub-element, ignore it
|
576
|
+
if ( SC.Event._withinElement(event, this) ) return YES;
|
577
|
+
// Execute the right handlers by setting the event type to mouseleave
|
578
|
+
event.type = "mouseleave";
|
579
|
+
return SC.Event.handle.apply(this, arguments);
|
580
|
+
}
|
581
|
+
}
|
582
|
+
},
|
583
|
+
|
584
|
+
KEY_BACKSPACE: 8,
|
585
|
+
KEY_TAB: 9,
|
586
|
+
KEY_RETURN: 13,
|
587
|
+
KEY_ESC: 27,
|
588
|
+
KEY_LEFT: 37,
|
589
|
+
KEY_UP: 38,
|
590
|
+
KEY_RIGHT: 39,
|
591
|
+
KEY_DOWN: 40,
|
592
|
+
KEY_DELETE: 46,
|
593
|
+
KEY_HOME: 36,
|
594
|
+
KEY_END: 35,
|
595
|
+
KEY_PAGEUP: 33,
|
596
|
+
KEY_PAGEDOWN: 34,
|
597
|
+
KEY_INSERT: 45,
|
598
|
+
|
599
|
+
_withinElement: function(event, elem) {
|
600
|
+
// Check if mouse(over|out) are still within the same parent element
|
601
|
+
var parent = event.relatedTarget;
|
602
|
+
|
603
|
+
// Traverse up the tree
|
604
|
+
while ( parent && parent != elem ) {
|
605
|
+
try { parent = parent.parentNode; } catch(error) { parent = elem; }
|
606
|
+
}
|
607
|
+
|
608
|
+
// Return YES if we actually just moused on to a sub-element
|
609
|
+
return parent === elem;
|
610
|
+
},
|
611
|
+
|
612
|
+
/** @private
|
613
|
+
Adds the primary event listener for the named type on the element.
|
614
|
+
|
615
|
+
If the event type has a special handler defined in SC.Event.special,
|
616
|
+
then that handler will be used. Otherwise the normal browser method will
|
617
|
+
be used.
|
618
|
+
|
619
|
+
@param elem {Element} the target element
|
620
|
+
@param eventType {String} the event type
|
621
|
+
*/
|
622
|
+
_addEventListener: function(elem, eventType) {
|
623
|
+
var listener, special = this.special[eventType] ;
|
624
|
+
|
625
|
+
// Check for a special event handler
|
626
|
+
// Only use addEventListener/attachEvent if the special
|
627
|
+
// events handler returns NO
|
628
|
+
if ( !special || special.setup.call(elem)===NO) {
|
629
|
+
|
630
|
+
// Save element in cache. This must be removed later to avoid
|
631
|
+
// memory leaks.
|
632
|
+
var guid = SC.guidFor(elem) ;
|
633
|
+
this._elements[guid] = elem;
|
634
|
+
|
635
|
+
listener = SC.data(elem, "listener") || SC.data(elem, "listener",
|
636
|
+
function() {
|
637
|
+
return SC.Event.handle.apply(SC.Event._elements[guid], arguments);
|
638
|
+
}) ;
|
639
|
+
|
640
|
+
// Bind the global event handler to the element
|
641
|
+
if (elem.addEventListener) {
|
642
|
+
elem.addEventListener(eventType, listener, NO);
|
643
|
+
} else if (elem.attachEvent) {
|
644
|
+
// attachEvent is not working for IE8 and xhr objects
|
645
|
+
// there is currently a hack in request , but it needs to fixed here.
|
646
|
+
elem.attachEvent("on" + eventType, listener);
|
647
|
+
}
|
648
|
+
//
|
649
|
+
// else {
|
650
|
+
// elem.onreadystatechange = listener;
|
651
|
+
// }
|
652
|
+
}
|
653
|
+
|
654
|
+
elem = special = listener = null ; // avoid memory leak
|
655
|
+
},
|
656
|
+
|
657
|
+
/** @private
|
658
|
+
Removes the primary event listener for the named type on the element.
|
659
|
+
|
660
|
+
If the event type has a special handler defined in SC.Event.special,
|
661
|
+
then that handler will be used. Otherwise the normal browser method will
|
662
|
+
be used.
|
663
|
+
|
664
|
+
Note that this will not clear the _elements hash from the element. You
|
665
|
+
must call SC.Event.unload() on unload to make sure that is cleared.
|
666
|
+
|
667
|
+
@param elem {Element} the target element
|
668
|
+
@param eventType {String} the event type
|
669
|
+
*/
|
670
|
+
_removeEventListener: function(elem, eventType) {
|
671
|
+
var listener, special = SC.Event.special[eventType] ;
|
672
|
+
if (!special || (special.teardown.call(elem)===NO)) {
|
673
|
+
listener = SC.data(elem, "listener") ;
|
674
|
+
if (listener) {
|
675
|
+
if (elem.removeEventListener) {
|
676
|
+
elem.removeEventListener(eventType, listener, NO);
|
677
|
+
} else if (elem.detachEvent) {
|
678
|
+
elem.detachEvent("on" + eventType, listener);
|
679
|
+
}
|
680
|
+
}
|
681
|
+
}
|
682
|
+
|
683
|
+
elem = special = listener = null ;
|
684
|
+
},
|
685
|
+
|
686
|
+
_elements: {},
|
687
|
+
|
688
|
+
// implement preventDefault() in a cross platform way
|
689
|
+
|
690
|
+
/** @private Take an incoming event and convert it to a normalized event. */
|
691
|
+
normalizeEvent: function(event) {
|
692
|
+
if (event == window.event) {
|
693
|
+
// IE can't do event.normalized on an Event object
|
694
|
+
return SC.Event.create(event) ;
|
695
|
+
} else {
|
696
|
+
return event.normalized ? event : SC.Event.create(event) ;
|
697
|
+
}
|
698
|
+
},
|
699
|
+
|
700
|
+
_global: {},
|
701
|
+
|
702
|
+
/** @private properties to copy from native event onto the event */
|
703
|
+
_props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view which touches targetTouches changedTouches".split(" ")
|
704
|
+
|
705
|
+
}) ;
|
706
|
+
|
707
|
+
SC.Event.prototype = {
|
708
|
+
|
709
|
+
/**
|
710
|
+
Set to YES if you have called either preventDefault() or stopPropagation(). This allows a generic event handler to notice if you want to provide detailed control over how the browser handles the real event.
|
711
|
+
*/
|
712
|
+
hasCustomEventHandling: NO,
|
713
|
+
|
714
|
+
/**
|
715
|
+
Indicates that you want to allow the normal default behavior. Sets
|
716
|
+
the hasCustomEventHandling property to YES but does not cancel the event.
|
717
|
+
|
718
|
+
@returns {SC.Event} receiver
|
719
|
+
*/
|
720
|
+
allowDefault: function() {
|
721
|
+
this.hasCustomEventHandling = YES ;
|
722
|
+
return this ;
|
723
|
+
},
|
724
|
+
|
725
|
+
/**
|
726
|
+
Implements W3C standard. Will prevent the browser from performing its
|
727
|
+
default action on this event.
|
728
|
+
|
729
|
+
@returns {SC.Event} receiver
|
730
|
+
*/
|
731
|
+
preventDefault: function() {
|
732
|
+
var evt = this.originalEvent ;
|
733
|
+
if (evt) {
|
734
|
+
if (evt.preventDefault) evt.preventDefault() ;
|
735
|
+
evt.returnValue = NO ; // IE
|
736
|
+
}
|
737
|
+
this.hasCustomEventHandling = YES ;
|
738
|
+
return this ;
|
739
|
+
},
|
740
|
+
|
741
|
+
/**
|
742
|
+
Implements W3C standard. Prevents further bubbling of the event.
|
743
|
+
|
744
|
+
@returns {SC.Event} receiver
|
745
|
+
*/
|
746
|
+
stopPropagation: function() {
|
747
|
+
var evt = this.originalEvent ;
|
748
|
+
if (evt) {
|
749
|
+
if (evt.stopPropagation) evt.stopPropagation() ;
|
750
|
+
evt.cancelBubble = YES ; // IE
|
751
|
+
}
|
752
|
+
this.hasCustomEventHandling = YES ;
|
753
|
+
return this ;
|
754
|
+
},
|
755
|
+
|
756
|
+
/**
|
757
|
+
Stops both the default action and further propogation. This is more
|
758
|
+
convenient than calling both.
|
759
|
+
|
760
|
+
@returns {SC.Event} receiver
|
761
|
+
*/
|
762
|
+
stop: function() {
|
763
|
+
return this.preventDefault().stopPropagation();
|
764
|
+
},
|
765
|
+
|
766
|
+
/** Always YES to indicate the event was normalized. */
|
767
|
+
normalized: YES,
|
768
|
+
|
769
|
+
/** Returns the pressed character (found in this.which) as a string. */
|
770
|
+
getCharString: function() {
|
771
|
+
return (this.charCode>0) ? String.fromCharCode(this.which) : null;
|
772
|
+
},
|
773
|
+
|
774
|
+
/** Returns character codes for the event. The first value is the normalized code string, with any shift or ctrl characters added to the begining. The second value is the char string by itself.
|
775
|
+
|
776
|
+
@returns {Array}
|
777
|
+
*/
|
778
|
+
commandCodes: function() {
|
779
|
+
var code=this.keyCode, ret=null, key=null, modifiers='', lowercase ;
|
780
|
+
|
781
|
+
// handle function keys.
|
782
|
+
if (code) {
|
783
|
+
ret = SC.FUNCTION_KEYS[code] ;
|
784
|
+
if (!ret && (this.altKey || this.ctrlKey || this.metaKey)) {
|
785
|
+
ret = SC.PRINTABLE_KEYS[code];
|
786
|
+
}
|
787
|
+
|
788
|
+
if (ret) {
|
789
|
+
if (this.altKey) modifiers += 'alt_' ;
|
790
|
+
if (this.ctrlKey || this.metaKey) modifiers += 'ctrl_' ;
|
791
|
+
if (this.shiftKey) modifiers += 'shift_' ;
|
792
|
+
}
|
793
|
+
}
|
794
|
+
|
795
|
+
// otherwise just go get the right key.
|
796
|
+
if (!ret) {
|
797
|
+
code = this.which ;
|
798
|
+
key = ret = String.fromCharCode(code) ;
|
799
|
+
lowercase = ret.toLowerCase() ;
|
800
|
+
if (this.metaKey) {
|
801
|
+
modifiers = 'meta_' ;
|
802
|
+
ret = lowercase;
|
803
|
+
|
804
|
+
} else if (ret !== lowercase) {
|
805
|
+
modifiers = 'shift_' ;
|
806
|
+
ret = lowercase ;
|
807
|
+
|
808
|
+
} else ret = null ;
|
809
|
+
}
|
810
|
+
|
811
|
+
if (ret) ret = modifiers + ret ;
|
812
|
+
return [ret, key] ;
|
813
|
+
}
|
814
|
+
|
815
|
+
} ;
|
816
|
+
|
817
|
+
// Also provide a Prototype-like API so that people can use either one.
|
818
|
+
|
819
|
+
/** Alias for add() method. This provides a Prototype-like API. */
|
820
|
+
SC.Event.observe = SC.Event.add ;
|
821
|
+
|
822
|
+
/** Alias for remove() method. This provides a Prototype-like API */
|
823
|
+
SC.Event.stopObserving = SC.Event.remove ;
|
824
|
+
|
825
|
+
/** Alias for trigger() method. This provides a Prototype-like API */
|
826
|
+
SC.Event.fire = SC.Event.trigger;
|
827
|
+
|
828
|
+
// Register unload handler to eliminate any registered handlers
|
829
|
+
// This avoids leaks in IE and issues with mouseout or other handlers on
|
830
|
+
// other browsers.
|
831
|
+
SC.Event.add(window, 'unload', SC.Event.prototype, SC.Event.unload) ;
|
832
|
+
|
833
|
+
SC.MODIFIER_KEYS = {
|
834
|
+
16:'shift', 17:'ctrl', 18: 'alt'
|
835
|
+
};
|
836
|
+
|
837
|
+
SC.FUNCTION_KEYS = {
|
838
|
+
8: 'backspace', 9: 'tab', 13: 'return', 19: 'pause', 27: 'escape',
|
839
|
+
33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home',
|
840
|
+
37: 'left', 38: 'up', 39: 'right', 40: 'down', 44: 'printscreen',
|
841
|
+
45: 'insert', 46: 'delete', 112: 'f1', 113: 'f2', 114: 'f3', 115: 'f4',
|
842
|
+
116: 'f5', 117: 'f7', 119: 'f8', 120: 'f9', 121: 'f10', 122: 'f11',
|
843
|
+
123: 'f12', 144: 'numlock', 145: 'scrolllock'
|
844
|
+
} ;
|
845
|
+
|
846
|
+
SC.PRINTABLE_KEYS = {
|
847
|
+
32: ' ', 48:"0", 49:"1", 50:"2", 51:"3", 52:"4", 53:"5", 54:"6", 55:"7",
|
848
|
+
56:"8", 57:"9", 59:";", 61:"=", 65:"a", 66:"b", 67:"c", 68:"d", 69:"e",
|
849
|
+
70:"f", 71:"g", 72:"h", 73:"i", 74:"j", 75:"k", 76:"l", 77:"m", 78:"n",
|
850
|
+
79:"o", 80:"p", 81:"q", 82:"r", 83:"s", 84:"t", 85:"u", 86:"v", 87:"w",
|
851
|
+
88:"x", 89:"y", 90:"z", 107:"+", 109:"-", 110:".", 188:",", 190:".",
|
852
|
+
191:"/", 192:"`", 219:"[", 220:"\\", 221:"]", 222:"\""
|
853
|
+
} ;
|