sproutcore 1.10.3.1 → 1.11.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG +4 -8
- data/VERSION.yml +2 -2
- data/lib/frameworks/sproutcore/Buildfile +5 -4
- data/lib/frameworks/sproutcore/CHANGELOG.md +274 -40
- data/lib/frameworks/sproutcore/CONTRIBUTORS.md +133 -0
- data/lib/frameworks/sproutcore/README.md +31 -144
- data/lib/frameworks/sproutcore/apps/showcase/controllers/source_tree_controller.js +9 -4
- data/lib/frameworks/sproutcore/apps/showcase/resources/stylesheet.css +5 -0
- data/lib/frameworks/sproutcore/apps/showcase/system/views_item_content.js +1 -1
- data/lib/frameworks/sproutcore/apps/showcase/views/split_views.js +15 -2
- data/lib/frameworks/sproutcore/apps/showcase/views/stacked_views.js +1 -1
- data/lib/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +11 -1
- data/lib/frameworks/sproutcore/frameworks/ajax/mixins/websocket_delegate.js +90 -0
- data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +81 -5
- data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +23 -4
- data/lib/frameworks/sproutcore/frameworks/ajax/system/websocket.js +475 -0
- data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/request.js +149 -26
- data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/websocket.js +197 -0
- data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/xhr_response_test.js +65 -0
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +4 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/child_view_layouts/horizontal_stack_layout.js +232 -52
- data/lib/frameworks/sproutcore/frameworks/core_foundation/child_view_layouts/vertical_stack_layout.js +235 -49
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +23 -13
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/object.js +3 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/core.js +81 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/english.lproj/ordinal.js +17 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/string.js +7 -0
- data/lib/frameworks/sproutcore/frameworks/{desktop/tests/views/disclosure/methods.js → core_foundation/french.lproj/ordinal.js} +7 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/layout.js +2 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/main.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +104 -69
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane_statechart.js +6 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/child_view_layout_protocol.js +59 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/view_transition_protocol.js +18 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/application.js +192 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/bezier_curves.js +52 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/color.js +384 -64
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/core_query.js +6 -14
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/device.js +21 -35
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +72 -36
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +90 -34
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/platform.js +55 -7
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +20 -15
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/req_anim_frame.js +9 -10
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +763 -542
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/selection_set.js +4 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +1 -7
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/string.js +14 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/touch.js +538 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils/rect.js +56 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +99 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/single_case.js +25 -19
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/core_tests.js +75 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/ext/number_test.js +81 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/action_support.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/responder_context.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +19 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/color.js +36 -20
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/design_modes_test.js +83 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeMainPane.js +7 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/mouse_events.js +338 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/root_responder.js +14 -89
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/touch.js +106 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/sparse_array.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/touch.js +136 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/rect.js +42 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/append_remove.js +11 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/child_view.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/design_mode_test.js +457 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/sendEvent.js +36 -10
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/background_color.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/border_frame_test.js +51 -24
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/childViewLayout_test.js +176 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/clippingFrame.js +46 -16
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/convertFrames.js +69 -15
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/didAppendToDocument.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layout.js +7 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +30 -10
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutStyle.js +376 -71
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/static_layout.js +0 -10
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/viewDidResize.js +117 -34
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/view_states_test.js +52 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +656 -42
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +159 -38
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/cursor.js +0 -7
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/design_mode.js +206 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/enabled.js +0 -28
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +21 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +372 -450
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +28 -13
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +22 -51
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/statechart.js +59 -30
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +0 -29
- data/lib/frameworks/sproutcore/frameworks/datastore/mixins/relationship_support.js +22 -10
- data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +42 -36
- data/lib/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +54 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +178 -59
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/system/child_array.js +206 -132
- data/lib/frameworks/sproutcore/frameworks/datastore/system/many_array.js +214 -118
- data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +96 -13
- data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +14 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +82 -42
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +272 -177
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/store_interaction_test.js +54 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/datetime_recordattribute.js +24 -16
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +6 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/data_store.js +267 -35
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +57 -46
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +150 -53
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +57 -17
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +13 -9
- data/lib/frameworks/sproutcore/frameworks/{experimental/frameworks/polymorphism → datastore}/tests/models/polymorphism/many.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/{experimental/frameworks/polymorphism → datastore}/tests/models/polymorphism/simple.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{experimental/frameworks/polymorphism → datastore}/tests/models/polymorphism/single.js +12 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +20 -15
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +9 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/many_array/core_methods.js +80 -14
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/autonomous_dataSourceCallbacks.js +280 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/autonomous_pushChanges.js +232 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +31 -5
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/parse.js +16 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +60 -40
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/materializeRecord.js +78 -0
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +13 -1
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/tests/system/datetime.js +20 -0
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/{resources → english.lproj}/strings.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/french.lproj/strings.js +45 -0
- data/lib/frameworks/sproutcore/frameworks/designer/designers/object_designer.js +7 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +125 -44
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +139 -48
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/draggable.js +202 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +59 -56
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/palette.js +13 -49
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +466 -305
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_source.js +49 -12
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +79 -21
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/split.js +12 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/menu_item_view.css +8 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/overlay-scroller.css +187 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +94 -30
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +163 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +97 -78
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +61 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +7 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +47 -22
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/methods.js +66 -9
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +21 -11
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +12 -18
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +17 -14
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +9 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/collection_fast_path.js +54 -21
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/content.js +52 -20
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/itemViewForContentIndex.js +94 -4
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/keyboard.js +177 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/layerIdFor.js +13 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/length.js +9 -9
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +18 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/methods.js +104 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +48 -49
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/drag_and_drop.js +22 -18
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +17 -5
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/link_view_test.js +136 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/contentIndexesInRect.js +77 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/drag_and_drop.js +53 -16
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/layoutForContentIndex.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +25 -25
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowOffsetForContentIndex.js +102 -27
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/{rowHeightForContentIndex.js → rowSizeForContentIndex.js} +7 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_outline.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +70 -75
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_simple.js +29 -30
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +57 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/menu_scroll_view/menu_scroll_view_test.js +206 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +15 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/integration.js +16 -11
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +164 -12
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/scale.js +387 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/touch.js +549 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +214 -45
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroller.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +73 -22
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +88 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/methods.js +8 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/slider/methods.js +16 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/slider/ui.js +54 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/dividers.js +21 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/static_content.js +31 -25
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +109 -29
- data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +10 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +3 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +779 -603
- data/lib/frameworks/sproutcore/frameworks/desktop/views/date_field.js +106 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/views/link_view.js +406 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +437 -245
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +13 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +124 -62
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +176 -597
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroller_view.js +206 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +3 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +5 -4
- data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +3 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scene.js +56 -158
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll_view.js +2560 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroller.js +458 -242
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +117 -54
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +18 -12
- data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +162 -34
- data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +30 -15
- data/lib/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +33 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +22 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +47 -22
- data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +0 -6
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form_row.js +21 -21
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu.js +14 -3
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/mixins/select_view_menu.js +24 -10
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/ext/menu_resizing.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/bindings.js +7 -4
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/check_selected.js +7 -9
- data/lib/frameworks/sproutcore/frameworks/{desktop/tests/panes/select_button/methods.js → experimental/frameworks/select_view/tests/views/select/method.js} +54 -76
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/select/selected_item.js +35 -0
- data/lib/frameworks/sproutcore/frameworks/{desktop/tests/panes/select_button → experimental/frameworks/select_view/tests/views/select}/ui.js +107 -36
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/select.js +225 -66
- data/lib/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +39 -38
- data/lib/frameworks/sproutcore/frameworks/foundation/core.js +5 -18
- data/lib/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +12 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/inflections.js +84 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/french.lproj/inflections.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_mixin.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +7 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +3 -4
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +6 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +408 -239
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +2 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/spanish.lproj/inflections.js +38 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +104 -76
- data/lib/frameworks/sproutcore/frameworks/foundation/system/string.js +20 -94
- data/lib/frameworks/sproutcore/frameworks/foundation/system/text_selection.js +33 -22
- data/lib/frameworks/sproutcore/frameworks/foundation/system/undo_manager.js +475 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/auto_resize_test.js +163 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/flowed_layout/tests.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +2 -5
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/methods.js +268 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/undo_manager.js +231 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +16 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +27 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +24 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +135 -6
- data/lib/frameworks/sproutcore/frameworks/foundation/transitions/fade_transition.js +6 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/transitions/pop_transition.js +7 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/transitions/scale_transition.js +6 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/transitions/slide_transition.js +4 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/transitions/swap_dissolve_transition.js +3 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +21 -21
- data/lib/frameworks/sproutcore/frameworks/foundation/views/container.js +65 -15
- data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +4 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +193 -213
- data/lib/frameworks/sproutcore/frameworks/jquery/{jquery-1.8.3-patched.js → jquery-1.11.1.js} +7507 -6684
- data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js +28 -11
- data/lib/frameworks/sproutcore/frameworks/routing/tests/system/routes.js +26 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/core.js +54 -25
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/array.js +0 -6
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/number.js +36 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/window.js +25 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +156 -66
- data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +150 -65
- data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +57 -11
- data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +68 -49
- data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +14 -6
- data/lib/frameworks/sproutcore/frameworks/runtime/system/string.js +23 -23
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/ext/number_test.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +0 -10
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable/enumerable.js +340 -285
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +104 -3
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/observer_set.js +14 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/string.js +15 -2
- data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +21 -18
- data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +52 -19
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/pane.js +27 -24
- data/lib/frameworks/sproutcore/frameworks/template_view/controls/button.js +30 -0
- data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/bind.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/collection.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/view.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/template_view/tests/mixins/template_helpers/checkbox_support.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/template_view/tests/views/template/handlebars.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/template_view/views/bindable_span.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/template_view/views/template_collection.js +16 -14
- data/lib/frameworks/sproutcore/frameworks/testing/core.js +5 -3
- data/lib/frameworks/sproutcore/frameworks/testing/system/plan.js +13 -0
- data/lib/frameworks/sproutcore/lib/index.rhtml +2 -2
- data/lib/frameworks/sproutcore/phantomjs/test_runner.js +28 -7
- data/lib/frameworks/sproutcore/scripts/run_sc_server_master.sh +1 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/_variables.css +2 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure.css +1 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.css +3 -4
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal.css +15 -15
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal_overlay.css +74 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical.css +11 -13
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical_overlay.css +74 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob-active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob-active@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/{22px → jumbo}/slider.css +9 -4
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/track.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/track@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob-active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob-active@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/slider.css +32 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/track.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/track@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.css +13 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob-active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob-active@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/slider.css +32 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/track.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/track@2x.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/split/split.css +2 -3
- data/lib/sproutcore/builders/chance_file.rb +3 -3
- data/lib/sproutcore/helpers/minifier.rb +1 -0
- data/vendor/chance/lib/chance/instance.rb +34 -34
- data/vendor/chance/lib/chance/instance/spriting.rb +21 -16
- metadata +81 -58
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/visibility.js +0 -17
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_fast_path.js +0 -710
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +0 -267
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/touch-scroller.css +0 -196
- data/lib/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +0 -224
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/methods.js +0 -163
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +0 -177
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +0 -2053
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select_button.js +0 -1024
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select_field.js +0 -404
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/render_delegates/menu_scroller.js +0 -28
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/tests/menu/scroll.js +0 -235
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/views/menu/scroll.js +0 -363
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/views/menu/scroller.js +0 -250
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +0 -47
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +0 -134
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/desktop_scroller.js +0 -92
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/native_scroll.js +0 -25
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/scroll.js +0 -33
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/touch_scroller.js +0 -76
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/integration.js +0 -25
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/methods.js +0 -143
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/ui.js +0 -256
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/core_scroll.js +0 -1164
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/core_scroller.js +0 -332
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/desktop/scroll.js +0 -236
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/desktop/scroller.js +0 -347
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/scroll.js +0 -15
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/scroller.js +0 -10
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/touch/scroll.js +0 -804
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/touch/scroller.js +0 -133
- data/lib/frameworks/sproutcore/frameworks/foundation/tasks/preload_bundle.js +0 -41
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal_touch.css +0 -91
- data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical_touch.css +0 -92
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/knob_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/slider.css +0 -27
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/knob_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/slider.css +0 -27
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/knob.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/knob_active.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/track.png +0 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/track.png +0 -0
@@ -67,6 +67,15 @@ SC.DateFieldView = SC.TextFieldView.extend(
|
|
67
67
|
*/
|
68
68
|
showTime: NO,
|
69
69
|
|
70
|
+
/**
|
71
|
+
Set this to NO to disallow the default keyboard handling, which attempts to convert
|
72
|
+
numeric keystrokes into valid dates.
|
73
|
+
|
74
|
+
@type Boolean
|
75
|
+
@default YES
|
76
|
+
*/
|
77
|
+
allowNumericInput: YES,
|
78
|
+
|
70
79
|
/**
|
71
80
|
@type String
|
72
81
|
@default '%I:%M %p'
|
@@ -130,7 +139,7 @@ SC.DateFieldView = SC.TextFieldView.extend(
|
|
130
139
|
if (st === YES && sd === YES) return this.get('formatDateTime');
|
131
140
|
if (st === YES) return this.get('formatTime');
|
132
141
|
return this.get('formatDate');
|
133
|
-
}.property('showTime', 'showDate').cacheable(),
|
142
|
+
}.property('showTime', 'showDate', 'formatDateTime', 'formatDate', 'formatTime').cacheable(),
|
134
143
|
|
135
144
|
/**
|
136
145
|
The current validator to format the Date to the input field and vice versa.
|
@@ -219,6 +228,13 @@ SC.DateFieldView = SC.TextFieldView.extend(
|
|
219
228
|
}
|
220
229
|
},
|
221
230
|
|
231
|
+
|
232
|
+
/** @private */
|
233
|
+
_lastValue: null,
|
234
|
+
|
235
|
+
/** @private */
|
236
|
+
_lastKey: null,
|
237
|
+
|
222
238
|
_selectRootElement: function() {
|
223
239
|
// TODO: This is a solution while I don't found how we
|
224
240
|
// receive the last key from the last input.
|
@@ -262,11 +278,6 @@ SC.DateFieldView = SC.TextFieldView.extend(
|
|
262
278
|
return YES;
|
263
279
|
},
|
264
280
|
|
265
|
-
/** @private */
|
266
|
-
insertText: function(evt) {
|
267
|
-
return YES;
|
268
|
-
},
|
269
|
-
|
270
281
|
/** @private */
|
271
282
|
moveRight: function(evt) {
|
272
283
|
var ts = this.get('tabsSelections');
|
@@ -338,6 +349,94 @@ SC.DateFieldView = SC.TextFieldView.extend(
|
|
338
349
|
/** @private */
|
339
350
|
deleteForward: function(evt) {
|
340
351
|
return YES;
|
341
|
-
}
|
352
|
+
},
|
353
|
+
|
354
|
+
/** @private */
|
355
|
+
_numericCharacters: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
|
356
|
+
/** @private */
|
357
|
+
_nonnumericCharacters: [' ', '-', '/', ':'],
|
358
|
+
/** @private Validates and applies supported keystrokes. */
|
359
|
+
insertText: function(chr, evt) {
|
360
|
+
// If it's a nonnumeric "advance" character, advance.
|
361
|
+
// TODO: instead of having a list of possible delimiter characters, we should actually look
|
362
|
+
// at what the next separator character is and only advance on that one.
|
363
|
+
if (this._nonnumericCharacters.contains(chr)) this.moveRight();
|
364
|
+
|
365
|
+
// If it's a numeric character (and we're doing those), validate and apply it.
|
366
|
+
if (this.get('allowNumericInput') && this._numericCharacters.contains(chr)) {
|
367
|
+
var as = this.get('activeSelection'),
|
368
|
+
ts = this.get('tabsSelections'),
|
369
|
+
key = ts[as].get('key');
|
370
|
+
|
371
|
+
var value = this.get('value'),
|
372
|
+
lastValue = this._lastValue,
|
373
|
+
length = 2,
|
374
|
+
min = 0,
|
375
|
+
max, key, newValue;
|
376
|
+
|
377
|
+
switch(key) {
|
378
|
+
case '%Y':
|
379
|
+
key = 'year';
|
380
|
+
min = 1000;
|
381
|
+
max = 9999;
|
382
|
+
length = 4;
|
383
|
+
break;
|
384
|
+
case '%y':
|
385
|
+
key = 'year';
|
386
|
+
max = 99;
|
387
|
+
break;
|
388
|
+
case '%m':
|
389
|
+
key = 'month';
|
390
|
+
min = 1;
|
391
|
+
max = 12;
|
392
|
+
break;
|
393
|
+
case '%d':
|
394
|
+
key = 'day';
|
395
|
+
min = 1;
|
396
|
+
max = value.advance({ month: 1 }).adjust({ day: 0 }).get('day');
|
397
|
+
break;
|
398
|
+
case '%H':
|
399
|
+
key = 'hour';
|
400
|
+
max = 23;
|
401
|
+
break;
|
402
|
+
case '%I':
|
403
|
+
key = 'hour';
|
404
|
+
max = 11;
|
405
|
+
break;
|
406
|
+
case '%M':
|
407
|
+
key = 'minute';
|
408
|
+
max = 59;
|
409
|
+
break;
|
410
|
+
case '%S':
|
411
|
+
key = 'second';
|
412
|
+
max = 59;
|
413
|
+
break;
|
414
|
+
}
|
415
|
+
|
416
|
+
if (SC.none(lastValue) || this._lastKey !== key) {
|
417
|
+
lastValue = value.get(key);
|
418
|
+
lastValue = (lastValue < 10 ? '0' : '') + lastValue;
|
419
|
+
}
|
420
|
+
|
421
|
+
if (lastValue.length > length) lastValue = lastValue.substr(-length);
|
422
|
+
|
423
|
+
// Removes the first character and adds the new one at the end of the string
|
424
|
+
lastValue = lastValue.slice(1) + chr;
|
425
|
+
newValue = parseInt(lastValue, 10);
|
426
|
+
|
427
|
+
// If the value is allow, updates the value
|
428
|
+
if (newValue <= max && newValue >= min) {
|
429
|
+
var hash = {};
|
430
|
+
hash[key] = newValue;
|
431
|
+
|
432
|
+
this.set('value', value.adjust(hash, NO));
|
433
|
+
}
|
434
|
+
|
435
|
+
this._lastValue = lastValue;
|
436
|
+
this._lastKey = key;
|
437
|
+
}
|
342
438
|
|
439
|
+
// Regardless, we handled the event.
|
440
|
+
return YES;
|
441
|
+
}
|
343
442
|
});
|
@@ -0,0 +1,406 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: SproutCore
|
3
|
+
// Copyright: ©2014 7x7 Software, Inc.
|
4
|
+
// License: Licensed under MIT license
|
5
|
+
// ==========================================================================
|
6
|
+
|
7
|
+
|
8
|
+
/**
|
9
|
+
@class
|
10
|
+
|
11
|
+
This view creates a link (i.e. HTML anchor) to a remote resource. You should
|
12
|
+
use this view to create programmatic HTML links, such as links to a PDF or to
|
13
|
+
an external site.
|
14
|
+
|
15
|
+
For example,
|
16
|
+
|
17
|
+
//...
|
18
|
+
|
19
|
+
// A link to download the selected employee's resume.
|
20
|
+
link: SC.LinkView.extend({
|
21
|
+
|
22
|
+
body: "Current Resume",
|
23
|
+
|
24
|
+
// Compute the fileName on the fly.
|
25
|
+
fileNameBinding: SC.Binding.oneWay('MyApp.employeeController.fullName')
|
26
|
+
.transform(function (fullName) {
|
27
|
+
// ex. "Resume - Tyler Keating.pdf"
|
28
|
+
return "Resume - " + fullName + ".pdf";
|
29
|
+
}),
|
30
|
+
|
31
|
+
// Compute the href on the fly.
|
32
|
+
hrefBinding: SC.Binding.oneWay('MyApp.employeeController.resumePath'),
|
33
|
+
|
34
|
+
toolTip: "Link to current resume"
|
35
|
+
}),
|
36
|
+
|
37
|
+
//...
|
38
|
+
|
39
|
+
The example above generates something like the following,
|
40
|
+
|
41
|
+
<a href="/users/22/cur-resume.pdf" class="sc-view sc-link-view" download="Resume - Tyler Keating.pdf" title="Link to current resume">Current Resume</a>
|
42
|
+
|
43
|
+
Note that you can localize the `body` and the `toolTip` by setting the `localize`
|
44
|
+
property to true.
|
45
|
+
|
46
|
+
@since SproutCore 1.11
|
47
|
+
*/
|
48
|
+
SC.LinkView = SC.View.extend({
|
49
|
+
|
50
|
+
/**
|
51
|
+
The WAI-ARIA role for link views.
|
52
|
+
|
53
|
+
@type String
|
54
|
+
@default 'link'
|
55
|
+
@readOnly
|
56
|
+
*/
|
57
|
+
ariaRole: 'link',
|
58
|
+
|
59
|
+
/**
|
60
|
+
The content of the anchor, such as text or an image.
|
61
|
+
|
62
|
+
Note that this will be escaped by default, so any HTML tags will appear
|
63
|
+
as text. To render the body as HTML, set `escapeHTML` to `false` and
|
64
|
+
remember to *NEVER* allow user generated content unescaped in your app.
|
65
|
+
|
66
|
+
If you are using text, you may also want to provide localized versions and
|
67
|
+
should set the `localize` property to true.
|
68
|
+
|
69
|
+
@type String
|
70
|
+
@default ""
|
71
|
+
*/
|
72
|
+
body: "",
|
73
|
+
|
74
|
+
/**
|
75
|
+
The class names for the view.
|
76
|
+
|
77
|
+
Note: this is not an observed display property and as such must be predefined on the
|
78
|
+
view (You can update class names using `classNameBindings`).
|
79
|
+
|
80
|
+
Note: this is a concatenated property and as such all subclasses will inherit
|
81
|
+
the current class names.
|
82
|
+
|
83
|
+
@type Array
|
84
|
+
@default ['sc-view', 'sc-link-view']
|
85
|
+
*/
|
86
|
+
classNames: ['sc-link-view'],
|
87
|
+
|
88
|
+
/**
|
89
|
+
This is generated by localizing the body property if necessary.
|
90
|
+
|
91
|
+
@readonly
|
92
|
+
@type String
|
93
|
+
@observes 'body'
|
94
|
+
@observes 'localize'
|
95
|
+
*/
|
96
|
+
displayBody: function () {
|
97
|
+
var ret = this.get('body');
|
98
|
+
|
99
|
+
return (ret && this.get('localize')) ? SC.String.loc(ret) : (ret || '');
|
100
|
+
}.property('body', 'localize').cacheable(),
|
101
|
+
|
102
|
+
/**
|
103
|
+
The observed properties that will cause the view to be rerendered if they
|
104
|
+
change.
|
105
|
+
|
106
|
+
Note: this is a concatenated property and as such all subclasses will inherit
|
107
|
+
the current display properties.
|
108
|
+
|
109
|
+
@type Array
|
110
|
+
@default ['displayBody', 'displayToolTip', 'fileName', 'href', 'hreflang']
|
111
|
+
*/
|
112
|
+
displayProperties: ['displayBody', 'displayToolTip', 'fileName', 'href', 'hreflang'],
|
113
|
+
|
114
|
+
/**
|
115
|
+
The default file name to use for the linked resource if it will be
|
116
|
+
downloaded.
|
117
|
+
|
118
|
+
For example,
|
119
|
+
|
120
|
+
//...
|
121
|
+
|
122
|
+
// The linked resource (/students/2013/list-copy.xml) will be downloaded
|
123
|
+
// with the name 'Student List.xml' by default.
|
124
|
+
fileName: 'Student List.xml',
|
125
|
+
|
126
|
+
href: '/students/2013/list-copy.xml'
|
127
|
+
|
128
|
+
//...
|
129
|
+
|
130
|
+
This property is observed, allowing you to programmatically set the download
|
131
|
+
file name.
|
132
|
+
|
133
|
+
For example as a computed property,
|
134
|
+
|
135
|
+
//...
|
136
|
+
|
137
|
+
// The download file name is computed from the linked resource URL.
|
138
|
+
fileName: function () {
|
139
|
+
var href = this.get('href'),
|
140
|
+
linkedYear,
|
141
|
+
ret;
|
142
|
+
|
143
|
+
if (href) {
|
144
|
+
// ex. href == "/reports/2012/annual-report.pdf"
|
145
|
+
linkedYear = href.match(/\/(\d*)\//)[1];
|
146
|
+
ret = "Annual Report " + linkedYear + '.pdf';
|
147
|
+
}
|
148
|
+
|
149
|
+
return ret;
|
150
|
+
}.property('href').cacheable(),
|
151
|
+
|
152
|
+
hrefBinding: SC.Binding.oneWay('MyApp.reportController.hardlink'),
|
153
|
+
|
154
|
+
//...
|
155
|
+
|
156
|
+
Note: There are no restrictions on allowed values, but authors are cautioned
|
157
|
+
that most file systems have limitations with regard to what punctuation is
|
158
|
+
supported in file names, and user agents are likely to adjust file names
|
159
|
+
accordingly. Also, support for this attribute varies widely between browsers.
|
160
|
+
|
161
|
+
@see http://caniuse.com/#feat=download
|
162
|
+
@see http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-download
|
163
|
+
*/
|
164
|
+
fileName: null,
|
165
|
+
|
166
|
+
/**
|
167
|
+
Whether the body and toolTip will be escaped to avoid HTML injection attacks
|
168
|
+
or not.
|
169
|
+
|
170
|
+
You should only disable this option if you are sure you are displaying
|
171
|
+
non-user generated text.
|
172
|
+
|
173
|
+
Note: this is not an observed display property. If you change it after
|
174
|
+
rendering, you should call `displayDidChange` on the view to update the layer.
|
175
|
+
|
176
|
+
@type Boolean
|
177
|
+
@default true
|
178
|
+
*/
|
179
|
+
escapeHTML: true,
|
180
|
+
|
181
|
+
/**
|
182
|
+
The linked resource URL.
|
183
|
+
|
184
|
+
@type String
|
185
|
+
@default '#'
|
186
|
+
*/
|
187
|
+
href: '#',
|
188
|
+
|
189
|
+
/**
|
190
|
+
The alternate language for the linked resource.
|
191
|
+
|
192
|
+
Set this value to modify the 'hreflang' attribute for the linked resource,
|
193
|
+
which would otherwise be the current locale's language.
|
194
|
+
|
195
|
+
@type String
|
196
|
+
@default null
|
197
|
+
@see http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-hreflang
|
198
|
+
*/
|
199
|
+
language: null,
|
200
|
+
|
201
|
+
/**
|
202
|
+
The language attribute of the linked resource.
|
203
|
+
|
204
|
+
This is the current locale's language by default, but may be overridden to
|
205
|
+
a specific other language by setting the `language` property.
|
206
|
+
|
207
|
+
@readonly
|
208
|
+
@type String
|
209
|
+
@observes 'language'
|
210
|
+
@observes 'localize'
|
211
|
+
@default SC.Locale.currentLocale.language
|
212
|
+
@see http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-hreflang
|
213
|
+
*/
|
214
|
+
hreflang: function () {
|
215
|
+
var language = this.get('language'),
|
216
|
+
ret;
|
217
|
+
|
218
|
+
ret = language || SC.Locale.currentLocale.language;
|
219
|
+
|
220
|
+
return ret;
|
221
|
+
}.property('language', 'localize').cacheable(),
|
222
|
+
|
223
|
+
/**
|
224
|
+
An array of URLs to ping when the link is clicked.
|
225
|
+
|
226
|
+
For example, this can be used for tracking the use of off-site links without
|
227
|
+
JavaScript or page redirects,
|
228
|
+
|
229
|
+
//...
|
230
|
+
|
231
|
+
// Whenever anyone downloads this resource, we ping our analytics site.
|
232
|
+
ping: ['http://tracker.my-app.com/?action="Downloaded PDF Version"'],
|
233
|
+
|
234
|
+
//...
|
235
|
+
|
236
|
+
Note: this is not an updateable display property. It must be defined before
|
237
|
+
creating the layer.
|
238
|
+
|
239
|
+
@type Array
|
240
|
+
@default null
|
241
|
+
@see http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#ping
|
242
|
+
*/
|
243
|
+
ping: null,
|
244
|
+
|
245
|
+
/**
|
246
|
+
A list of space separated non-case sensitive link type tokens.
|
247
|
+
|
248
|
+
For example,
|
249
|
+
|
250
|
+
//...
|
251
|
+
|
252
|
+
// This link is to the author of the article and the result should be loaded in the browser's sidebar if it has one.
|
253
|
+
rel: ['author', 'sidebar'],
|
254
|
+
|
255
|
+
//...
|
256
|
+
|
257
|
+
Note: this is not an updateable display property. It must be defined before
|
258
|
+
creating the layer.
|
259
|
+
|
260
|
+
@type Array
|
261
|
+
@default null
|
262
|
+
@see http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-rel
|
263
|
+
@see http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#linkTypes
|
264
|
+
*/
|
265
|
+
rel: null,
|
266
|
+
|
267
|
+
/**
|
268
|
+
The tag type to use.
|
269
|
+
|
270
|
+
Note: this is not an updateable display property. It must be defined before
|
271
|
+
creating the layer.
|
272
|
+
|
273
|
+
@type String
|
274
|
+
@default 'a'
|
275
|
+
*/
|
276
|
+
tagName: 'a',
|
277
|
+
|
278
|
+
/**
|
279
|
+
The target for loading the resource.
|
280
|
+
|
281
|
+
The following keywords have special meanings:
|
282
|
+
|
283
|
+
* _self: Load the response into the same HTML4 frame (or HTML5 browsing context) as the current one.
|
284
|
+
* _blank: Load the response into a new unnamed HTML4 window or HTML5 browsing context.
|
285
|
+
* _parent: Load the response into the HTML4 frameset parent of the current frame or HTML5 parent browsing context of the current one. If there is no parent, this option behaves the same way as _self.
|
286
|
+
* _top: In HTML4: Load the response into the full, original window, canceling all other frames. In HTML5: Load the response into the top-level browsing context (that is, the browsing context that is an ancestor of the current one, and has no parent). If there is no parent, this option behaves the same way as _self.
|
287
|
+
|
288
|
+
Note: this is not an updateable display property. It must be defined before
|
289
|
+
creating the layer.
|
290
|
+
|
291
|
+
@type String
|
292
|
+
@default '_blank'
|
293
|
+
@see http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-target
|
294
|
+
*/
|
295
|
+
target: '_blank',
|
296
|
+
|
297
|
+
/**
|
298
|
+
The mime type of the link.
|
299
|
+
|
300
|
+
This has little effect, but certain browsers may add display information
|
301
|
+
pertaining to the type, such as a small icon for the linked resource type.
|
302
|
+
|
303
|
+
Note: this is not an updateable display property. It must be defined before
|
304
|
+
creating the layer.
|
305
|
+
|
306
|
+
@type String
|
307
|
+
@default null
|
308
|
+
@see http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-type
|
309
|
+
*/
|
310
|
+
type: null,
|
311
|
+
|
312
|
+
// ------------------------------------------------------------------------
|
313
|
+
// Methods
|
314
|
+
//
|
315
|
+
|
316
|
+
/** @private */
|
317
|
+
render: function (context) {
|
318
|
+
var displayBody = this.get('displayBody'),
|
319
|
+
displayToolTip = this.get('displayToolTip'),
|
320
|
+
fileName = this.get('fileName'),
|
321
|
+
escapeHTML = this.get('escapeHTML'),
|
322
|
+
href = this.get('href'),
|
323
|
+
hreflang = this.get('hreflang'),
|
324
|
+
ping = this.get('ping'),
|
325
|
+
rel = this.get('rel'),
|
326
|
+
target = this.get('target'),
|
327
|
+
type = this.get('type');
|
328
|
+
|
329
|
+
// Escape the title of the anchor if needed. This prevents potential XSS attacks.
|
330
|
+
if (displayToolTip && escapeHTML) {
|
331
|
+
displayToolTip = SC.RenderContext.escapeHTML(displayToolTip);
|
332
|
+
}
|
333
|
+
|
334
|
+
// Set attributes
|
335
|
+
context.setAttr({
|
336
|
+
'download': fileName,
|
337
|
+
'href': href,
|
338
|
+
'hreflang': hreflang,
|
339
|
+
'ping': ping ? ping.join(' ') : null,
|
340
|
+
'rel': rel ? rel.join(' ') : null,
|
341
|
+
'target': target,
|
342
|
+
'title': displayToolTip,
|
343
|
+
'type': type
|
344
|
+
});
|
345
|
+
|
346
|
+
// Escape the body of the anchor if needed. This prevents potential XSS attacks.
|
347
|
+
if (displayBody && escapeHTML) {
|
348
|
+
displayBody = SC.RenderContext.escapeHTML(displayBody);
|
349
|
+
}
|
350
|
+
|
351
|
+
// Insert the body
|
352
|
+
context.push(displayBody);
|
353
|
+
},
|
354
|
+
|
355
|
+
/** @private */
|
356
|
+
mouseDown: function (evt) {
|
357
|
+
evt.allowDefault();
|
358
|
+
return true;
|
359
|
+
},
|
360
|
+
|
361
|
+
/** @private */
|
362
|
+
mouseUp: function (evt) {
|
363
|
+
evt.allowDefault();
|
364
|
+
return true;
|
365
|
+
},
|
366
|
+
|
367
|
+
/** @private */
|
368
|
+
touchStart: function (touch) {
|
369
|
+
touch.allowDefault();
|
370
|
+
return true;
|
371
|
+
},
|
372
|
+
|
373
|
+
/** @private */
|
374
|
+
touchEnd: function (touch) {
|
375
|
+
touch.allowDefault();
|
376
|
+
return true;
|
377
|
+
},
|
378
|
+
|
379
|
+
/** @private */
|
380
|
+
update: function (jqEl) {
|
381
|
+
var displayBody = this.get('displayBody'),
|
382
|
+
displayToolTip = this.get('displayToolTip'),
|
383
|
+
fileName = this.get('fileName'),
|
384
|
+
escapeHTML = this.get('escapeHTML'),
|
385
|
+
href = this.get('href'),
|
386
|
+
hreflang = this.get('hreflang');
|
387
|
+
|
388
|
+
jqEl.attr('download', fileName);
|
389
|
+
jqEl.attr('href', href);
|
390
|
+
jqEl.attr('hreflang', hreflang);
|
391
|
+
|
392
|
+
// Escape the title of the anchor if needed. This prevents potential XSS attacks.
|
393
|
+
if (displayToolTip && escapeHTML) {
|
394
|
+
displayToolTip = SC.RenderContext.escapeHTML(displayToolTip);
|
395
|
+
}
|
396
|
+
|
397
|
+
jqEl.attr('title', displayToolTip);
|
398
|
+
|
399
|
+
// Escape the body of the anchor if needed. This prevents potential XSS attacks.
|
400
|
+
if (displayBody && escapeHTML) {
|
401
|
+
displayBody = SC.RenderContext.escapeHTML(displayBody);
|
402
|
+
}
|
403
|
+
jqEl.html(displayBody);
|
404
|
+
}
|
405
|
+
|
406
|
+
});
|