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
@@ -10,10 +10,9 @@
10
10
 
11
11
  var pane;
12
12
  (function () {
13
- var iconURL = sc_static("sproutcore-32.png");
13
+ var iconURL = sc_static("foundation:sproutcore-32.png");
14
14
 
15
15
  pane = SC.ControlTestPane.design()
16
-
17
16
  .add("3_empty", SC.SegmentedView, {
18
17
  items: ['', '', ''],
19
18
  layout: { height: 25 }
@@ -174,6 +173,21 @@ var pane;
174
173
  value: "E",
175
174
  layout: { height: 25 }
176
175
  })
176
+ .add("5_items,layerIds,overflow", SC.SegmentedView, {
177
+ items: [
178
+ { value: "A", width: 70, layerId: 'segment-a' },
179
+ { value: "B", width: 70, layerId: 'segment-b' },
180
+ { value: "C", width: 70, layerId: 'segment-c' },
181
+ { value: "D", width: 70, layerId: 'segment-d' },
182
+ { value: "E", width: 70, layerId: 'segment-e' }
183
+ ],
184
+ itemTitleKey: 'value',
185
+ itemValueKey: 'value',
186
+ itemWidthKey: 'width',
187
+ itemLayerIdKey: 'layerId',
188
+ value: "E",
189
+ layout: { height: 25 }
190
+ })
177
191
  .add("aria-role_tab,tablist", SC.SegmentedView, {
178
192
  items: [
179
193
  { title: "Item 1" },
@@ -191,8 +205,21 @@ var pane;
191
205
  ],
192
206
  itemTitleKey: "title",
193
207
  layout: { height: 25 }
208
+ })
209
+ .add("3_items,1_sel,shouldAutoResize", SC.SegmentedView, {
210
+ items: "Item1 Item2 Item3".w(),
211
+ value: "Item2",
212
+ layout: { height: 25, width: 0 },
213
+ shouldAutoResize: YES
214
+ })
215
+ .add("3_items,1_sel,shouldAutoResize,flexible_layout", SC.SegmentedView, {
216
+ items: "Item1 Item2 Item3".w(),
217
+ value: "Item2",
218
+ layout: { height: 25, left: 0, right: 0 },
219
+ shouldAutoResize: YES
194
220
  });
195
221
 
222
+
196
223
  // ..........................................................
197
224
  // TEST VIEWS
198
225
  //
@@ -452,6 +479,32 @@ var pane;
452
479
  ok($(overflowEl).hasClass('sel'), 'overflow segment should have .sel class');
453
480
  });
454
481
 
482
+ test("Check that the overflow menu does not consume hidden buttons when the menu pane shows because of matching layer ids", function () {
483
+ var sv = pane.view("5_items,layerIds,overflow");
484
+ var segments = sv.$('.sc-segment-view');
485
+
486
+ // Check that we have six segments, five items and one overflow
487
+ var numberOfSegments = segments.size();
488
+ equals(numberOfSegments, 6, 'We should start with 6 segment child divs in the segment view');
489
+
490
+ sv.showOverflowMenu();
491
+
492
+ // the overflow menu should be showing
493
+ var menu = SC.viewFor(SC.$('.sc-menu')[0]);
494
+ ok(menu && menu.get('isVisible'), 'overflow menu should be visible');
495
+
496
+ // We need the run loop to end so that we go through cleaning up views at the end of the run loop,
497
+ // this is where the bug I was seeing occurs. (one of my buttons gets destroyed by the menu pane)
498
+ SC.run(function () {
499
+ menu.remove();
500
+ });
501
+
502
+ // check that no elements have been consumed
503
+ segments = sv.$('.sc-segment-view');
504
+ numberOfSegments = segments.size();
505
+ equals(numberOfSegments, 6, 'We should end with 6 segment child divs in the segment view');
506
+ });
507
+
455
508
  test("Check that the segmented view and segments have aria roles set", function () {
456
509
  var sv = pane.view("aria-role_tab,tablist"),
457
510
  viewElem = sv.$(),
@@ -487,7 +540,7 @@ var pane;
487
540
  layer1 = view1.get('layer');
488
541
  point = SC.offset(layer1);
489
542
 
490
- ev = SC.Event.simulateEvent(layer1, 'mousedown', { clientX: point.x, clientY: point.y });
543
+ ev = SC.Event.simulateEvent(layer1, 'mousedown', { clientX: point.x, clientY: point.y, which: 1 });
491
544
  SC.Event.trigger(layer1, 'mousedown', [ev]);
492
545
 
493
546
  ok(view1.$().hasClass('active'), 'The first segment should have an active class on mousedown');
@@ -521,4 +574,36 @@ var pane;
521
574
  ok(view3.$().hasClass('sel'), 'The third segment should have a sel class on mouseUp');
522
575
  });
523
576
 
577
+ test("passes on mouse events that don't map to a segment", function () {
578
+ var segmentedView, view1, layer1, point, ev;
579
+
580
+ segmentedView = pane.view('3_items,2_sel,1_disabled');
581
+ view1 = segmentedView.get('childViews').objectAt(0); // $('.sc-segment-view')[0];
582
+ layer1 = view1.get('layer');
583
+ point = SC.offset(layer1);
584
+
585
+ SC.RunLoop.begin();
586
+ ev = SC.Event.simulateEvent(layer1, 'mousedown', { clientX: point.x, clientY: point.y, which: 1 });
587
+ ok(segmentedView.mouseDown(ev), "mouseDown event handler accepts event which maps to a segment.");
588
+ SC.RunLoop.end();
589
+
590
+ SC.RunLoop.begin();
591
+ ev = SC.Event.simulateEvent(layer1, 'mousedown', { clientX: point.x - 1, clientY: point.y, which: 1 });
592
+ ok(!segmentedView.mouseDown(ev), "mouseDown event handler passes on event which doesn't map to a segment.");
593
+ SC.RunLoop.end();
594
+ });
595
+
596
+ test("shouldAutoResize", function () {
597
+ var segmentedView;
598
+
599
+ segmentedView = pane.view('3_items,1_sel,shouldAutoResize');
600
+
601
+ ok(segmentedView.getPath('layout.width') !== 0, "View auto-resized to fit the present items.");
602
+
603
+ segmentedView = pane.view('3_items,1_sel,shouldAutoResize,flexible_layout');
604
+
605
+ ok(SC.none(segmentedView.getPath('layout.width')), "Having flexible layout prevents view from auto-resizing.");
606
+ });
607
+
608
+
524
609
  })();
@@ -158,6 +158,14 @@ test("The content of the popup should be recalculated correctly when the list of
158
158
  equals(view3.get("_itemList")[2].title, "Again", "The list should have on the 3rd position the title Again");
159
159
  });
160
160
 
161
+ test("The content of the popup should be recalculated correctly when the list of items is empty", function() {
162
+ equals(view3.get("_itemList").length, 3, "The list should have 3 items.");
163
+ SC.RunLoop.begin() ;
164
+ view3.set('items', [] );
165
+ SC.RunLoop.end() ;
166
+ equals(view3.get("_itemList").length, 0, "The list should have 0 items.");
167
+ });
168
+
161
169
  test("Setting the value of the view should change the title & icon properties", function () {
162
170
  equals(view4.get('value'), "World", "The view gets a default value by sort");
163
171
  equals(view4.get('title'), "World", "The view's title should originally be");
@@ -16,7 +16,8 @@ module("SC.SliderView Methods", {
16
16
  SC.SliderView.extend({
17
17
  value: 50,
18
18
  minimum: 0,
19
- maximum: 100
19
+ maximum: 100,
20
+ step: 25
20
21
  })]
21
22
  });
22
23
  pane.append(); // make sure there is a layer...
@@ -56,6 +57,8 @@ test("going over maximum slider limit", function() {
56
57
  SC.RunLoop.end();
57
58
 
58
59
  // TODO: should we allow setting value higher then maximum?
60
+ // Yes I think so: the value (e.g. from a record) should not be constrained by the view layer just because its value was
61
+ // bound to an unused slider. - DCP
59
62
  equals(view.get('value'), 150, 'value should now be 150');
60
63
  equals(parseFloat(view.$('.sc-handle').css('left')), 500, 'left of sc-handle should be 100%');
61
64
  });
@@ -70,6 +73,18 @@ test("going below minimum slider limit", function() {
70
73
  SC.RunLoop.end();
71
74
 
72
75
  // TODO: should we allow setting value lower then minimum?
76
+ // Yes I think so: the value (e.g. from a record) should not be constrained by the view layer just because its value was
77
+ // bound to an unused slider. - DCP
73
78
  equals(view.get('value'), -10, 'value should now be -10');
74
79
  equals(parseFloat(view.$('.sc-handle').css('left')), 0, 'left of sc-handle should be 0%');
75
80
  });
81
+
82
+ test("steps and stepPositions give the correct values.", function() {
83
+ // This test is of course sensitive to the view's min, max and step.
84
+ var steps = view.get('steps'),
85
+ positions = view.get('stepPositions');
86
+ ok(steps.length === 5 && steps[0] === 0 && steps[1] === 25 && steps[2] === 50 && steps[3] === 75 && steps[4] === 100,
87
+ "The view's steps property returns [0, 25, 50, 75, 100].");
88
+ ok(positions.length === 5 && positions[0] === 0 && positions[1] === 0.25 && positions[2] === 0.5 && positions[3] === 0.75 && positions[4] === 1,
89
+ "The view's stepPositions property returns [0, 0.25, 0.5, 0.75, 1].");
90
+ })
@@ -22,6 +22,13 @@ var pane = SC.ControlTestPane.design()
22
22
  maximum: 100,
23
23
  isEnabled: NO
24
24
  })
25
+ .add("slider no-scroll", SC.SliderView, {
26
+ layout: {top:0, bottom:0, left:0, width: 250},
27
+ value: 50,
28
+ minimum: 0,
29
+ maximum: 100,
30
+ updateOnScroll: false
31
+ })
25
32
  .add("slider value 100", SC.SliderView, {
26
33
  layout: {top:0, bottom:0, left:0, width: 250},
27
34
  value: 100,
@@ -70,6 +77,14 @@ var pane = SC.ControlTestPane.design()
70
77
  value: 50,
71
78
  minimum: 0,
72
79
  maximum: 100
80
+ })
81
+ .add("slider markSteps", SC.SliderView, {
82
+ layout: { top:0, bottom:0, left:0, width: 250 },
83
+ value: 20,
84
+ minimum: 0,
85
+ maximum: 100,
86
+ step: 20,
87
+ markSteps: true
73
88
  });
74
89
 
75
90
  // ..........................................................
@@ -96,6 +111,12 @@ test("disabled", function() {
96
111
  equals(view.$('.sc-handle')[0].style.left, '50%', 'left of sc-handle should be 50%');
97
112
  });
98
113
 
114
+ test("no scroll", function() {
115
+ var view = pane.view('slider no-scroll');
116
+
117
+ ok(!view.mouseWheel({}), "A slider view with updateOnScroll set to false should return NO from the mouseWheel event handler.");
118
+ });
119
+
99
120
  test("basic value 100", function() {
100
121
  var view = pane.view('slider value 100');
101
122
 
@@ -138,4 +159,37 @@ test("Check if attribute aria-orientation is set correctly", function() {
138
159
  var viewElem = pane.view('slider aria-orientation').$();
139
160
  equals(viewElem.attr('aria-orientation'), "horizontal", 'aria-orientation should be horizontal');
140
161
  });
162
+
163
+ // markSteps
164
+
165
+ test("markStep", function() {
166
+ var view = pane.view('slider markSteps'),
167
+ marks, expectedCount;
168
+
169
+ // Initial.
170
+ marks = view.$().find('.sc-slider-step-mark');
171
+ expectedCount = Math.floor((view.get('maximum') - view.get('minimum')) / view.get('step')) + 1; // yeah yeah math.floor + 1 is math.ciel
172
+ equals(marks.length, expectedCount, "A view with markSteps set to true contains the correct number of marks");
173
+ ok(marks.eq(2).hasClass('sc-slider-step-mark-2'), "The nth mark has sc-slider-step-mark-n class.");
174
+ ok(view.$().find('.sc-slider-step-mark-first').length === 1, "Only one mark is labeled as the first.");
175
+ ok(view.$().find('.sc-slider-step-mark-last').length === 1, "Only one mark is labeled as the last.");
176
+
177
+ // Change.
178
+ SC.run(function() { view.set('maximum', 200); });
179
+ marks = view.$().find('.sc-slider-step-mark');
180
+ expectedCount = Math.floor((view.get('maximum') - view.get('minimum')) / view.get('step')) + 1; // yeah yeah math.floor + 1 is math.ciel
181
+ equals(marks.length, expectedCount, "Changing maximum correctly updates the number of marks");
182
+ ok(view.$().find('.sc-slider-step-mark-first').length === 1, "Only one mark is labeled as the first.");
183
+ ok(view.$().find('.sc-slider-step-mark-last').length === 1, "Only one mark is labeled as the last.");
184
+
185
+ // Test mark at value = 0. (See https://github.com/sproutcore/sproutcore/issues/1229)
186
+ SC.run(function() {
187
+ view.set('minimum', -1).set('maximum', 4).set('step', 1);
188
+ });
189
+
190
+ marks = view.$('.sc-slider-step-mark');
191
+ equals(marks[1].style.left, "20%", "The mark representing value zero is positioned correctly when minimum is less than zero");
192
+
193
+ });
194
+
141
195
  })();
@@ -213,7 +213,7 @@ test("Adding and removing before a divider doesn't screw things majorly", functi
213
213
 
214
214
  });
215
215
 
216
- test("Adding and removing several views doesn't screw things", function() {
216
+ test("Adding and removing several views doesn't screw things up", function() {
217
217
  var view = createSplitView({
218
218
  childViews: 'left middle right'.w(),
219
219
  middle: SC.View.design(SC.SplitChild, { name: 'middle' })
@@ -240,4 +240,23 @@ test("Adding and removing several views doesn't screw things", function() {
240
240
  SC.RunLoop.end();
241
241
 
242
242
  checkDividers(view, 5);
243
- });
243
+ });
244
+
245
+ test("SplitView#layoutDirection is correctly propagated to its dividers.", function() {
246
+ var view = createSplitView(),
247
+ layoutDirection = view.get('layoutDirection'),
248
+ nextLayoutDirection = layoutDirection === SC.LAYOUT_VERTICAL ? SC.LAYOUT_HORIZONTAL : SC.LAYOUT_VERTICAL; // hey just in case the default changes
249
+
250
+ var divider = view.childViews[1];
251
+ ok(divider.isSplitDivider, "PRELIM: We found the divider.");
252
+
253
+ equals(divider.get('layoutDirection'), layoutDirection, "The divider's layoutDirection should match that of the SplitView.");
254
+
255
+ SC.RunLoop.begin();
256
+ view.set('layoutDirection', nextLayoutDirection);
257
+ SC.RunLoop.end();
258
+
259
+ equals(divider.get('layoutDirection'), nextLayoutDirection, "The divider's layoutDirection should update when the SplitView's does.");
260
+
261
+ view.destroy();
262
+ });
@@ -4,7 +4,7 @@
4
4
  // portions copyright ©2011 Apple Inc.
5
5
  // License: Licensed under MIT license (see license.js)
6
6
  // ==========================================================================
7
-
7
+ /*globals module, test, ok */
8
8
  module('SC.StaticContentView - Basic UI');
9
9
 
10
10
  test("Frame Recalculation", function() {
@@ -15,33 +15,39 @@ test("Frame Recalculation", function() {
15
15
  layout: { top: 10, right: 10, bottom: 10, left: 10 }
16
16
  })
17
17
  });
18
+
18
19
  var view = SC.StaticContentView.create({
19
20
  content: '<p style="position: relative; margin-top: 80px; font-size: 3em">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>',
20
21
  frameDidChange: function() {
21
22
  callCount += 1;
22
23
  }.observes('frame')
23
24
  });
24
- pane.setPath('contentView.contentView', view);
25
- pane.append();
26
- baseCount = callCount;
27
- ok(callCount > 0, 'precond - frame should be called at least once when displayed');
28
- callCount = 0;
29
-
30
- SC.run(function() { pane.adjust('width', 499); });
31
- ok(callCount > 1, 'frame should recompute after parent resizes');
32
- callCount = 0;
33
-
34
- content = 'For today, we celebrate the first glorious anniversary of the Information Purification Directives. We have created, for the first time in all history, a garden of pure ideology. Where each worker may bloom secure from the pests of contradictory and confusing truths.Our Unification of Thought is more powerful a weapon than any fleet or army on earth. We are one people. With one will. One resolve. One cause. Our enemies shall talk themselves to death. And we will bury them with their own confusion. We shall prevail!';
35
- view.set('content', content);
36
- ok(callCount > 0, 'frame should recompute after content changes');
37
- callCount = 0;
38
-
39
- SC.RunLoop.begin().end();
40
- var layer = view.get('layer');
41
-
42
- ok(layer.innerHTML.indexOf(content) > -1, 'view should rerender when content changes');
43
- view.contentLayoutDidChange();
44
- ok(callCount > 0, 'frame should recompute after calling contentLayoutDidChange()');
45
-
46
- pane.remove();
47
- });
25
+
26
+ SC.run(function() {
27
+ pane.setPath('contentView.contentView', view);
28
+ pane.append();
29
+
30
+ baseCount = callCount;
31
+ ok(callCount > 0, 'precond - frame should be called at least once when displayed');
32
+
33
+ callCount = 0;pane.adjust('width', 499);
34
+ ok(callCount > 0, 'frame should recompute after parent resizes');
35
+
36
+ callCount = 0;
37
+ content = 'For today, we celebrate the first glorious anniversary of the Information Purification Directives. We have created, for the first time in all history, a garden of pure ideology. Where each worker may bloom secure from the pests of contradictory and confusing truths.Our Unification of Thought is more powerful a weapon than any fleet or army on earth. We are one people. With one will. One resolve. One cause. Our enemies shall talk themselves to death. And we will bury them with their own confusion. We shall prevail!';
38
+
39
+ view.set('content', content);
40
+ ok(callCount > 0, 'frame should recompute after content changes');
41
+ callCount = 0;
42
+ });
43
+
44
+ SC.run(function() {
45
+ var layer = view.get('layer');
46
+
47
+ ok(layer.innerHTML.indexOf(content) > -1, 'view should rerender when content changes');
48
+ view.contentLayoutDidChange();
49
+ ok(callCount > 0, 'frame should recompute after calling contentLayoutDidChange()');
50
+
51
+ pane.remove();
52
+ });
53
+ });
@@ -5,40 +5,120 @@
5
5
  // License: Licensed under MIT license (see license.js)
6
6
  // ==========================================================================
7
7
 
8
- /*global module test htmlbody ok equals same stop start */
8
+ /*globals module, test, ok */
9
9
 
10
- var iconURL= "http://www.freeiconsweb.com/Icons/16x16_people_icons/People_046.gif";
11
- var pane, view;
12
10
  module("SC.TabView", {
13
11
  setup: function() {
14
- SC.RunLoop.begin();
15
- pane = SC.MainPane.create({
16
- childViews: [
17
- SC.TabView.extend({
18
- nowShowing: 'tab2',
19
-
20
- items: [
21
- { title: "tab1", value: "tab1" , icon: iconURL},
22
- { title: "tab2", value: "tab2" , icon: iconURL},
23
- { title: "tab3", value: "tab3" , icon: iconURL}
24
- ],
25
-
26
- itemTitleKey: 'title',
27
- itemValueKey: 'value',
28
- itemIconKey: 'icon',
29
- layout: { left:12, height: 200, right:12, top:12 }
30
-
31
- })]
12
+ SC.run(function() {
13
+ window.globalPage = SC.Page.create({
14
+ view1: SC.View.create(),
15
+ view2: SC.View.create()
16
+ });
32
17
  });
33
- pane.append(); // make sure there is a layer...
34
- SC.RunLoop.end();
35
-
36
- view = pane.childViews[0];
37
- },
38
-
18
+ },
19
+
39
20
  teardown: function() {
40
- pane.remove();
41
- pane = view = null ;
21
+ window.globalPage.destroy();
22
+ delete window.globalPage;
42
23
  }
43
24
  });
44
25
 
26
+ test("Tabs referencing global views.", function() {
27
+ var pane, view;
28
+ SC.run(function() {
29
+ pane = SC.MainPane.create({
30
+ childViews: ['tabView'],
31
+ tabView: SC.TabView.extend({
32
+ nowShowing: 'globalPage.view1',
33
+
34
+ items: [
35
+ { title: "tab1", value: "globalPage.view1" },
36
+ { title: "tab2", value: "globalPage.view2" }
37
+ ]
38
+ })
39
+ }).append();
40
+ view = pane.tabView;
41
+ });
42
+
43
+ ok(view.getPath('containerView.contentView') === window.globalPage.get('view1'), "The tab view should now be showing globalPage.view1.");
44
+
45
+ SC.run(function() {
46
+ view.set('nowShowing', 'globalPage.view2');
47
+ });
48
+
49
+ ok(view.getPath('containerView.contentView') === window.globalPage.get('view2'), "The tab view should now be showing globalPage.view2.");
50
+
51
+ // Clean up.
52
+ SC.run(function() {
53
+ pane.destroy();
54
+ });
55
+ });
56
+
57
+ test("Tabs referencing local views.", function() {
58
+ var pane, view;
59
+ SC.run(function() {
60
+ pane = SC.MainPane.create({
61
+ childViews: ['tabView'],
62
+ tabView: SC.TabView.extend({
63
+ nowShowing: 'view1',
64
+
65
+ items: [
66
+ { title: "tab1", value: "view1" },
67
+ { title: "tab2", value: "view2" }
68
+ ],
69
+
70
+ view1: SC.View.create(),
71
+ view2: SC.View.create()
72
+ })
73
+ }).append();
74
+ view = pane.tabView;
75
+ });
76
+
77
+ ok(view.getPath('containerView.contentView') === view.get('view1'), "The tab view's local view1 should now be showing.");
78
+
79
+ SC.run(function() {
80
+ view.set('nowShowing', 'view2');
81
+ });
82
+
83
+ ok(view.getPath('containerView.contentView') === view.get('view2'), "The tab view's local view2 should now be showing.");
84
+
85
+ // Clean up.
86
+ SC.run(function() {
87
+ pane.destroy();
88
+ });
89
+ });
90
+
91
+ test("Tabs referencing deep local views.", function() {
92
+ var pane, view;
93
+ SC.run(function() {
94
+ pane = SC.MainPane.create({
95
+ childViews: ['tabView'],
96
+ tabView: SC.TabView.extend({
97
+ nowShowing: '.localPage.view1',
98
+
99
+ items: [
100
+ { title: "tab1", value: ".localPage.view1" },
101
+ { title: "tab2", value: ".localPage.view2" }
102
+ ],
103
+ localPage: SC.Page.create({
104
+ view1: SC.View.create(),
105
+ view2: SC.View.create()
106
+ })
107
+ })
108
+ }).append();
109
+ view = pane.tabView;
110
+ });
111
+
112
+ ok(view.getPath('containerView.contentView') === view.getPath('localPage.view1'), "The tab view's local view1 should now be showing.");
113
+
114
+ SC.run(function() {
115
+ view.set('nowShowing', '.localPage.view2');
116
+ });
117
+
118
+ ok(view.getPath('containerView.contentView') === view.getPath('localPage.view2'), "The tab view's local view2 should now be showing.");
119
+
120
+ // Clean up.
121
+ SC.run(function() {
122
+ pane.destroy();
123
+ });
124
+ });