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
@@ -399,7 +399,11 @@ SC.Drag = SC.Object.extend(
399
399
  var ary = this._dropTargets();
400
400
 
401
401
  for (var idx = 0, len = ary.length; idx < len; idx++) {
402
- ary[idx].tryToPerform('dragStarted', this, evt);
402
+ var target = ary[idx];
403
+ // If the target is not visible, it is not valid.
404
+ if (!target.get('isVisibleInWindow')) continue;
405
+
406
+ target.tryToPerform('dragStarted', this, evt);
403
407
  }
404
408
  },
405
409
 
@@ -413,8 +417,7 @@ SC.Drag = SC.Object.extend(
413
417
  @see SC.Drag.endDrag
414
418
  */
415
419
  cancelDrag: function (evt) {
416
- var target = this._lastTarget,
417
- loc = this.get('location');
420
+ var target = this._lastTarget;
418
421
 
419
422
  if (target && target.dragExited) target.dragExited(this, this._lastMouseDraggedEvent);
420
423
 
@@ -444,22 +447,25 @@ SC.Drag = SC.Object.extend(
444
447
  }
445
448
  }
446
449
 
447
- if (this.get('sourceIsDraggable')) {
448
- // destroy the ghost view
449
- this._destroyGhostView();
450
-
451
- if (this.get('ghost')) {
452
- // Show the dragView if it was hidden.
453
- if (this._dragViewWasVisible) this._getDragView().set('isVisible', YES);
454
- this._dragViewWasVisible = null;
455
- }
450
+ // Trigger a slide-back if triggered and if the drag was unsuccessful.
451
+ if (this.get('sourceIsDraggable') && this.get('slideBack') && op === SC.DRAG_NONE) {
452
+ this._slideGhostViewBack();
453
+ }
454
+ // Otherwise, wrap up the drag right now.
455
+ else {
456
+ this._endDrag();
456
457
  }
457
458
 
458
- // notify the source that everything has completed
459
- var source = this.source;
460
- if (source && source.dragDidEnd) source.dragDidEnd(this, loc, op);
461
-
462
- this._cleanUpDrag();
459
+ var source = this.get('source');
460
+ if (source) {
461
+ // notify the source that the drag succeeded
462
+ if (source.dragDidSucceed && op !== SC.DRAG_NONE) source.dragDidSucceed(this, loc, op);
463
+ // notify the source that the drag was cancelled
464
+ else if (source.dragDidCancel && op === SC.DRAG_NONE) source.dragDidCancel(this, loc, op);
465
+
466
+ // always notify the source that everything has completed
467
+ if (source.dragDidEnd) source.dragDidEnd(this, loc, op);
468
+ }
463
469
  },
464
470
 
465
471
  // ..........................................
@@ -587,10 +593,8 @@ SC.Drag = SC.Object.extend(
587
593
  This will create the ghostView and add it to the document.
588
594
  */
589
595
  _createGhostView: function () {
590
- var that = this,
591
- dragView = this._getDragView(),
596
+ var dragView = this._getDragView(),
592
597
  frame = dragView.get('borderFrame'),
593
- layout = dragView.get('layout'),
594
598
  ghostLayout, view;
595
599
 
596
600
  // Create a fixed layout for the ghost view.
@@ -604,15 +608,32 @@ SC.Drag = SC.Object.extend(
604
608
 
605
609
  didCreateLayer: function () {
606
610
  if (dragView) {
607
- var layer = dragView.get('layer');
608
- if (layer) {
609
- layer = layer.cloneNode(true);
611
+ var dragLayer = dragView.get('layer');
612
+ if (dragLayer) {
613
+ var layer = dragLayer.cloneNode(true);
614
+
615
+ // Canvas elements need manual copying.
616
+ var dragCanvasses = dragView.$().find('canvas');
617
+ if (dragCanvasses.length) {
618
+ var ghostCanvasses = $(layer).find('canvas'),
619
+ len = dragCanvasses.length,
620
+ i, dragCanvas, ghostCanvas;
621
+ for (i = 0; i < len; i++) {
622
+ dragCanvas = dragCanvasses[i];
623
+ ghostCanvas = ghostCanvasses[i];
624
+ ghostCanvas.width = dragCanvas.width;
625
+ ghostCanvas.height = dragCanvas.height;
626
+ ghostCanvas.getContext('2d').drawImage(dragCanvas, 0, 0);
627
+ }
628
+ }
610
629
 
611
630
  // Make sure the layer we put in the ghostView wrapper is not displaced.
612
631
  layer.style.top = "0px";
613
632
  layer.style.left = "0px";
614
633
  layer.style.bottom = "0px";
615
634
  layer.style.right = "0px";
635
+
636
+ // Attach the cloned layer.
616
637
  this.get('layer').appendChild(layer);
617
638
  }
618
639
  }
@@ -667,6 +688,35 @@ SC.Drag = SC.Object.extend(
667
688
  }
668
689
  },
669
690
 
691
+ /** @private Called instead of _destroyGhostView if slideBack is YES. */
692
+ _slideGhostViewBack: function () {
693
+ if (this.ghostView) {
694
+ var dragView = this._getDragView(),
695
+ frame = dragView.get('borderFrame'),
696
+ dragParentView = dragView.get('parentView'),
697
+ globalOrigin = dragParentView ? dragParentView.convertFrameToView(frame, null) : dragView.get('frame'),
698
+ slidebackLayout;
699
+
700
+ // Create a fixed layout for the ghost view.
701
+ slidebackLayout = { top: globalOrigin.y, left: globalOrigin.x };
702
+
703
+ // Animate the ghost view back to its original position; destroy after.
704
+ this.ghostView.animate(slidebackLayout, 0.5, this, function () {
705
+ this.invokeNext(function() {
706
+ // notify the source that slideback has completed
707
+ var source = this.get('source');
708
+ if (this.get('slideBack') && source && source.dragSlideBackDidEnd) source.dragSlideBackDidEnd(this);
709
+
710
+ this._endDrag();
711
+ });
712
+ });
713
+
714
+ }
715
+ else {
716
+ this._endDrag();
717
+ }
718
+ },
719
+
670
720
  /** @private */
671
721
  _destroyGhostView: function () {
672
722
  if (this.ghostView) {
@@ -677,12 +727,26 @@ SC.Drag = SC.Object.extend(
677
727
  },
678
728
 
679
729
  /** @private */
680
- _cleanUpDrag: function() {
730
+ _endDrag: function () {
731
+ if (this.get('sourceIsDraggable')) {
732
+ this._destroyGhostView();
733
+ if (this.get('ghost')) {
734
+ // Show the dragView if it was hidden.
735
+ if (this._dragViewWasVisible) this._getDragView().set('isVisible', YES);
736
+ this._dragViewWasVisible = null;
737
+ }
738
+ }
739
+
740
+ this._cleanUpDrag();
741
+ },
742
+
743
+ /** @private */
744
+ _cleanUpDrag: function () {
681
745
  this._lastTarget = null;
682
746
  this._dragInProgress = NO;
683
747
  this._cachedDropTargets = null;
684
748
  },
685
-
749
+
686
750
  /** @private
687
751
  Return an array of drop targets, sorted with any nested drop targets
688
752
  at the top of the array. The first time this method is called during
@@ -713,7 +777,7 @@ SC.Drag = SC.Object.extend(
713
777
  var ret = depth[guid];
714
778
  if (!ret) {
715
779
  ret = 1;
716
- while (x = x.get('parentView')) {
780
+ while ((x = x.get('parentView'))) {
717
781
  if (dropTargets[SC.guidFor(x)] !== undefined) ret = ret + 1;
718
782
  if (x.isPane && x.isMainPane) ret = ret + 10000; // Arbitrary value always have the main pain on top
719
783
  }
@@ -765,7 +829,7 @@ SC.Drag = SC.Object.extend(
765
829
  */
766
830
  _findNextDropTarget: function (target) {
767
831
  var dropTargets = SC.Drag._dropTargets;
768
- while (target = target.get('parentView')) {
832
+ while ((target = target.get('parentView'))) {
769
833
  if (dropTargets[SC.guidFor(target)]) return target;
770
834
  }
771
835
  return null;
@@ -798,7 +862,7 @@ SC.Drag = SC.Object.extend(
798
862
  var loc = evt ? { x: evt.pageX, y: evt.pageY } : this.get('location'),
799
863
  view = this._findScrollableView(loc),
800
864
  scrollableView = null, // become final view when found
801
- vscroll, hscroll, min, max, edge, container, f;
865
+ vscroll, hscroll, min, max, container, f;
802
866
 
803
867
  // hscroll and vscroll will become either 1 or -1 to indicate scroll
804
868
  // direction or 0 for no scroll.
@@ -915,7 +979,7 @@ SC.Drag = SC.Object.extend(
915
979
  // at the start of the list.
916
980
  ret = ret.sort(function (a, b) {
917
981
  var view = a;
918
- while (view = view.get('parentView')) {
982
+ while ((view = view.get('parentView'))) {
919
983
  if (b === view) return -1;
920
984
  }
921
985
  return 1;
@@ -954,7 +1018,7 @@ SC.Drag = SC.Object.extend(
954
1018
  */
955
1019
  _findNextScrollableView: function (view) {
956
1020
  var scrollableViews = SC.Drag._scrollableViews;
957
- while (view = view.get('parentView')) {
1021
+ while ((view = view.get('parentView'))) {
958
1022
  if (scrollableViews[SC.guidFor(view)]) return view;
959
1023
  }
960
1024
  return null;
@@ -19,7 +19,9 @@ module("SC.AlertPane UI", {
19
19
 
20
20
  var pane ;
21
21
 
22
- function evaluatePane(pane, message, description, caption, button1Title, button2Title, button3Title, iconClass, themeName) {
22
+ function evaluatePane(pane, message, description, caption, button1Title, button2Title, button3Title, iconClass, themeName,
23
+ button1ToolTip, button2ToolTip, button3ToolTip, button1LayerId, button2LayerId, button3LayerId, defaultButton, cancelButton,
24
+ localizeButton1, localizeButton2, localizeButton3) {
23
25
  // wrapper
24
26
  ok(pane.get('isVisibleInWindow'), 'pane.isVisibleInWindow should be YES');
25
27
  ok(pane.$().hasClass('sc-alert'), 'pane should have sc-alert class');
@@ -75,6 +77,82 @@ function evaluatePane(pane, message, description, caption, button1Title, button2
75
77
  ok(button3.$().hasClass('sc-hidden'), 'pane.div button3 should be hidden');
76
78
  }
77
79
 
80
+ if (localizeButton1) {
81
+ ok(button1.get('localize'), "button1 is set to localize.");
82
+ }
83
+ if (localizeButton2) {
84
+ ok(button2.get('localize'), "button2 is set to localize.");
85
+ }
86
+ if (localizeButton3) {
87
+ ok(button3.get('localize'), "button3 is set to localize.");
88
+ }
89
+
90
+ if (button1ToolTip) {
91
+ equals(button1.$('label').prop('title'), button1ToolTip, 'pane.div.div button1 should have custom toolTip %@'.fmt(button1ToolTip));
92
+ } else {
93
+ equals(button1.$('label').prop('title'), '', 'pane.div.div button1 should have default toolTip BLANK');
94
+ }
95
+ if (button2ToolTip) {
96
+ equals(button2.$('label').prop('title'), button2ToolTip, 'pane.div.div button2 should have custom toolTip %@'.fmt(button2ToolTip));
97
+ } else {
98
+ equals(button2.$('label').prop('title'), '', 'pane.div.div button2 should have default toolTip BLANK');
99
+ }
100
+ if (button3ToolTip) {
101
+ equals(button3.$('label').prop('title'), button3ToolTip, 'pane.div.div button3 should have custom toolTip %@'.fmt(button3ToolTip));
102
+ } else {
103
+ equals(button3.$('label').prop('title'), '', 'pane.div.div button3 should have default toolTip BLANK');
104
+ }
105
+
106
+ if (button1LayerId) {
107
+ equals(button1.$().prop('id'), button1LayerId, 'pane.div.div button1 should have custom layerId %@'.fmt(button1LayerId));
108
+ } else {
109
+ ok(button1.$().prop('id').indexOf('sc') === 0, 'pane.div.div button1 should have default layerId');
110
+ }
111
+ if (button2LayerId) {
112
+ equals(button2.$().prop('id'), button2LayerId, 'pane.div.div button2 should have custom layerId %@'.fmt(button2LayerId));
113
+ } else {
114
+ ok(button2.$().prop('id').indexOf('sc') === 0, 'pane.div.div button2 should have default layerId');
115
+ }
116
+ if (button3LayerId) {
117
+ equals(button3.$().prop('id'), button3LayerId, 'pane.div.div button3 should have custom layerId %@'.fmt(button3LayerId));
118
+ } else {
119
+ ok(button3.$().prop('id').indexOf('sc') === 0, 'pane.div.div button3 should have default layerId');
120
+ }
121
+
122
+ if (defaultButton == null) defaultButton = 1;
123
+ if (defaultButton === 1) {
124
+ ok(button1.$().hasClass('def'), 'pane.div.div button1 should be default');
125
+ } else {
126
+ ok(!button1.$().hasClass('def'), 'pane.div.div button1 should not be default');
127
+ }
128
+ if (defaultButton === 2) {
129
+ ok(button2.$().hasClass('def'), 'pane.div.div button2 should be default');
130
+ } else {
131
+ ok(!button2.$().hasClass('def'), 'pane.div.div button2 should not be default');
132
+ }
133
+ if (defaultButton === 3) {
134
+ ok(button3.$().hasClass('def'), 'pane.div.div button3 should be default');
135
+ } else {
136
+ ok(!button3.$().hasClass('def'), 'pane.div.div button3 should not be default');
137
+ }
138
+
139
+ if (cancelButton == null) cancelButton = 2;
140
+ if (cancelButton === 1) {
141
+ ok(button1.$().hasClass('cancel'), 'pane.div.div button1 should be cancel');
142
+ } else {
143
+ ok(!button1.$().hasClass('cancel'), 'pane.div.div button1 should not be cancel');
144
+ }
145
+ if (cancelButton === 2) {
146
+ ok(button2.$().hasClass('cancel'), 'pane.div.div button2 should be cancel');
147
+ } else {
148
+ ok(!button2.$().hasClass('cancel'), 'pane.div.div button2 should not be cancel');
149
+ }
150
+ if (cancelButton === 3) {
151
+ ok(button3.$().hasClass('cancel'), 'pane.div.div button3 should be cancel');
152
+ } else {
153
+ ok(!button3.$().hasClass('cancel'), 'pane.div.div button3 should not be cancel');
154
+ }
155
+
78
156
  if (!themeName) themeName = 'capsule';
79
157
  ok(button1.$().hasClass(themeName), 'pane.div.div button1 should have class ' + themeName);
80
158
  ok(button2.$().hasClass(themeName), 'pane.div.div button2 should have class ' + themeName);
@@ -82,6 +160,7 @@ function evaluatePane(pane, message, description, caption, button1Title, button2
82
160
  }
83
161
 
84
162
  test("AlertPane.show with icon, message, description, caption and 3 buttons", function() {
163
+ SC.RunLoop.begin();
85
164
  pane = SC.AlertPane.show({
86
165
  message: 'AlertPane.message',
87
166
  description: 'AlertPane.description',
@@ -94,19 +173,47 @@ test("AlertPane.show with icon, message, description, caption and 3 buttons", fu
94
173
  { title: 'extraButtonTitle' }
95
174
  ]
96
175
  });
176
+ SC.RunLoop.end();
97
177
  evaluatePane(pane, "AlertPane.message", 'AlertPane.description', 'AlertPane.caption', "okButtonTitle", "cancelButtonTitle", 'extraButtonTitle', 'sc-icon-tools-24');
98
178
  pane.dismiss();
99
179
  pane.destroy();
100
180
  });
101
181
 
182
+ test("AlertPane.show with 3 buttons with isDefault, isCancel, toolTip, layerId and localize", function () {
183
+ SC.RunLoop.begin();
184
+ pane = SC.AlertPane.show({
185
+ message: 'AlertPane.message',
186
+ description: 'AlertPane.description',
187
+ caption: 'AlertPane.caption',
188
+ icon: 'sc-icon-tools-24',
189
+ delegate: this,
190
+ buttons: [
191
+ { title: 'okButtonTitle', toolTip: 'okButtonToolTip', layerId: 'okButtonLayerId', isCancel: true, localize: true },
192
+ { title: 'cancelButtonTitle', toolTip: 'cancelButtonToolTip', layerId: 'cancelButtonLayerId', localize: true },
193
+ { title: 'extraButtonTitle', toolTip: 'extraButtonToolTip', layerId: 'extraButtonLayerId', isDefault: true, localize: true }
194
+ ]
195
+ });
196
+ SC.RunLoop.end();
197
+ evaluatePane(pane, "AlertPane.message", 'AlertPane.description', 'AlertPane.caption',
198
+ "okButtonTitle", "cancelButtonTitle", 'extraButtonTitle', 'sc-icon-tools-24', null,
199
+ 'okButtonToolTip', 'cancelButtonToolTip', 'extraButtonToolTip',
200
+ 'okButtonLayerId', 'cancelButtonLayerId', 'extraButtonLayerId',
201
+ 3, 1, true, true, true);
202
+ pane.dismiss();
203
+ pane.destroy();
204
+ });
205
+
102
206
  test("AlertPane.show with icon, message, description, caption and 3 buttons - old style", function() {
207
+ SC.RunLoop.begin();
103
208
  pane = SC.AlertPane.show("AlertPane.message", 'AlertPane.description', 'AlertPane.caption', "okButtonTitle", "cancelButtonTitle", 'extraButtonTitle', 'sc-icon-tools-24', this);
209
+ SC.RunLoop.end();
104
210
  evaluatePane(pane, "AlertPane.message", 'AlertPane.description', 'AlertPane.caption', "okButtonTitle", "cancelButtonTitle", 'extraButtonTitle', 'sc-icon-tools-24');
105
211
  pane.dismiss();
106
212
  pane.destroy();
107
213
  });
108
214
 
109
215
  test("AlertPane.warn with icon, message, description, caption and 3 buttons", function() {
216
+ SC.RunLoop.begin();
110
217
  pane = SC.AlertPane.warn({
111
218
  message: "AlertPane.message",
112
219
  description: 'AlertPane.description',
@@ -118,12 +225,14 @@ test("AlertPane.warn with icon, message, description, caption and 3 buttons", fu
118
225
  ],
119
226
  delegate: this
120
227
  });
228
+ SC.RunLoop.end();
121
229
  evaluatePane(pane, "AlertPane.message", 'AlertPane.description', 'AlertPane.caption', "okButtonTitle", "cancelButtonTitle", 'extraButtonTitle', 'sc-icon-alert-48');
122
230
  pane.dismiss();
123
231
  pane.destroy();
124
232
  });
125
233
 
126
234
  test("AlertPane.error with icon, message, description, caption and 3 buttons", function() {
235
+ SC.RunLoop.begin();
127
236
  pane = SC.AlertPane.error({
128
237
  message: "AlertPane.message",
129
238
  description: 'AlertPane.description',
@@ -135,12 +244,14 @@ test("AlertPane.error with icon, message, description, caption and 3 buttons", f
135
244
  ],
136
245
  delegate: this
137
246
  });
247
+ SC.RunLoop.end();
138
248
  evaluatePane(pane, "AlertPane.message", 'AlertPane.description', 'AlertPane.caption', "okButtonTitle", "cancelButtonTitle", 'extraButtonTitle', 'sc-icon-error-48');
139
249
  pane.dismiss();
140
250
  pane.destroy();
141
251
  });
142
252
 
143
253
  test("AlertPane.plain with message, description, caption and 3 buttons", function() {
254
+ SC.RunLoop.begin();
144
255
  pane = SC.AlertPane.plain({
145
256
  message: "AlertPane.message",
146
257
  description: 'AlertPane.description',
@@ -152,12 +263,14 @@ test("AlertPane.plain with message, description, caption and 3 buttons", functio
152
263
  ],
153
264
  delegate: this
154
265
  });
266
+ SC.RunLoop.end();
155
267
  evaluatePane(pane, "AlertPane.message", 'AlertPane.description', 'AlertPane.caption', "okButtonTitle", "cancelButtonTitle", 'extraButtonTitle', 'blank');
156
268
  pane.dismiss();
157
269
  pane.destroy();
158
270
  });
159
271
 
160
272
  test("AlertPane.info with icon, message, description, caption and 3 buttons", function() {
273
+ SC.RunLoop.begin();
161
274
  pane = SC.AlertPane.info({
162
275
  message: "AlertPane.message",
163
276
  description: 'AlertPane.description',
@@ -169,27 +282,34 @@ test("AlertPane.info with icon, message, description, caption and 3 buttons", fu
169
282
  ],
170
283
  delegate: this
171
284
  });
285
+ SC.RunLoop.end();
172
286
  evaluatePane(pane, "AlertPane.message", 'AlertPane.description', 'AlertPane.caption', "okButtonTitle", "cancelButtonTitle", 'extraButtonTitle', 'sc-icon-info-48');
173
287
  pane.dismiss();
174
288
  pane.destroy();
175
289
  });
176
290
 
177
291
  test("AlertPane.info with icon, message and 1 default button (omit all optional parameters) - old style", function() {
292
+ SC.RunLoop.begin();
178
293
  pane = SC.AlertPane.info("AlertPane.message");
294
+ SC.RunLoop.end();
179
295
  evaluatePane(pane, "AlertPane.message", null, null, null, null, null, 'sc-icon-info-48');
180
296
  pane.dismiss();
181
297
  pane.destroy();
182
298
  });
183
299
 
184
300
  test("AlertPane.info with icon, message and 3 buttons (passing null to optional description and caption) - old style", function() {
301
+ SC.RunLoop.begin();
185
302
  pane = SC.AlertPane.info("AlertPane.message", null, null, "okButtonTitle", "cancelButtonTitle", 'extraButtonTitle', this);
303
+ SC.RunLoop.end();
186
304
  evaluatePane(pane, "AlertPane.message", null, null, "okButtonTitle", "cancelButtonTitle", 'extraButtonTitle', 'sc-icon-info-48');
187
305
  pane.dismiss();
188
306
  pane.destroy();
189
307
  });
190
308
 
191
309
  test("AlertPane.info with icon, message, description, caption and 1 button (passing null to 3 buttons) - old style", function() {
310
+ SC.RunLoop.begin();
192
311
  pane = SC.AlertPane.info("AlertPane.message", 'AlertPane.description', 'AlertPane.caption', null, null, null, this);
312
+ SC.RunLoop.end();
193
313
  evaluatePane(pane, "AlertPane.message", 'AlertPane.description', 'AlertPane.caption', null, null, null, 'sc-icon-info-48');
194
314
  pane.dismiss();
195
315
  pane.destroy();
@@ -223,21 +343,31 @@ test("AlertPane.info with individual actions and targets for three buttons", fun
223
343
  }
224
344
 
225
345
  function clickButton(button) {
226
- var elem = button.$();
227
- SC.Event.trigger(elem, 'mousedown');
346
+ var elem = button.get('layer');
347
+ var evt = SC.Event.simulateEvent(elem, 'mousedown', { which: 1 });
348
+ SC.Event.trigger(elem, 'mousedown', [evt]);
228
349
  SC.Event.trigger(elem, 'mouseup');
229
350
  }
230
351
 
352
+ SC.RunLoop.begin();
231
353
  showPane();
232
354
  clickButton(pane.get('button1'));
355
+ SC.RunLoop.end();
356
+
233
357
  equals(clickValue, 'OK', 'Action for the OK button was clicked');
234
358
 
359
+ SC.RunLoop.begin();
235
360
  showPane();
236
361
  clickButton(pane.get('button2'));
362
+ SC.RunLoop.end();
363
+
237
364
  equals(clickValue, 'Cancel', 'Action for the Cancel button was clicked');
238
365
 
366
+ SC.RunLoop.begin();
239
367
  showPane();
240
368
  clickButton(pane.get('button3'));
369
+ SC.RunLoop.end();
370
+
241
371
  equals(clickValue, 'Extra', 'Action for the Extra button was clicked');
242
372
 
243
373
  pane.destroy();
@@ -363,6 +493,7 @@ test("users interaction with mutiple alert panes with 1-3 buttons - old style",
363
493
 
364
494
 
365
495
  test("AlertPane.show with custom themeName", function() {
496
+ SC.RunLoop.begin();
366
497
  pane = SC.AlertPane.show({
367
498
  themeName: 'AlertPane.themeName',
368
499
  message: 'AlertPane.message',
@@ -376,7 +507,36 @@ test("AlertPane.show with custom themeName", function() {
376
507
  { title: 'extraButtonTitle' }
377
508
  ]
378
509
  });
510
+ SC.RunLoop.end();
379
511
  evaluatePane(pane, "AlertPane.message", 'AlertPane.description', 'AlertPane.caption', "okButtonTitle", "cancelButtonTitle", 'extraButtonTitle', 'sc-icon-tools-24', 'AlertPane.themeName');
380
512
  pane.dismiss();
381
513
  pane.destroy();
382
514
  });
515
+
516
+ test("AlertPane.show with more than three buttons specified", function() {
517
+ var didError = NO;
518
+
519
+ SC.RunLoop.begin();
520
+ try {
521
+ pane = SC.AlertPane.show({
522
+ themeName: 'AlertPane.themeName',
523
+ message: 'AlertPane.message',
524
+ description: 'AlertPane.description',
525
+ caption: 'AlertPane.caption',
526
+ icon: 'sc-icon-tools-24',
527
+ delegate: this,
528
+ buttons: [
529
+ { title: 'okButtonTitle' },
530
+ { title: 'cancelButtonTitle' },
531
+ { title: 'extraButtonTitle' },
532
+ { title: 'extraExtraButtonTitle' }
533
+ ]
534
+ });
535
+ } catch (e) {
536
+ didError = YES;
537
+ }
538
+ SC.RunLoop.end();
539
+
540
+ ok(!didError, "Specifying more than three buttons doesn't trigger an unhandled error.");
541
+ pane.destroy();
542
+ })