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
@@ -15,7 +15,7 @@ sc_require('views/button');
15
15
  Clicking the SelectView button displays a menu pane with a
16
16
  list of items. The selected item will be displayed on the button.
17
17
  User has the option of enabling checkbox for the selected menu item.
18
-
18
+
19
19
  @extends SC.ButtonView
20
20
  @version 1.0
21
21
  @author Alex Iskander, Mohammed Ashik
@@ -32,6 +32,15 @@ SC.SelectView = SC.ButtonView.extend(
32
32
  return this.get('isEnabled');
33
33
  }.property('isEnabled'),
34
34
 
35
+ /**
36
+ If true, titles will be escaped to avoid scripting attacks.
37
+
38
+ @type Boolean
39
+ @default YES
40
+ */
41
+ escapeHTML: YES,
42
+ escapeHTMLBindingDefault: SC.Binding.oneWay().bool(),
43
+
35
44
  /**
36
45
  An array of items that will be form the menu you want to show.
37
46
 
@@ -80,7 +89,7 @@ SC.SelectView = SC.ButtonView.extend(
80
89
  @default null
81
90
  */
82
91
  itemIconKey: null,
83
-
92
+
84
93
  /**
85
94
  Key to use to identify separators.
86
95
 
@@ -88,7 +97,7 @@ SC.SelectView = SC.ButtonView.extend(
88
97
  @default "separator"
89
98
  */
90
99
  itemSeparatorKey: "separator",
91
-
100
+
92
101
  /**
93
102
  Key used to indicate if the item is to be enabled.
94
103
 
@@ -121,7 +130,7 @@ SC.SelectView = SC.ButtonView.extend(
121
130
 
122
131
  /**
123
132
  Menu attached to the SelectView.
124
-
133
+
125
134
  @type SC.View
126
135
  @default SC.MenuView
127
136
  */
@@ -156,7 +165,7 @@ SC.SelectView = SC.ButtonView.extend(
156
165
  value: null,
157
166
 
158
167
  /**
159
- if this property is set to 'YES', a checbox is shown next to the
168
+ if this property is set to 'YES', a checkbox is shown next to the
160
169
  selected menu item.
161
170
 
162
171
  @type Boolean
@@ -165,7 +174,7 @@ SC.SelectView = SC.ButtonView.extend(
165
174
  checkboxEnabled: YES,
166
175
 
167
176
  /**
168
- if this property is set to 'YES', a checbox is shown next to the
177
+ if this property is set to 'YES', a checkbox is shown next to the
169
178
  selected menu item.
170
179
 
171
180
  @type Boolean
@@ -173,6 +182,15 @@ SC.SelectView = SC.ButtonView.extend(
173
182
  */
174
183
  showCheckbox: YES,
175
184
 
185
+ /**
186
+ Set this to non-null to place an empty option at the top of the menu.
187
+
188
+ @property
189
+ @type String
190
+ @default null
191
+ */
192
+ emptyName: null,
193
+
176
194
  /**
177
195
  Default value of the select button.
178
196
  This will be the first item from the menu item list.
@@ -199,7 +217,7 @@ SC.SelectView = SC.ButtonView.extend(
199
217
 
200
218
  /**
201
219
  The button theme will be popup
202
-
220
+
203
221
  @type String
204
222
  @default 'popup'
205
223
  @readOnly
@@ -211,13 +229,13 @@ SC.SelectView = SC.ButtonView.extend(
211
229
  @default ['icon', 'value','controlSize','items']
212
230
  @see SC.View#displayProperties
213
231
  */
214
- displayProperties: ['icon', 'value','controlSize','items'],
232
+ displayProperties: ['icon', 'value','controlSize','items', 'escapeHTML', 'emptyName'],
215
233
 
216
234
  /**
217
235
  Prefer matrix to position the select button menu such that the
218
236
  selected item for the menu item will appear aligned to the
219
237
  the button. The value at the second index(0) changes based on the
220
- postion(index) of the menu item in the menu pane.
238
+ position(index) of the menu item in the menu pane.
221
239
 
222
240
  @type Array
223
241
  @default null
@@ -259,15 +277,15 @@ SC.SelectView = SC.ButtonView.extend(
259
277
 
260
278
  /**
261
279
  Example view used for menu items.
262
-
280
+
263
281
  @type SC.View
264
282
  @default null
265
283
  */
266
284
  exampleView: null,
267
-
285
+
268
286
  /**
269
287
  customView menu offset width
270
-
288
+
271
289
  @type Number
272
290
  @default 0
273
291
  */
@@ -289,26 +307,26 @@ SC.SelectView = SC.ButtonView.extend(
289
307
  @default 0
290
308
  */
291
309
  menuPaneHeightPadding: 0,
292
-
310
+
293
311
  /**
294
312
  The amount of space to add to the calculated width of the menu item strings to
295
313
  determine the width of the menu pane.
296
-
314
+
297
315
  @type Number
298
316
  @default 35
299
317
  */
300
318
  menuItemPadding: 35,
301
-
319
+
302
320
  /**
303
321
  @type Boolean
304
322
  @default NO
305
323
  */
306
324
  isContextMenuEnabled: NO,
307
-
325
+
308
326
  /**
309
- This is a property to enable/disable focus rings in buttons.
327
+ This is a property to enable/disable focus rings in buttons.
310
328
  For select_button, we are making it a default.
311
-
329
+
312
330
  @type Boolean
313
331
  @default YES
314
332
  @see SC.ButtonView#supportFocusRing
@@ -364,9 +382,10 @@ SC.SelectView = SC.ButtonView.extend(
364
382
  */
365
383
  render: function(context,firstTime) {
366
384
  sc_super();
367
- var layoutWidth, items, len, nameKey, iconKey, valueKey, separatorKey, showCheckbox,
368
- currentSelectedVal, shouldLocalize, isSeparator, itemList, isChecked,
369
- idx, name, icon, value, item, itemEnabled, isEnabledKey;
385
+
386
+ var escapeHTML, layoutWidth, items, len, nameKey, iconKey, valueKey, separatorKey, showCheckbox,
387
+ currentSelectedVal, shouldLocalize, isSeparator, itemList, isChecked,
388
+ idx, name, icon, value, item, itemEnabled, isEnabledKey, emptyName, isSameRecord;
370
389
 
371
390
  items = this.get('items') ;
372
391
  items = this.sortObjects(items) ;
@@ -378,7 +397,8 @@ SC.SelectView = SC.ButtonView.extend(
378
397
  valueKey = this.get('itemValueKey') ;
379
398
  separatorKey = this.get('itemSeparatorKey');
380
399
  showCheckbox = this.get('showCheckbox') ;
381
- isEnabledKey = this.get('isEnabledKey');
400
+ isEnabledKey = this.get('itemIsEnabledKey');
401
+ escapeHTML = this.get('escapeHTML');
382
402
 
383
403
  //get the current selected value
384
404
  currentSelectedVal = this.get('value') ;
@@ -395,6 +415,32 @@ SC.SelectView = SC.ButtonView.extend(
395
415
  //index for finding the first item in the list
396
416
  idx = 0 ;
397
417
 
418
+ // Add the empty name to the list if applicable
419
+ emptyName = this.get('emptyName');
420
+
421
+ if(!SC.none(emptyName)) {
422
+ emptyName = shouldLocalize ? SC.String.loc(emptyName) : emptyName;
423
+ emptyName = escapeHTML ? SC.RenderContext.escapeHTML(emptyName) : emptyName;
424
+
425
+ item = SC.Object.create({
426
+ separator: NO,
427
+ title: emptyName,
428
+ icon: null,
429
+ value: null,
430
+ isEnabled: YES,
431
+ checkbox: NO,
432
+ target: this,
433
+ action: 'displaySelectedItem'
434
+ });
435
+
436
+ if(SC.none(currentSelectedVal)) {
437
+ this.set('title', emptyName);
438
+ }
439
+
440
+ //Set the items in the itemList array
441
+ itemList.push(item);
442
+ }
443
+
398
444
  items.forEach(function(object) {
399
445
  if (object || object === 0) {
400
446
 
@@ -405,6 +451,7 @@ SC.SelectView = SC.ButtonView.extend(
405
451
 
406
452
  // localize name if specified.
407
453
  name = shouldLocalize? SC.String.loc(name) : name ;
454
+ name = escapeHTML ? SC.RenderContext.escapeHTML(name) : name;
408
455
 
409
456
  //Get the icon value
410
457
  icon = iconKey ? (object.get ?
@@ -415,10 +462,17 @@ SC.SelectView = SC.ButtonView.extend(
415
462
  value = (valueKey) ? (object.get ?
416
463
  object.get(valueKey) : object[valueKey]) : object ;
417
464
 
418
- if (!SC.none(currentSelectedVal) && !SC.none(value)){
419
- if( currentSelectedVal === value ) {
420
- this.set('title', name) ;
421
- this.set('icon', icon) ;
465
+ if (!SC.none(currentSelectedVal) && !SC.none(value)) {
466
+
467
+ // If the objects in question are records, we should just their storeKeys
468
+ isSameRecord = false;
469
+ if (SC.kindOf(currentSelectedVal, SC.Record) && SC.kindOf(value, SC.Record)) {
470
+ isSameRecord = currentSelectedVal.get('storeKey') === value.get('storeKey');
471
+ }
472
+
473
+ if (currentSelectedVal === value || isSameRecord) {
474
+ this.set('title', name);
475
+ this.set('icon', icon);
422
476
  }
423
477
  }
424
478
 
@@ -432,11 +486,11 @@ SC.SelectView = SC.ButtonView.extend(
432
486
  else {
433
487
  isChecked = NO ;
434
488
  }
435
-
489
+
436
490
  // Check if the item is enabled
437
491
  itemEnabled = (object.get ? object.get(isEnabledKey) : object[isEnabledKey]);
438
492
  if (NO !== itemEnabled) itemEnabled = YES;
439
-
493
+
440
494
  // get the separator
441
495
  isSeparator = separatorKey ? (object.get ? object.get(separatorKey) : object[separatorKey]) : NO;
442
496
 
@@ -447,7 +501,7 @@ SC.SelectView = SC.ButtonView.extend(
447
501
  this._defaultIcon = icon ;
448
502
  }
449
503
 
450
- var item = SC.Object.create({
504
+ item = SC.Object.create({
451
505
  separator: isSeparator,
452
506
  title: name,
453
507
  icon: icon,
@@ -472,9 +526,12 @@ SC.SelectView = SC.ButtonView.extend(
472
526
  this.invokeLast(function() {
473
527
  var value = this.get('value') ;
474
528
  if(SC.none(value)) {
475
- this.set('value', this._defaultVal) ;
476
- this.set('title', this._defaultTitle) ;
477
- this.set('icon', this._defaultIcon) ;
529
+ if(SC.none(emptyName)) {
530
+ this.set('value', this._defaultVal) ;
531
+ this.set('title', this._defaultTitle) ;
532
+ this.set('icon', this._defaultIcon) ;
533
+ }
534
+ else this.set('title', emptyName) ;
478
535
  }
479
536
  });
480
537
  }
@@ -493,10 +550,10 @@ SC.SelectView = SC.ButtonView.extend(
493
550
  var buttonLabel, menuWidth, scrollWidth, lastMenuWidth, offsetWidth,
494
551
  items, elementOffsetWidth, largestMenuWidth, item, element, idx,
495
552
  value, itemList, menuControlSize, menuHeightPadding, customView,
496
- menu, itemsLength, itemIdx;
497
-
553
+ menu, itemsLength, itemIdx, escapeHTML;
554
+
498
555
  buttonLabel = this.$('.sc-button-label')[0] ;
499
-
556
+
500
557
  var menuWidthOffset = SC.SelectView.MENU_WIDTH_OFFSET ;
501
558
  if(!this.get('isDefaultPosition')) {
502
559
  switch (this.get('controlSize')) {
@@ -519,7 +576,7 @@ SC.SelectView = SC.ButtonView.extend(
519
576
  }
520
577
  // Get the length of the text on the button in pixels
521
578
  menuWidth = this.get('layer').offsetWidth + menuWidthOffset ;
522
-
579
+
523
580
  // Get the length of the text on the button in pixels
524
581
  menuWidth = this.get('layer').offsetWidth ;
525
582
  scrollWidth = buttonLabel.scrollWidth ;
@@ -541,7 +598,7 @@ SC.SelectView = SC.ButtonView.extend(
541
598
  var customViewMenuOffsetWidth = this.get('customViewMenuOffsetWidth') ;
542
599
  var className = 'sc-view sc-pane sc-panel sc-palette sc-picker sc-menu select-button sc-scroll-view sc-menu-scroll-view sc-container-view menuContainer sc-button-view sc-menu-item sc-regular-size' ;
543
600
  className = customViewClassName ? (className + ' ' + customViewClassName) : className ;
544
-
601
+
545
602
  SC.prepareStringMeasurement("", className);
546
603
  for (idx = 0, itemsLength = items.length; idx < itemsLength; ++idx) {
547
604
  //getting the width of largest menu item
@@ -570,9 +627,10 @@ SC.SelectView = SC.ButtonView.extend(
570
627
  itemList = this.get('_itemList') ;
571
628
  menuControlSize = this.get('controlSize') ;
572
629
  menuHeightPadding = this.get('menuPaneHeightPadding') ;
630
+ escapeHTML = this.get('escapeHTML');
573
631
 
574
632
  // get the user defined custom view
575
- customView = this.get('exampleView') || SC.MenuItemView;
633
+ customView = this.get('exampleView') || SC.MenuItemView.extend({ escapeHTML: escapeHTML });
576
634
 
577
635
  menu = SC.MenuPane.create({
578
636
 
@@ -618,7 +676,8 @@ SC.SelectView = SC.ButtonView.extend(
618
676
  this.set('menu', menu);
619
677
 
620
678
  itemIdx = this._itemIdx;
621
- if (itemIdx && itemIdx > -1) {
679
+ if (!SC.empty(itemIdx) && itemIdx > -1) {
680
+ // if there is an item selected, make it the first responder
622
681
  customView = menu.menuItemViewForContentIndex(itemIdx);
623
682
  if (customView) { customView.becomeFirstResponder(); }
624
683
  }
@@ -632,7 +691,7 @@ SC.SelectView = SC.ButtonView.extend(
632
691
  */
633
692
  displaySelectedItem: function(menuView) {
634
693
  var currentItem = menuView.get("selectedItem");
635
-
694
+
636
695
  this.set("value", currentItem.get("value"));
637
696
  this.set("title", currentItem.get("title"));
638
697
  this.set("_itemIdx", currentItem.get("contentIndex"));
@@ -749,7 +808,7 @@ SC.SelectView = SC.ButtonView.extend(
749
808
  mouseExited: function() {
750
809
  return YES;
751
810
  },
752
-
811
+
753
812
  /**
754
813
  @private
755
814
  Handle Key event - Down arrow key
@@ -778,13 +837,13 @@ SC.SelectView = SC.ButtonView.extend(
778
837
  }
779
838
  return sc_super();
780
839
  },
781
-
840
+
782
841
  /** @private
783
842
  Override the button isSelectedDidChange function in order to not perform any action
784
843
  on selecting the select_button
785
844
  */
786
845
  _button_isSelectedDidChange: function() {
787
-
846
+
788
847
  }.observes('isSelected')
789
848
 
790
849
  }) ;
@@ -843,9 +902,9 @@ SC.SelectView.REGULAR_OFFSET_X = -17;
843
902
  /**
844
903
  @static
845
904
  @type Number
846
- @default 3
905
+ @default 1
847
906
  */
848
- SC.SelectView.REGULAR_OFFSET_Y = 3;
907
+ SC.SelectView.REGULAR_OFFSET_Y = 0;
849
908
 
850
909
  /**
851
910
  @static
@@ -153,7 +153,7 @@ SC.SelectButtonView = SC.ButtonView.extend(
153
153
  value: null,
154
154
 
155
155
  /**
156
- if this property is set to `YES`, a checbox is shown next to the
156
+ if this property is set to `YES`, a checkbox is shown next to the
157
157
  selected menu item.
158
158
 
159
159
  @type Boolean
@@ -162,7 +162,7 @@ SC.SelectButtonView = SC.ButtonView.extend(
162
162
  checkboxEnabled: YES,
163
163
 
164
164
  /**
165
- Set this property to required display positon of separator from bottom
165
+ Set this property to required display position of separator from bottom
166
166
 
167
167
  @default null
168
168
  */
@@ -204,7 +204,7 @@ SC.SelectButtonView = SC.ButtonView.extend(
204
204
  Prefer matrix to position the select button menu such that the
205
205
  selected item for the menu item will appear aligned to the
206
206
  the button. The value at the second `index(0)` changes based on the
207
- `postion(index)` of the menu item in the menu pane.
207
+ `position(index)` of the menu item in the menu pane.
208
208
 
209
209
  @type Array
210
210
  @default null
@@ -458,6 +458,7 @@ SC.SelectButtonView = SC.ButtonView.extend(
458
458
  }, this ) ;
459
459
 
460
460
  if(firstTime) {
461
+ context.attr('aria-haspopup', 'true') ;
461
462
  this.invokeLast(function() {
462
463
  var value = this.get('value') ;
463
464
  if(SC.none(value)) {
@@ -544,12 +545,12 @@ SC.SelectButtonView = SC.ButtonView.extend(
544
545
 
545
546
  var customViewClassName = this.get('customViewClassName'),
546
547
  customViewMenuOffsetWidth = this.get('customViewMenuOffsetWidth'),
547
- className = 'sc-view sc-pane sc-panel sc-palette sc-picker sc-menu select-button sc-scroll-view sc-menu-scroll-view sc-container-view menuContainer sc-button-view sc-menu-item sc-regular-size' ;
548
+ className = 'sc-view sc-pane sc-panel sc-palette sc-picker sc-menu select-button menu sc-scroll-view sc-menu-scroll-view sc-container-view sc-menu-item menu-item value sc-regular-size' ;
548
549
  className = customViewClassName ? (className + ' ' + customViewClassName) : className ;
549
550
 
550
551
  dummyMenuItemView = (this.get('customView') || SC.MenuItemView).create();
551
552
  menuItemViewEscapeHTML = dummyMenuItemView.get('escapeHTML') ;
552
- var body = document.body;
553
+ body = document.body;
553
554
  for (idx = 0, itemsLength = items.length; idx < itemsLength; ++idx) {
554
555
  //getting the width of largest menu item
555
556
  item = items.objectAt(idx) ;
@@ -659,28 +660,28 @@ SC.SelectButtonView = SC.ButtonView.extend(
659
660
  switch (this.get('controlSize')) {
660
661
  case SC.TINY_CONTROL_SIZE:
661
662
  controlSizeTuning = SC.SelectButtonView.TINY_OFFSET_Y;
662
- customMenuItemHeight = SC.SelectButtonView.TINY_OFFSET_Y;
663
- customSeparatorHeight = SC.SelectButtonView.TINY_POPUP_MENU_WIDTH_OFFSET;
663
+ customMenuItemHeight = SC.MenuPane.TINY_MENU_ITEM_HEIGHT;
664
+ customSeparatorHeight = SC.MenuPane.TINY_MENU_ITEM_SEPARATOR_HEIGHT;
664
665
  break;
665
666
  case SC.SMALL_CONTROL_SIZE:
666
667
  controlSizeTuning = SC.SelectButtonView.SMALL_OFFSET_Y;
667
- customMenuItemHeight = SC.SelectButtonView.SMALL_OFFSET_Y;
668
- customSeparatorHeight = SC.SelectButtonView.SMALL_POPUP_MENU_WIDTH_OFFSET;
668
+ customMenuItemHeight = SC.MenuPane.SMALL_MENU_ITEM_HEIGHT;
669
+ customSeparatorHeight = SC.MenuPane.SMALL_MENU_ITEM_SEPARATOR_HEIGHT;
669
670
  break;
670
671
  case SC.REGULAR_CONTROL_SIZE:
671
672
  controlSizeTuning = SC.SelectButtonView.REGULAR_OFFSET_Y;
672
- customMenuItemHeight = SC.SelectButtonView.REGULAR_OFFSET_Y;
673
- customSeparatorHeight = SC.SelectButtonView.REGULAR_POPUP_MENU_WIDTH_OFFSET;
673
+ customMenuItemHeight = SC.MenuPane.REGULAR_MENU_ITEM_HEIGHT;
674
+ customSeparatorHeight = SC.MenuPane.REGULAR_MENU_ITEM_SEPARATOR_HEIGHT;
674
675
  break;
675
676
  case SC.LARGE_CONTROL_SIZE:
676
677
  controlSizeTuning = SC.SelectButtonView.LARGE_OFFSET_Y;
677
- customMenuItemHeight = SC.SelectButtonView.LARGE_OFFSET_Y;
678
- customSeparatorHeight = SC.SelectButtonView.LARGE_POPUP_MENU_WIDTH_OFFSET;
678
+ customMenuItemHeight = SC.MenuPane.LARGE_MENU_ITEM_HEIGHT;
679
+ customSeparatorHeight = SC.MenuPane.LARGE_MENU_ITEM_SEPARATOR_HEIGHT;
679
680
  break;
680
681
  case SC.HUGE_CONTROL_SIZE:
681
682
  controlSizeTuning = SC.SelectButtonView.HUGE_OFFSET_Y;
682
- customMenuItemHeight = SC.SelectButtonView.HUGE_OFFSET_Y;
683
- customSeparatorHeight = SC.SelectButtonView.HUGE_POPUP_MENU_WIDTH_OFFSET;
683
+ customMenuItemHeight = SC.MenuPane.HUGE_MENU_ITEM_HEIGHT;
684
+ customSeparatorHeight = SC.MenuPane.HUGE_MENU_ITEM_SEPARATOR_HEIGHT;
684
685
  break;
685
686
  }
686
687
 
@@ -724,13 +725,29 @@ SC.SelectButtonView = SC.ButtonView.extend(
724
725
  this.becomeFirstResponder() ;
725
726
  this._action() ;
726
727
 
727
- // Store the current timestamp. We register the timestamp at the end of
728
- // the runloop so that the menu has been rendered, in case that operation
728
+ // Store the current timestamp. We register the timestamp after a setTimeout
729
+ // so that the menu has been rendered, in case that operation
729
730
  // takes more than a few hundred milliseconds.
730
731
 
731
732
  // One mouseUp, we'll use this value to determine how long the mouse was
732
733
  // pressed.
733
- this.invokeLast(this._recordMouseDownTimestamp);
734
+
735
+ // we need to keep track that we opened it just now in case we get the
736
+ // mouseUp before render finishes. If it is 0, then we know we have not
737
+ // waited long enough.
738
+ this._menuRenderedTimestamp = 0;
739
+
740
+ var self = this;
741
+
742
+ // setTimeout guarantees that all rendering is done. The browser will even
743
+ // have rendered by this point.
744
+ setTimeout(function() {
745
+ SC.run(function(){
746
+ // a run loop might be overkill here but what if Date.now fails?
747
+ self._menuRenderedTimestamp = Date.now();
748
+ });
749
+ }, 1);
750
+
734
751
  return YES ;
735
752
  },
736
753
 
@@ -766,6 +783,11 @@ SC.SelectButtonView = SC.ButtonView.extend(
766
783
  touch = SC.platform.touch,
767
784
  targetMenuItem;
768
785
 
786
+ // normalize the previousTimestamp: if it is 0, it might as well be now.
787
+ // 0 means that we have not even triggered the nearly-immediate saving of timestamp.
788
+ if (previousTimestamp === 0) previousTimestamp = Date.now();
789
+
790
+
769
791
  if (menu) {
770
792
  targetMenuItem = menu.getPath('rootMenu.targetMenuItem');
771
793
 
@@ -986,12 +1008,12 @@ SC.MenuPane.SMALL_MENU_ITEM_SEPARATOR_HEIGHT = 7;
986
1008
  SC.MenuPane.SMALL_MENU_HEIGHT_PADDING = 4;
987
1009
  SC.MenuPane.SMALL_SUBMENU_OFFSET_X = 2;
988
1010
 
989
- SC.MenuPane.REGULAR_MENU_ITEM_HEIGHT = 20;
1011
+ SC.MenuPane.REGULAR_MENU_ITEM_HEIGHT = 22;
990
1012
  SC.MenuPane.REGULAR_MENU_ITEM_SEPARATOR_HEIGHT = 9;
991
1013
  SC.MenuPane.REGULAR_MENU_HEIGHT_PADDING = 6;
992
1014
  SC.MenuPane.REGULAR_SUBMENU_OFFSET_X = 2;
993
1015
 
994
- SC.MenuPane.LARGE_MENU_ITEM_HEIGHT = 60;
1016
+ SC.MenuPane.LARGE_MENU_ITEM_HEIGHT = 31;
995
1017
  SC.MenuPane.LARGE_MENU_ITEM_SEPARATOR_HEIGHT = 20;
996
1018
  SC.MenuPane.LARGE_MENU_HEIGHT_PADDING = 0;
997
1019
  SC.MenuPane.LARGE_SUBMENU_OFFSET_X = 4;