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.
Files changed (380) hide show
  1. checksums.yaml +8 -8
  2. data/CHANGELOG +4 -8
  3. data/VERSION.yml +2 -2
  4. data/lib/frameworks/sproutcore/Buildfile +5 -4
  5. data/lib/frameworks/sproutcore/CHANGELOG.md +274 -40
  6. data/lib/frameworks/sproutcore/CONTRIBUTORS.md +133 -0
  7. data/lib/frameworks/sproutcore/README.md +31 -144
  8. data/lib/frameworks/sproutcore/apps/showcase/controllers/source_tree_controller.js +9 -4
  9. data/lib/frameworks/sproutcore/apps/showcase/resources/stylesheet.css +5 -0
  10. data/lib/frameworks/sproutcore/apps/showcase/system/views_item_content.js +1 -1
  11. data/lib/frameworks/sproutcore/apps/showcase/views/split_views.js +15 -2
  12. data/lib/frameworks/sproutcore/apps/showcase/views/stacked_views.js +1 -1
  13. data/lib/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +11 -1
  14. data/lib/frameworks/sproutcore/frameworks/ajax/mixins/websocket_delegate.js +90 -0
  15. data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +81 -5
  16. data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +23 -4
  17. data/lib/frameworks/sproutcore/frameworks/ajax/system/websocket.js +475 -0
  18. data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/request.js +149 -26
  19. data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/websocket.js +197 -0
  20. data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/xhr_response_test.js +65 -0
  21. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +4 -0
  22. data/lib/frameworks/sproutcore/frameworks/core_foundation/child_view_layouts/horizontal_stack_layout.js +232 -52
  23. data/lib/frameworks/sproutcore/frameworks/core_foundation/child_view_layouts/vertical_stack_layout.js +235 -49
  24. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +23 -13
  25. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/object.js +3 -1
  26. data/lib/frameworks/sproutcore/frameworks/core_foundation/core.js +81 -1
  27. data/lib/frameworks/sproutcore/frameworks/core_foundation/english.lproj/ordinal.js +17 -0
  28. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/string.js +7 -0
  29. data/lib/frameworks/sproutcore/frameworks/{desktop/tests/views/disclosure/methods.js → core_foundation/french.lproj/ordinal.js} +7 -4
  30. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/layout.js +2 -6
  31. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/main.js +1 -1
  32. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +104 -69
  33. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane_statechart.js +6 -1
  34. data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/child_view_layout_protocol.js +59 -0
  35. data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/view_transition_protocol.js +18 -1
  36. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/application.js +192 -0
  37. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/bezier_curves.js +52 -0
  38. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/color.js +384 -64
  39. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/core_query.js +6 -14
  40. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/device.js +21 -35
  41. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +72 -36
  42. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +90 -34
  43. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/platform.js +55 -7
  44. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +20 -15
  45. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/req_anim_frame.js +9 -10
  46. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +763 -542
  47. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/selection_set.js +4 -3
  48. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +1 -7
  49. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/string.js +14 -0
  50. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/touch.js +538 -0
  51. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils/rect.js +56 -1
  52. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +99 -4
  53. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/single_case.js +25 -19
  54. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/core_tests.js +75 -0
  55. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/ext/number_test.js +81 -0
  56. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/action_support.js +4 -4
  57. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/responder_context.js +4 -4
  58. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +19 -1
  59. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/color.js +36 -20
  60. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/design_modes_test.js +83 -0
  61. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeMainPane.js +7 -3
  62. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/mouse_events.js +338 -0
  63. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/root_responder.js +14 -89
  64. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/touch.js +106 -0
  65. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/sparse_array.js +2 -2
  66. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/touch.js +136 -0
  67. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/rect.js +42 -1
  68. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/append_remove.js +11 -0
  69. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/child_view.js +5 -5
  70. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/design_mode_test.js +457 -0
  71. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/sendEvent.js +36 -10
  72. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/background_color.js +44 -0
  73. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/border_frame_test.js +51 -24
  74. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/childViewLayout_test.js +176 -1
  75. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/clippingFrame.js +46 -16
  76. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/convertFrames.js +69 -15
  77. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/didAppendToDocument.js +2 -2
  78. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layout.js +7 -1
  79. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +30 -10
  80. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutStyle.js +376 -71
  81. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/static_layout.js +0 -10
  82. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/viewDidResize.js +117 -34
  83. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/view_states_test.js +52 -2
  84. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +656 -42
  85. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +159 -38
  86. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/cursor.js +0 -7
  87. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/design_mode.js +206 -0
  88. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/enabled.js +0 -28
  89. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +21 -6
  90. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +372 -450
  91. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +28 -13
  92. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +22 -51
  93. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/statechart.js +59 -30
  94. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +0 -29
  95. data/lib/frameworks/sproutcore/frameworks/datastore/mixins/relationship_support.js +22 -10
  96. data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +42 -36
  97. data/lib/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +54 -3
  98. data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +178 -59
  99. data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +2 -2
  100. data/lib/frameworks/sproutcore/frameworks/datastore/system/child_array.js +206 -132
  101. data/lib/frameworks/sproutcore/frameworks/datastore/system/many_array.js +214 -118
  102. data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +96 -13
  103. data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +14 -4
  104. data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +82 -42
  105. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +272 -177
  106. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/store_interaction_test.js +54 -0
  107. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/datetime_recordattribute.js +24 -16
  108. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +6 -3
  109. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/data_store.js +267 -35
  110. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +57 -46
  111. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +150 -53
  112. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +57 -17
  113. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +13 -9
  114. data/lib/frameworks/sproutcore/frameworks/{experimental/frameworks/polymorphism → datastore}/tests/models/polymorphism/many.js +2 -2
  115. data/lib/frameworks/sproutcore/frameworks/{experimental/frameworks/polymorphism → datastore}/tests/models/polymorphism/simple.js +0 -0
  116. data/lib/frameworks/sproutcore/frameworks/{experimental/frameworks/polymorphism → datastore}/tests/models/polymorphism/single.js +12 -2
  117. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +20 -15
  118. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +9 -2
  119. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/many_array/core_methods.js +80 -14
  120. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/autonomous_dataSourceCallbacks.js +280 -0
  121. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/autonomous_pushChanges.js +232 -0
  122. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +31 -5
  123. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/parse.js +16 -2
  124. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +60 -40
  125. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/materializeRecord.js +78 -0
  126. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +13 -1
  127. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/tests/system/datetime.js +20 -0
  128. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/{resources → english.lproj}/strings.js +0 -0
  129. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/french.lproj/strings.js +45 -0
  130. data/lib/frameworks/sproutcore/frameworks/designer/designers/object_designer.js +7 -3
  131. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +125 -44
  132. data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +139 -48
  133. data/lib/frameworks/sproutcore/frameworks/desktop/panes/draggable.js +202 -0
  134. data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +59 -56
  135. data/lib/frameworks/sproutcore/frameworks/desktop/panes/palette.js +13 -49
  136. data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +466 -305
  137. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_source.js +49 -12
  138. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +79 -21
  139. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/split.js +12 -2
  140. data/lib/frameworks/sproutcore/frameworks/desktop/resources/menu_item_view.css +8 -0
  141. data/lib/frameworks/sproutcore/frameworks/desktop/resources/overlay-scroller.css +187 -0
  142. data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +94 -30
  143. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +163 -3
  144. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +97 -78
  145. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +61 -1
  146. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +7 -3
  147. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +47 -22
  148. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/methods.js +66 -9
  149. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +21 -11
  150. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +12 -18
  151. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +17 -14
  152. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +2 -1
  153. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +9 -6
  154. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/collection_fast_path.js +54 -21
  155. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/content.js +52 -20
  156. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/itemViewForContentIndex.js +94 -4
  157. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/keyboard.js +177 -0
  158. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/layerIdFor.js +13 -1
  159. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/length.js +9 -9
  160. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +18 -0
  161. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/methods.js +104 -0
  162. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +48 -49
  163. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/drag_and_drop.js +22 -18
  164. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +17 -5
  165. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/link_view_test.js +136 -0
  166. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/contentIndexesInRect.js +77 -0
  167. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/drag_and_drop.js +53 -16
  168. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/layoutForContentIndex.js +41 -0
  169. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +25 -25
  170. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowOffsetForContentIndex.js +102 -27
  171. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/{rowHeightForContentIndex.js → rowSizeForContentIndex.js} +7 -6
  172. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_outline.js +2 -0
  173. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +70 -75
  174. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_simple.js +29 -30
  175. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +57 -0
  176. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/menu_scroll_view/menu_scroll_view_test.js +206 -0
  177. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +15 -0
  178. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +15 -7
  179. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/integration.js +16 -11
  180. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +164 -12
  181. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/scale.js +387 -0
  182. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/touch.js +549 -0
  183. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +214 -45
  184. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroller.js +5 -5
  185. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +73 -22
  186. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +88 -3
  187. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/methods.js +8 -0
  188. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/slider/methods.js +16 -1
  189. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/slider/ui.js +54 -0
  190. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/dividers.js +21 -2
  191. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/static_content.js +31 -25
  192. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +109 -29
  193. data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +10 -1
  194. data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +3 -0
  195. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +779 -603
  196. data/lib/frameworks/sproutcore/frameworks/desktop/views/date_field.js +106 -7
  197. data/lib/frameworks/sproutcore/frameworks/desktop/views/link_view.js +406 -0
  198. data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +437 -245
  199. data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +13 -0
  200. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +124 -62
  201. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +176 -597
  202. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroller_view.js +206 -0
  203. data/lib/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +3 -0
  204. data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +5 -4
  205. data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +3 -0
  206. data/lib/frameworks/sproutcore/frameworks/desktop/views/scene.js +56 -158
  207. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll_view.js +2560 -0
  208. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroller.js +458 -242
  209. data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +117 -54
  210. data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +18 -12
  211. data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +162 -34
  212. data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +30 -15
  213. data/lib/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +33 -7
  214. data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +22 -2
  215. data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +47 -22
  216. data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +0 -6
  217. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form.js +2 -1
  218. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form_row.js +21 -21
  219. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu.js +14 -3
  220. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/mixins/select_view_menu.js +24 -10
  221. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/ext/menu_resizing.js +1 -1
  222. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/bindings.js +7 -4
  223. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/check_selected.js +7 -9
  224. data/lib/frameworks/sproutcore/frameworks/{desktop/tests/panes/select_button/methods.js → experimental/frameworks/select_view/tests/views/select/method.js} +54 -76
  225. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/select/selected_item.js +35 -0
  226. data/lib/frameworks/sproutcore/frameworks/{desktop/tests/panes/select_button → experimental/frameworks/select_view/tests/views/select}/ui.js +107 -36
  227. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/select.js +225 -66
  228. data/lib/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +39 -38
  229. data/lib/frameworks/sproutcore/frameworks/foundation/core.js +5 -18
  230. data/lib/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +12 -0
  231. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/inflections.js +84 -0
  232. data/lib/frameworks/sproutcore/frameworks/foundation/french.lproj/inflections.js +41 -0
  233. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_mixin.js +1 -0
  234. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +7 -0
  235. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +3 -4
  236. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +6 -2
  237. data/lib/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +408 -239
  238. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +1 -1
  239. data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +2 -1
  240. data/lib/frameworks/sproutcore/frameworks/foundation/spanish.lproj/inflections.js +38 -0
  241. data/lib/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +104 -76
  242. data/lib/frameworks/sproutcore/frameworks/foundation/system/string.js +20 -94
  243. data/lib/frameworks/sproutcore/frameworks/foundation/system/text_selection.js +33 -22
  244. data/lib/frameworks/sproutcore/frameworks/foundation/system/undo_manager.js +475 -0
  245. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/auto_resize_test.js +163 -1
  246. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/flowed_layout/tests.js +41 -0
  247. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +2 -5
  248. data/lib/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/methods.js +268 -0
  249. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/undo_manager.js +231 -0
  250. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +16 -0
  251. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +27 -0
  252. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +24 -0
  253. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +135 -6
  254. data/lib/frameworks/sproutcore/frameworks/foundation/transitions/fade_transition.js +6 -0
  255. data/lib/frameworks/sproutcore/frameworks/foundation/transitions/pop_transition.js +7 -0
  256. data/lib/frameworks/sproutcore/frameworks/foundation/transitions/scale_transition.js +6 -0
  257. data/lib/frameworks/sproutcore/frameworks/foundation/transitions/slide_transition.js +4 -0
  258. data/lib/frameworks/sproutcore/frameworks/foundation/transitions/swap_dissolve_transition.js +3 -1
  259. data/lib/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +21 -21
  260. data/lib/frameworks/sproutcore/frameworks/foundation/views/container.js +65 -15
  261. data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +4 -1
  262. data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +1 -1
  263. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +193 -213
  264. data/lib/frameworks/sproutcore/frameworks/jquery/{jquery-1.8.3-patched.js → jquery-1.11.1.js} +7507 -6684
  265. data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js +28 -11
  266. data/lib/frameworks/sproutcore/frameworks/routing/tests/system/routes.js +26 -0
  267. data/lib/frameworks/sproutcore/frameworks/runtime/core.js +54 -25
  268. data/lib/frameworks/sproutcore/frameworks/runtime/ext/array.js +0 -6
  269. data/lib/frameworks/sproutcore/frameworks/runtime/ext/number.js +36 -0
  270. data/lib/frameworks/sproutcore/frameworks/runtime/ext/window.js +25 -0
  271. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +3 -3
  272. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +1 -1
  273. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +156 -66
  274. data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +2 -2
  275. data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +150 -65
  276. data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +57 -11
  277. data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +68 -49
  278. data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +14 -6
  279. data/lib/frameworks/sproutcore/frameworks/runtime/system/string.js +23 -23
  280. data/lib/frameworks/sproutcore/frameworks/runtime/tests/ext/number_test.js +44 -0
  281. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +0 -10
  282. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable/enumerable.js +340 -285
  283. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +104 -3
  284. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/observer_set.js +14 -1
  285. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/string.js +15 -2
  286. data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +21 -18
  287. data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +52 -19
  288. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/pane.js +27 -24
  289. data/lib/frameworks/sproutcore/frameworks/template_view/controls/button.js +30 -0
  290. data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/bind.js +1 -1
  291. data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/collection.js +2 -0
  292. data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars/view.js +1 -0
  293. data/lib/frameworks/sproutcore/frameworks/template_view/tests/mixins/template_helpers/checkbox_support.js +2 -2
  294. data/lib/frameworks/sproutcore/frameworks/template_view/tests/views/template/handlebars.js +4 -2
  295. data/lib/frameworks/sproutcore/frameworks/template_view/views/bindable_span.js +1 -1
  296. data/lib/frameworks/sproutcore/frameworks/template_view/views/template_collection.js +16 -14
  297. data/lib/frameworks/sproutcore/frameworks/testing/core.js +5 -3
  298. data/lib/frameworks/sproutcore/frameworks/testing/system/plan.js +13 -0
  299. data/lib/frameworks/sproutcore/lib/index.rhtml +2 -2
  300. data/lib/frameworks/sproutcore/phantomjs/test_runner.js +28 -7
  301. data/lib/frameworks/sproutcore/scripts/run_sc_server_master.sh +1 -1
  302. data/lib/frameworks/sproutcore/themes/ace/resources/_variables.css +2 -0
  303. data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure.css +1 -0
  304. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.css +3 -4
  305. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal.css +15 -15
  306. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal_overlay.css +74 -0
  307. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical.css +11 -13
  308. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical_overlay.css +74 -0
  309. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob-active.png +0 -0
  310. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob-active@2x.png +0 -0
  311. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob.png +0 -0
  312. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/knob@2x.png +0 -0
  313. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/{22px → jumbo}/slider.css +9 -4
  314. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/track.png +0 -0
  315. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/jumbo/track@2x.png +0 -0
  316. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob-active.png +0 -0
  317. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob-active@2x.png +0 -0
  318. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob.png +0 -0
  319. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/knob@2x.png +0 -0
  320. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/slider.css +32 -0
  321. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/track.png +0 -0
  322. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/regular/track@2x.png +0 -0
  323. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.css +13 -0
  324. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob-active.png +0 -0
  325. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob-active@2x.png +0 -0
  326. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob.png +0 -0
  327. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/knob@2x.png +0 -0
  328. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/slider.css +32 -0
  329. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/track.png +0 -0
  330. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/small/track@2x.png +0 -0
  331. data/lib/frameworks/sproutcore/themes/ace/resources/split/split.css +2 -3
  332. data/lib/sproutcore/builders/chance_file.rb +3 -3
  333. data/lib/sproutcore/helpers/minifier.rb +1 -0
  334. data/vendor/chance/lib/chance/instance.rb +34 -34
  335. data/vendor/chance/lib/chance/instance/spriting.rb +21 -16
  336. metadata +81 -58
  337. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/visibility.js +0 -17
  338. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_fast_path.js +0 -710
  339. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +0 -267
  340. data/lib/frameworks/sproutcore/frameworks/desktop/resources/touch-scroller.css +0 -196
  341. data/lib/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +0 -224
  342. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/methods.js +0 -163
  343. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +0 -177
  344. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +0 -2053
  345. data/lib/frameworks/sproutcore/frameworks/desktop/views/select_button.js +0 -1024
  346. data/lib/frameworks/sproutcore/frameworks/desktop/views/select_field.js +0 -404
  347. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/render_delegates/menu_scroller.js +0 -28
  348. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/tests/menu/scroll.js +0 -235
  349. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/views/menu/scroll.js +0 -363
  350. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/views/menu/scroller.js +0 -250
  351. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +0 -47
  352. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +0 -134
  353. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/desktop_scroller.js +0 -92
  354. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/native_scroll.js +0 -25
  355. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/scroll.js +0 -33
  356. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/render_delegates/touch_scroller.js +0 -76
  357. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/integration.js +0 -25
  358. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/methods.js +0 -143
  359. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/ui.js +0 -256
  360. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/core_scroll.js +0 -1164
  361. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/core_scroller.js +0 -332
  362. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/desktop/scroll.js +0 -236
  363. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/desktop/scroller.js +0 -347
  364. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/scroll.js +0 -15
  365. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/scroller.js +0 -10
  366. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/touch/scroll.js +0 -804
  367. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/touch/scroller.js +0 -133
  368. data/lib/frameworks/sproutcore/frameworks/foundation/tasks/preload_bundle.js +0 -41
  369. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal_touch.css +0 -91
  370. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical_touch.css +0 -92
  371. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/knob.png +0 -0
  372. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/knob_active.png +0 -0
  373. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/slider.css +0 -27
  374. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/knob.png +0 -0
  375. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/knob_active.png +0 -0
  376. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/slider.css +0 -27
  377. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/knob.png +0 -0
  378. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/knob_active.png +0 -0
  379. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/track.png +0 -0
  380. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/track.png +0 -0
@@ -15,11 +15,17 @@
15
15
  (function () {
16
16
  var parent, child, frameKeys, layoutKeys;
17
17
 
18
- frameKeys = 'x y width height'.w();
19
- layoutKeys = ['width', 'height', 'top', 'bottom', 'marginLeft', 'marginTop', 'left', 'right', 'zIndex',
18
+ frameKeys = ['x', 'y', 'width', 'height', 'scale', 'transformOriginX', 'transformOriginY', 'originalWidth', 'originalHeight'];
19
+ layoutKeys = ['width', 'height', 'top', 'bottom', 'marginLeft', 'marginTop', 'left', 'right',
20
20
  'minWidth', 'maxWidth', 'minHeight', 'maxHeight', 'borderTopWidth', 'borderBottomWidth',
21
21
  'borderLeftWidth', 'borderRightWidth'];
22
22
 
23
+ // On supported platforms, test CSS transforms too.
24
+ if (SC.platform.supportsCSSTransforms) {
25
+ layoutKeys.push('transform');
26
+ layoutKeys.push('transformOrigin');
27
+ }
28
+
23
29
  /*
24
30
  helper method to test the layout of a view. Applies the passed layout to a
25
31
  view, then compares both its frame and layoutStyle properties both before
@@ -37,7 +43,6 @@
37
43
  @returns {void}
38
44
  */
39
45
  function performLayoutTest(layout, no_f, no_s, with_f, with_s, isFixedShouldBe) {
40
- if (SC.platform.supportsCSSTransforms) { layoutKeys.push('transform'); }
41
46
 
42
47
  // make sure we add null properties and convert numbers to 'XXpx' to style layout.
43
48
  layoutKeys.forEach(function (key) {
@@ -55,12 +60,14 @@
55
60
  });
56
61
 
57
62
  var layoutStyle = child.get('layoutStyle'),
58
- frame = child.get('frame'),
59
- testKey;
63
+ frame = child.get('frame');
60
64
 
61
65
  // test
62
66
  layoutKeys.forEach(function (key) {
63
- testKey = key === 'transform' ? SC.browser.domPrefix + 'Transform' : key;
67
+ var testKey;
68
+ if (key === 'transform') testKey = SC.browser.experimentalStyleNameFor('transform');
69
+ else if (key === 'transformOrigin') testKey = SC.browser.experimentalStyleNameFor('transformOrigin');
70
+ else testKey = key;
64
71
  equals(layoutStyle[testKey], no_s[key], "STYLE NO PARENT %@".fmt(key));
65
72
  });
66
73
 
@@ -75,7 +82,7 @@
75
82
  }
76
83
 
77
84
 
78
- // add parent
85
+ // add to parent
79
86
  SC.RunLoop.begin();
80
87
  parent.appendChild(child);
81
88
  SC.RunLoop.end();
@@ -85,7 +92,10 @@
85
92
 
86
93
  // test again
87
94
  layoutKeys.forEach(function (key) {
88
- testKey = key === 'transform' ? SC.browser.domPrefix + 'Transform' : key;
95
+ var testKey;
96
+ if (key === 'transform') testKey = SC.browser.experimentalStyleNameFor('transform');
97
+ else if (key === 'transformOrigin') testKey = SC.browser.experimentalStyleNameFor('transformOrigin');
98
+ else testKey = key;
89
99
  equals(layoutStyle[testKey], with_s[key], "STYLE W/ PARENT %@".fmt(key));
90
100
  });
91
101
 
@@ -154,8 +164,8 @@
154
164
 
155
165
  var layout = { top: 10, left: 10, width: 50, height: 50 };
156
166
  var s = { top: 10, left: 10, width: 50, height: 50 };
157
- var no_f = { x: 10, y: 10, width: 50, height: 50 };
158
- var with_f = { x: 10, y: 10, width: 50, height: 50 };
167
+ var no_f = { x: 10, y: 10, width: 50, height: 50, scale: 1, originalWidth: 50, originalHeight: 50, transformOriginX: 0.5, transformOriginY: 0.5 };
168
+ var with_f = { x: 10, y: 10, width: 50, height: 50, scale: 1, originalWidth: 50, originalHeight: 50, transformOriginX: 0.5, transformOriginY: 0.5 };
159
169
 
160
170
  performLayoutTest(layout, no_f, s, with_f, s, YES);
161
171
  });
@@ -163,8 +173,8 @@
163
173
  test("layout {top, left, bottom, right}", function () {
164
174
 
165
175
  var layout = { top: 10, left: 10, bottom: 10, right: 10 };
166
- var no_f = { x: 10, y: 10, width: 0, height: 0 };
167
- var with_f = { x: 10, y: 10, width: 180, height: 180 };
176
+ var no_f = { x: 10, y: 10, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
177
+ var with_f = { x: 10, y: 10, width: 180, height: 180, scale: 1, originalWidth: 180, originalHeight: 180, transformOriginX: 0.5, transformOriginY: 0.5 };
168
178
  var s = { top: 10, left: 10, bottom: 10, right: 10 };
169
179
 
170
180
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -173,8 +183,8 @@
173
183
  test("layout {bottom, right, width, height}", function () {
174
184
 
175
185
  var layout = { bottom: 10, right: 10, width: 50, height: 50 };
176
- var no_f = { x: 0, y: 0, width: 50, height: 50 };
177
- var with_f = { x: 140, y: 140, width: 50, height: 50 };
186
+ var no_f = { x: 0, y: 0, width: 50, height: 50, scale: 1, originalWidth: 50, originalHeight: 50, transformOriginX: 0.5, transformOriginY: 0.5 };
187
+ var with_f = { x: 140, y: 140, width: 50, height: 50, scale: 1, originalWidth: 50, originalHeight: 50, transformOriginX: 0.5, transformOriginY: 0.5 };
178
188
  var s = { bottom: 10, right: 10, width: 50, height: 50 };
179
189
 
180
190
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -183,8 +193,8 @@
183
193
  test("layout {centerX, centerY, width, height}", function () {
184
194
 
185
195
  var layout = { centerX: 10, centerY: 10, width: 60, height: 60 };
186
- var no_f = { x: 10, y: 10, width: 60, height: 60 };
187
- var with_f = { x: 80, y: 80, width: 60, height: 60 };
196
+ var no_f = { x: 10, y: 10, width: 60, height: 60, scale: 1, originalWidth: 60, originalHeight: 60, transformOriginX: 0.5, transformOriginY: 0.5 };
197
+ var with_f = { x: 80, y: 80, width: 60, height: 60, scale: 1, originalWidth: 60, originalHeight: 60, transformOriginX: 0.5, transformOriginY: 0.5 };
188
198
  var s = { marginLeft: -20, marginTop: -20, width: 60, height: 60, top: "50%", left: "50%" };
189
199
 
190
200
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -236,8 +246,8 @@
236
246
 
237
247
  var layout = { top: 0.1, left: 0.1, width: 0.5, height: 0.5 };
238
248
  var s = { top: '10%', left: '10%', width: '50%', height: '50%' };
239
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
240
- var with_f = { x: 20, y: 20, width: 100, height: 100 };
249
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
250
+ var with_f = { x: 20, y: 20, width: 100, height: 100, scale: 1, originalWidth: 50, originalHeight: 50, originalWidth: 100, originalHeight: 100, transformOriginX: 0.5, transformOriginY: 0.5 };
241
251
 
242
252
  performLayoutTest(layout, no_f, s, with_f, s, NO);
243
253
  });
@@ -245,8 +255,8 @@
245
255
  test("layout {top, left, bottom, right}", function () {
246
256
 
247
257
  var layout = { top: 0.1, left: 0.1, bottom: 0.1, right: 0.1 };
248
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
249
- var with_f = { x: 20, y: 20, width: 160, height: 160 };
258
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
259
+ var with_f = { x: 20, y: 20, width: 160, height: 160, scale: 1, originalWidth: 160, originalHeight: 160, transformOriginX: 0.5, transformOriginY: 0.5 };
250
260
  var s = { top: '10%', left: '10%', bottom: '10%', right: '10%' };
251
261
 
252
262
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -255,8 +265,8 @@
255
265
  test("layout {bottom, right, width, height}", function () {
256
266
 
257
267
  var layout = { bottom: 0.1, right: 0.1, width: 0.5, height: 0.5 };
258
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
259
- var with_f = { x: 80, y: 80, width: 100, height: 100 };
268
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
269
+ var with_f = { x: 80, y: 80, width: 100, height: 100, scale: 1, originalWidth: 50, originalHeight: 50, originalWidth: 100, originalHeight: 100, transformOriginX: 0.5, transformOriginY: 0.5 };
260
270
  var s = { bottom: '10%', right: '10%', width: '50%', height: '50%' };
261
271
 
262
272
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -265,8 +275,8 @@
265
275
  test("layout {centerX, centerY, width, height}", function () {
266
276
 
267
277
  var layout = { centerX: 0.1, centerY: 0.1, width: 0.6, height: 0.6 };
268
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
269
- var with_f = { x: 60, y: 60, width: 120, height: 120 };
278
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
279
+ var with_f = { x: 60, y: 60, width: 120, height: 120, scale: 1, originalWidth: 60, originalHeight: 60, originalWidth: 120, originalHeight: 120, transformOriginX: 0.5, transformOriginY: 0.5 };
270
280
  var s = { marginLeft: '-20%', marginTop: '-20%', width: '60%', height: '60%', top: "50%", left: "50%" };
271
281
 
272
282
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -277,11 +287,11 @@
277
287
  // test shows that.
278
288
  test("layout {centerX 0, centerY 0, width %, height %}", function () {
279
289
  var layout = { centerX: 0, centerY: 0, width: 0.6, height: 0.6 };
280
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
290
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
281
291
 
282
292
  // The parent frame is 200 x 200.
283
293
  var size = 200 * 0.6;
284
- var with_f = { x: (200 - size) * 0.5, y: (200 - size) * 0.5, width: size, height: size };
294
+ var with_f = { x: (200 - size) * 0.5, y: (200 - size) * 0.5, width: size, height: size, scale: 1, originalWidth: size, originalHeight: size, transformOriginX: 0.5, transformOriginY: 0.5 };
285
295
  var s = { marginLeft: '-30%', marginTop: '-30%', width: '60%', height: '60%', top: "50%", left: "50%" };
286
296
 
287
297
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -290,11 +300,11 @@
290
300
  // Edge case: although rare, centered views should be able to have metrics of zero.
291
301
  test("layout {centerX 0, centerY 0, width 0, height 0}", function () {
292
302
  var layout = { centerX: 0, centerY: 0, width: 0, height: 0 };
293
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
303
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
294
304
 
295
305
  // The parent frame is 200 x 200.
296
306
  var size = 0;
297
- var with_f = { x: (200 - size) * 0.5, y: (200 - size) * 0.5, width: size, height: size };
307
+ var with_f = { x: (200 - size) * 0.5, y: (200 - size) * 0.5, width: size, height: size, scale: 1, originalWidth: size, originalHeight: size, transformOriginX: 0.5, transformOriginY: 0.5 };
298
308
  var s = { marginLeft: '0px', marginTop: '0px', width: '0px', height: '0px', top: '50%', left: '50%' };
299
309
 
300
310
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -334,13 +344,307 @@
334
344
 
335
345
 
336
346
 
347
+
348
+ // ..........................................................
349
+ // TEST FRAME/STYLEFRAME WITH BASIC LAYOUT VARIATIONS
350
+ //
351
+ // NOTE: Each test evaluates the frame before and after adding it to the
352
+ // parent.
353
+
354
+ module('BASIC LAYOUT VARIATIONS WITH SCALE AND ORIGIN', commonSetup);
355
+
356
+ //
357
+ // top, left, width, height
358
+ //
359
+ test("layout {top, left, width, height, scale up}", function () {
360
+
361
+ var layout = { top: 10, left: 10, width: 50, height: 50, scale: 2 };
362
+ var s = { top: 10, left: 10, width: 50, height: 50, transform: "scale(2)" };
363
+ var no_f = { x: -15, y: -15, width: 100, height: 100, scale: 2, originalWidth: 50, originalHeight: 50, originalWidth: 50, originalHeight: 50, transformOriginX: 0.5, transformOriginY: 0.5 };
364
+ var with_f = { x: -15, y: -15, width: 100, height: 100, scale: 2, originalWidth: 50, originalHeight: 50, originalWidth: 50, originalHeight: 50, transformOriginX: 0.5, transformOriginY: 0.5 };
365
+
366
+ performLayoutTest(layout, no_f, s, with_f, s, YES);
367
+ });
368
+
369
+ test("layout {top, left, width, height, scale down}", function () {
370
+
371
+ var layout = { top: 10, left: 10, width: 50, height: 50, scale: 0.6 };
372
+ var s = { top: 10, left: 10, width: 50, height: 50, transform: "scale(0.6)" };
373
+ var no_f = { x: 20, y: 20, width: 30, height: 30, scale: 0.6, originalWidth: 50, originalHeight: 50, originalWidth: 50, originalHeight: 50, transformOriginX: 0.5, transformOriginY: 0.5 };
374
+ var with_f = { x: 20, y: 20, width: 30, height: 30, scale: 0.6, originalWidth: 50, originalHeight: 50, originalWidth: 50, originalHeight: 50, transformOriginX: 0.5, transformOriginY: 0.5 };
375
+
376
+ performLayoutTest(layout, no_f, s, with_f, s, YES);
377
+ });
378
+
379
+ test("layout {top, left, width, height, scale up, origin top left}", function () {
380
+
381
+ var layout = { top: 10, left: 10, width: 50, height: 50, scale: 2, transformOriginX: 0, transformOriginY: 0 };
382
+ var s = { top: 10, left: 10, width: 50, height: 50, transform: "scale(2)", transformOrigin: "0% 0%" };
383
+ var no_f = { x: 10, y: 10, width: 100, height: 100, scale: 2, originalWidth: 50, originalHeight: 50, originalWidth: 50, originalHeight: 50, transformOriginX: 0, transformOriginY: 0 };
384
+ var with_f = { x: 10, y: 10, width: 100, height: 100, scale: 2, originalWidth: 50, originalHeight: 50, originalWidth: 50, originalHeight: 50, transformOriginX: 0, transformOriginY: 0 };
385
+
386
+ performLayoutTest(layout, no_f, s, with_f, s, YES);
387
+ });
388
+
389
+ test("layout {top, left, width, height, scale down, origin top left}", function () {
390
+
391
+ var layout = { top: 10, left: 10, width: 50, height: 50, scale: 0.6, transformOriginX: 0, transformOriginY: 0 };
392
+ var s = { top: 10, left: 10, width: 50, height: 50, transform: "scale(0.6)", transformOrigin: "0% 0%" };
393
+ var no_f = { x: 10, y: 10, width: 30, height: 30, scale: 0.6, originalWidth: 50, originalHeight: 50, originalWidth: 50, originalHeight: 50, transformOriginX: 0, transformOriginY: 0 };
394
+ var with_f = { x: 10, y: 10, width: 30, height: 30, scale: 0.6, originalWidth: 50, originalHeight: 50, originalWidth: 50, originalHeight: 50, transformOriginX: 0, transformOriginY: 0 };
395
+
396
+ performLayoutTest(layout, no_f, s, with_f, s, YES);
397
+ });
398
+
399
+ test("layout {top, left, width, height, scale up, origin bottom right}", function () {
400
+
401
+ var layout = { top: 10, left: 10, width: 50, height: 50, scale: 2, transformOriginX: 1, transformOriginY: 1 };
402
+ var s = { top: 10, left: 10, width: 50, height: 50, transform: "scale(2)", transformOrigin: "100% 100%" };
403
+ var no_f = { x: -40, y: -40, width: 100, height: 100, scale: 2, originalWidth: 50, originalHeight: 50, originalWidth: 50, originalHeight: 50, transformOriginX: 1, transformOriginY: 1 };
404
+ var with_f = { x: -40, y: -40, width: 100, height: 100, scale: 2, originalWidth: 50, originalHeight: 50, originalWidth: 50, originalHeight: 50, transformOriginX: 1, transformOriginY: 1 };
405
+
406
+ performLayoutTest(layout, no_f, s, with_f, s, YES);
407
+ });
408
+
409
+ test("layout {top, left, width, height, scale down, origin bottom right}", function () {
410
+
411
+ var layout = { top: 10, left: 10, width: 50, height: 50, scale: 0.6, transformOriginX: 1, transformOriginY: 1 };
412
+ var s = { top: 10, left: 10, width: 50, height: 50, transform: "scale(0.6)", transformOrigin: "100% 100%" };
413
+ var no_f = { x: 30, y: 30, width: 30, height: 30, scale: 0.6, originalWidth: 50, originalHeight: 50, originalWidth: 50, originalHeight: 50, transformOriginX: 1, transformOriginY: 1 };
414
+ var with_f = { x: 30, y: 30, width: 30, height: 30, scale: 0.6, originalWidth: 50, originalHeight: 50, originalWidth: 50, originalHeight: 50, transformOriginX: 1, transformOriginY: 1 };
415
+
416
+ performLayoutTest(layout, no_f, s, with_f, s, YES);
417
+ });
418
+
419
+ //
420
+ // top, left, bottom, right
421
+ //
422
+ test("layout {top, left, bottom, right, scale up}", function () {
423
+
424
+ var layout = { top: 10, left: 10, bottom: 10, right: 10, scale: 2 };
425
+ var no_f = { x: 10, y: 10, width: 0, height: 0, scale: 2, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
426
+ var with_f = { x: -80, y: -80, width: 360, height: 360, scale: 2, originalWidth: 180, originalHeight: 180, transformOriginX: 0.5, transformOriginY: 0.5 };
427
+ var s = { top: 10, left: 10, bottom: 10, right: 10, transform: "scale(2)" };
428
+
429
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
430
+ });
431
+
432
+ test("layout {top, left, bottom, right, scale down}", function () {
433
+
434
+ var layout = { top: 10, left: 10, bottom: 10, right: 10, scale: 0.5 };
435
+ var no_f = { x: 10, y: 10, width: 0, height: 0, scale: 0.5, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
436
+ var with_f = { x: 55, y: 55, width: 90, height: 90, scale: 0.5, originalWidth: 180, originalHeight: 180, originalWidth: 180, originalHeight: 180, transformOriginX: 0.5, transformOriginY: 0.5 };
437
+ var s = { top: 10, left: 10, bottom: 10, right: 10, transform: "scale(0.5)" };
438
+
439
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
440
+ });
441
+
442
+ test("layout {top, left, bottom, right, scale up, origin top left}", function () {
443
+
444
+ var layout = { top: 10, left: 10, bottom: 10, right: 10, scale: 2, transformOriginX: 0, transformOriginY: 0 };
445
+ var no_f = { x: 10, y: 10, width: 0, height: 0, scale: 2, originalWidth: 0, originalHeight: 0, transformOriginX: 0, transformOriginY: 0 };
446
+ var with_f = { x: 10, y: 10, width: 360, height: 360, scale: 2, originalWidth: 180, originalHeight: 180, originalWidth: 180, originalHeight: 180, transformOriginX: 0, transformOriginY: 0 };
447
+ var s = { top: 10, left: 10, bottom: 10, right: 10, transform: "scale(2)", transformOrigin: "0% 0%" };
448
+
449
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
450
+ });
451
+
452
+ test("layout {top, left, bottom, right, scale down, origin top left}", function () {
453
+
454
+ var layout = { top: 10, left: 10, bottom: 10, right: 10, scale: 0.5, transformOriginX: 0, transformOriginY: 0 };
455
+ var no_f = { x: 10, y: 10, width: 0, height: 0, scale: 0.5, originalWidth: 0, originalHeight: 0, transformOriginX: 0, transformOriginY: 0 };
456
+ var with_f = { x: 10, y: 10, width: 90, height: 90, scale: 0.5, originalWidth: 180, originalHeight: 180, transformOriginX: 0, transformOriginY: 0 };
457
+ var s = { top: 10, left: 10, bottom: 10, right: 10, transform: "scale(0.5)", transformOrigin: "0% 0%" };
458
+
459
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
460
+ });
461
+
462
+ test("layout {top, left, bottom, right, scale up, origin bottom right}", function () {
463
+
464
+ var layout = { top: 10, left: 10, bottom: 10, right: 10, scale: 2, transformOriginX: 1, transformOriginY: 1 };
465
+ var no_f = { x: 10, y: 10, width: 0, height: 0, scale: 2, originalWidth: 0, originalHeight: 0, transformOriginX: 1, transformOriginY: 1 };
466
+ var with_f = { x: -170, y: -170, width: 360, height: 360, scale: 2, originalWidth: 180, originalHeight: 180, transformOriginX: 1, transformOriginY: 1 };
467
+ var s = { top: 10, left: 10, bottom: 10, right: 10, transform: "scale(2)", transformOrigin: "100% 100%" };
468
+
469
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
470
+ });
471
+
472
+ test("layout {top, left, bottom, right, scale down, origin bottom right}", function () {
473
+
474
+ var layout = { top: 10, left: 10, bottom: 10, right: 10, scale: 0.5, transformOriginX: 1, transformOriginY: 1 };
475
+ var no_f = { x: 10, y: 10, width: 0, height: 0, scale: 0.5, originalWidth: 0, originalHeight: 0, transformOriginX: 1, transformOriginY: 1 };
476
+ var with_f = { x: 100, y: 100, width: 90, height: 90, scale: 0.5, originalWidth: 180, originalHeight: 180, originalWidth: 180, originalHeight: 180, transformOriginX: 1, transformOriginY: 1 };
477
+ var s = { top: 10, left: 10, bottom: 10, right: 10, transform: "scale(0.5)", transformOrigin: "100% 100%" };
478
+
479
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
480
+ });
481
+
482
+ //
483
+ // bottom, right, width, height
484
+ //
485
+ test("layout {bottom, right, width, height, scaled up}", function () {
486
+
487
+ var layout = { bottom: 10, right: 10, width: 50, height: 50, scale: 2 };
488
+ var no_f = { x: -25, y: -25, width: 100, height: 100, scale: 2, originalWidth: 50, originalHeight: 50, transformOriginX: 0.5, transformOriginY: 0.5 };
489
+ var with_f = { x: 115, y: 115, width: 100, height: 100, scale: 2, originalWidth: 50, originalHeight: 50, transformOriginX: 0.5, transformOriginY: 0.5 };
490
+ var s = { bottom: 10, right: 10, width: 50, height: 50, transform: "scale(2)" };
491
+
492
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
493
+ });
494
+
495
+ test("layout {bottom, right, width, height, scaled down}", function () {
496
+
497
+ var layout = { bottom: 10, right: 10, width: 50, height: 50, scale: 0.6 };
498
+ var no_f = { x: 10, y: 10, width: 30, height: 30, scale: 0.6, originalWidth: 50, originalHeight: 50, transformOriginX: 0.5, transformOriginY: 0.5 };
499
+ var with_f = { x: 150, y: 150, width: 30, height: 30, scale: 0.6, originalWidth: 50, originalHeight: 50, transformOriginX: 0.5, transformOriginY: 0.5 };
500
+ var s = { bottom: 10, right: 10, width: 50, height: 50, transform: "scale(0.6)" };
501
+
502
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
503
+ });
504
+
505
+ test("layout {bottom, right, width, height, scaled up, origin top left}", function () {
506
+
507
+ var layout = { bottom: 10, right: 10, width: 50, height: 50, scale: 2, transformOriginX: 0, transformOriginY: 0 };
508
+ var no_f = { x: 0, y: 0, width: 100, height: 100, scale: 2, originalWidth: 50, originalHeight: 50, transformOriginX: 0, transformOriginY: 0 };
509
+ var with_f = { x: 140, y: 140, width: 100, height: 100, scale: 2, originalWidth: 50, originalHeight: 50, transformOriginX: 0, transformOriginY: 0 };
510
+ var s = { bottom: 10, right: 10, width: 50, height: 50, transform: "scale(2)", transformOrigin: "0% 0%" };
511
+
512
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
513
+ });
514
+
515
+ test("layout {bottom, right, width, height, scaled down, origin top left}", function () {
516
+
517
+ var layout = { bottom: 10, right: 10, width: 50, height: 50, scale: 0.6, transformOriginX: 0, transformOriginY: 0 };
518
+ var no_f = { x: 0, y: 0, width: 30, height: 30, scale: 0.6, originalWidth: 50, originalHeight: 50, transformOriginX: 0, transformOriginY: 0 };
519
+ var with_f = { x: 140, y: 140, width: 30, height: 30, scale: 0.6, originalWidth: 50, originalHeight: 50, transformOriginX: 0, transformOriginY: 0 };
520
+ var s = { bottom: 10, right: 10, width: 50, height: 50, transform: "scale(0.6)", transformOrigin: "0% 0%" };
521
+
522
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
523
+ });
524
+
525
+ test("layout {bottom, right, width, height, scaled up, origin bottom right}", function () {
526
+
527
+ var layout = { bottom: 10, right: 10, width: 50, height: 50, scale: 2, transformOriginX: 1, transformOriginY: 1 };
528
+ var no_f = { x: -50, y: -50, width: 100, height: 100, scale: 2, originalWidth: 50, originalHeight: 50, transformOriginX: 1, transformOriginY: 1 };
529
+ var with_f = { x: 90, y: 90, width: 100, height: 100, scale: 2, originalWidth: 50, originalHeight: 50, transformOriginX: 1, transformOriginY: 1 };
530
+ var s = { bottom: 10, right: 10, width: 50, height: 50, transform: "scale(2)", transformOrigin: "100% 100%" };
531
+
532
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
533
+ });
534
+
535
+ test("layout {bottom, right, width, height, scaled down, origin bottom right}", function () {
536
+
537
+ var layout = { bottom: 10, right: 10, width: 50, height: 50, scale: 0.6, transformOriginX: 1, transformOriginY: 1 };
538
+ var no_f = { x: 20, y: 20, width: 30, height: 30, scale: 0.6, originalWidth: 50, originalHeight: 50, transformOriginX: 1, transformOriginY: 1 };
539
+ var with_f = { x: 160, y: 160, width: 30, height: 30, scale: 0.6, originalWidth: 50, originalHeight: 50, transformOriginX: 1, transformOriginY: 1 };
540
+ var s = { bottom: 10, right: 10, width: 50, height: 50, transform: "scale(0.6)", transformOrigin: "100% 100%" };
541
+
542
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
543
+ });
544
+
545
+ //
546
+ // bottom, right, width, height
547
+ //
548
+ test("layout {centerX, centerY, width, height, scale up}", function () {
549
+
550
+ var layout = { centerX: 10, centerY: 10, width: 60, height: 60, scale: 2 };
551
+ var no_f = { x: -20, y: -20, width: 120, height: 120, scale: 2, originalWidth: 60, originalHeight: 60, transformOriginX: 0.5, transformOriginY: 0.5 };
552
+ var with_f = { x: 50, y: 50, width: 120, height: 120, scale: 2, originalWidth: 60, originalHeight: 60, transformOriginX: 0.5, transformOriginY: 0.5 };
553
+ var s = { marginLeft: -20, marginTop: -20, width: 60, height: 60, top: "50%", left: "50%", transform: "scale(2)" };
554
+
555
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
556
+ });
557
+
558
+ test("layout {centerX, centerY, width, height, scale down}", function () {
559
+
560
+ var layout = { centerX: 10, centerY: 10, width: 60, height: 60, scale: 0.6 };
561
+ var no_f = { x: 22, y: 22, width: 36, height: 36, scale: 0.6, originalWidth: 60, originalHeight: 60, transformOriginX: 0.5, transformOriginY: 0.5 };
562
+ var with_f = { x: 92, y: 92, width: 36, height: 36, scale: 0.6, originalWidth: 60, originalHeight: 60, transformOriginX: 0.5, transformOriginY: 0.5 };
563
+ var s = { marginLeft: -20, marginTop: -20, width: 60, height: 60, top: "50%", left: "50%", transform: "scale(0.6)" };
564
+
565
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
566
+ });
567
+
568
+ test("layout {centerX, centerY, width, height, scale up, origin top left}", function () {
569
+
570
+ var layout = { centerX: 10, centerY: 10, width: 60, height: 60, scale: 2, transformOriginX: 0, transformOriginY: 0 };
571
+ var no_f = { x: 10, y: 10, width: 120, height: 120, scale: 2, originalWidth: 60, originalHeight: 60, transformOriginX: 0, transformOriginY: 0 };
572
+ var with_f = { x: 80, y: 80, width: 120, height: 120, scale: 2, originalWidth: 60, originalHeight: 60, transformOriginX: 0, transformOriginY: 0 };
573
+ var s = { marginLeft: -20, marginTop: -20, width: 60, height: 60, top: "50%", left: "50%", transform: "scale(2)", transformOrigin: "0% 0%" };
574
+
575
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
576
+ });
577
+
578
+ test("layout {centerX, centerY, width, height, scale down, origin top left}", function () {
579
+
580
+ var layout = { centerX: 10, centerY: 10, width: 60, height: 60, scale: 0.6, transformOriginX: 0, transformOriginY: 0 };
581
+ var no_f = { x: 10, y: 10, width: 36, height: 36, scale: 0.6, originalWidth: 60, originalHeight: 60, transformOriginX: 0, transformOriginY: 0 };
582
+ var with_f = { x: 80, y: 80, width: 36, height: 36, scale: 0.6, originalWidth: 60, originalHeight: 60, transformOriginX: 0, transformOriginY: 0 };
583
+ var s = { marginLeft: -20, marginTop: -20, width: 60, height: 60, top: "50%", left: "50%", transform: "scale(0.6)", transformOrigin: "0% 0%" };
584
+
585
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
586
+ });
587
+
588
+ test("layout {centerX, centerY, width, height, scale up, origin bottom right}", function () {
589
+
590
+ var layout = { centerX: 10, centerY: 10, width: 60, height: 60, scale: 2, transformOriginX: 1, transformOriginY: 1 };
591
+ var no_f = { x: -50, y: -50, width: 120, height: 120, scale: 2, originalWidth: 60, originalHeight: 60, transformOriginX: 1, transformOriginY: 1 };
592
+ var with_f = { x: 20, y: 20, width: 120, height: 120, scale: 2, originalWidth: 60, originalHeight: 60, transformOriginX: 1, transformOriginY: 1 };
593
+ var s = { marginLeft: -20, marginTop: -20, width: 60, height: 60, top: "50%", left: "50%", transform: "scale(2)", transformOrigin: "100% 100%" };
594
+
595
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
596
+ });
597
+
598
+ test("layout {centerX, centerY, width, height, scale down, origin bottom right}", function () {
599
+
600
+ var layout = { centerX: 10, centerY: 10, width: 60, height: 60, scale: 0.6, transformOriginX: 1, transformOriginY: 1 };
601
+ var no_f = { x: 34, y: 34, width: 36, height: 36, scale: 0.6, originalWidth: 60, originalHeight: 60, transformOriginX: 1, transformOriginY: 1 };
602
+ var with_f = { x: 104, y: 104, width: 36, height: 36, scale: 0.6, originalWidth: 60, originalHeight: 60, transformOriginX: 1, transformOriginY: 1 };
603
+ var s = { marginLeft: -20, marginTop: -20, width: 60, height: 60, top: "50%", left: "50%", transform: "scale(0.6)", transformOrigin: "100% 100%" };
604
+
605
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
606
+ });
607
+
608
+ test("layout {top, left, width: auto, height: auto, scale}", function () {
609
+ // Reset.
610
+ child.destroy();
611
+
612
+ child = SC.View.create({
613
+ useStaticLayout: YES,
614
+ render: function (context) {
615
+ // needed for auto
616
+ context.push('<div style="padding: 10px"></div>');
617
+ }
618
+ });
619
+
620
+ // parent MUST have a layer.
621
+ parent.createLayer();
622
+ var layer = parent.get('layer');
623
+ document.body.appendChild(layer);
624
+
625
+ var layout = { top: 0, left: 0, width: 'auto', height: 'auto', scale: 2 };
626
+ var no_f = null;
627
+ // See test below
628
+ var with_f; // { x: 0, y: 0, width: 200, height: 200 };
629
+ var s = { top: 0, left: 0, width: 'auto', height: 'auto', transform: 'scale(2)' };
630
+
631
+ performLayoutTest(layout, no_f, s, with_f, s, NO);
632
+
633
+ layer.parentNode.removeChild(layer);
634
+ child.destroy();
635
+ });
636
+
637
+ // See comment in above test
638
+ test("layout {top, left, width: auto, height: auto} - frame");
639
+
640
+
337
641
  // ..........................................................
338
642
  // TEST CSS TRANSFORM LAYOUT VARIATIONS
339
643
  //
340
644
  // NOTE: Each test evaluates the frame before and after adding it to the
341
645
  // parent.
342
646
 
343
- module('CSS TRANSFORM LAYOUT VARIATIONS', {
647
+ module('ROTATE LAYOUT VARIATIONS', {
344
648
  setup: function () {
345
649
  commonSetup.setup();
346
650
  child.createLayer();
@@ -355,7 +659,7 @@
355
659
  });
356
660
 
357
661
  function transformFor(view) {
358
- return view.get('layer').style[SC.browser.domPrefix + 'Transform'];
662
+ return view.get('layer').style[SC.browser.experimentalStyleNameFor('transform')];
359
663
  }
360
664
 
361
665
  test("layout {rotateX}", function () {
@@ -386,7 +690,7 @@
386
690
  child.adjust('rotate', 45).updateLayout(true);
387
691
  });
388
692
 
389
- equals(transformFor(child), 'rotateX(45deg)', 'transform attribute should be "rotateX(45deg)"');
693
+ equals(transformFor(child), 'rotateZ(45deg)', 'transform attribute should be "rotateZ(45deg)"');
390
694
  });
391
695
 
392
696
  test("layout {rotateX} with units", function () {
@@ -397,6 +701,8 @@
397
701
  equals(transformFor(child), 'rotateX(1rad)', 'transform attribute should be "rotateX(1rad)"');
398
702
  });
399
703
 
704
+ // Scale is now a first-class layout property re: frame. The following are simple integration tests with
705
+ // rotate.
400
706
  test("layout {scale}", function () {
401
707
  SC.run(function () {
402
708
  child.adjust('scale', 2).updateLayout(true);
@@ -453,8 +759,8 @@
453
759
  var expectedTransform = 'translateX(10px) translateY(10px)';
454
760
  if (SC.platform.supportsCSS3DTransforms) expectedTransform += ' translateZ(0px)';
455
761
  var s = { top: 0, left: 0, width: 50, height: 50, transform: expectedTransform };
456
- var no_f = { x: 10, y: 10, width: 50, height: 50 };
457
- var with_f = { x: 10, y: 10, width: 50, height: 50};
762
+ var no_f = { x: 10, y: 10, width: 50, height: 50, scale: 1, originalWidth: 50, originalHeight: 50, transformOriginX: 0.5, transformOriginY: 0.5 };
763
+ var with_f = { x: 10, y: 10, width: 50, height: 50, scale: 1, originalWidth: 50, originalHeight: 50, transformOriginX: 0.5, transformOriginY: 0.5 };
458
764
 
459
765
  performLayoutTest(layout, no_f, s, with_f, s, YES);
460
766
  });
@@ -462,8 +768,8 @@
462
768
  test("layout {top, left, bottom, right}", function () {
463
769
 
464
770
  var layout = { top: 10, left: 10, bottom: 10, right: 10 };
465
- var no_f = { x: 10, y: 10, width: 0, height: 0 };
466
- var with_f = { x: 10, y: 10, width: 180, height: 180 };
771
+ var no_f = { x: 10, y: 10, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
772
+ var with_f = { x: 10, y: 10, width: 180, height: 180, scale: 1, originalWidth: 180, originalHeight: 180, transformOriginX: 0.5, transformOriginY: 0.5 };
467
773
  var s = { top: 10, left: 10, bottom: 10, right: 10, transform: null };
468
774
 
469
775
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -507,8 +813,8 @@
507
813
 
508
814
  var layout = { top: 0.1, left: 0.1, width: 0.5, height: 0.5 };
509
815
  var s = { top: '10%', left: '10%', width: '50%', height: '50%', transform: null };
510
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
511
- var with_f = { x: 20, y: 20, width: 100, height: 100 };
816
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
817
+ var with_f = { x: 20, y: 20, width: 100, height: 100, scale: 1, originalWidth: 50, originalHeight: 50, originalWidth: 100, originalHeight: 100, transformOriginX: 0.5, transformOriginY: 0.5 };
512
818
 
513
819
  performLayoutTest(layout, no_f, s, with_f, s, NO);
514
820
  });
@@ -528,8 +834,8 @@
528
834
  test("layout {top, left} - assume right/bottom=0", function () {
529
835
 
530
836
  var layout = { top: 0.1, left: 0.1 };
531
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
532
- var with_f = { x: 20, y: 20, width: 180, height: 180 };
837
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
838
+ var with_f = { x: 20, y: 20, width: 180, height: 180, scale: 1, originalWidth: 180, originalHeight: 180, transformOriginX: 0.5, transformOriginY: 0.5 };
533
839
  var s = { bottom: 0, right: 0, top: '10%', left: '10%' };
534
840
 
535
841
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -538,8 +844,8 @@
538
844
  test("layout {height, width} - assume top/left=0", function () {
539
845
 
540
846
  var layout = { height: 0.6, width: 0.6 };
541
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
542
- var with_f = { x: 0, y: 0, width: 120, height: 120 };
847
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
848
+ var with_f = { x: 0, y: 0, width: 120, height: 120, scale: 1, originalWidth: 60, originalHeight: 60, originalWidth: 120, originalHeight: 120, transformOriginX: 0.5, transformOriginY: 0.5 };
543
849
  var s = { width: '60%', height: '60%', top: 0, left: 0 };
544
850
 
545
851
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -549,8 +855,8 @@
549
855
  test("layout {right, bottom} - assume top/left=0", function () {
550
856
 
551
857
  var layout = { right: 0.1, bottom: 0.1 };
552
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
553
- var with_f = { x: 0, y: 0, width: 180, height: 180 };
858
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
859
+ var with_f = { x: 0, y: 0, width: 180, height: 180, scale: 1, originalWidth: 180, originalHeight: 180, transformOriginX: 0.5, transformOriginY: 0.5 };
554
860
  var s = { bottom: '10%', right: '10%', top: 0, left: 0 };
555
861
 
556
862
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -560,8 +866,8 @@
560
866
  test("layout {right, bottom, maxWidth, maxHeight} - assume top/left=null", function () {
561
867
 
562
868
  var layout = { right: 0.1, bottom: 0.1, maxWidth: 10, maxHeight: 10 };
563
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
564
- var with_f = { x: 0, y: 0, width: 10, height: 10 };
869
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
870
+ var with_f = { x: 0, y: 0, width: 10, height: 10, scale: 1, originalWidth: 10, originalHeight: 10, transformOriginX: 0.5, transformOriginY: 0.5 };
565
871
  var s = { bottom: '10%', right: '10%', top: null, left: null, maxWidth: 10, maxHeight: 10 };
566
872
 
567
873
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -571,8 +877,8 @@
571
877
  test("layout {centerX, centerY} - assume width/height=0", function () {
572
878
 
573
879
  var layout = { centerX: 0.1, centerY: 0.1 };
574
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
575
- var with_f = { x: 120, y: 120, width: 0, height: 0 };
880
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
881
+ var with_f = { x: 120, y: 120, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
576
882
  var s = { width: 0, height: 0, top: "50%", left: "50%", marginTop: "50%", marginLeft: "50%" };
577
883
  performLayoutTest(layout, no_f, s, with_f, s, NO);
578
884
 
@@ -581,8 +887,8 @@
581
887
  test("layout {top, left, centerX, centerY, height, width} - top/left take presidence", function () {
582
888
 
583
889
  var layout = { top: 0.1, left: 0.1, centerX: 0.1, centerY: 0.1, height: 0.6, width: 0.6 };
584
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
585
- var with_f = { x: 20, y: 20, width: 120, height: 120 };
890
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
891
+ var with_f = { x: 20, y: 20, width: 120, height: 120, scale: 1, originalWidth: 60, originalHeight: 60, originalWidth: 120, originalHeight: 120, transformOriginX: 0.5, transformOriginY: 0.5 };
586
892
  var s = { width: '60%', height: '60%', top: '10%', left: '10%' };
587
893
 
588
894
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -592,8 +898,8 @@
592
898
  test("layout {bottom, right, centerX, centerY, height, width} - bottom/right take presidence", function () {
593
899
 
594
900
  var layout = { bottom: 0.1, right: 0.1, centerX: 0.1, centerY: 0.1, height: 0.6, width: 0.6 };
595
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
596
- var with_f = { x: 60, y: 60, width: 120, height: 120 };
901
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
902
+ var with_f = { x: 60, y: 60, width: 120, height: 120, scale: 1, originalWidth: 60, originalHeight: 60, originalWidth: 120, originalHeight: 120, transformOriginX: 0.5, transformOriginY: 0.5 };
597
903
  var s = { width: '60%', height: '60%', bottom: '10%', right: '10%' };
598
904
 
599
905
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -603,8 +909,8 @@
603
909
  test("layout {top, left, bottom, right, centerX, centerY, height, width} - top/left take presidence", function () {
604
910
 
605
911
  var layout = { top: 0.1, left: 0.1, bottom: 0.1, right: 0.1, centerX: 0.1, centerY: 0.1, height: 0.6, width: 0.6 };
606
- var no_f = { x: 0, y: 0, width: 0, height: 0 };
607
- var with_f = { x: 20, y: 20, width: 120, height: 120 };
912
+ var no_f = { x: 0, y: 0, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
913
+ var with_f = { x: 20, y: 20, width: 120, height: 120, scale: 1, originalWidth: 60, originalHeight: 60, originalWidth: 120, originalHeight: 120, transformOriginX: 0.5, transformOriginY: 0.5 };
608
914
  var s = { width: '60%', height: '60%', top: '10%', left: '10%' };
609
915
 
610
916
  performLayoutTest(layout, no_f, s, with_f, s, NO);
@@ -616,11 +922,10 @@
616
922
  var error = 'NONE';
617
923
  var layout = { centerX: 0.1, centerY: 0.1, width: 'auto', height: 'auto' };
618
924
 
619
- SC.run(function () {
620
- child.set('layout', layout);
621
- });
622
-
623
925
  try {
926
+ SC.run(function () {
927
+ child.set('layout', layout);
928
+ });
624
929
  child.layoutStyle();
625
930
  } catch (e) {
626
931
  error = e;
@@ -641,16 +946,16 @@
641
946
  var layout = { top: 10, left: 10, width: 50, height: 50, border: 2 };
642
947
  var s = { top: 10, left: 10, width: 46, height: 46,
643
948
  borderTopWidth: 2, borderRightWidth: 2, borderBottomWidth: 2, borderLeftWidth: 2 };
644
- var no_f = { x: 12, y: 12, width: 46, height: 46 };
645
- var with_f = { x: 12, y: 12, width: 46, height: 46 };
949
+ var no_f = { x: 12, y: 12, width: 46, height: 46, scale: 1, originalWidth: 46, originalHeight: 46, transformOriginX: 0.5, transformOriginY: 0.5 };
950
+ var with_f = { x: 12, y: 12, width: 46, height: 46, scale: 1, originalWidth: 46, originalHeight: 46, transformOriginX: 0.5, transformOriginY: 0.5 };
646
951
 
647
952
  performLayoutTest(layout, no_f, s, with_f, s, YES);
648
953
  });
649
954
 
650
955
  test("layout {top, left, bottom, right, border}", function () {
651
956
  var layout = { top: 10, left: 10, bottom: 10, right: 10, border: 2 };
652
- var no_f = { x: 12, y: 12, width: 0, height: 0 };
653
- var with_f = { x: 12, y: 12, width: 176, height: 176 };
957
+ var no_f = { x: 12, y: 12, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
958
+ var with_f = { x: 12, y: 12, width: 176, height: 176, scale: 1, originalWidth: 176, originalHeight: 176, transformOriginX: 0.5, transformOriginY: 0.5 };
654
959
  var s = { top: 10, left: 10, bottom: 10, right: 10,
655
960
  borderTopWidth: 2, borderRightWidth: 2, borderBottomWidth: 2, borderLeftWidth: 2 };
656
961
 
@@ -659,8 +964,8 @@
659
964
 
660
965
  test("layout {top, left, bottom, right, borderTop, borderLeft, borderRight, borderBottom}", function () {
661
966
  var layout = { top: 10, left: 10, bottom: 10, right: 10, borderTop: 1, borderRight: 2, borderBottom: 3, borderLeft: 4 };
662
- var no_f = { x: 14, y: 11, width: 0, height: 0 };
663
- var with_f = { x: 14, y: 11, width: 174, height: 176 };
967
+ var no_f = { x: 14, y: 11, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
968
+ var with_f = { x: 14, y: 11, width: 174, height: 176, scale: 1, originalWidth: 174, originalHeight: 176, transformOriginX: 0.5, transformOriginY: 0.5 };
664
969
  var s = { top: 10, left: 10, bottom: 10, right: 10,
665
970
  borderTopWidth: 1, borderRightWidth: 2, borderBottomWidth: 3, borderLeftWidth: 4 };
666
971
 
@@ -669,8 +974,8 @@
669
974
 
670
975
  test("layout {top, left, bottom, right, border, borderTop, borderLeft}", function () {
671
976
  var layout = { top: 10, left: 10, bottom: 10, right: 10, border: 5, borderTop: 1, borderRight: 2 };
672
- var no_f = { x: 15, y: 11, width: 0, height: 0 };
673
- var with_f = { x: 15, y: 11, width: 173, height: 174 };
977
+ var no_f = { x: 15, y: 11, width: 0, height: 0, scale: 1, originalWidth: 0, originalHeight: 0, originalWidth: 0, originalHeight: 0, transformOriginX: 0.5, transformOriginY: 0.5 };
978
+ var with_f = { x: 15, y: 11, width: 173, height: 174, scale: 1, originalWidth: 173, originalHeight: 174, transformOriginX: 0.5, transformOriginY: 0.5 };
674
979
  var s = { top: 10, left: 10, bottom: 10, right: 10,
675
980
  borderTopWidth: 1, borderRightWidth: 2, borderBottomWidth: 5, borderLeftWidth: 5 };
676
981
 
@@ -680,8 +985,8 @@
680
985
  test("layout {bottom, right, width, height, border}", function () {
681
986
 
682
987
  var layout = { bottom: 10, right: 10, width: 50, height: 50, border: 2 };
683
- var no_f = { x: 2, y: 2, width: 46, height: 46 };
684
- var with_f = { x: 142, y: 142, width: 46, height: 46 };
988
+ var no_f = { x: 2, y: 2, width: 46, height: 46, scale: 1, originalWidth: 46, originalHeight: 46, transformOriginX: 0.5, transformOriginY: 0.5 };
989
+ var with_f = { x: 142, y: 142, width: 46, height: 46, scale: 1, originalWidth: 46, originalHeight: 46, transformOriginX: 0.5, transformOriginY: 0.5 };
685
990
  var s = { bottom: 10, right: 10, width: 46, height: 46,
686
991
  borderTopWidth: 2, borderRightWidth: 2, borderBottomWidth: 2, borderLeftWidth: 2 };
687
992
 
@@ -691,8 +996,8 @@
691
996
  test("layout {centerX, centerY, width, height, border}", function () {
692
997
 
693
998
  var layout = { centerX: 10, centerY: 10, width: 60, height: 60, border: 2 };
694
- var no_f = { x: 12, y: 12, width: 56, height: 56 };
695
- var with_f = { x: 82, y: 82, width: 56, height: 56 };
999
+ var no_f = { x: 12, y: 12, width: 56, height: 56, scale: 1, originalWidth: 56, originalHeight: 56, transformOriginX: 0.5, transformOriginY: 0.5 };
1000
+ var with_f = { x: 82, y: 82, width: 56, height: 56, scale: 1, originalWidth: 56, originalHeight: 56, transformOriginX: 0.5, transformOriginY: 0.5 };
696
1001
  var s = { marginLeft: -20, marginTop: -20, width: 56, height: 56, top: "50%", left: "50%",
697
1002
  borderTopWidth: 2, borderRightWidth: 2, borderBottomWidth: 2, borderLeftWidth: 2 };
698
1003
 
@@ -740,10 +1045,10 @@
740
1045
  parent.appendChild(child);
741
1046
  SC.run(function () { child.set('layout', layout); });
742
1047
 
743
- same(child.get('frame'), before, "Before: %@ == %@".fmt(SC.inspect(child.get('frame')), SC.inspect(before)));
1048
+ ok(SC.rectsEqual(child.get('frame'), before), "Before: %@ == %@".fmt(SC.inspect(child.get('frame')), SC.inspect(before)));
744
1049
  SC.run(function () { parent.adjust('width', 300).adjust('height', 300); });
745
1050
 
746
- same(child.get('frame'), after, "After: %@ == %@".fmt(SC.inspect(child.get('frame')), SC.inspect(after)));
1051
+ ok(SC.rectsEqual(child.get('frame'), after), "After: %@ == %@".fmt(SC.inspect(child.get('frame')), SC.inspect(after)));
747
1052
 
748
1053
  }
749
1054