sproutcore 1.7.1.beta → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +44 -0
- data/README.rdoc +20 -20
- data/VERSION.yml +3 -3
- data/lib/Buildfile +1 -1
- data/lib/buildtasks/build.rake +5 -0
- data/lib/buildtasks/manifest.rake +19 -1
- data/lib/frameworks/sproutcore/Buildfile +19 -17
- data/lib/frameworks/sproutcore/CHANGELOG.md +163 -29
- data/lib/frameworks/sproutcore/README.md +29 -8
- data/lib/frameworks/sproutcore/apps/statechart_routing/Buildfile +12 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/controllers/login_controller.js +11 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/controllers/main_controller.js +7 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/controllers/statechart_controller.js +17 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/core.js +25 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/main.js +15 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/resources/_theme.css +18 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/resources/bar_page.js +14 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/resources/foo_page.js +14 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/resources/loading.rhtml +9 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/resources/login_page.js +61 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/resources/main_page.js +46 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/statechart.js +76 -0
- data/lib/frameworks/sproutcore/apps/statechart_routing/theme.js +27 -0
- data/lib/frameworks/sproutcore/apps/tests/controllers/targets.js +1 -1
- data/lib/frameworks/sproutcore/apps/tests/states/no_targets.js +1 -1
- data/lib/frameworks/sproutcore/apps/tests/states/ready_detail.js +1 -1
- data/lib/frameworks/sproutcore/apps/tests/states/ready_empty.js +1 -1
- data/lib/frameworks/sproutcore/apps/tests/states/ready_list.js +1 -1
- data/lib/frameworks/sproutcore/apps/tests/states/ready_no_tests.js +1 -1
- data/lib/frameworks/sproutcore/apps/welcome/controllers/targets.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +14 -1
- data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +15 -15
- data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/request.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/animation/core.js +8 -5
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +302 -70
- data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +19 -14
- data/lib/frameworks/sproutcore/frameworks/bootstrap/tests/system/browser.js +471 -149
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/object.js +42 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/run_loop.js +3 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/string.js +7 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/action_support.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/delegate_support.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/responder_context.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/selection_support.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/body_overflow.js +63 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/keyboard.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/layout.js +37 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/main.js +28 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +10 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/sparse_array_delegate.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/browser.js +66 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/builder.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/cursor.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +58 -57
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js.orig +445 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/platform.js +51 -31
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/ready.js +5 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +53 -69
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/responder.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +98 -72
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/string.js +37 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/timer.js +7 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +21 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/content_destroyed.js +7 -7
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +23 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/browser.js +66 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/event.js +22 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/locale.js +11 -11
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/end.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/escape_html.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_className.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_style.js +8 -8
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/update.js +17 -16
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/remove.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/build_children.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/class_name_bindings_test.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/createChildViews.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +50 -30
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/acceleration.js +46 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +1 -43
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +8 -34
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +3 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +10 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +6 -5
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +22 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/mixins/relationship_support.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/models/child_attribute.js +0 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +35 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +46 -19
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +23 -9
- data/lib/frameworks/sproutcore/frameworks/datastore/models/single_attribute.js +2 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/system/many_array.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +294 -302
- data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js.orig +1531 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +14 -11
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/many_array.js +63 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +50 -10
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/destroy.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/refresh.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/single_attribute.js +114 -67
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/compare.js +54 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation.js +29 -9
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/parse.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/flush.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/cancelRecord.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +37 -45
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/find.js +127 -127
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +16 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushRelationships.js +42 -4
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/readDataHash.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +13 -7
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/tests/system/datetime.js +8 -0
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/resources/strings.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/system/datetime.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/debug/core.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/core.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +1 -4
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +19 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/modal.js +30 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/palette.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +24 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +121 -28
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +15 -15
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/protocols/responder.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +39 -15
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/collection.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/image_button.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/panel.js +14 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/popup_button.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +11 -11
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +4 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +1 -51
- data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +11 -16
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/images/icons/sc-icon-error-48.png +0 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/slider.css +0 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +9 -9
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/content.js +11 -11
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +2 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/reload.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/ui.js +107 -81
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +68 -60
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +57 -12
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/integration.js +21 -19
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroller.js +5 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/ui.js +32 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +12 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/stacked/ui_comments.js +12 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +0 -8
- data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +77 -132
- data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +5 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +16 -15
- data/lib/frameworks/sproutcore/frameworks/desktop/views/date_field.js +52 -52
- data/lib/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/grid.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +147 -147
- data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +11 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +22 -12
- data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +13 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scene.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +462 -441
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroller.js +48 -62
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segment.js +22 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +150 -32
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +104 -45
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select_button.js +42 -20
- data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +24 -24
- data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +148 -154
- data/lib/frameworks/sproutcore/frameworks/desktop/views/stacked.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +8 -7
- data/lib/frameworks/sproutcore/frameworks/desktop/views/web.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +2 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/files.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/library.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/targets.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/view_configs.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/mixins/drop_down.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/states/ready.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/plist_item.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/web.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/controllers/page_design.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/css/css_style_sheet.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/object_designer.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/view_designer.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/mixins/snap_lines.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/designer_drop_target.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/drawing.js +21 -21
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/page_item_view.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form.js +59 -53
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/views/menu/scroll.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphism/simple.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/core_scroll.js +6 -6
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/desktop/scroll.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/touch/scroll.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu.js +14 -10
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu_item.js +17 -6
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/popup_button.js +38 -14
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/select.js +5 -13
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_child.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_thumb.js +5 -3
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/children.js +19 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/methods.js +20 -2
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/split_thumb.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/split.js +35 -12
- data/lib/frameworks/sproutcore/frameworks/formatters/README +6 -0
- data/lib/frameworks/sproutcore/frameworks/formatters/english.lproj/strings.js +174 -0
- data/lib/frameworks/sproutcore/frameworks/formatters/formatters/date_formatter.js +351 -0
- data/lib/frameworks/sproutcore/frameworks/formatters/tests/date_formatter.js +517 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/core.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +345 -138
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/button.js +5 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +176 -42
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +137 -105
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/gestureable.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editable.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor.js +16 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/validatable.js +47 -47
- data/lib/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/helpers/sizing.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +28 -6
- data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/render_delegate.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/benchmark.css +0 -5
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/bootstrap.rhtml +34 -19
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/button_view.css +0 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/label.css +1 -5
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +8 -9
- data/lib/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +179 -47
- data/lib/frameworks/sproutcore/frameworks/foundation/system/task_queue.js +34 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/system/text_selection.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +26 -12
- data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/misc.js +7 -7
- data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_measurement.js +12 -4
- data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_metric_optimization.js +202 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/content_value_support/content.js +77 -8
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/flowed_layout/tests.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/beginEditing.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/commitEditing.js +4 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/discardEditing.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/beginEditing.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/commitEditing.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/discardEditing.js +4 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/utils/pointInElement.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +0 -8
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +163 -149
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/date.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/date_time.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/password.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/validators/validator.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +16 -43
- data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +4 -3
- data/lib/frameworks/sproutcore/frameworks/foundation/views/inline_text_field.js +67 -54
- data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +49 -38
- data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +285 -242
- data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffer.js +13 -13
- data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffered.js +19 -22
- data/lib/frameworks/sproutcore/frameworks/jquery/jquery-sc.js +9 -3
- data/lib/frameworks/sproutcore/frameworks/jquery/jquery.js +231 -186
- data/lib/frameworks/sproutcore/frameworks/media/views/audio.js +145 -143
- data/lib/frameworks/sproutcore/frameworks/media/views/video.js +156 -154
- data/lib/frameworks/sproutcore/frameworks/qunit/qunit/qunit.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js.orig +540 -0
- data/lib/frameworks/sproutcore/frameworks/routing/tests/system/routes.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/core.js +15 -8
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/replace.js +12 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/function.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +7 -7
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +98 -32
- data/lib/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +7 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +14 -3
- data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +98 -13
- data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +8 -14
- data/lib/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/system/error.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +23 -6
- data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +69 -18
- data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +57 -31
- data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +189 -14
- data/lib/frameworks/sproutcore/frameworks/runtime/system/string.js +82 -22
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/chained.js +20 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +125 -4
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/private/observer_queue.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/rangeStartForIndex.js +37 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/remove.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +16 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +75 -4
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/string.js +41 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/mixins/statechart_delegate.js +113 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/private/state_path_matcher.js +312 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/system/async.js +18 -22
- data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +508 -131
- data/lib/frameworks/sproutcore/frameworks/statechart/system/state_route_handler_context.js +78 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +265 -44
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/basic/with_concurrent_states.js +16 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/responder_chain.js +11 -3
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/private/state_path_matcher.js +116 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/add_substate.js +108 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/find_first_relative_current_state/with_concurrent.js +179 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/find_first_relative_current_state/without_concurrent.js +74 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/get_state.js +141 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/get_substate.js +340 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/route_triggered.js +161 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/try_to_handle_event.js +288 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/standard/without_concurrent_states/context.js +5 -33
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/routing/with_concurrent_states/basic.js +213 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/routing/without_concurrent_states/basic.js +212 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/without_concurrent_states/core.js +8 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/{state/namespacing.js → statechart/methods/get_state.js} +3 -41
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/{invoke_state_method.js → methods/invoke_state_method.js} +1 -1
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/{event_handling/advanced → statechart}/respond_to_event.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/statechart/tests/system/state_route_handler_context/methods/retry.js +64 -0
- data/lib/frameworks/sproutcore/frameworks/table/core.js +2 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/controls/button.js +0 -1
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars.js +29 -5
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/bind.js +4 -3
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/collection.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/localization.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/view.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{handlebars → template_view}/handlebars.js +493 -357
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/mixins/template_helpers/checkbox_support.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/mixins/template_helpers/text_field_support.js +13 -2
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/panes/template.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/controls/button.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/mixins/template_helpers/checkbox_support.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/mixins/template_helpers/text_field_support.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/panes/template.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/views/template/collection.js +39 -14
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/views/template/core.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/views/template/handlebars.js +57 -6
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/views/bindable_span.js +21 -6
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/views/template.js +9 -3
- data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/views/template_collection.js +55 -26
- data/lib/frameworks/sproutcore/frameworks/testing/system/equiv.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/testing/system/plan.js +122 -122
- data/lib/frameworks/sproutcore/frameworks/testing/system/runner.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/testing/system/suite.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/yuireset/resources/base.css +1 -1
- data/lib/frameworks/sproutcore/frameworks/yuireset/resources/reset.css +0 -1
- data/lib/frameworks/sproutcore/frameworks/yuireset/resources/view.css +4 -4
- data/lib/frameworks/sproutcore/lib/index.rhtml +55 -32
- data/lib/frameworks/sproutcore/license.js +2 -4
- data/lib/frameworks/sproutcore/themes/ace/resources/body.css +5 -1
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/button.css +2 -2
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/button.css +21 -13
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/button.css +17 -10
- data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/button.css +4 -3
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/button.css +20 -12
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/button.css +16 -8
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/jumbo/button.css +17 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/small/button.css +17 -0
- data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure.css +2 -2
- data/lib/frameworks/sproutcore/themes/ace/resources/master-detail/master-detail.css +2 -2
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.css +5 -3
- data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/core.css +1 -1
- data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/toolbar.css +1 -1
- data/lib/gen/app/USAGE +17 -4
- data/lib/gen/language/Buildfile +4 -4
- data/lib/gen/language/USAGE +4 -4
- data/lib/gen/page/templates/pages/@target_name@/Buildfile +7 -7
- data/lib/gen/{html_app → statechart_app}/Buildfile +0 -0
- data/lib/gen/{html_app → statechart_app}/README +0 -0
- data/lib/gen/statechart_app/USAGE +21 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/Buildfile +9 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/core.js +24 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/main.js +26 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/resources/_theme.css +18 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/resources/loading.rhtml +9 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/resources/main_page.js +21 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/statechart.js +8 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/states/ready_state.js +12 -0
- data/lib/gen/statechart_app/templates/apps/@target_name@/theme.js +24 -0
- data/lib/sproutcore/builders.rb +1 -0
- data/lib/sproutcore/builders/base.rb +19 -1
- data/lib/sproutcore/builders/chance_file.rb +6 -1
- data/lib/sproutcore/builders/handlebars.rb +1 -9
- data/lib/sproutcore/builders/javascript.rb +1 -10
- data/lib/sproutcore/builders/json.rb +25 -0
- data/lib/sproutcore/builders/less.rb +1 -1
- data/lib/sproutcore/builders/sass.rb +1 -1
- data/lib/sproutcore/builders/stylesheet.rb +1 -9
- data/lib/sproutcore/helpers/html5_manifest.rb +1 -1
- data/lib/sproutcore/helpers/static_helper.rb +42 -0
- data/lib/sproutcore/rack/proxy.rb +21 -3
- data/lib/sproutcore/rack/service.rb +3 -2
- data/lib/sproutcore/tools.rb +18 -25
- data/lib/sproutcore/tools/gen.rb +10 -3
- data/lib/sproutcore/tools/init.rb +11 -10
- data/spec/buildtasks/manifest/prepare_build_tasks/json_spec.rb +62 -0
- data/spec/fixtures/builder_tests/apps/handlebars_test/Buildfile +1 -1
- data/spec/fixtures/builder_tests/apps/json_test/sc_static.json +2 -0
- data/spec/lib/builders/json_spec.rb +53 -0
- data/sproutcore.gemspec +2 -2
- data/vendor/chance/lib/chance/parser.rb +1 -1
- metadata +222 -177
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/datetime.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/debug/invoke_once_last_debugging.js +0 -259
- data/lib/frameworks/sproutcore/frameworks/documentation/core.js +0 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/system/chance.js +0 -69
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/editable/ui.js +0 -44
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/ui.js +0 -64
- data/lib/frameworks/sproutcore/frameworks/mini/license.js +0 -30
- data/lib/gen/html_app/USAGE +0 -15
- data/lib/gen/html_app/templates/apps/@target_name@/@target_name@.js +0 -11
- data/lib/gen/html_app/templates/apps/@target_name@/resources/images/.gitkeep +0 -0
- data/lib/gen/html_app/templates/apps/@target_name@/resources/stylesheets/@target_name@.css +0 -6
- data/lib/gen/html_app/templates/apps/@target_name@/resources/templates/@target_name@.handlebars +0 -1
- data/lib/gen/html_project/Buildfile +0 -45
- data/lib/gen/html_project/INIT +0 -3
- data/lib/gen/html_project/README +0 -1
- data/lib/gen/html_project/USAGE +0 -2
- data/lib/gen/html_project/templates/@filename@/Buildfile +0 -5
- data/lib/gen/html_project/templates/@filename@/README +0 -4
|
@@ -58,6 +58,16 @@ SC.AutoResize = {
|
|
|
58
58
|
*/
|
|
59
59
|
shouldMeasureSize: YES,
|
|
60
60
|
|
|
61
|
+
/**
|
|
62
|
+
Caches sizes for measured strings. This cache does not have a max size, so
|
|
63
|
+
should only be used when a view has a limited number of possible values.
|
|
64
|
+
Multiple views that have the same batchResizeId will share the same cache.
|
|
65
|
+
|
|
66
|
+
@type Boolean
|
|
67
|
+
@default NO
|
|
68
|
+
*/
|
|
69
|
+
shouldCacheSizes: NO,
|
|
70
|
+
|
|
61
71
|
/**
|
|
62
72
|
Determines if the view's width should be resized
|
|
63
73
|
on calculation.
|
|
@@ -86,6 +96,101 @@ SC.AutoResize = {
|
|
|
86
96
|
@type Rect
|
|
87
97
|
*/
|
|
88
98
|
measuredSize: { width: 0, height: 0 },
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
If provided, will limit the maximum width to this value.
|
|
102
|
+
*/
|
|
103
|
+
maxWidth: null,
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
If provided, will limit the maximum height to this value.
|
|
107
|
+
*/
|
|
108
|
+
maxHeight: null,
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
If YES, the view's text will be resized to fit the view. This is applied _after_ any
|
|
112
|
+
resizing, so will only take affect if shouldAutoResize is off, or a maximum width/height
|
|
113
|
+
is set.
|
|
114
|
+
|
|
115
|
+
You also must set a minimum and maximum font size. Any auto resizing will happen at the
|
|
116
|
+
maximum size, and then the text will be resized as necessary.
|
|
117
|
+
*/
|
|
118
|
+
shouldAutoFitText: NO,
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
If NO, the calculated font size may be any size between minFontSize and
|
|
122
|
+
maxFontSize. If YES, it will only be either minFontSize or maxFontSize.
|
|
123
|
+
|
|
124
|
+
@type Boolean
|
|
125
|
+
@default NO
|
|
126
|
+
*/
|
|
127
|
+
autoFitDiscreteFontSizes: NO,
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
The minimum font size to use when automatically fitting text. If shouldAutoFitText is set,
|
|
131
|
+
this _must_ be supplied.
|
|
132
|
+
|
|
133
|
+
Font size is in pixels.
|
|
134
|
+
*/
|
|
135
|
+
minFontSize: 12,
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
The maximum font size to use when automatically fitting text. If shouldAutoFitText is set,
|
|
139
|
+
this _must_ be supplied.
|
|
140
|
+
|
|
141
|
+
Font size is in pixels.
|
|
142
|
+
*/
|
|
143
|
+
maxFontSize: 20,
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
If shouldAutoFitText is YES, this is the calculated font size.
|
|
147
|
+
*/
|
|
148
|
+
calculatedFontSize: 20,
|
|
149
|
+
|
|
150
|
+
fontPropertyDidChange: function() {
|
|
151
|
+
if(this.get('shouldAutoFitText')) this.invokeLast(this.fitTextToFrame);
|
|
152
|
+
}.observes('shouldAutoFitText', 'minFontSize', 'maxFontSize', 'measuredSize'),
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
Observes the measured size and actually performs the resize if necessary.
|
|
156
|
+
*/
|
|
157
|
+
measuredSizeDidChange: function() {
|
|
158
|
+
var measuredSize = this.get('measuredSize'),
|
|
159
|
+
calculatedWidth = measuredSize.width, calculatedHeight = measuredSize.height,
|
|
160
|
+
paddingHeight, paddingWidth,
|
|
161
|
+
autoResizePadding = this.get('autoResizePadding') || 0,
|
|
162
|
+
maxWidth = this.get('maxWidth'), maxHeight = this.get('maxHeight');
|
|
163
|
+
|
|
164
|
+
if(SC.typeOf(autoResizePadding) === SC.T_NUMBER) {
|
|
165
|
+
paddingHeight = paddingWidth = autoResizePadding;
|
|
166
|
+
} else {
|
|
167
|
+
paddingHeight = autoResizePadding.height;
|
|
168
|
+
paddingWidth = autoResizePadding.width;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
calculatedHeight += paddingHeight;
|
|
172
|
+
calculatedWidth += paddingWidth;
|
|
173
|
+
|
|
174
|
+
if(this.get('shouldAutoResize')) {
|
|
175
|
+
// if we are allowed to autoresize, adjust the layout
|
|
176
|
+
if (this.get('shouldResizeWidth')) {
|
|
177
|
+
if (maxWidth && calculatedWidth > maxWidth) {
|
|
178
|
+
calculatedWidth = maxWidth;
|
|
179
|
+
}
|
|
180
|
+
this.set('calculatedWidth', calculatedWidth);
|
|
181
|
+
this.adjust('width', calculatedWidth);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (this.get('shouldResizeHeight')) {
|
|
185
|
+
if (maxHeight && calculatedHeight > maxHeight) {
|
|
186
|
+
calculatedHeight = maxHeight;
|
|
187
|
+
}
|
|
188
|
+
this.set('calculatedHeight', calculatedHeight);
|
|
189
|
+
this.adjust('height', calculatedHeight);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
}.observes('shouldAutoResize', 'measuredSize', 'autoResizePadding', 'maxWidth', 'minWidth', 'shouldResizeWidth', 'shouldResizeHeight'),
|
|
89
194
|
|
|
90
195
|
/**
|
|
91
196
|
@private
|
|
@@ -99,16 +204,6 @@ SC.AutoResize = {
|
|
|
99
204
|
// @endif
|
|
100
205
|
},
|
|
101
206
|
|
|
102
|
-
/**
|
|
103
|
-
Observe the autoResizePadding so we can update our measurements if it changes.
|
|
104
|
-
|
|
105
|
-
@private
|
|
106
|
-
*/
|
|
107
|
-
_scar_autoResizePaddingDidChange: function() {
|
|
108
|
-
this.invokeOnce('measureSize');
|
|
109
|
-
}.observes('autoResizePadding'),
|
|
110
|
-
|
|
111
|
-
|
|
112
207
|
/**
|
|
113
208
|
If this property is provided, all views that share the same value for this property will be resized as a batch for increased performance.
|
|
114
209
|
|
|
@@ -116,45 +211,35 @@ SC.AutoResize = {
|
|
|
116
211
|
*/
|
|
117
212
|
batchResizeId: null,
|
|
118
213
|
|
|
119
|
-
/** @private */
|
|
120
|
-
_scar_measurementPending: NO,
|
|
121
|
-
|
|
122
|
-
/** @private */
|
|
123
|
-
_scar_requestedBatchResizeId: null,
|
|
124
|
-
|
|
125
|
-
/** @private
|
|
126
|
-
If the batch id changed while a request is out, we have to fix it
|
|
127
|
-
*/
|
|
128
|
-
_scar_batchResizeIdDidChange: function() {
|
|
129
|
-
var batchResizeId = this.get('batchResizeId'),
|
|
130
|
-
requestedBatchResizeId = this._scar_requestedBatchResizeId;
|
|
131
|
-
|
|
132
|
-
// check if a request is out and the id changed
|
|
133
|
-
if(this._scar_measurementPending && this._scar_requestedBatchResizeId !== batchResizeId) {
|
|
134
|
-
// if so, cancel the old request and make a new one
|
|
135
|
-
SC.AutoResizeManager.cancelMeasurementForView(this, requestedBatchResizeId);
|
|
136
|
-
SC.AutoResizeManager.scheduleMeasurementForView(this, batchResizeId);
|
|
137
|
-
|
|
138
|
-
// update the requested batchResizeId to the new id
|
|
139
|
-
this._scar_requestedBatchResizeId = batchResizeId;
|
|
140
|
-
}
|
|
141
|
-
}.observes('batchResizeId'),
|
|
142
|
-
|
|
143
214
|
/**
|
|
144
|
-
Schedules a measurement to happen later
|
|
145
|
-
has a `batchResizeId`.
|
|
215
|
+
Schedules a measurement to happen later.
|
|
146
216
|
*/
|
|
147
217
|
scheduleMeasurement: function() {
|
|
148
|
-
if (!this.get('shouldMeasureSize')) {
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
218
|
var batchResizeId = this.get('batchResizeId');
|
|
219
|
+
|
|
220
|
+
// only measure if we are visible, active, and the text or style actually changed
|
|
221
|
+
if (!this.get('shouldMeasureSize') || !this.get('isVisibleInWindow') || (this.get('autoResizeText') === this._lastMeasuredText && batchResizeId === this._lastMeasuredId)) return;
|
|
222
|
+
|
|
223
|
+
// batchResizeId is allowed to be undefined; views without an id will just
|
|
224
|
+
// get measured one at a time
|
|
153
225
|
SC.AutoResizeManager.scheduleMeasurementForView(this, batchResizeId);
|
|
226
|
+
}.observes('isVisibleInWindow', 'shouldMeasureSize', 'autoResizeText', 'batchResizeId'),
|
|
227
|
+
|
|
228
|
+
_lastMeasuredText: null,
|
|
229
|
+
|
|
230
|
+
_cachedMetrics: function(key, value) {
|
|
231
|
+
if(!this.get('shouldCacheSizes')) return;
|
|
232
|
+
|
|
233
|
+
// if we don't have a tag, then it is unique per view
|
|
234
|
+
// you shouldn't usually turn on caching without a tag, but it is supported
|
|
235
|
+
var cacheSlot = SC.cacheSlotFor(this.get('batchResizeId') || this),
|
|
236
|
+
autoResizeText = this.get('autoResizeText');
|
|
154
237
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
238
|
+
if(value) cacheSlot[autoResizeText] = value;
|
|
239
|
+
else value = cacheSlot[autoResizeText];
|
|
240
|
+
|
|
241
|
+
return value;
|
|
242
|
+
}.property('shouldCacheSizes', 'autoResizeText', 'batchResizeId').cacheable(),
|
|
158
243
|
|
|
159
244
|
/**
|
|
160
245
|
Measures the size of the view.
|
|
@@ -162,70 +247,202 @@ SC.AutoResize = {
|
|
|
162
247
|
@param batch For internal use during batch resizing.
|
|
163
248
|
*/
|
|
164
249
|
measureSize: function(batch) {
|
|
165
|
-
var metrics, layer,
|
|
166
|
-
|
|
167
|
-
|
|
250
|
+
var metrics, layer = this.get('autoResizeLayer'), autoResizeText = this.get('autoResizeText'),
|
|
251
|
+
ignoreEscape = !this.get('escapeHTML'),
|
|
252
|
+
batchResizeId = this.get('batchResizeId'),
|
|
253
|
+
cachedMetrics = this.get('_cachedMetrics'),
|
|
254
|
+
maxFontSize = this.get('maxFontSize');
|
|
255
|
+
|
|
256
|
+
if(!layer) return;
|
|
168
257
|
|
|
169
|
-
// There are
|
|
258
|
+
// There are three special cases.
|
|
259
|
+
// - size is cached: the cached size is used with no measurement
|
|
260
|
+
// necessary
|
|
170
261
|
// - empty: we should do nothing. The metrics are 0.
|
|
171
262
|
// - batch mode: just call measureString.
|
|
172
263
|
//
|
|
173
264
|
// If we are in neither of those special cases, we should go ahead and
|
|
174
265
|
// resize normally.
|
|
175
266
|
//
|
|
176
|
-
if
|
|
177
|
-
metrics =
|
|
178
|
-
}
|
|
179
|
-
metrics = SC.measureString(value, ignoreEscape);
|
|
180
|
-
} else {
|
|
181
|
-
// Normal resize pattern: get our own layer, pass it as a template to SC.metricsForString.
|
|
182
|
-
layer = this.get('autoResizeLayer');
|
|
183
|
-
|
|
184
|
-
if(!layer) {
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
267
|
+
if(cachedMetrics) {
|
|
268
|
+
metrics = cachedMetrics;
|
|
269
|
+
}
|
|
187
270
|
|
|
188
|
-
|
|
271
|
+
else if (SC.none(autoResizeText) || autoResizeText === "") {
|
|
272
|
+
metrics = { width: 0, height: 0 };
|
|
189
273
|
}
|
|
190
274
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
if(SC.typeOf(autoSizePadding) === SC.T_NUMBER) {
|
|
194
|
-
paddingHeight = paddingWidth = autoSizePadding;
|
|
195
|
-
} else {
|
|
196
|
-
paddingHeight = autoSizePadding.height;
|
|
197
|
-
paddingWidth = autoSizePadding.width;
|
|
275
|
+
else if (batch) {
|
|
276
|
+
metrics = SC.measureString(autoResizeText, ignoreEscape);
|
|
198
277
|
}
|
|
199
278
|
|
|
200
|
-
|
|
201
|
-
|
|
279
|
+
else {
|
|
280
|
+
this.prepareLayerForStringMeasurement(layer);
|
|
281
|
+
|
|
282
|
+
metrics = SC.metricsForString(autoResizeText, layer, this.get('classNames'), ignoreEscape);
|
|
283
|
+
}
|
|
202
284
|
|
|
203
285
|
// In any case, we set measuredSize.
|
|
204
286
|
this.set('measuredSize', metrics);
|
|
205
287
|
|
|
206
|
-
if
|
|
207
|
-
|
|
208
|
-
if (this.get('shouldResizeWidth')) {
|
|
209
|
-
this.adjust('width', metrics.width);
|
|
210
|
-
}
|
|
288
|
+
// and update the cache if we are using it
|
|
289
|
+
if(this.get('shouldCacheSizes')) this.setIfChanged('_cachedMetrics', metrics);
|
|
211
290
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
291
|
+
// set the measured value so we can avoid extra measurements in the future
|
|
292
|
+
this._lastMeasuredText = autoResizeText;
|
|
293
|
+
this._lastMeasuredId = batchResizeId;
|
|
294
|
+
|
|
295
|
+
return metrics;
|
|
296
|
+
},
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
//
|
|
300
|
+
// FITTING TEXT
|
|
301
|
+
//
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
If we are fitting text, the layer must be measured with its font size set to our
|
|
305
|
+
maximum font size.
|
|
306
|
+
*/
|
|
307
|
+
prepareLayerForStringMeasurement: function(layer) {
|
|
308
|
+
var maxFontSize = this.get('maxFontSize');
|
|
215
309
|
|
|
310
|
+
if (this.get('shouldAutoFitText') && this.get('calculatedFontSize') !== maxFontSize) {
|
|
311
|
+
layer.style.fontSize = maxFontSize + "px";
|
|
216
312
|
}
|
|
313
|
+
},
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
Whenever the view resizes, the text fitting must be reevaluated.
|
|
317
|
+
*/
|
|
318
|
+
viewDidResize: function(orig) {
|
|
319
|
+
orig();
|
|
320
|
+
|
|
321
|
+
this.fontPropertyDidChange();
|
|
322
|
+
}.enhance(),
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
Fits the text into the frame's size, minus autoResizePadding.
|
|
326
|
+
*/
|
|
327
|
+
fitTextToFrame: function() {
|
|
328
|
+
// we can only fit text when we have a layer.
|
|
329
|
+
var layer = this.get('autoResizeLayer');
|
|
330
|
+
if (!layer) return;
|
|
217
331
|
|
|
218
|
-
|
|
332
|
+
var maxFontSize = this.get('maxFontSize'),
|
|
333
|
+
minFontSize = this.get('minFontSize');
|
|
219
334
|
|
|
220
|
-
|
|
221
|
-
|
|
335
|
+
// if the font size has been adjusted, reset it to the max
|
|
336
|
+
this.prepareLayerForStringMeasurement(layer);
|
|
337
|
+
|
|
338
|
+
var frame = this.get('frame'),
|
|
339
|
+
|
|
340
|
+
padding = this.get('autoResizePadding') || 0,
|
|
341
|
+
|
|
342
|
+
// these need to be shrunk by 1 pixel or text that is exactly as wide as
|
|
343
|
+
// the frame will be truncated
|
|
344
|
+
width = frame.width - 1, height = frame.height - 1,
|
|
345
|
+
measured = this.get('measuredSize'),
|
|
346
|
+
mWidth = measured.width, mHeight = measured.height;
|
|
347
|
+
|
|
348
|
+
// figure out and apply padding to the width/height
|
|
349
|
+
if(SC.typeOf(padding) === SC.T_NUMBER) {
|
|
350
|
+
width -= padding;
|
|
351
|
+
height -= padding;
|
|
352
|
+
} else {
|
|
353
|
+
width -= padding.width;
|
|
354
|
+
height -= padding.height;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// measured size is at maximum. If there is no resizing to be done, short-circuit.
|
|
358
|
+
if (mWidth <= width && mHeight <= height) return;
|
|
359
|
+
|
|
360
|
+
// if only discrete values are allowed, we can short circuit here and just
|
|
361
|
+
// use the minimum
|
|
362
|
+
if(this.get('autoFitDiscreteFontSizes')) {
|
|
363
|
+
actual = minFontSize;
|
|
364
|
+
}
|
|
222
365
|
|
|
366
|
+
// otherwise we have to find the actual best font size
|
|
367
|
+
else {
|
|
368
|
+
// now, we are going to make an estimate font size. We will figure out the proportion
|
|
369
|
+
// of both actual width and actual height to the measured width and height, and then we'll
|
|
370
|
+
// pick the smaller. We'll multiply that by the maximum font size to figure out
|
|
371
|
+
// a rough guestimate of the proper font size.
|
|
372
|
+
var xProportion = width / mWidth, yProportion = height / mHeight,
|
|
373
|
+
|
|
374
|
+
guestimate = Math.floor(maxFontSize * Math.min(xProportion, yProportion)),
|
|
375
|
+
actual,
|
|
376
|
+
|
|
377
|
+
classNames = this.get('classNames'),
|
|
378
|
+
ignoreEscape = !this.get('escapeHTML'),
|
|
379
|
+
value = this.get('autoResizeText'),
|
|
380
|
+
|
|
381
|
+
metrics;
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
guestimate = actual = Math.min(maxFontSize, Math.max(minFontSize, guestimate));
|
|
385
|
+
|
|
386
|
+
// Now, we must test the guestimate. Based on that, we'll either loop down
|
|
387
|
+
// or loop up, depending on the measured size.
|
|
388
|
+
layer.style.fontSize = guestimate + "px";
|
|
389
|
+
metrics = SC.metricsForString(value, layer, classNames, ignoreEscape);
|
|
390
|
+
|
|
391
|
+
if (metrics.width > width || metrics.height > height) {
|
|
392
|
+
|
|
393
|
+
// if we're larger, we must go down until we are smaller, at which point we are done.
|
|
394
|
+
for (guestimate = guestimate - 1; guestimate >= minFontSize; guestimate--) {
|
|
395
|
+
layer.style.fontSize = guestimate + "px";
|
|
396
|
+
metrics = SC.metricsForString(value, layer, classNames, ignoreEscape);
|
|
397
|
+
|
|
398
|
+
// always have an actual in this case; even if we can't get it small enough, we want
|
|
399
|
+
// to keep this as close as possible.
|
|
400
|
+
actual = guestimate;
|
|
401
|
+
|
|
402
|
+
// if the new size is small enough, stop shrinking and set it for real
|
|
403
|
+
if (metrics.width <= width && metrics.height <= height) {
|
|
404
|
+
break;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
} else if (metrics.width < width || metrics.height < height) {
|
|
409
|
+
// if we're smaller, we must go up until we hit maxFontSize or get larger. If we get
|
|
410
|
+
// larger, we want to use the previous guestimate (which we know was valid)
|
|
411
|
+
//
|
|
412
|
+
// So, we'll start actual at guestimate, and only increase it while we're smaller.
|
|
413
|
+
for (guestimate = guestimate + 1; guestimate <= maxFontSize; guestimate++) {
|
|
414
|
+
layer.style.fontSize = guestimate + "px";
|
|
415
|
+
metrics = SC.metricsForString(value, layer, classNames, ignoreEscape);
|
|
416
|
+
|
|
417
|
+
// we update actual only if it is still valid. Then below, whether valid
|
|
418
|
+
// or not, if we are at or past the width/height we leave
|
|
419
|
+
if (metrics.width <= width && metrics.height <= height) {
|
|
420
|
+
actual = guestimate;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
// we put this in a separate if statement JUST IN CASE it is ===.
|
|
424
|
+
// Unlikely, but possible, and why ruin a good thing?
|
|
425
|
+
if (metrics.width >= width || metrics.height >= height){
|
|
426
|
+
break;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
layer.style.fontSize = actual + "px";
|
|
433
|
+
this.set('calculatedFontSize', actual);
|
|
434
|
+
},
|
|
435
|
+
|
|
223
436
|
/**
|
|
224
|
-
|
|
437
|
+
Extends renderSettingsToContext to add font size if shouldAutoFitText is YES.
|
|
225
438
|
*/
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
439
|
+
applyAttributesToContext: function(orig, context) {
|
|
440
|
+
orig(context);
|
|
441
|
+
|
|
442
|
+
if (this.get('shouldAutoFitText')) {
|
|
443
|
+
context.css('font-size', this.get('calculatedFontSize') + "px");
|
|
444
|
+
}
|
|
445
|
+
}.enhance(),
|
|
229
446
|
|
|
230
447
|
/**
|
|
231
448
|
@private
|
|
@@ -247,19 +464,12 @@ SC.AutoResize = {
|
|
|
247
464
|
* methods/properties into each view.
|
|
248
465
|
*/
|
|
249
466
|
SC.AutoResizeManager = {
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
A hash of views needing resizing, mapped from batch resize ID to SC.CoreSets
|
|
253
|
-
of views.
|
|
254
|
-
*/
|
|
255
|
-
viewsNeedingResize: null,
|
|
256
|
-
|
|
257
467
|
/**
|
|
258
468
|
Views queued for batch resizing, but with no batch resize id.
|
|
259
469
|
|
|
260
470
|
@property {SC.CoreSet}
|
|
261
471
|
*/
|
|
262
|
-
|
|
472
|
+
measurementQueue: SC.CoreSet.create(),
|
|
263
473
|
|
|
264
474
|
/**
|
|
265
475
|
Schedules a re-measurement for the specified view in the batch with the
|
|
@@ -271,20 +481,8 @@ SC.AutoResizeManager = {
|
|
|
271
481
|
@param view The view to measure.
|
|
272
482
|
@param id The id of the batch to measure the view in.
|
|
273
483
|
*/
|
|
274
|
-
scheduleMeasurementForView: function(view
|
|
275
|
-
|
|
276
|
-
if(SC.none(id)) {
|
|
277
|
-
var untaggedViews = this.untaggedViews || (this.untaggedViews = SC.CoreSet.create());
|
|
278
|
-
|
|
279
|
-
untaggedViews.add(view);
|
|
280
|
-
|
|
281
|
-
// views with a batch resize id set for each tag
|
|
282
|
-
} else {
|
|
283
|
-
var needResize = this.viewsNeedingResize || (this.viewsNeedingResize = {}),
|
|
284
|
-
views = needResize[id] || (needResize[id] = SC.CoreSet.create());
|
|
285
|
-
|
|
286
|
-
views.add(view);
|
|
287
|
-
}
|
|
484
|
+
scheduleMeasurementForView: function(view) {
|
|
485
|
+
this.measurementQueue.add(view);
|
|
288
486
|
|
|
289
487
|
SC.RunLoop.currentRunLoop.invokeLast(this.doBatchResize);
|
|
290
488
|
},
|
|
@@ -296,11 +494,7 @@ SC.AutoResizeManager = {
|
|
|
296
494
|
@param id The batch id the view was scheduled in.
|
|
297
495
|
*/
|
|
298
496
|
cancelMeasurementForView: function(view, id) {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
if(set) {
|
|
302
|
-
set.remove(view);
|
|
303
|
-
}
|
|
497
|
+
this.measurementQueue.remove(view);
|
|
304
498
|
},
|
|
305
499
|
|
|
306
500
|
/**
|
|
@@ -314,39 +508,52 @@ SC.AutoResizeManager = {
|
|
|
314
508
|
return SC.AutoResizeManager.doBatchResize();
|
|
315
509
|
}
|
|
316
510
|
|
|
317
|
-
var tag,
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
511
|
+
var tag, view, layer, measurementQueue = this.measurementQueue, prepared, autoResizeText,
|
|
512
|
+
i, len;
|
|
513
|
+
|
|
514
|
+
while((len = measurementQueue.get('length')) > 0) {
|
|
515
|
+
prepared = NO;
|
|
516
|
+
// save the first tag we see
|
|
517
|
+
tag = measurementQueue[len - 1].get('batchResizeId');
|
|
518
|
+
|
|
519
|
+
// now we iterate over all the views with the same tag
|
|
520
|
+
for(i = len - 1; i >= 0; --i) {
|
|
521
|
+
view = measurementQueue[i];
|
|
522
|
+
|
|
523
|
+
// if the view has a different tag, skip it
|
|
524
|
+
if(view.get('batchResizeId') !== tag) continue;
|
|
525
|
+
|
|
526
|
+
// make sure the view is still qualified to be measured
|
|
527
|
+
if(view.get('isVisibleInWindow') && view.get('shouldMeasureSize') && (layer = view.get('autoResizeLayer'))) {
|
|
528
|
+
autoResizeText = view.get('autoResizeText');
|
|
529
|
+
|
|
530
|
+
// if the text is empty or a size is cached don't bother preparing
|
|
531
|
+
if(!SC.none(autoResizeText) && autoResizeText !== "" && !view.get('_cachedMetrics') && !prepared) {
|
|
532
|
+
// this is a bit of a hack: before we can prepare string measurement, there are cases where we
|
|
533
|
+
// need to reset the font size first (specifically, if we are also fitting text)
|
|
534
|
+
//
|
|
535
|
+
// It is expected that all views in a batch will have the same font settings.
|
|
536
|
+
view.prepareLayerForStringMeasurement(layer);
|
|
537
|
+
|
|
538
|
+
// now we can tell SC to prepare the layer with the settings from the view's layer
|
|
539
|
+
SC.prepareStringMeasurement(layer, view.get('classNames'));
|
|
540
|
+
prepared = YES;
|
|
331
541
|
}
|
|
332
|
-
}
|
|
333
542
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
if(prepared) SC.teardownStringMeasurement();
|
|
337
|
-
}
|
|
338
|
-
}
|
|
543
|
+
view.measureSize(YES);
|
|
544
|
+
}
|
|
339
545
|
|
|
340
|
-
|
|
341
|
-
|
|
546
|
+
// it's been handled
|
|
547
|
+
measurementQueue.remove(view);
|
|
342
548
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
549
|
+
// if the view didn't have a tag, we can't batch so just move on
|
|
550
|
+
if(!tag) break;
|
|
551
|
+
}
|
|
346
552
|
|
|
347
|
-
|
|
348
|
-
|
|
553
|
+
// only call teardown if prepare was called
|
|
554
|
+
if(prepared) {
|
|
555
|
+
SC.teardownStringMeasurement();
|
|
556
|
+
}
|
|
349
557
|
}
|
|
350
558
|
}
|
|
351
|
-
|
|
352
559
|
};
|