sproutcore 1.8.2.1 → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.yml +2 -2
- data/lib/buildtasks/helpers/file_rule_list.rb +3 -3
- data/lib/frameworks/sproutcore/Buildfile +1 -1
- data/lib/frameworks/sproutcore/CHANGELOG.md +235 -16
- data/lib/frameworks/sproutcore/apps/media_examples/Buildfile +13 -0
- data/lib/frameworks/sproutcore/apps/media_examples/core.js +35 -0
- data/lib/frameworks/sproutcore/apps/media_examples/resources/loading.rhtml +3 -0
- data/lib/frameworks/sproutcore/apps/media_examples/resources/main_page.js +53 -0
- data/lib/frameworks/sproutcore/apps/media_examples/views/audio_view.js +100 -0
- data/lib/frameworks/sproutcore/apps/media_examples/views/camera_view.js +39 -0
- data/lib/frameworks/sproutcore/apps/media_examples/views/capabilities_view.js +116 -0
- data/lib/frameworks/sproutcore/apps/media_examples/views/microphone_view.js +40 -0
- data/lib/frameworks/sproutcore/apps/media_examples/views/video_view.js +107 -0
- data/lib/frameworks/sproutcore/apps/showcase/Buildfile +11 -0
- data/lib/frameworks/sproutcore/apps/showcase/README +15 -0
- data/lib/frameworks/sproutcore/apps/showcase/controllers/source_controller.js +15 -0
- data/lib/frameworks/sproutcore/apps/showcase/controllers/source_tree_controller.js +212 -0
- data/lib/frameworks/sproutcore/apps/showcase/core.js +170 -0
- data/lib/frameworks/sproutcore/apps/showcase/main.js +27 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/_theme.css +18 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/api.css +80 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/favicon.ico +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/alarm-clock.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/balloon-facebook.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/balloon-twitter.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/balloon.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/bullet.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/calendar-insert.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/cross.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/example-box-bg.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/fruit-grape.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/fruit-lime.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/fruit-orange.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/fruit.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/glow.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/green-dot.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/grey-dot.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/logo.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/pixels.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/red-dot.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/sproutcore-logo.png +0 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/images/sproutcore-startup-landscape.jpg +0 -0
- data/lib/frameworks/sproutcore/apps/{test_controls → showcase}/resources/loading.rhtml +1 -1
- data/lib/frameworks/sproutcore/apps/showcase/resources/main_page.js +61 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/stylesheet.css +365 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/views_page.js +64 -0
- data/lib/frameworks/sproutcore/apps/showcase/system/views_item_content.js +59 -0
- data/lib/frameworks/sproutcore/apps/showcase/theme.js +27 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/button_views.js +55 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/checkbox_views.js +34 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/container_views.js +29 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/date_field_views.js +30 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/disclosure_views.js +22 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/grid_views.js +28 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/image_button_views.js +22 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/image_views.js +51 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/label_views.js +53 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/list_views.js +31 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/popup_button_views.js +24 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/progress_views.js +26 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/radio_views.js +30 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/scroll_views.js +40 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/segmented_views.js +90 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/select_views.js +64 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/slider_views.js +46 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/source_list_views.js +23 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/split_views.js +22 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/stacked_views.js +23 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/static_content_views.js +23 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/tab_views.js +51 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/text_field_views.js +52 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/toolbar_views.js +23 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/views_item_view.js +91 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/views_list_view.js +67 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/web_views.js +32 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/well_views.js +29 -0
- data/lib/frameworks/sproutcore/apps/showcase/views/workspace_views.js +23 -0
- data/lib/frameworks/sproutcore/apps/tests/english.lproj/strings.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +91 -51
- data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +93 -27
- data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/request.js +196 -15
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +26 -10
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/object.js +90 -92
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/object.js +69 -39
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/selection_support.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/color.js +769 -0
- data/lib/frameworks/sproutcore/frameworks/{desktop → core_foundation}/system/key_bindings.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/req_anim_frame.js +31 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +7 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils.js +8 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +49 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/selection_support.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/ext/object_test.js +106 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/color.js +448 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/escape_html.js +8 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/invokeLater.js +24 -24
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/offset.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/animation.js +90 -30
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/class_name_bindings_test.js +14 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/touch.js +113 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +64 -8
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +20 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +58 -38
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/touch.js +32 -39
- data/lib/frameworks/sproutcore/frameworks/core_tools/models/target.js +20 -15
- data/lib/frameworks/sproutcore/frameworks/datastore/models/child_attribute.js +19 -15
- data/lib/frameworks/sproutcore/frameworks/datastore/models/child_record.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +16 -16
- data/lib/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +32 -32
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +53 -38
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +9 -8
- data/lib/frameworks/sproutcore/frameworks/datastore/models/single_attribute.js +26 -26
- data/lib/frameworks/sproutcore/frameworks/datastore/system/child_array.js +1 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +4 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +0 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +96 -8
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/datetime_recordattribute.js +22 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/data_store.js +24 -24
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +376 -37
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +51 -53
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +108 -66
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +33 -35
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/single_attribute.js +6 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/compare.js +33 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +181 -15
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +6 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/border.js +3 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_fast_path.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +153 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/modal.js +39 -18
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +6 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +139 -50
- data/lib/frameworks/sproutcore/frameworks/{foundation → desktop}/resources/button_view.css +3 -3
- data/lib/frameworks/sproutcore/frameworks/{foundation → desktop}/resources/checkbox_view.css +4 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/disclosure.css +2 -2
- data/lib/frameworks/sproutcore/frameworks/{foundation → desktop}/resources/radio_view.css +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/segmented.css +23 -17
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/web.css +5 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +4 -5
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/mixins/border.js +3 -12
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/mixins/collection_fast_path.js +58 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +79 -12
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +13 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/ui.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/drag_and_drop.js +147 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +123 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/drag_and_drop.js +150 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +58 -44
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/methods.js +9 -80
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +54 -130
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/observers.js +78 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +64 -9
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/methods.js +11 -11
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/ui.js +28 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/slider/methods.js +74 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/slider/ui.js +141 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +4 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/grid.js +69 -36
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +27 -11
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +41 -25
- data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +51 -89
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +59 -34
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +59 -49
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/scroll.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +4 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +14 -14
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/label.css +8 -8
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +13 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +4 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/colors.js +21 -22
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/tree/selection_support.js +26 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js +4 -5
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/image_queue.js +68 -44
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/user_defaults.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/methods.js +0 -10
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +24 -59
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +47 -34
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +96 -12
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +38 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +38 -50
- data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffer.js +6 -2
- data/lib/frameworks/sproutcore/frameworks/media/media_capabilities.js +211 -0
- data/lib/frameworks/sproutcore/frameworks/media/render_delegates/media_slider.js +77 -0
- data/lib/frameworks/sproutcore/frameworks/media/resources/playeras3.fla +0 -0
- data/lib/frameworks/sproutcore/frameworks/media/resources/video.css +129 -115
- data/lib/frameworks/sproutcore/frameworks/media/resources/videoCanvas.swf +0 -0
- data/lib/frameworks/sproutcore/frameworks/media/tests/media_capabilities.js +194 -0
- data/lib/frameworks/sproutcore/frameworks/media/views/audio.js +56 -173
- data/lib/frameworks/sproutcore/frameworks/media/views/controls.js +15 -18
- data/lib/frameworks/sproutcore/frameworks/media/views/media_slider.js +63 -219
- data/lib/frameworks/sproutcore/frameworks/media/views/mini_controls.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/media/views/simple_controls.js +4 -8
- data/lib/frameworks/sproutcore/frameworks/media/views/video.js +51 -160
- data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js +138 -102
- data/lib/frameworks/sproutcore/frameworks/routing/tests/system/routes.js +8 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/core.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/array.js +8 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +32 -12
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +28 -24
- data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +0 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +111 -12
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/compare.js +9 -7
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +8 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable/enumerable.js +160 -115
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/enhance.js +64 -19
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/mixin.js +83 -0
- data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/bind.js +3 -0
- data/lib/frameworks/sproutcore/frameworks/template_view/tests/views/template/collection.js +13 -0
- data/lib/frameworks/sproutcore/frameworks/template_view/tests/views/template/handlebars.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/template_view/views/template_collection.js +5 -5
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/button.css +5 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/button.css +13 -12
- data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list.css +9 -2
- data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress.css +105 -5
- data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress_view_indeterminate_content.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented.css +19 -15
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented.css +93 -21
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_vertical_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_vertical_normal.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_vertical_selected.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_vertical_selected_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented.css +91 -15
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_vertical_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_vertical_normal.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_vertical_selected.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_vertical_selected_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented.css +21 -17
- data/lib/frameworks/sproutcore/themes/ace/resources/segmented/segmented.css +26 -25
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/menu_item_view.css +2 -4
- data/lib/sproutcore/helpers/minifier.rb +5 -5
- data/lib/sproutcore/tools/build.rb +1 -1
- data/sproutcore.gemspec +6 -1
- data/vendor/chance/lib/chance/instance/slicing.rb +2 -2
- metadata +143 -60
- data/lib/frameworks/sproutcore/apps/test_controls/Buildfile +0 -0
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/alert.js +0 -39
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/buttons.js +0 -21
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/categories.js +0 -125
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/category.js +0 -36
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/select.js +0 -12
- data/lib/frameworks/sproutcore/apps/test_controls/controllers/split.js +0 -74
- data/lib/frameworks/sproutcore/apps/test_controls/core.js +0 -29
- data/lib/frameworks/sproutcore/apps/test_controls/main.js +0 -14
- data/lib/frameworks/sproutcore/apps/test_controls/resources/buttons_page.js +0 -158
- data/lib/frameworks/sproutcore/apps/test_controls/resources/checkboxes_page.js +0 -53
- data/lib/frameworks/sproutcore/apps/test_controls/resources/flow_layout_page.js +0 -85
- data/lib/frameworks/sproutcore/apps/test_controls/resources/list_page.js +0 -40
- data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.css +0 -60
- data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.js +0 -151
- data/lib/frameworks/sproutcore/apps/test_controls/resources/panels_page.js +0 -62
- data/lib/frameworks/sproutcore/apps/test_controls/resources/progress_page.js +0 -33
- data/lib/frameworks/sproutcore/apps/test_controls/resources/radio_page.js +0 -55
- data/lib/frameworks/sproutcore/apps/test_controls/resources/scroll_page.js +0 -77
- data/lib/frameworks/sproutcore/apps/test_controls/resources/segmented_page.js +0 -99
- data/lib/frameworks/sproutcore/apps/test_controls/resources/select_page.js +0 -75
- data/lib/frameworks/sproutcore/apps/test_controls/resources/sliders_page.js +0 -54
- data/lib/frameworks/sproutcore/apps/test_controls/resources/split_page.js +0 -141
- data/lib/frameworks/sproutcore/apps/test_controls/resources/strings.js +0 -50
- data/lib/frameworks/sproutcore/apps/test_controls/resources/tab_page.js +0 -53
- data/lib/frameworks/sproutcore/apps/test_controls/resources/text_field_page.js +0 -65
- data/lib/frameworks/sproutcore/apps/test_controls/theme.js +0 -34
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/detail.js +0 -15
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/source.js +0 -15
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/target.js +0 -15
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/targets.js +0 -15
- data/lib/frameworks/sproutcore/apps/tests/tests/controllers/tests.js +0 -15
- data/lib/frameworks/sproutcore/apps/tests/tests/models/target.js +0 -15
- data/lib/frameworks/sproutcore/apps/tests/tests/models/test.js +0 -15
- data/lib/frameworks/sproutcore/apps/tests/tests/views/offset_checkbox.js +0 -15
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/console.js +0 -21
data/lib/frameworks/sproutcore/frameworks/{desktop → core_foundation}/system/key_bindings.js
RENAMED
File without changes
|
@@ -248,7 +248,6 @@ SC.RenderContext = SC.Builder.create(
|
|
248
248
|
@returns {SC.RenderContext} new context
|
249
249
|
*/
|
250
250
|
begin: function(tagNameOrElement) {
|
251
|
-
// console.log('%@.begin(%@) called'.fmt(this, tagNameOrElement));
|
252
251
|
return SC.RenderContext(tagNameOrElement, this);
|
253
252
|
},
|
254
253
|
|
@@ -267,7 +266,6 @@ SC.RenderContext = SC.Builder.create(
|
|
267
266
|
Removes an element with the passed id in the currently managed element.
|
268
267
|
*/
|
269
268
|
remove: function(elementId) {
|
270
|
-
// console.log('remove('+elementId+')');
|
271
269
|
if (!elementId) return ;
|
272
270
|
|
273
271
|
var el, elem = this._elem ;
|
@@ -356,7 +354,6 @@ SC.RenderContext = SC.Builder.create(
|
|
356
354
|
@returns {SC.RenderContext}
|
357
355
|
*/
|
358
356
|
end: function() {
|
359
|
-
// console.log('%@.end() called'.fmt(this));
|
360
357
|
// NOTE: If you modify this method, be careful to consider memory usage
|
361
358
|
// and performance here. This method is called frequently during renders
|
362
359
|
// and we want it to be as fast as possible.
|
@@ -415,7 +412,6 @@ SC.RenderContext = SC.Builder.create(
|
|
415
412
|
selfClosing = (this._selfClosing === NO) ? NO : (this.length === 1) ;
|
416
413
|
tag = tag + (selfClosing ? ' />' : '>') ;
|
417
414
|
|
418
|
-
// console.log('selfClosing == %@'.fmt(selfClosing));
|
419
415
|
strings[this.offset] = tag;
|
420
416
|
|
421
417
|
// now generate closing tag if needed...
|
@@ -1007,9 +1003,13 @@ SC.RenderContext.fn.css = SC.RenderContext.fn.addStyle;
|
|
1007
1003
|
plain text. You should make sure you pass all user-entered data through
|
1008
1004
|
this method to avoid errors. You can also do this with the text() helper
|
1009
1005
|
method on a render context.
|
1006
|
+
|
1007
|
+
@param {String|Number} text value to escape
|
1008
|
+
@returns {String} string with all HTML values properly escaped
|
1010
1009
|
*/
|
1011
1010
|
SC.RenderContext.escapeHTML = function(text) {
|
1012
1011
|
if (!text) return '';
|
1012
|
+
if (SC.typeOf(text) === SC.T_NUMBER) { text = text.toString(); }
|
1013
1013
|
return text.replace(_escapeHTMLRegex, _escapeHTMLMethod);
|
1014
1014
|
};
|
1015
1015
|
})();
|
@@ -0,0 +1,31 @@
|
|
1
|
+
/** @scope window
|
2
|
+
Polyfill for cross-browser backwards compatible window.requestAnimationFrame
|
3
|
+
support.
|
4
|
+
|
5
|
+
Via Erik Möller:
|
6
|
+
http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
|
7
|
+
*/
|
8
|
+
(function() {
|
9
|
+
var lastTime = 0;
|
10
|
+
var vendors = ['ms', 'moz', 'webkit', 'o'];
|
11
|
+
for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
|
12
|
+
window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
|
13
|
+
window.cancelRequestAnimationFrame = window[vendors[x]+
|
14
|
+
'CancelRequestAnimationFrame'];
|
15
|
+
}
|
16
|
+
|
17
|
+
if (!window.requestAnimationFrame)
|
18
|
+
window.requestAnimationFrame = function(callback, element) {
|
19
|
+
var currTime = new Date().getTime();
|
20
|
+
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
|
21
|
+
var id = window.setTimeout(function() { callback(currTime + timeToCall); },
|
22
|
+
timeToCall);
|
23
|
+
lastTime = currTime + timeToCall;
|
24
|
+
return id;
|
25
|
+
};
|
26
|
+
|
27
|
+
if (!window.cancelAnimationFrame)
|
28
|
+
window.cancelAnimationFrame = function(id) {
|
29
|
+
clearTimeout(id);
|
30
|
+
};
|
31
|
+
}())
|
@@ -368,9 +368,15 @@ SC.SparseArray = SC.Object.extend(SC.Observable, SC.Enumerable, SC.Array,
|
|
368
368
|
this._length += delta;
|
369
369
|
this.propertyDidChange('length');
|
370
370
|
}
|
371
|
-
|
371
|
+
|
372
|
+
// Both arrayContentDidChange and enumerableContentDidChange will invoke
|
373
|
+
// "this.notifyPropertyChange('[]')". To prevent multiple notifications
|
374
|
+
// these calls are made as grouped property changes.
|
375
|
+
this.beginPropertyChanges();
|
372
376
|
this.arrayContentDidChange(idx, amt, len) ;
|
373
377
|
this.enumerableContentDidChange(idx, amt, delta) ;
|
378
|
+
this.endPropertyChanges();
|
379
|
+
|
374
380
|
return this ;
|
375
381
|
},
|
376
382
|
|
@@ -111,7 +111,7 @@ SC.mixin( /** @scope SC */ {
|
|
111
111
|
// offset to the results of getBoundingClientRect.
|
112
112
|
//
|
113
113
|
// See http://dev.jquery.it/ticket/6446
|
114
|
-
if (SC.browser.
|
114
|
+
if (SC.browser.isMobileSafari) {
|
115
115
|
userAgent = navigator.userAgent;
|
116
116
|
index = userAgent.indexOf('Mobile/');
|
117
117
|
mobileBuildNumber = userAgent.substring(index + 7, index + 9);
|
@@ -124,7 +124,7 @@ SC.mixin( /** @scope SC */ {
|
|
124
124
|
|
125
125
|
// Subtract the scroll offset for viewport coordinates
|
126
126
|
if (relativeToFlag === 'viewport') {
|
127
|
-
|
127
|
+
|
128
128
|
if(SC.browser.isIE8OrLower){
|
129
129
|
result.left -= $(window).scrollLeft();
|
130
130
|
result.top -= $(window).scrollTop();
|
@@ -136,13 +136,13 @@ SC.mixin( /** @scope SC */ {
|
|
136
136
|
}
|
137
137
|
|
138
138
|
// Translate 'left', 'top' to 'x', 'y'
|
139
|
-
|
139
|
+
|
140
140
|
try{
|
141
141
|
result.x = result.left;
|
142
142
|
result.y = result.top;
|
143
143
|
} catch (e) {
|
144
|
-
// We need this for IE, when the element is detached, for some strange
|
145
|
-
// reason the object returned by element.getBoundingClientRect()
|
144
|
+
// We need this for IE, when the element is detached, for some strange
|
145
|
+
// reason the object returned by element.getBoundingClientRect()
|
146
146
|
// is read-only
|
147
147
|
result = {x:result.left, y:result.top};
|
148
148
|
}
|
@@ -162,7 +162,9 @@ SC.mixin( /** @scope SC */ {
|
|
162
162
|
@returns {Point} A hash with x, y offsets.
|
163
163
|
*/
|
164
164
|
viewportOffset: function(el) {
|
165
|
-
|
165
|
+
//@if(debug)
|
166
|
+
SC.warn("Developer Warning: SC.viewportOffset() has been deprecated in favor of SC.offset(). Please use SC.offset() from here on.");
|
167
|
+
//@endif
|
166
168
|
var result = SC.offset(el, 'viewport');
|
167
169
|
|
168
170
|
return {x: result.left, y: result.top};
|
data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js
CHANGED
@@ -14,6 +14,11 @@ var TestObject = SC.Object.extend({
|
|
14
14
|
toString: function() { return "TestObject(%@)".fmt(this.get("title")); }
|
15
15
|
});
|
16
16
|
|
17
|
+
var ComplexTestObject = SC.Object.extend({
|
18
|
+
firstName: null,
|
19
|
+
lastName: null,
|
20
|
+
toString: function() { return "TestObject(%@ %@)".fmt(this.get("firstName"), this.get('lastName')); }
|
21
|
+
});
|
17
22
|
|
18
23
|
// ..........................................................
|
19
24
|
// EMPTY
|
@@ -163,6 +168,50 @@ test("arrangedObjects", function() {
|
|
163
168
|
equals(controller.get("arrangedObjects"), controller, 'c.arrangedObjects should return receiver');
|
164
169
|
});
|
165
170
|
|
171
|
+
test("array orderBy using String", function(){
|
172
|
+
var testController = SC.ArrayController.create({
|
173
|
+
content: content,
|
174
|
+
orderBy: 'title ASC'
|
175
|
+
});
|
176
|
+
|
177
|
+
equals(testController.get('firstSelectableObject'), content[0], 'first selectable object should be the first object in arrangedObjects');
|
178
|
+
equals(testController.get('lastObject'), content[4], 'lastObject should be the last object in content');
|
179
|
+
|
180
|
+
// Reorder the content
|
181
|
+
testController.set('orderBy', 'title DESC');
|
182
|
+
|
183
|
+
equals(testController.get('firstSelectableObject'), content[4], 'first selectable object should be the first object in arrangedObjects (changed order)');
|
184
|
+
equals(testController.get('lastObject'), content[0], 'lastObject should be the first object in content (changed order)');
|
185
|
+
});
|
186
|
+
|
187
|
+
|
188
|
+
test("array orderBy using Array", function(){
|
189
|
+
var complexContent,
|
190
|
+
familyNames = "Keating Zane Alberts Keating Keating".w(),
|
191
|
+
givenNames = "Travis Harold Brian Alvin Peter".w(),
|
192
|
+
testController;
|
193
|
+
|
194
|
+
complexContent = familyNames.map(function(x, i) {
|
195
|
+
return ComplexTestObject.create({ lastName: x, firstName: givenNames.objectAt(i) });
|
196
|
+
});
|
197
|
+
|
198
|
+
testController = SC.ArrayController.create({
|
199
|
+
content: complexContent
|
200
|
+
});
|
201
|
+
|
202
|
+
equals(testController.get('firstSelectableObject'), complexContent[0], 'first selectable object should be the first object in arrangedObjects');
|
203
|
+
|
204
|
+
// Reorder the content
|
205
|
+
testController.set('orderBy', ['lastName', 'firstName']); // Brian Alberts, Alvin Keating, Peter Keating, Travis Keating, Harold Zane
|
206
|
+
equals(testController.get('firstSelectableObject'), complexContent[2], 'first selectable object should be the first object in arrangedObjects (changed order)');
|
207
|
+
equals(testController.objectAt(1), complexContent[3], 'fourth content object should be the second object in arrangedObjects (changed order)');
|
208
|
+
|
209
|
+
// Reorder the content
|
210
|
+
testController.set('orderBy', ['lastName', 'firstName DESC']); // Brian Alberts, Travis Keating, Peter Keating, Alvin Keating,Harold Zane
|
211
|
+
equals(testController.objectAt(3), complexContent[3], 'fourth content object should be the fourth object in arrangedObjects (changed order)');
|
212
|
+
|
213
|
+
});
|
214
|
+
|
166
215
|
test("array orderBy using function", function(){
|
167
216
|
var testFunc = function(a,b){
|
168
217
|
if(a.get('title') > b.get('title')) return -1;
|
@@ -57,7 +57,7 @@ function() {
|
|
57
57
|
equals(controller.get('firstSelectableObject'), content[0], 'first selectable object should be the first object in arrangedObjects');
|
58
58
|
|
59
59
|
// Reorder the content
|
60
|
-
controller.set('orderBy', 'DESC
|
60
|
+
controller.set('orderBy', 'title DESC');
|
61
61
|
|
62
62
|
equals(controller.get('firstSelectableObject'), content[4], 'first selectable object should be the first object in arrangedObjects (changed order)');
|
63
63
|
});
|
@@ -0,0 +1,106 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
3
|
+
// Copyright: ©2006-2011 Strobe Inc. and contributors.
|
4
|
+
// Portions ©2008-2011 Apple Inc. All rights reserved.
|
5
|
+
// License: Licensed under MIT license (see license.js)
|
6
|
+
// ==========================================================================
|
7
|
+
/*globals module, test, start, stop, expect, ok, equals*/
|
8
|
+
|
9
|
+
|
10
|
+
module("Object:invokeOnce()");
|
11
|
+
|
12
|
+
test("should invoke function using invokeLater after specified time and pass in extra arguments", function() {
|
13
|
+
stop(2000);
|
14
|
+
|
15
|
+
SC.RunLoop.begin();
|
16
|
+
var o = SC.Object.create({
|
17
|
+
stopped: YES,
|
18
|
+
|
19
|
+
method: function(a, b, c) {
|
20
|
+
equals(a, 'a', "Argument 'a' passed");
|
21
|
+
equals(b, 'b', "Argument 'b' passed");
|
22
|
+
equals(c, 'c', "Argument 'c' passed");
|
23
|
+
|
24
|
+
start();
|
25
|
+
}
|
26
|
+
});
|
27
|
+
o.invokeLater('method', 200, 'a', 'b', 'c');
|
28
|
+
SC.RunLoop.end();
|
29
|
+
});
|
30
|
+
|
31
|
+
test("should invoke function once multiple times using invokeLater after specified time", function() {
|
32
|
+
stop(2000);
|
33
|
+
expect(3);
|
34
|
+
|
35
|
+
SC.RunLoop.begin();
|
36
|
+
var o = SC.Object.create({
|
37
|
+
stopped: YES,
|
38
|
+
|
39
|
+
method: function() {
|
40
|
+
ok(true, 'method called');
|
41
|
+
|
42
|
+
if (this.stopped) {
|
43
|
+
this.stopped = NO;
|
44
|
+
// Continue on in a short moment. Before the test times out, but after
|
45
|
+
// enough time for a second call to method to possibly come in.
|
46
|
+
setTimeout(function() {
|
47
|
+
start();
|
48
|
+
}, 100);
|
49
|
+
}
|
50
|
+
}
|
51
|
+
});
|
52
|
+
o.invokeLater('method', 200);
|
53
|
+
o.invokeLater('method', 200);
|
54
|
+
o.invokeLater('method', 200);
|
55
|
+
SC.RunLoop.end();
|
56
|
+
});
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
module("Object:invokeOnceLater()");
|
61
|
+
|
62
|
+
test("should invoke function using invokeOnceLater after specified time and pass in extra arguments", function() {
|
63
|
+
stop(2000);
|
64
|
+
|
65
|
+
SC.RunLoop.begin();
|
66
|
+
var o = SC.Object.create({
|
67
|
+
stopped: YES,
|
68
|
+
|
69
|
+
method: function(a, b, c) {
|
70
|
+
equals(a, 'a', "Argument 'a' passed");
|
71
|
+
equals(b, 'b', "Argument 'b' passed");
|
72
|
+
equals(c, 'c', "Argument 'c' passed");
|
73
|
+
|
74
|
+
start();
|
75
|
+
}
|
76
|
+
});
|
77
|
+
o.invokeOnceLater('method', 200, 'a', 'b', 'c');
|
78
|
+
SC.RunLoop.end();
|
79
|
+
});
|
80
|
+
|
81
|
+
test("should invoke function once using invokeOnceLater after specified time", function() {
|
82
|
+
stop(2000);
|
83
|
+
expect(1);
|
84
|
+
|
85
|
+
SC.RunLoop.begin();
|
86
|
+
var o = SC.Object.create({
|
87
|
+
stopped: YES,
|
88
|
+
|
89
|
+
method: function() {
|
90
|
+
ok(true, 'method called');
|
91
|
+
|
92
|
+
if (this.stopped) {
|
93
|
+
this.stopped = NO;
|
94
|
+
// Continue on in a short moment. Before the test times out, but after
|
95
|
+
// enough time for a second call to method to possibly come in.
|
96
|
+
setTimeout(function() {
|
97
|
+
start();
|
98
|
+
}, 100);
|
99
|
+
}
|
100
|
+
}
|
101
|
+
});
|
102
|
+
o.invokeOnceLater('method', 200);
|
103
|
+
o.invokeOnceLater('method', 200);
|
104
|
+
o.invokeOnceLater('method', 200);
|
105
|
+
SC.RunLoop.end();
|
106
|
+
});
|
@@ -0,0 +1,448 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: SproutCore - JavaScript Application Framework
|
3
|
+
// Copyright: ©2006-2011 Strobe Inc. and contributors.
|
4
|
+
// Portions ©2008-2011 Apple Inc. All rights reserved.
|
5
|
+
// License: Licensed under MIT license (see license.js)
|
6
|
+
// ==========================================================================
|
7
|
+
|
8
|
+
// ...............................................
|
9
|
+
// SC.Color.from parsing
|
10
|
+
//
|
11
|
+
|
12
|
+
function matches(c, r, g, b, a, msg) {
|
13
|
+
var isEqual = c.r === r &&
|
14
|
+
c.g === g &&
|
15
|
+
c.b === b &&
|
16
|
+
c.a === a;
|
17
|
+
ok(isEqual, msg + " [rgba(%@, %@, %@) === rgba(%@, %@, %@, %@)]".fmt(r, g, b, a,
|
18
|
+
c.r, c.g, c.b, c.a));
|
19
|
+
};
|
20
|
+
|
21
|
+
test("SC.Color.from(rgb)", function () {
|
22
|
+
matches(SC.Color.from("rgb(212, 15, 2)"),
|
23
|
+
212, 15, 2, 1,
|
24
|
+
"rgb() colors should be parseable");
|
25
|
+
matches(SC.Color.from("rgb(10000, 20, 256)"),
|
26
|
+
255, 20, 255, 1,
|
27
|
+
"Colors should be clamped to the device gamut");
|
28
|
+
|
29
|
+
matches(SC.Color.from("rgb(10%, 20%, 30%)"),
|
30
|
+
26, 51, 77, 1,
|
31
|
+
"rgb should allow percents as values");
|
32
|
+
|
33
|
+
matches(SC.Color.from("rgb(140%, 200%, 350%)"),
|
34
|
+
255, 255, 255, 1,
|
35
|
+
"rgb percents should be clamped to the device gamut");
|
36
|
+
|
37
|
+
ok(SC.Color.from("rgb(1,2,3)"), "Whitespace shouldn't matter");
|
38
|
+
ok(SC.Color.from("rgb(1 , 2 , 3 )"), "Whitespace shouldn't matter");
|
39
|
+
});
|
40
|
+
|
41
|
+
test("SC.Color.from(rgba)", function () {
|
42
|
+
matches(SC.Color.from("rgba(212, 15, 2, .2)"),
|
43
|
+
212, 15, 2, .2,
|
44
|
+
"rgba() colors should be parseable");
|
45
|
+
matches(SC.Color.from("rgba(260, 255, 20, 1.5)"),
|
46
|
+
255, 255, 20, 1,
|
47
|
+
"Alpha should be clamped to 1");
|
48
|
+
|
49
|
+
matches(SC.Color.from("rgba(10%, 20%, 30%, .5)"),
|
50
|
+
26, 51, 77, .5,
|
51
|
+
"rgba should allow percents as values");
|
52
|
+
|
53
|
+
matches(SC.Color.from("rgba(140%, 200%, 350%, .5)"),
|
54
|
+
255, 255, 255, .5,
|
55
|
+
"rgba percents should be clamped to the device gamut");
|
56
|
+
|
57
|
+
ok(!SC.Color.from("rgba(255, 255, 255, -.2)"),
|
58
|
+
"Invalid alpha should make the SC.Color.from return 'NO'");
|
59
|
+
|
60
|
+
ok(SC.Color.from("rgba(1,2,3,1)"), "Whitespace shouldn't matter");
|
61
|
+
ok(SC.Color.from("rgba(1 , 2 , 3 , 1 )"), "Whitespace shouldn't matter");
|
62
|
+
});
|
63
|
+
|
64
|
+
test("SC.Color.from() with invalid rgb colors", function () {
|
65
|
+
ok(!SC.Color.from("rgb(0, 0, 0, 0)"), "Too many arguments");
|
66
|
+
|
67
|
+
ok(!SC.Color.from("rgba(0, 0, 0)"), "Too few arguments");
|
68
|
+
ok(!SC.Color.from("rgb(0, 0)"), "Too few arguments");
|
69
|
+
|
70
|
+
ok(!SC.Color.from("rgb(0.0, 0.0, 0.0)"), "Floats are not allowed");
|
71
|
+
|
72
|
+
ok(!SC.Color.from("rgb(0, 0, 0"), "Missing parenthesis");
|
73
|
+
|
74
|
+
ok(!SC.Color.from("rgb(260, -10, 5)"), "Negative numbers");
|
75
|
+
});
|
76
|
+
|
77
|
+
test("SC.Color.from(#rgb)", function () {
|
78
|
+
matches(SC.Color.from("#21a"),
|
79
|
+
34, 17, 170, 1,
|
80
|
+
"#rgb colors should be parseable");
|
81
|
+
|
82
|
+
ok(SC.Color.from("#ABC").isEqualTo(
|
83
|
+
SC.Color.from("#abc")),
|
84
|
+
"Character casing should not matter with hex colors");
|
85
|
+
});
|
86
|
+
|
87
|
+
test("SC.Color.from(#rrggbb)", function () {
|
88
|
+
matches(SC.Color.from("#ABCDEF"),
|
89
|
+
171, 205, 239, 1,
|
90
|
+
"#rrggbb colors should be parseable");
|
91
|
+
|
92
|
+
ok(SC.Color.from("#ABCDEF").isEqualTo(
|
93
|
+
SC.Color.from("#abcdef")),
|
94
|
+
"Character casing should not matter with hex colors");
|
95
|
+
});
|
96
|
+
|
97
|
+
test("SC.Color.from(#aarrggbb)", function () {
|
98
|
+
matches(SC.Color.from("#00ABCDEF"),
|
99
|
+
171, 205, 239, 0,
|
100
|
+
"#aarrggbb colors should be parseable");
|
101
|
+
|
102
|
+
ok(SC.Color.from("#BAABCDEF").isEqualTo(
|
103
|
+
SC.Color.from("#baabcdef")),
|
104
|
+
"Character casing should not matter with hex colors");
|
105
|
+
});
|
106
|
+
|
107
|
+
test("SC.Color.from() with invalid hex colors", function () {
|
108
|
+
ok(!SC.Color.from("#GAB"), "Invalid character");
|
109
|
+
|
110
|
+
ok(!SC.Color.from("#0000"), "Invalid length");
|
111
|
+
ok(!SC.Color.from("#00000"), "Invalid length");
|
112
|
+
ok(!SC.Color.from("#0000000"), "Invalid length");
|
113
|
+
});
|
114
|
+
|
115
|
+
test("SC.Color.from(hsl)", function () {
|
116
|
+
matches(SC.Color.from("hsl(330, 60%, 54%)"),
|
117
|
+
208, 67, 138, 1,
|
118
|
+
"hsl() colors should be parseable");
|
119
|
+
|
120
|
+
matches(SC.Color.from("hsl(-90, 50%, 44%)"),
|
121
|
+
112, 56, 168, 1,
|
122
|
+
"negative hues should be allowed");
|
123
|
+
|
124
|
+
matches(SC.Color.from("hsl(-810, 50%, 44%)"),
|
125
|
+
112, 56, 168, 1,
|
126
|
+
"negative hues should be allowed");
|
127
|
+
|
128
|
+
matches(SC.Color.from("hsl(690, 60%, 54%)"),
|
129
|
+
208, 67, 138, 1,
|
130
|
+
"hues above 360 degrees should be valid");
|
131
|
+
|
132
|
+
matches(SC.Color.from("hsl(1050, 60%, 54%)"),
|
133
|
+
208, 67, 138, 1,
|
134
|
+
"hues above 360 degrees should be valid");
|
135
|
+
|
136
|
+
matches(SC.Color.from("hsl(1050, 150%, 190%)"),
|
137
|
+
255, 255, 255, 1,
|
138
|
+
"luminosity and saturation should be clamped between 0 and 100");
|
139
|
+
|
140
|
+
ok(SC.Color.from("hsl(1,2%,3%)"), "Whitespace shouldn't matter");
|
141
|
+
ok(SC.Color.from("hsl(1 , 2% , 3% )"), "Whitespace shouldn't matter");
|
142
|
+
});
|
143
|
+
|
144
|
+
test("SC.Color.from(hsla)", function () {
|
145
|
+
matches(SC.Color.from("hsla(210, 87%, 55%, 0.4)"),
|
146
|
+
40, 140, 240, .4,
|
147
|
+
"hsla() colors should be parseable");
|
148
|
+
|
149
|
+
matches(SC.Color.from("hsla(-150, 87%, 55%, 0.4)"),
|
150
|
+
40, 140, 240, .4,
|
151
|
+
"negative hues should be allowed");
|
152
|
+
|
153
|
+
matches(SC.Color.from("hsla(-510, 87%, 55%, 0.4)"),
|
154
|
+
40, 140, 240, .4,
|
155
|
+
"negative hues should be allowed");
|
156
|
+
|
157
|
+
matches(SC.Color.from("hsla(570, 87%, 55%, 0.4)"),
|
158
|
+
40, 140, 240, .4,
|
159
|
+
"hues above 360 degrees should be valid");
|
160
|
+
|
161
|
+
matches(SC.Color.from("hsla(930, 87%, 55%, 0.4)"),
|
162
|
+
40, 140, 240, .4,
|
163
|
+
"hues above 360 degrees should be valid");
|
164
|
+
|
165
|
+
matches(SC.Color.from("hsla(930, 0427%, 200%, 0.4)"),
|
166
|
+
255, 255, 255, .4,
|
167
|
+
"luminosity and saturation should be clamped between 0 and 100");
|
168
|
+
|
169
|
+
ok(SC.Color.from("hsla(1,2%,3%,1)"), "Whitespace shouldn't matter");
|
170
|
+
ok(SC.Color.from("hsla(1 , 2% , 3% , 1 )"), "Whitespace shouldn't matter");
|
171
|
+
});
|
172
|
+
|
173
|
+
test("SC.Color.from(transparent)", function () {
|
174
|
+
matches(SC.Color.from("transparent"),
|
175
|
+
0, 0, 0, 0,
|
176
|
+
"transparent should be black with an alpha of 0");
|
177
|
+
});
|
178
|
+
|
179
|
+
test("SC.Color.from(white, black)", function () {
|
180
|
+
matches(SC.Color.from("white"),
|
181
|
+
255, 255, 255, 1,
|
182
|
+
"white should convert to rgb(255, 255, 255)");
|
183
|
+
|
184
|
+
matches(SC.Color.from("black"),
|
185
|
+
0, 0, 0, 1,
|
186
|
+
"black should convert to rgb(0, 0, 0)");
|
187
|
+
});
|
188
|
+
|
189
|
+
// ...............................................
|
190
|
+
// SC.Color helper functions
|
191
|
+
//
|
192
|
+
|
193
|
+
test("SC.Color.clamp", function () {
|
194
|
+
equals(SC.Color.clamp(0, 0, 1), 0);
|
195
|
+
equals(SC.Color.clamp(.5, 0, 1), .5);
|
196
|
+
equals(SC.Color.clamp(1, 0, 1), 1);
|
197
|
+
|
198
|
+
equals(SC.Color.clamp(-1, 0, 1), 0);
|
199
|
+
equals(SC.Color.clamp(2, 0, 1), 1);
|
200
|
+
});
|
201
|
+
|
202
|
+
test("SC.Color.clampInt", function () {
|
203
|
+
equals(SC.Color.clampInt(0, 0, 1), 0);
|
204
|
+
equals(SC.Color.clampInt(.5, 0, 1), 1);
|
205
|
+
equals(SC.Color.clampInt(1, 0, 1), 1);
|
206
|
+
|
207
|
+
equals(SC.Color.clampInt(-1, 0, 1), 0);
|
208
|
+
equals(SC.Color.clampInt(2, 0, 1), 1);
|
209
|
+
});
|
210
|
+
|
211
|
+
test("SC.Color.clampToDeviceGamut", function () {
|
212
|
+
equals(SC.Color.clampToDeviceGamut(250.25), 250);
|
213
|
+
equals(SC.Color.clampToDeviceGamut(260), 255);
|
214
|
+
equals(SC.Color.clampToDeviceGamut(-20), 0);
|
215
|
+
});
|
216
|
+
|
217
|
+
test("SC.Color.supportsArgb", function () {
|
218
|
+
ok(SC.Color.hasOwnProperty('supportsArgb'),
|
219
|
+
"supportsARGB should exist on SC.Color");
|
220
|
+
});
|
221
|
+
|
222
|
+
test("SC.Color.supportsRgba", function () {
|
223
|
+
ok(SC.Color.hasOwnProperty('supportsRgba'),
|
224
|
+
"supportsRGBA should exist on SC.Color");
|
225
|
+
});
|
226
|
+
|
227
|
+
// ...............................................
|
228
|
+
// SC.Color color space conversion functions
|
229
|
+
//
|
230
|
+
|
231
|
+
test("SC.Color.hsvToRgb", function () {
|
232
|
+
var rgb = SC.Color.hsvToRgb(252, .94, .7843),
|
233
|
+
isValid;
|
234
|
+
|
235
|
+
isValid = rgb[0] === 50 &&
|
236
|
+
rgb[1] === 12 &&
|
237
|
+
rgb[2] === 200;
|
238
|
+
ok(isValid, "[rgb(50, 12, 200) === rgb(" + rgb.join(', ') + ")");
|
239
|
+
});
|
240
|
+
|
241
|
+
test("SC.Color.rgbToHsv", function () {
|
242
|
+
var hsv = SC.Color.rgbToHsv(50, 12, 200),
|
243
|
+
isValid;
|
244
|
+
|
245
|
+
hsv[0] = Math.round(hsv[0]);
|
246
|
+
hsv[1] = Math.round(hsv[1] * 100);
|
247
|
+
hsv[2] = Math.round(hsv[2] * 100);
|
248
|
+
|
249
|
+
isValid = hsv[0] === 252 &&
|
250
|
+
hsv[1] === 94 &&
|
251
|
+
hsv[2] === 78;
|
252
|
+
ok(isValid, "[rgb(50, 12, 200) === hsv(212, 75%, 49%) === hsv(" + hsv.join(', ') + ")]");
|
253
|
+
});
|
254
|
+
|
255
|
+
test("Converting between color spaces doesn't reduce accuracy", function () {
|
256
|
+
var rgb = [20, 145, 42],
|
257
|
+
cRgb = SC.Color.hsvToRgb.apply(null, SC.Color.rgbToHsv.apply(null, rgb));
|
258
|
+
|
259
|
+
ok(rgb[0] === cRgb[0] &&
|
260
|
+
rgb[1] === cRgb[1] &&
|
261
|
+
rgb[2] === cRgb[2]);
|
262
|
+
|
263
|
+
cRgb = SC.Color.hslToRgb.apply(null, SC.Color.rgbToHsl.apply(null, rgb));
|
264
|
+
|
265
|
+
ok(rgb[0] === cRgb[0] &&
|
266
|
+
rgb[1] === cRgb[1] &&
|
267
|
+
rgb[2] === cRgb[2]);
|
268
|
+
});
|
269
|
+
|
270
|
+
// ...............................................
|
271
|
+
// SC.Copyable
|
272
|
+
//
|
273
|
+
|
274
|
+
test("SC.Color.isCopyable", function () {
|
275
|
+
ok(SC.Color.create().isCopyable);
|
276
|
+
});
|
277
|
+
|
278
|
+
test("SC.Color copy() creates a clone of the current color", function () {
|
279
|
+
var teal = SC.Color.from("teal"),
|
280
|
+
cTeal = teal.copy();
|
281
|
+
|
282
|
+
ok(teal.isEqualTo(cTeal), "the colors should be equivalent");
|
283
|
+
teal.incrementProperty('hue', 30);
|
284
|
+
ok(!teal.isEqualTo(cTeal), "mutating one color should not affect the other");
|
285
|
+
});
|
286
|
+
|
287
|
+
// ...............................................
|
288
|
+
// SC.Color properties
|
289
|
+
//
|
290
|
+
|
291
|
+
test("SC.Color#cssText", function () {
|
292
|
+
var color = SC.Color.create({
|
293
|
+
r: 255, g: 255, b: 255
|
294
|
+
});
|
295
|
+
equals(color.get('cssText'), '#ffffff');
|
296
|
+
|
297
|
+
color.set('r', 0);
|
298
|
+
equals(color.get('cssText'), '#00ffff');
|
299
|
+
|
300
|
+
color.set('g', 128);
|
301
|
+
equals(color.get('cssText'), '#0080ff');
|
302
|
+
|
303
|
+
color.set('b', 128);
|
304
|
+
equals(color.get('cssText'), '#008080');
|
305
|
+
|
306
|
+
color.set('a', 0.5);
|
307
|
+
ok(color.get('cssText') !== '#008080');
|
308
|
+
});
|
309
|
+
|
310
|
+
test("SC.Color#hue", function () {
|
311
|
+
var color = SC.Color.from("hsl(330, 60%, 54%)"),
|
312
|
+
round = Math.round;
|
313
|
+
|
314
|
+
equals(round(color.get('hue')), 330);
|
315
|
+
|
316
|
+
color.set('hue', 300);
|
317
|
+
|
318
|
+
equals(color.get('r'), 208);
|
319
|
+
equals(color.get('g'), 67);
|
320
|
+
equals(color.get('b'), 208);
|
321
|
+
|
322
|
+
equals(round(color.get('hue')), 300);
|
323
|
+
});
|
324
|
+
|
325
|
+
test("SC.Color#saturation", function () {
|
326
|
+
var color = SC.Color.from("hsl(330, 60%, 54%)"),
|
327
|
+
round = Math.round;
|
328
|
+
|
329
|
+
equals(round(color.get('saturation') * 100), 60);
|
330
|
+
|
331
|
+
color.set('saturation', .5);
|
332
|
+
|
333
|
+
equals(color.get('r'), 196);
|
334
|
+
equals(color.get('g'), 79);
|
335
|
+
equals(color.get('b'), 138);
|
336
|
+
|
337
|
+
equals(round(color.get('saturation') * 100), 50);
|
338
|
+
});
|
339
|
+
|
340
|
+
test("SC.Color#luminosity", function () {
|
341
|
+
var color = SC.Color.from("hsl(330, 60%, 54%)"),
|
342
|
+
round = Math.round;
|
343
|
+
|
344
|
+
equals(round(color.get('luminosity') * 100), 54);
|
345
|
+
|
346
|
+
color.set('luminosity', .74);
|
347
|
+
|
348
|
+
equals(color.get('r'), 228);
|
349
|
+
equals(color.get('g'), 149);
|
350
|
+
equals(color.get('b'), 189);
|
351
|
+
|
352
|
+
equals(round(color.get('luminosity') * 100), 74);
|
353
|
+
});
|
354
|
+
|
355
|
+
test("SC.Color#isEqualTo", function () {
|
356
|
+
var white = SC.Color.from("white"),
|
357
|
+
cWhite = SC.Color.create({ r: 255, g: 255, b: 255 });
|
358
|
+
|
359
|
+
ok(white.isEqualTo(cWhite));
|
360
|
+
});
|
361
|
+
|
362
|
+
test("SC.Color#toRgb", function () {
|
363
|
+
equals(SC.Color.create({ r: 50, g: 240, b: 250, a: .4 }).toRgb(),
|
364
|
+
"rgb(50,240,250)");
|
365
|
+
|
366
|
+
equals(SC.Color.create({ r: -50, g: 270, b: 250 }).toRgb(),
|
367
|
+
"rgb(0,255,250)",
|
368
|
+
"Color clamping should occur");
|
369
|
+
});
|
370
|
+
|
371
|
+
test("SC.Color#toRgba", function () {
|
372
|
+
equals(SC.Color.create({ r: 50, g: 240, b: 250, a: .4 }).toRgba(),
|
373
|
+
"rgba(50,240,250,0.4)");
|
374
|
+
|
375
|
+
equals(SC.Color.create({ r: -50, g: 270, b: 250 }).toRgba(),
|
376
|
+
"rgba(0,255,250,1)",
|
377
|
+
"Color clamping should occur");
|
378
|
+
});
|
379
|
+
|
380
|
+
test("SC.Color#toHex", function () {
|
381
|
+
equals(SC.Color.create({ r: 50, g: 240, b: 250, a: .4 }).toHex(),
|
382
|
+
"#32f0fa");
|
383
|
+
|
384
|
+
equals(SC.Color.create({ r: -50, g: 270, b: 250 }).toHex(),
|
385
|
+
"#00fffa",
|
386
|
+
"Color clamping should occur");
|
387
|
+
});
|
388
|
+
|
389
|
+
test("SC.Color#toArgb", function () {
|
390
|
+
equals(SC.Color.create({ r: 50, g: 240, b: 250, a: .4 }).toArgb(),
|
391
|
+
"#6632f0fa");
|
392
|
+
|
393
|
+
equals(SC.Color.create({ r: -50, g: 270, b: 250 }).toArgb(),
|
394
|
+
"#ff00fffa",
|
395
|
+
"Color clamping should occur");
|
396
|
+
});
|
397
|
+
|
398
|
+
test("SC.Color#toHsl", function () {
|
399
|
+
equals(SC.Color.create({ r: 50, g: 240, b: 250, a: .4 }).toHsl(),
|
400
|
+
"hsl(183,95%,59%)");
|
401
|
+
|
402
|
+
equals(SC.Color.create({ r: -50, g: 270, b: 250 }).toHsl(),
|
403
|
+
"hsl(179,100%,50%)",
|
404
|
+
"Color clamping should occur");
|
405
|
+
});
|
406
|
+
|
407
|
+
test("SC.Color#toHsla", function () {
|
408
|
+
equals(SC.Color.create({ r: 50, g: 240, b: 250, a: .4 }).toHsla(),
|
409
|
+
"hsla(183,95%,59%,0.4)");
|
410
|
+
|
411
|
+
equals(SC.Color.create({ r: -50, g: 270, b: 250 }).toHsla(),
|
412
|
+
"hsla(179,100%,50%,1)",
|
413
|
+
"Color clamping should occur");
|
414
|
+
});
|
415
|
+
|
416
|
+
test("SC.Color#add", function () {
|
417
|
+
var white = SC.Color.create({ r: 255, g: 255, b: 255 }),
|
418
|
+
red = SC.Color.create({ r: 255, g: 0, b: 25, a: .4 }),
|
419
|
+
c;
|
420
|
+
|
421
|
+
c = white.add(red);
|
422
|
+
equals(c.get('r'), 510);
|
423
|
+
equals(c.get('g'), 255);
|
424
|
+
equals(c.get('b'), 280);
|
425
|
+
equals(c.get('a'), 1.4);
|
426
|
+
});
|
427
|
+
|
428
|
+
test("SC.Color#sub", function () {
|
429
|
+
var white = SC.Color.create({ r: 255, g: 255, b: 255 }),
|
430
|
+
red = SC.Color.create({ r: 255, g: 0, b: 25, a: .4 }),
|
431
|
+
c;
|
432
|
+
|
433
|
+
c = white.sub(red);
|
434
|
+
equals(c.get('r'), 0);
|
435
|
+
equals(c.get('g'), 255);
|
436
|
+
equals(c.get('b'), 230);
|
437
|
+
equals(c.get('a'), .6);
|
438
|
+
});
|
439
|
+
|
440
|
+
test("SC.Color#mult", function () {
|
441
|
+
var c = SC.Color.create({ r: 10, g: 20, b: 30 });
|
442
|
+
|
443
|
+
c = c.mult(.5);
|
444
|
+
equals(c.get('r'), 5);
|
445
|
+
equals(c.get('g'), 10);
|
446
|
+
equals(c.get('b'), 15);
|
447
|
+
equals(c.get('a'), .5);
|
448
|
+
});
|