sproutcore 1.7.1.beta → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. data/CHANGELOG +44 -0
  2. data/README.rdoc +20 -20
  3. data/VERSION.yml +3 -3
  4. data/lib/Buildfile +1 -1
  5. data/lib/buildtasks/build.rake +5 -0
  6. data/lib/buildtasks/manifest.rake +19 -1
  7. data/lib/frameworks/sproutcore/Buildfile +19 -17
  8. data/lib/frameworks/sproutcore/CHANGELOG.md +163 -29
  9. data/lib/frameworks/sproutcore/README.md +29 -8
  10. data/lib/frameworks/sproutcore/apps/statechart_routing/Buildfile +12 -0
  11. data/lib/frameworks/sproutcore/apps/statechart_routing/controllers/login_controller.js +11 -0
  12. data/lib/frameworks/sproutcore/apps/statechart_routing/controllers/main_controller.js +7 -0
  13. data/lib/frameworks/sproutcore/apps/statechart_routing/controllers/statechart_controller.js +17 -0
  14. data/lib/frameworks/sproutcore/apps/statechart_routing/core.js +25 -0
  15. data/lib/frameworks/sproutcore/apps/statechart_routing/main.js +15 -0
  16. data/lib/frameworks/sproutcore/apps/statechart_routing/resources/_theme.css +18 -0
  17. data/lib/frameworks/sproutcore/apps/statechart_routing/resources/bar_page.js +14 -0
  18. data/lib/frameworks/sproutcore/apps/statechart_routing/resources/foo_page.js +14 -0
  19. data/lib/frameworks/sproutcore/apps/statechart_routing/resources/loading.rhtml +9 -0
  20. data/lib/frameworks/sproutcore/apps/statechart_routing/resources/login_page.js +61 -0
  21. data/lib/frameworks/sproutcore/apps/statechart_routing/resources/main_page.js +46 -0
  22. data/lib/frameworks/sproutcore/apps/statechart_routing/statechart.js +76 -0
  23. data/lib/frameworks/sproutcore/apps/statechart_routing/theme.js +27 -0
  24. data/lib/frameworks/sproutcore/apps/tests/controllers/targets.js +1 -1
  25. data/lib/frameworks/sproutcore/apps/tests/states/no_targets.js +1 -1
  26. data/lib/frameworks/sproutcore/apps/tests/states/ready_detail.js +1 -1
  27. data/lib/frameworks/sproutcore/apps/tests/states/ready_empty.js +1 -1
  28. data/lib/frameworks/sproutcore/apps/tests/states/ready_list.js +1 -1
  29. data/lib/frameworks/sproutcore/apps/tests/states/ready_no_tests.js +1 -1
  30. data/lib/frameworks/sproutcore/apps/welcome/controllers/targets.js +1 -1
  31. data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +14 -1
  32. data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +15 -15
  33. data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/request.js +1 -1
  34. data/lib/frameworks/sproutcore/frameworks/animation/core.js +8 -5
  35. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +302 -70
  36. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +19 -14
  37. data/lib/frameworks/sproutcore/frameworks/bootstrap/tests/system/browser.js +471 -149
  38. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +3 -3
  39. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/object.js +42 -0
  40. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/run_loop.js +3 -2
  41. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/string.js +7 -0
  42. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/action_support.js +1 -1
  43. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/delegate_support.js +2 -2
  44. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/responder_context.js +3 -3
  45. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/selection_support.js +1 -1
  46. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/body_overflow.js +63 -0
  47. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/keyboard.js +1 -1
  48. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/layout.js +37 -2
  49. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/main.js +28 -6
  50. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +10 -3
  51. data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/sparse_array_delegate.js +2 -2
  52. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/browser.js +66 -2
  53. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/builder.js +1 -1
  54. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/cursor.js +1 -1
  55. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +58 -57
  56. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +1 -1
  57. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js.orig +445 -0
  58. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/platform.js +51 -31
  59. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/ready.js +5 -1
  60. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +53 -69
  61. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/responder.js +1 -1
  62. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +98 -72
  63. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/string.js +37 -3
  64. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/timer.js +7 -4
  65. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +21 -0
  66. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/content_destroyed.js +7 -7
  67. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +23 -1
  68. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/browser.js +66 -0
  69. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/event.js +22 -0
  70. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/locale.js +11 -11
  71. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/end.js +4 -4
  72. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/escape_html.js +41 -0
  73. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_className.js +1 -1
  74. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_style.js +8 -8
  75. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/update.js +17 -16
  76. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/remove.js +1 -1
  77. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/build_children.js +1 -1
  78. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/class_name_bindings_test.js +15 -0
  79. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/createChildViews.js +5 -5
  80. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +50 -30
  81. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/acceleration.js +46 -0
  82. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +1 -43
  83. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +8 -34
  84. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +3 -2
  85. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +10 -1
  86. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +6 -5
  87. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +22 -2
  88. data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +2 -2
  89. data/lib/frameworks/sproutcore/frameworks/datastore/mixins/relationship_support.js +1 -1
  90. data/lib/frameworks/sproutcore/frameworks/datastore/models/child_attribute.js +0 -2
  91. data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +35 -0
  92. data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +46 -19
  93. data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +23 -9
  94. data/lib/frameworks/sproutcore/frameworks/datastore/models/single_attribute.js +2 -3
  95. data/lib/frameworks/sproutcore/frameworks/datastore/system/many_array.js +1 -1
  96. data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +2 -2
  97. data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +294 -302
  98. data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js.orig +1531 -0
  99. data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +4 -2
  100. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +14 -11
  101. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/many_array.js +63 -0
  102. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +1 -1
  103. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +4 -4
  104. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +50 -10
  105. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +4 -4
  106. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +3 -3
  107. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/destroy.js +1 -1
  108. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/refresh.js +1 -1
  109. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +1 -1
  110. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/single_attribute.js +114 -67
  111. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +1 -1
  112. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +1 -1
  113. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/compare.js +54 -1
  114. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation.js +29 -9
  115. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/parse.js +1 -1
  116. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +1 -1
  117. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/flush.js +1 -1
  118. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/cancelRecord.js +1 -1
  119. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +1 -1
  120. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +37 -45
  121. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/find.js +127 -127
  122. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +16 -0
  123. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushRelationships.js +42 -4
  124. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/readDataHash.js +1 -1
  125. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +13 -7
  126. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/tests/system/datetime.js +8 -0
  127. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/resources/strings.js +2 -1
  128. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/system/datetime.js +1 -0
  129. data/lib/frameworks/sproutcore/frameworks/debug/core.js +3 -3
  130. data/lib/frameworks/sproutcore/frameworks/desktop/core.js +1 -1
  131. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +1 -1
  132. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +1 -1
  133. data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +1 -4
  134. data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +19 -6
  135. data/lib/frameworks/sproutcore/frameworks/desktop/panes/modal.js +30 -1
  136. data/lib/frameworks/sproutcore/frameworks/desktop/panes/palette.js +1 -1
  137. data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +24 -1
  138. data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +121 -28
  139. data/lib/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +15 -15
  140. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +1 -1
  141. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +2 -2
  142. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/responder.js +2 -2
  143. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +39 -15
  144. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/collection.js +3 -3
  145. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +2 -2
  146. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/image_button.js +2 -2
  147. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/panel.js +14 -6
  148. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/popup_button.js +3 -3
  149. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +11 -11
  150. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +4 -3
  151. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +1 -51
  152. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +11 -16
  153. data/lib/frameworks/sproutcore/frameworks/desktop/resources/images/icons/sc-icon-error-48.png +0 -0
  154. data/lib/frameworks/sproutcore/frameworks/desktop/resources/slider.css +0 -2
  155. data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +3 -3
  156. data/lib/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +3 -3
  157. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +9 -9
  158. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/content.js +11 -11
  159. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +2 -1
  160. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/reload.js +1 -1
  161. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/ui.js +107 -81
  162. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +3 -3
  163. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +68 -60
  164. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +57 -12
  165. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/integration.js +21 -19
  166. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroller.js +5 -0
  167. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +2 -2
  168. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/ui.js +32 -3
  169. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +12 -0
  170. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/stacked/ui_comments.js +12 -0
  171. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +0 -8
  172. data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +77 -132
  173. data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +5 -6
  174. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +16 -15
  175. data/lib/frameworks/sproutcore/frameworks/desktop/views/date_field.js +52 -52
  176. data/lib/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +1 -1
  177. data/lib/frameworks/sproutcore/frameworks/desktop/views/grid.js +1 -1
  178. data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +147 -147
  179. data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +11 -2
  180. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +2 -2
  181. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +5 -5
  182. data/lib/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +22 -12
  183. data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +13 -7
  184. data/lib/frameworks/sproutcore/frameworks/desktop/views/scene.js +2 -2
  185. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +462 -441
  186. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroller.js +48 -62
  187. data/lib/frameworks/sproutcore/frameworks/desktop/views/segment.js +22 -2
  188. data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +150 -32
  189. data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +104 -45
  190. data/lib/frameworks/sproutcore/frameworks/desktop/views/select_button.js +42 -20
  191. data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +24 -24
  192. data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +148 -154
  193. data/lib/frameworks/sproutcore/frameworks/desktop/views/stacked.js +2 -2
  194. data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +2 -2
  195. data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +8 -7
  196. data/lib/frameworks/sproutcore/frameworks/desktop/views/web.js +2 -2
  197. data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +2 -0
  198. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/files.js +1 -1
  199. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/library.js +1 -1
  200. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/targets.js +1 -1
  201. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/view_configs.js +1 -1
  202. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/mixins/drop_down.js +1 -1
  203. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/states/ready.js +1 -1
  204. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/plist_item.js +1 -1
  205. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/web.js +1 -1
  206. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/controllers/page_design.js +2 -2
  207. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/css/css_style_sheet.js +2 -2
  208. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/object_designer.js +1 -1
  209. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/view_designer.js +2 -2
  210. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/mixins/snap_lines.js +3 -3
  211. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/designer_drop_target.js +1 -1
  212. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/drawing.js +21 -21
  213. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/page_item_view.js +1 -1
  214. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form.js +59 -53
  215. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/menu/views/menu/scroll.js +2 -2
  216. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphism/simple.js +1 -1
  217. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/core_scroll.js +6 -6
  218. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/desktop/scroll.js +2 -2
  219. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/views/touch/scroll.js +2 -2
  220. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu.js +14 -10
  221. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu_item.js +17 -6
  222. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/popup_button.js +38 -14
  223. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/select.js +5 -13
  224. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_child.js +1 -1
  225. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_thumb.js +5 -3
  226. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/children.js +19 -0
  227. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/methods.js +20 -2
  228. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/split_thumb.js +1 -1
  229. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/split.js +35 -12
  230. data/lib/frameworks/sproutcore/frameworks/formatters/README +6 -0
  231. data/lib/frameworks/sproutcore/frameworks/formatters/english.lproj/strings.js +174 -0
  232. data/lib/frameworks/sproutcore/frameworks/formatters/formatters/date_formatter.js +351 -0
  233. data/lib/frameworks/sproutcore/frameworks/formatters/tests/date_formatter.js +517 -0
  234. data/lib/frameworks/sproutcore/frameworks/foundation/core.js +1 -1
  235. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +345 -138
  236. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/button.js +5 -3
  237. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +176 -42
  238. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +1 -1
  239. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +137 -105
  240. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/gestureable.js +2 -2
  241. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editable.js +2 -2
  242. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor.js +16 -1
  243. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +1 -1
  244. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/validatable.js +47 -47
  245. data/lib/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +3 -3
  246. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/helpers/sizing.js +1 -1
  247. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +28 -6
  248. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/render_delegate.js +1 -1
  249. data/lib/frameworks/sproutcore/frameworks/foundation/resources/benchmark.css +0 -5
  250. data/lib/frameworks/sproutcore/frameworks/foundation/resources/bootstrap.rhtml +34 -19
  251. data/lib/frameworks/sproutcore/frameworks/foundation/resources/button_view.css +0 -2
  252. data/lib/frameworks/sproutcore/frameworks/foundation/resources/label.css +1 -5
  253. data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +8 -9
  254. data/lib/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +2 -2
  255. data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +179 -47
  256. data/lib/frameworks/sproutcore/frameworks/foundation/system/task_queue.js +34 -1
  257. data/lib/frameworks/sproutcore/frameworks/foundation/system/text_selection.js +1 -1
  258. data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +26 -12
  259. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/misc.js +7 -7
  260. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_measurement.js +12 -4
  261. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_metric_optimization.js +202 -0
  262. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/content_value_support/content.js +77 -8
  263. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/flowed_layout/tests.js +1 -0
  264. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/beginEditing.js +2 -2
  265. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/commitEditing.js +4 -3
  266. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/discardEditing.js +4 -2
  267. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/beginEditing.js +2 -2
  268. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/commitEditing.js +4 -2
  269. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/discardEditing.js +4 -2
  270. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/utils/pointInElement.js +2 -2
  271. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +0 -8
  272. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +163 -149
  273. data/lib/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +1 -1
  274. data/lib/frameworks/sproutcore/frameworks/foundation/validators/date.js +1 -1
  275. data/lib/frameworks/sproutcore/frameworks/foundation/validators/date_time.js +1 -1
  276. data/lib/frameworks/sproutcore/frameworks/foundation/validators/password.js +1 -1
  277. data/lib/frameworks/sproutcore/frameworks/foundation/validators/validator.js +3 -3
  278. data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +16 -43
  279. data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +4 -3
  280. data/lib/frameworks/sproutcore/frameworks/foundation/views/inline_text_field.js +67 -54
  281. data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +49 -38
  282. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +285 -242
  283. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffer.js +13 -13
  284. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffered.js +19 -22
  285. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-sc.js +9 -3
  286. data/lib/frameworks/sproutcore/frameworks/jquery/jquery.js +231 -186
  287. data/lib/frameworks/sproutcore/frameworks/media/views/audio.js +145 -143
  288. data/lib/frameworks/sproutcore/frameworks/media/views/video.js +156 -154
  289. data/lib/frameworks/sproutcore/frameworks/qunit/qunit/qunit.js +5 -5
  290. data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js +3 -3
  291. data/lib/frameworks/sproutcore/frameworks/routing/system/routes.js.orig +540 -0
  292. data/lib/frameworks/sproutcore/frameworks/routing/tests/system/routes.js +2 -2
  293. data/lib/frameworks/sproutcore/frameworks/runtime/core.js +15 -8
  294. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +5 -5
  295. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/replace.js +12 -0
  296. data/lib/frameworks/sproutcore/frameworks/runtime/ext/function.js +2 -2
  297. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +1 -1
  298. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +1 -1
  299. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +7 -7
  300. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +98 -32
  301. data/lib/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +7 -2
  302. data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +14 -3
  303. data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +98 -13
  304. data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +8 -14
  305. data/lib/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +1 -1
  306. data/lib/frameworks/sproutcore/frameworks/runtime/system/error.js +2 -2
  307. data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +23 -6
  308. data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +69 -18
  309. data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +57 -31
  310. data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +189 -14
  311. data/lib/frameworks/sproutcore/frameworks/runtime/system/string.js +82 -22
  312. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/chained.js +20 -0
  313. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +125 -4
  314. data/lib/frameworks/sproutcore/frameworks/runtime/tests/private/observer_queue.js +1 -1
  315. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +2 -2
  316. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/rangeStartForIndex.js +37 -0
  317. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/remove.js +2 -2
  318. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +16 -0
  319. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +75 -4
  320. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/string.js +41 -0
  321. data/lib/frameworks/sproutcore/frameworks/statechart/mixins/statechart_delegate.js +113 -0
  322. data/lib/frameworks/sproutcore/frameworks/statechart/private/state_path_matcher.js +312 -0
  323. data/lib/frameworks/sproutcore/frameworks/statechart/system/async.js +18 -22
  324. data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +508 -131
  325. data/lib/frameworks/sproutcore/frameworks/statechart/system/state_route_handler_context.js +78 -0
  326. data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +265 -44
  327. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/basic/with_concurrent_states.js +16 -0
  328. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/responder_chain.js +11 -3
  329. data/lib/frameworks/sproutcore/frameworks/statechart/tests/private/state_path_matcher.js +116 -0
  330. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/add_substate.js +108 -0
  331. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/find_first_relative_current_state/with_concurrent.js +179 -0
  332. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/find_first_relative_current_state/without_concurrent.js +74 -0
  333. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/get_state.js +141 -0
  334. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/get_substate.js +340 -0
  335. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/route_triggered.js +161 -0
  336. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/methods/try_to_handle_event.js +288 -0
  337. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/standard/without_concurrent_states/context.js +5 -33
  338. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/routing/with_concurrent_states/basic.js +213 -0
  339. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/routing/without_concurrent_states/basic.js +212 -0
  340. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/without_concurrent_states/core.js +8 -0
  341. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{state/namespacing.js → statechart/methods/get_state.js} +3 -41
  342. data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/{invoke_state_method.js → methods/invoke_state_method.js} +1 -1
  343. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{event_handling/advanced → statechart}/respond_to_event.js +1 -1
  344. data/lib/frameworks/sproutcore/frameworks/statechart/tests/system/state_route_handler_context/methods/retry.js +64 -0
  345. data/lib/frameworks/sproutcore/frameworks/table/core.js +2 -0
  346. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/controls/button.js +0 -1
  347. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars.js +29 -5
  348. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/bind.js +4 -3
  349. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/collection.js +0 -0
  350. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/localization.js +0 -0
  351. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/ext/handlebars/view.js +0 -0
  352. data/lib/frameworks/sproutcore/frameworks/{handlebars → template_view}/handlebars.js +493 -357
  353. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/mixins/template_helpers/checkbox_support.js +0 -0
  354. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/mixins/template_helpers/text_field_support.js +13 -2
  355. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/panes/template.js +0 -0
  356. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/controls/button.js +0 -0
  357. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/mixins/template_helpers/checkbox_support.js +0 -0
  358. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/mixins/template_helpers/text_field_support.js +0 -0
  359. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/panes/template.js +0 -0
  360. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/views/template/collection.js +39 -14
  361. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/views/template/core.js +0 -0
  362. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/tests/views/template/handlebars.js +57 -6
  363. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/views/bindable_span.js +21 -6
  364. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/views/template.js +9 -3
  365. data/lib/frameworks/sproutcore/frameworks/{core_foundation → template_view}/views/template_collection.js +55 -26
  366. data/lib/frameworks/sproutcore/frameworks/testing/system/equiv.js +1 -1
  367. data/lib/frameworks/sproutcore/frameworks/testing/system/plan.js +122 -122
  368. data/lib/frameworks/sproutcore/frameworks/testing/system/runner.js +2 -2
  369. data/lib/frameworks/sproutcore/frameworks/testing/system/suite.js +4 -4
  370. data/lib/frameworks/sproutcore/frameworks/yuireset/resources/base.css +1 -1
  371. data/lib/frameworks/sproutcore/frameworks/yuireset/resources/reset.css +0 -1
  372. data/lib/frameworks/sproutcore/frameworks/yuireset/resources/view.css +4 -4
  373. data/lib/frameworks/sproutcore/lib/index.rhtml +55 -32
  374. data/lib/frameworks/sproutcore/license.js +2 -4
  375. data/lib/frameworks/sproutcore/themes/ace/resources/body.css +5 -1
  376. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/button.css +2 -2
  377. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/button.css +21 -13
  378. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/button.css +17 -10
  379. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/button.css +4 -3
  380. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/button.css +20 -12
  381. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/button.css +16 -8
  382. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/jumbo/button.css +17 -0
  383. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/small/button.css +17 -0
  384. data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure.css +2 -2
  385. data/lib/frameworks/sproutcore/themes/ace/resources/master-detail/master-detail.css +2 -2
  386. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.css +5 -3
  387. data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/core.css +1 -1
  388. data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/toolbar.css +1 -1
  389. data/lib/gen/app/USAGE +17 -4
  390. data/lib/gen/language/Buildfile +4 -4
  391. data/lib/gen/language/USAGE +4 -4
  392. data/lib/gen/page/templates/pages/@target_name@/Buildfile +7 -7
  393. data/lib/gen/{html_app → statechart_app}/Buildfile +0 -0
  394. data/lib/gen/{html_app → statechart_app}/README +0 -0
  395. data/lib/gen/statechart_app/USAGE +21 -0
  396. data/lib/gen/statechart_app/templates/apps/@target_name@/Buildfile +9 -0
  397. data/lib/gen/statechart_app/templates/apps/@target_name@/core.js +24 -0
  398. data/lib/gen/statechart_app/templates/apps/@target_name@/main.js +26 -0
  399. data/lib/gen/statechart_app/templates/apps/@target_name@/resources/_theme.css +18 -0
  400. data/lib/gen/statechart_app/templates/apps/@target_name@/resources/loading.rhtml +9 -0
  401. data/lib/gen/statechart_app/templates/apps/@target_name@/resources/main_page.js +21 -0
  402. data/lib/gen/statechart_app/templates/apps/@target_name@/statechart.js +8 -0
  403. data/lib/gen/statechart_app/templates/apps/@target_name@/states/ready_state.js +12 -0
  404. data/lib/gen/statechart_app/templates/apps/@target_name@/theme.js +24 -0
  405. data/lib/sproutcore/builders.rb +1 -0
  406. data/lib/sproutcore/builders/base.rb +19 -1
  407. data/lib/sproutcore/builders/chance_file.rb +6 -1
  408. data/lib/sproutcore/builders/handlebars.rb +1 -9
  409. data/lib/sproutcore/builders/javascript.rb +1 -10
  410. data/lib/sproutcore/builders/json.rb +25 -0
  411. data/lib/sproutcore/builders/less.rb +1 -1
  412. data/lib/sproutcore/builders/sass.rb +1 -1
  413. data/lib/sproutcore/builders/stylesheet.rb +1 -9
  414. data/lib/sproutcore/helpers/html5_manifest.rb +1 -1
  415. data/lib/sproutcore/helpers/static_helper.rb +42 -0
  416. data/lib/sproutcore/rack/proxy.rb +21 -3
  417. data/lib/sproutcore/rack/service.rb +3 -2
  418. data/lib/sproutcore/tools.rb +18 -25
  419. data/lib/sproutcore/tools/gen.rb +10 -3
  420. data/lib/sproutcore/tools/init.rb +11 -10
  421. data/spec/buildtasks/manifest/prepare_build_tasks/json_spec.rb +62 -0
  422. data/spec/fixtures/builder_tests/apps/handlebars_test/Buildfile +1 -1
  423. data/spec/fixtures/builder_tests/apps/json_test/sc_static.json +2 -0
  424. data/spec/lib/builders/json_spec.rb +53 -0
  425. data/sproutcore.gemspec +2 -2
  426. data/vendor/chance/lib/chance/parser.rb +1 -1
  427. metadata +222 -177
  428. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/datetime.js +0 -0
  429. data/lib/frameworks/sproutcore/frameworks/debug/invoke_once_last_debugging.js +0 -259
  430. data/lib/frameworks/sproutcore/frameworks/documentation/core.js +0 -0
  431. data/lib/frameworks/sproutcore/frameworks/foundation/system/chance.js +0 -69
  432. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/editable/ui.js +0 -44
  433. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/ui.js +0 -64
  434. data/lib/frameworks/sproutcore/frameworks/mini/license.js +0 -30
  435. data/lib/gen/html_app/USAGE +0 -15
  436. data/lib/gen/html_app/templates/apps/@target_name@/@target_name@.js +0 -11
  437. data/lib/gen/html_app/templates/apps/@target_name@/resources/images/.gitkeep +0 -0
  438. data/lib/gen/html_app/templates/apps/@target_name@/resources/stylesheets/@target_name@.css +0 -6
  439. data/lib/gen/html_app/templates/apps/@target_name@/resources/templates/@target_name@.handlebars +0 -1
  440. data/lib/gen/html_project/Buildfile +0 -45
  441. data/lib/gen/html_project/INIT +0 -3
  442. data/lib/gen/html_project/README +0 -1
  443. data/lib/gen/html_project/USAGE +0 -2
  444. data/lib/gen/html_project/templates/@filename@/Buildfile +0 -5
  445. data/lib/gen/html_project/templates/@filename@/README +0 -4
@@ -268,12 +268,13 @@ SC.ScrollerView = SC.View.extend(
268
268
  var classNames = {},
269
269
  buttons = '',
270
270
  parentView = this.get('parentView'),
271
+ layoutDirection = this.get('layoutDirection'),
271
272
  thumbPosition, thumbLength, thumbCenterLength, thumbElement,
272
273
  value, max, scrollerLength, length, pct;
273
274
 
274
275
  // We set a class name depending on the layout direction so that we can
275
276
  // style them differently using CSS.
276
- switch (this.get('layoutDirection')) {
277
+ switch (layoutDirection) {
277
278
  case SC.LAYOUT_VERTICAL:
278
279
  classNames['sc-vertical'] = YES;
279
280
  break;
@@ -297,37 +298,13 @@ SC.ScrollerView = SC.View.extend(
297
298
 
298
299
  // If this is the first time, generate the actual HTML
299
300
  if (firstTime) {
300
- if (this.get('hasButtons')) {
301
- buttons = '<div class="button-bottom"></div><div class="button-top"></div>';
302
- } else {
303
- buttons = '<div class="endcap"></div>';
304
- }
301
+ context.push('<div class="track"></div>',
302
+ '<div class="cap"></div>');
303
+ this.renderButtons(context, this.get('hasButtons'));
304
+ this.renderThumb(context, layoutDirection, thumbLength, thumbPosition);
305
305
 
306
- switch (this.get('layoutDirection')) {
307
- case SC.LAYOUT_VERTICAL:
308
- context.push('<div class="track"></div>',
309
- '<div class="cap"></div>',
310
- buttons,
311
- '<div class="thumb" style="height: '+thumbLength+'px; top: ' + thumbPosition + 'px;">',
312
- '<div class="thumb-center"></div>',
313
- '<div class="thumb-top"></div>',
314
- '<div class="thumb-bottom"></div></div>');
315
-
316
- //addressing accessibility
317
- context.attr('aria-orientation', 'vertical');
318
- break;
319
- case SC.LAYOUT_HORIZONTAL:
320
- context.push('<div class="track"></div>',
321
- '<div class="cap"></div>',
322
- buttons,
323
- '<div class="thumb" style="width: '+thumbLength+'px; left: ' + thumbPosition + 'px;">',
324
- '<div class="thumb-center"></div>',
325
- '<div class="thumb-top"></div>',
326
- '<div class="thumb-bottom"></div></div>');
327
-
328
- //addressing accessibility
329
- context.attr('aria-orientation', 'horizontal');
330
- }
306
+ //addressing accessibility
307
+ context.attr('aria-orientation', 'vertical');
331
308
 
332
309
  //addressing accessibility
333
310
  context.attr('aria-valuemax', this.get('maximum'));
@@ -352,6 +329,26 @@ SC.ScrollerView = SC.View.extend(
352
329
  }
353
330
  },
354
331
 
332
+ renderThumb: function(context, layoutDirection, thumbLength, thumbPosition) {
333
+ var styleString;
334
+ if(layoutDirection === SC.LAYOUT_HORIZONTAL) styleString = 'width: '+thumbLength+'px; left: ' + thumbPosition + 'px;';
335
+ else styleString = 'height: '+thumbLength+'px; top: ' + thumbPosition + 'px;';
336
+
337
+ context.push('<div class="thumb" style="%@">'.fmt(styleString),
338
+ '<div class="thumb-center"></div>',
339
+ '<div class="thumb-top"></div>',
340
+ '<div class="thumb-bottom"></div></div>');
341
+
342
+ },
343
+
344
+ renderButtons: function(context, hasButtons) {
345
+ if (hasButtons) {
346
+ context.push('<div class="button-bottom"></div><div class="button-top"></div>');
347
+ } else {
348
+ context.push('<div class="endcap"></div>');
349
+ }
350
+ },
351
+
355
352
  /** @private */
356
353
  touchScrollDidStart: function(value) {
357
354
  this.set("_touchScrollValue", value);
@@ -920,7 +917,6 @@ SC.TouchScrollerView = SC.ScrollerView.extend(
920
917
  /** @private */
921
918
  render: function(context, firstTime) {
922
919
  var classNames = [],
923
- buttons = '',
924
920
  thumbPosition, thumbLength, thumbCenterLength, thumbElement,
925
921
  value, max, scrollerLength, length, pct;
926
922
 
@@ -950,36 +946,13 @@ SC.TouchScrollerView = SC.ScrollerView.extend(
950
946
 
951
947
  // If this is the first time, generate the actual HTML
952
948
  if (firstTime) {
953
- if (this.get('hasButtons')) {
954
- buttons = '<div class="button-bottom"></div><div class="button-top"></div>';
955
- } else {
956
- buttons = '<div class="endcap"></div>';
957
- }
949
+ context.push('<div class="track"></div>'+
950
+ '<div class="cap"></div>');
951
+ this.renderButtons(context, this.get('hasButtons'));
952
+ this.renderThumb(context, this.get('layoutDirection'), thumbLength);
953
+ }
958
954
 
959
- switch (this.get('layoutDirection')) {
960
- case SC.LAYOUT_VERTICAL:
961
- context.push('<div class="track"></div>',
962
- '<div class="cap"></div>',
963
- buttons,
964
- '<div class="thumb">',
965
- '<div class="thumb-top"></div>',
966
- '<div class="thumb-clip">',
967
- '<div class="thumb-inner" style="-webkit-transform: translateY('+(thumbLength-1044)+'px);">',
968
- '<div class="thumb-center"></div>',
969
- '<div class="thumb-bottom"></div></div></div></div>');
970
- break;
971
- case SC.LAYOUT_HORIZONTAL:
972
- context.push('<div class="track"></div>',
973
- '<div class="cap"></div>',
974
- buttons,
975
- '<div class="thumb">',
976
- '<div class="thumb-top"></div>',
977
- '<div class="thumb-clip">',
978
- '<div class="thumb-inner" style="-webkit-transform: translateX('+(thumbLength-1044)+'px);">',
979
- '<div class="thumb-center"></div>',
980
- '<div class="thumb-bottom"></div></div></div></div>');
981
- }
982
- } else {
955
+ else {
983
956
  // The HTML has already been generated, so all we have to do is
984
957
  // reposition and resize the thumb
985
958
 
@@ -990,6 +963,19 @@ SC.TouchScrollerView = SC.ScrollerView.extend(
990
963
 
991
964
  this.adjustThumb(thumbElement, thumbPosition, thumbLength);
992
965
  }
966
+ },
967
+
968
+ renderThumb: function(context, layoutDirection, thumbLength) {
969
+ // where is this magic number from?
970
+ thumbLength -= 1044;
971
+ layoutDirection = (layoutDirection === SC.LAYOUT_HORIZONTAL ? 'X' : 'Y');
972
+
973
+ context.push('<div class="thumb">'+
974
+ '<div class="thumb-top"></div>'+
975
+ '<div class="thumb-clip">'+
976
+ '<div class="thumb-inner" style="-webkit-transform: translate%@(%@px);">'.fmt(layoutDirection, thumbLength)+
977
+ '<div class="thumb-center"></div>'+
978
+ '<div class="thumb-bottom"></div></div></div></div>');
979
+
993
980
  }
994
-
995
981
  });
@@ -21,7 +21,15 @@ SC.SegmentView = SC.View.extend(SC.Control,
21
21
  @default 'tab'
22
22
  @readOnly
23
23
  */
24
- ariaRole: 'tab',
24
+ //ariaRole: 'tab',
25
+ ariaRole: 'button', // workaround for <rdar://problem/10444670>; switch back to 'tab' later with <rdar://problem/10463928> (also see segmented.js)
26
+
27
+ /**
28
+ @type Boolean
29
+ @default YES
30
+ @readOnly
31
+ */
32
+ isSegment: YES,
25
33
 
26
34
  /**
27
35
  @type Array
@@ -58,6 +66,18 @@ SC.SegmentView = SC.View.extend(SC.Control,
58
66
  */
59
67
  isSelected: NO,
60
68
 
69
+ /**
70
+ Change the layout direction to make this a vertical segment instead of horizontal ones.
71
+ Possible values:
72
+
73
+ - SC.LAYOUT_HORIZONTAL
74
+ - SC.LAYOUT_VERTICAL
75
+
76
+ @type String
77
+ @default SC.LAYOUT_HORIZONTAL
78
+ */
79
+ layoutDirection: SC.LAYOUT_HORIZONTAL,
80
+
61
81
  /**
62
82
  @type String
63
83
  @default null
@@ -73,7 +93,7 @@ SC.SegmentView = SC.View.extend(SC.Control,
73
93
  supportFocusRing: NO,
74
94
 
75
95
  // TODO: isDefault, isCancel, value not really used by render delegate
76
- displayProperties: ['icon', 'displayTitle', 'value', 'displayToolTip', 'isDefault', 'isCancel', 'width', 'isFirstSegment', 'isMiddleSegment', 'isLastSegment', 'isOverflowSegment', 'index'],
96
+ displayProperties: ['icon', 'displayTitle', 'value', 'displayToolTip', 'isDefault', 'isCancel', 'width', 'isSegment','isFirstSegment', 'isMiddleSegment', 'isLastSegment', 'isOverflowSegment', 'index', 'layoutDirection'],
77
97
 
78
98
  /**
79
99
  @type String
@@ -61,7 +61,8 @@ SC.SegmentedView = SC.View.extend(SC.Control,
61
61
  @default 'tablist'
62
62
  @readOnly
63
63
  */
64
- ariaRole: 'tablist',
64
+ //ariaRole: 'tablist',
65
+ ariaRole: 'group', // workaround for <rdar://problem/10444670>; switch back to 'tablist' later with <rdar://problem/10463928> (also see segment.js)
65
66
 
66
67
  /**
67
68
  @type Array
@@ -253,6 +254,15 @@ SC.SegmentedView = SC.View.extend(SC.Control,
253
254
  */
254
255
  itemKeyEquivalentKey: null,
255
256
 
257
+ /**
258
+ If YES, overflowing items are placed into a menu and an overflow segment is
259
+ added to popup that menu.
260
+
261
+ @type Boolean
262
+ @default YES
263
+ */
264
+ shouldHandleOverflow: YES,
265
+
256
266
  /**
257
267
  The title to use for the overflow segment if it appears.
258
268
 
@@ -318,14 +328,26 @@ SC.SegmentedView = SC.View.extend(SC.Control,
318
328
  toolTip: toolTip,
319
329
  icon: icon,
320
330
  isLastSegment: YES,
321
- isOverflowSegment: YES
331
+ isOverflowSegment: YES,
332
+ layoutDirection: this.get('layoutDirection'),
333
+ isVisible: this.get('shouldHandleOverflow')
322
334
  });
335
+ this.set('overflowView', overflowView);
323
336
 
324
337
  this.appendChild(overflowView);
325
338
 
326
339
  this.itemsDidChange();
327
340
  },
328
341
 
342
+ shouldHandleOverflowDidChange: function() {
343
+ if (this.get('shouldHandleOverflow')) {
344
+ // remeasure should show/hide it as needed
345
+ this.invokeLast(this.remeasure);
346
+ } else {
347
+ this.get('overflowView').set('isVisible', NO);
348
+ }
349
+ }.observes('shouldHandleOverflow'),
350
+
329
351
  /** @private
330
352
  Called whenever the number of items changes. This method populates SegmentedView's childViews, taking
331
353
  care to re-use existing childViews if possible.
@@ -374,7 +396,8 @@ SC.SegmentedView = SC.View.extend(SC.Control,
374
396
  // We create a default SC.ButtonView-like object for each segment
375
397
  childView = segmentViewClass.create({
376
398
  controlSize: this.get('controlSize'),
377
- localize: this.get('localize')
399
+ localize: this.get('localize'),
400
+ layoutDirection: this.get('layoutDirection')
378
401
  });
379
402
 
380
403
  // Attach the child
@@ -441,7 +464,9 @@ SC.SegmentedView = SC.View.extend(SC.Control,
441
464
  }
442
465
 
443
466
  // Force a segment remeasure to check overflow
444
- this.invokeLast(this.remeasure);
467
+ if (this.get('shouldHandleOverflow')) {
468
+ this.invokeLast(this.remeasure);
469
+ }
445
470
  }.observes('*items.[]'),
446
471
 
447
472
  /** @private
@@ -462,25 +487,32 @@ SC.SegmentedView = SC.View.extend(SC.Control,
462
487
  SC.Logger.warn("Item content change was observed on item without matching segment child view.");
463
488
  }
464
489
 
465
- // Reset our measurements (which depend on width or title) and adjust visible views
466
- this.invokeLast(this.remeasure);
490
+ // Reset our measurements (which depend on width/height or title) and adjust visible views
491
+ if (this.get('shouldHandleOverflow')) {
492
+ this.invokeLast(this.remeasure);
493
+ }
467
494
  },
468
495
 
469
496
  /** @private
470
497
  Whenever the view resizes, we need to check to see if we're overflowing.
471
498
  */
472
499
  viewDidResize: function() {
473
- var visibleWidth = this.$().width();
474
-
475
- // Only overflow if we've gone below the minimum width required to fit all the segments
476
- if (this.isOverflowing || visibleWidth <= this.cachedMinimumWidth) this.adjustOverflow();
500
+ var isHorizontal = this.get('layoutDirection') === SC.LAYOUT_HORIZONTAL,
501
+ visibleDim = isHorizontal ? this.$().width() : this.$().height();
502
+
503
+ // Only overflow if we've gone below the minimum dimension required to fit all the segments
504
+ if (this.get('shouldHandleOverflow') && (this.isOverflowing || visibleDim <= this.cachedMinimumDim)) {
505
+ this.adjustOverflow();
506
+ }
477
507
  },
478
508
 
479
509
  /** @private
480
510
  Whenever visibility changes, we need to check to see if we're overflowing.
481
511
  */
482
512
  isVisibleInWindowDidChange: function() {
483
- this.invokeLast(this.remeasure);
513
+ if (this.get('shouldHandleOverflow')) {
514
+ this.invokeLast(this.remeasure);
515
+ }
484
516
  }.observes('isVisibleInWindow'),
485
517
 
486
518
  /** @private
@@ -488,6 +520,7 @@ SC.SegmentedView = SC.View.extend(SC.Control,
488
520
  segments for overflow if necessary.
489
521
  */
490
522
  remeasure: function() {
523
+ if (!this.get('shouldHandleOverflow')) { return; }
491
524
  var renderDelegate = this.get('renderDelegate'),
492
525
  childViews = this.get('childViews'),
493
526
  overflowView;
@@ -501,24 +534,28 @@ SC.SegmentedView = SC.View.extend(SC.Control,
501
534
  childViews.objectAt(i).set('isVisible', YES);
502
535
  }
503
536
 
504
- this.cachedWidths = renderDelegate.segmentWidths(this);
505
- this.cachedOverflowWidth = renderDelegate.overflowSegmentWidth(this);
537
+
538
+ this.cachedDims = this.segmentDimensions();
539
+ this.cachedOverflowDim = this.overflowSegmentDim();
506
540
 
507
541
  this.adjustOverflow();
508
542
  }
509
543
  },
510
544
 
511
545
  /** @private
512
- This method is called to adjust the segment views for overflow.
546
+ This method is called to adjust the segment views to see if we need to handle for overflow.
513
547
  */
514
548
  adjustOverflow: function() {
549
+ if (!this.get('shouldHandleOverflow')) { return; }
550
+
515
551
  var childViews = this.get('childViews'),
516
552
  childView,
517
553
  value = this.get('value'),
518
554
  overflowView = childViews.lastObject(),
519
- visibleWidth = this.$().width(), // The inner width of the div
520
- curElementsWidth = 0,
521
- widthToFit,
555
+ isHorizontal = this.get('layoutDirection') === SC.LAYOUT_HORIZONTAL,
556
+ visibleDim = isHorizontal ? this.$().width() : this.$().height(), // The inner width/height of the div
557
+ curElementsDim = 0,
558
+ dimToFit,
522
559
  length, i;
523
560
 
524
561
  // This variable is useful to optimize when we are overflowing
@@ -528,15 +565,15 @@ SC.SegmentedView = SC.View.extend(SC.Control,
528
565
  // Clear out the overflow items (these are the items not currently visible)
529
566
  this.overflowItems = [];
530
567
 
531
- length = this.cachedWidths.length;
568
+ length = this.cachedDims.length;
532
569
  for (i=0; i < length; i++) {
533
570
  childView = childViews.objectAt(i);
534
- curElementsWidth += this.cachedWidths[i];
571
+ curElementsDim += this.cachedDims[i];
535
572
 
536
573
  // check for an overflow (leave room for the overflow segment except for with the last segment)
537
- widthToFit = (i === length - 1) ? curElementsWidth : curElementsWidth + this.cachedOverflowWidth;
574
+ dimToFit = (i === length - 1) ? curElementsDim : curElementsDim + this.cachedOverflowDim;
538
575
 
539
- if (widthToFit > visibleWidth) {
576
+ if (dimToFit > visibleDim) {
540
577
  // Add the localItem to the overflowItems
541
578
  this.overflowItems.pushObject(childView.get('localItem'));
542
579
 
@@ -564,10 +601,78 @@ SC.SegmentedView = SC.View.extend(SC.Control,
564
601
  if (this.isOverflowing) overflowView.set('isVisible', YES);
565
602
  else overflowView.set('isVisible', NO);
566
603
 
567
- // Store the minimum width before overflow
568
- this.cachedMinimumWidth = curElementsWidth + this.cachedOverflowWidth;
604
+ // Store the minimum dimension (height/width) before overflow
605
+ this.cachedMinimumDim = curElementsDim + this.cachedOverflowDim;
606
+ },
607
+
608
+ /**
609
+ Return the dimensions (either heights or widths depending on the layout direction) of the DOM
610
+ elements of the segments. This will be measured by the view to determine which segments should
611
+ be overflowed.
612
+
613
+ It ignores the last segment (the overflow segment).
614
+ */
615
+ segmentDimensions: function() {
616
+ var cv = this.get('childViews'),
617
+ v, f,
618
+ dims = [],
619
+ isHorizontal = this.get('layoutDirection') === SC.LAYOUT_HORIZONTAL;
620
+
621
+ for (var i = 0, length = cv.length; i < length - 1; i++) {
622
+ v = cv[i];
623
+ f = v.get('frame');
624
+ dims[i] = isHorizontal ? f.width : f.height;
625
+ }
626
+
627
+ return dims;
569
628
  },
570
629
 
630
+ /**
631
+ Return the dimension (height or width depending on the layout direction) over the overflow segment.
632
+ */
633
+ overflowSegmentDim: function() {
634
+ var cv = this.get('childViews'),
635
+ v, f,
636
+ isHorizontal = this.get('layoutDirection') === SC.LAYOUT_HORIZONTAL;
637
+
638
+ v = cv.length && cv[cv.length - 1];
639
+ if (v) {
640
+ f = v.get('frame');
641
+ return isHorizontal ? f.width : f.height;
642
+ }
643
+
644
+ return 0;
645
+ },
646
+
647
+ /**
648
+ Return the index of the segment view that is the target of the mouse click.
649
+ */
650
+ indexForClientPosition: function(x, y) {
651
+ var cv = this.get('childViews'),
652
+ length, i,
653
+ v, rect,
654
+ point;
655
+
656
+ point = {x: x, y: y};
657
+ for (i = 0, length = cv.length; i < length; i++) {
658
+ v = cv[i];
659
+
660
+ rect = v.get('layer').getBoundingClientRect();
661
+ rect = {
662
+ x: rect.left,
663
+ y: rect.top,
664
+ width: (rect.right-rect.left),
665
+ height: (rect.bottom - rect.top)
666
+ };
667
+
668
+ // Return the index early if found
669
+ if (SC.pointInRect(point, rect)) return i;
670
+ }
671
+
672
+ // Default not found
673
+ return -1;
674
+ },
675
+
571
676
  // ..........................................................
572
677
  // RENDERING/DISPLAY SUPPORT
573
678
  //
@@ -594,11 +699,25 @@ SC.SegmentedView = SC.View.extend(SC.Control,
594
699
  event occurred.
595
700
  */
596
701
  displayItemIndexForEvent: function(evt) {
597
- var renderDelegate = this.get('renderDelegate');
598
-
702
+ var renderDelegate = this.get('renderDelegate');
703
+ var x = evt.clientX;
704
+ var y = evt.clientY;
705
+
706
+ // Accessibility workaround: <rdar://problem/10467360> WebKit sends all event coords as 0,0 for all AXPress-triggered events
707
+ if (x === 0 && y === 0) {
708
+ var el = evt.target;
709
+ if (el) {
710
+ var offset = SC.offset(el);
711
+ x = offset.x + Math.round(el.offsetWidth/2);
712
+ y = offset.y + Math.round(el.offsetHeight/2);
713
+ }
714
+ }
715
+
599
716
  if (renderDelegate && renderDelegate.indexForClientPosition) {
600
- return renderDelegate.indexForClientPosition(this, evt.clientX, evt.clientY);
717
+ return renderDelegate.indexForClientPosition(this, x, y);
601
718
  }
719
+
720
+ return this.indexForClientPosition(evt.clientX, evt.clientY);
602
721
  },
603
722
 
604
723
  /** @private */
@@ -670,7 +789,6 @@ SC.SegmentedView = SC.View.extend(SC.Control,
670
789
  if (!this.get('isEnabled')) return YES; // nothing to do
671
790
 
672
791
  index = this.displayItemIndexForEvent(evt);
673
-
674
792
  if (index >= 0) {
675
793
  childView = childViews.objectAt(index);
676
794
  childView.set('isActive', YES);
@@ -690,7 +808,6 @@ SC.SegmentedView = SC.View.extend(SC.Control,
690
808
  index;
691
809
 
692
810
  index = this.displayItemIndexForEvent(evt);
693
-
694
811
  if (this._isMouseDown && (index >= 0)) {
695
812
 
696
813
  this.triggerItemAtIndex(index);
@@ -700,9 +817,10 @@ SC.SegmentedView = SC.View.extend(SC.Control,
700
817
  activeChildView.set('isActive', NO);
701
818
  this.activeChildView = null;
702
819
 
703
- this._isMouseDown = NO;
820
+
704
821
  }
705
-
822
+
823
+ this._isMouseDown = NO;
706
824
  return YES;
707
825
  },
708
826
 
@@ -966,7 +1084,7 @@ SC.SegmentedView = SC.View.extend(SC.Control,
966
1084
  if (targetKey) {
967
1085
  target = item.get ? item.get(targetKey) : item[targetKey];
968
1086
  }
969
- if (resp) resp.sendAction(action, target, this, this.get('pane'));
1087
+ if (resp) resp.sendAction(action, target, this, this.get('pane'),value);
970
1088
  }
971
1089
 
972
1090
  if(val !== undefined && (!action || this.get('selectSegmentWhenTriggeringAction'))) {
@@ -976,7 +1094,7 @@ SC.SegmentedView = SC.View.extend(SC.Control,
976
1094
  // if an action/target is defined on self use that also
977
1095
  action =this.get('action');
978
1096
  if (action && resp) {
979
- resp.sendAction(action, this.get('target'), this, this.get('pane'));
1097
+ resp.sendAction(action, this.get('target'), this, this.get('pane'),value);
980
1098
  }
981
1099
  },
982
1100