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
@@ -0,0 +1,27 @@
1
+ // ==========================================================================
2
+ // Project: Test
3
+ // Copyright: @2011 My Company, Inc.
4
+ // ==========================================================================
5
+ /*globals Test */
6
+
7
+ // This is the theme that defines how your app renders.
8
+ //
9
+ // Your app is given its own theme so it is easier and less
10
+ // messy for you to override specific things just for your
11
+ // app.
12
+ //
13
+ // You don't have to create the whole theme on your own, though:
14
+ // your app's theme is based on SproutCore's Ace theme.
15
+ //
16
+ // NOTE: if you want to change the theme this one is based on, don't
17
+ // forget to change the :css_theme property in your buildfile.
18
+ Test.Theme = SC.AceTheme.create({
19
+ name: 'test'
20
+ });
21
+
22
+ // SproutCore needs to know that your app's theme exists
23
+ SC.Theme.addTheme(Test.Theme);
24
+
25
+ // Setting it as the default theme makes every pane SproutCore
26
+ // creates default to this theme unless otherwise specified.
27
+ SC.defaultTheme = 'test';
@@ -15,7 +15,7 @@ TestRunner.targetsController = SC.ArrayController.create(
15
15
  /** @scope TestRunner.targetsController.prototype */ {
16
16
 
17
17
  /**
18
- Call this method whenever you want to relaod the targets from the server.
18
+ Call this method whenever you want to reload the targets from the server.
19
19
  */
20
20
  reload: function() {
21
21
  var targets = TestRunner.store.find(CoreTools.TARGETS_QUERY);
@@ -12,7 +12,7 @@
12
12
  TestRunner.NO_TARGETS = SC.Responder.create({
13
13
 
14
14
  /**
15
- Show laoding targets view.
15
+ Show loading targets view.
16
16
  */
17
17
  didBecomeFirstResponder: function() {
18
18
  TestRunner.set('currentScene', 'noTargets');
@@ -16,7 +16,7 @@ TestRunner.READY_DETAIL = SC.Responder.create({
16
16
  nextResponder: TestRunner.READY,
17
17
 
18
18
  /**
19
- Show laoding targets view.
19
+ Show loading targets view.
20
20
  */
21
21
  didBecomeFirstResponder: function() {
22
22
  TestRunner.set('currentScene', 'testsDetail');
@@ -16,7 +16,7 @@ TestRunner.READY_EMPTY = SC.Responder.create({
16
16
  nextResponder: TestRunner.READY,
17
17
 
18
18
  /**
19
- Show laoding targets view.
19
+ Show loading targets view.
20
20
  */
21
21
  didBecomeFirstResponder: function() {
22
22
  TestRunner.set('currentScene', 'testsNone');
@@ -16,7 +16,7 @@ TestRunner.READY_LIST = SC.Responder.create({
16
16
  nextResponder: TestRunner.READY,
17
17
 
18
18
  /**
19
- Show laoding targets view.
19
+ Show loading targets view.
20
20
  */
21
21
  didBecomeFirstResponder: function() {
22
22
  TestRunner.set('currentScene', 'testsMaster');
@@ -14,7 +14,7 @@ TestRunner.READY_NO_TESTS = SC.Responder.create({
14
14
  nextResponder: TestRunner.READY,
15
15
 
16
16
  /**
17
- Show laoding targets view.
17
+ Show loading targets view.
18
18
  */
19
19
  didBecomeFirstResponder: function() {
20
20
  TestRunner.set('currentScene', 'noTests');
@@ -14,7 +14,7 @@ Welcome.targetsController = SC.ArrayController.create(
14
14
  /** @scope Welcome.targetsController.prototype */ {
15
15
 
16
16
  /**
17
- Call this method whenever you want to relaod the targets from the server.
17
+ Call this method whenever you want to reload the targets from the server.
18
18
  */
19
19
  reload: function() {
20
20
  var targets = Welcome.store.find(CoreTools.TARGETS_QUERY);
@@ -66,7 +66,7 @@ SC.Request = SC.Object.extend(SC.Copyable, SC.Freezable,
66
66
 
67
67
  You may want to set this to NO if you are making simple CORS requests
68
68
  in compatible browsers. See <a href="http://www.w3.org/TR/cors/">CORS
69
- Spec for more informatinon.</a>
69
+ Spec for more information.</a>
70
70
 
71
71
  TODO: Add unit tests for this feature
72
72
 
@@ -510,6 +510,19 @@ SC.Request.mixin(
510
510
  var req = this.create().set('address', address).set('type', 'PUT');
511
511
  if(body) { req.set('body', body) ; }
512
512
  return req ;
513
+ },
514
+
515
+ /**
516
+ Helper method for quickly setting up a PATCH request.
517
+
518
+ @param {String} address url of request
519
+ @param {String} body
520
+ @returns {SC.Request} receiver
521
+ */
522
+ patchUrl: function(address, body) {
523
+ var req = this.create().set('address', address).set('type', 'PATCH');
524
+ if(body) { req.set('body', body) ; }
525
+ return req ;
513
526
  }
514
527
 
515
528
  });
@@ -24,14 +24,14 @@ SC.Response = SC.Object.extend(
24
24
 
25
25
  /**
26
26
  Walk like a duck
27
-
27
+
28
28
  @type Boolean
29
29
  */
30
30
  isResponse: YES,
31
-
31
+
32
32
  /**
33
33
  Becomes true if there was a failure. Makes this into an error object.
34
-
34
+
35
35
  @type Boolean
36
36
  @default NO
37
37
  */
@@ -67,7 +67,7 @@ SC.Response = SC.Object.extend(
67
67
  @default null
68
68
  */
69
69
  request: null,
70
-
70
+
71
71
  /**
72
72
  The request object that originated this request series. Mostly this is
73
73
  useful if you are looking for a reference to the original request. To
@@ -83,7 +83,7 @@ SC.Response = SC.Object.extend(
83
83
  return ret ;
84
84
  }.property('request').cacheable(),
85
85
 
86
- /**
86
+ /**
87
87
  Type of request. Must be an HTTP method. Based on the request.
88
88
 
89
89
  @field
@@ -106,7 +106,7 @@ SC.Response = SC.Object.extend(
106
106
  }.property('request').cacheable(),
107
107
 
108
108
  /**
109
- If set then will attempt to automatically parse response as JSON
109
+ If set then will attempt to automatically parse response as JSON
110
110
  regardless of headers.
111
111
 
112
112
  @field
@@ -120,7 +120,7 @@ SC.Response = SC.Object.extend(
120
120
 
121
121
  /**
122
122
  If set, then will attempt to automatically parse response as XML
123
- regarldess of headers.
123
+ regardless of headers.
124
124
 
125
125
  @field
126
126
  @type Boolean
@@ -212,7 +212,7 @@ SC.Response = SC.Object.extend(
212
212
  @default null
213
213
  */
214
214
  timedOut: null,
215
-
215
+
216
216
  /**
217
217
  The timer tracking the timeout
218
218
 
@@ -224,7 +224,7 @@ SC.Response = SC.Object.extend(
224
224
 
225
225
  // ..........................................................
226
226
  // METHODS
227
- //
227
+ //
228
228
 
229
229
  /**
230
230
  Called by the request manager when its time to actually run. This will
@@ -241,7 +241,7 @@ SC.Response = SC.Object.extend(
241
241
  req.freeze();
242
242
 
243
243
  // if the source did not cancel the request, then invoke the transport
244
- // to actually trigger the request. This might receive a response
244
+ // to actually trigger the request. This might receive a response
245
245
  // immediately if it is synchronous.
246
246
  if (!this.get('isCancelled')) { this.invokeTransport(); }
247
247
 
@@ -410,10 +410,10 @@ SC.Response = SC.Object.extend(
410
410
  handled = this._notifyListeners(listeners, status);
411
411
  if (!handled && baseStat !== status) { handled = this._notifyListeners(listeners, baseStat); }
412
412
  if (!handled && status !== 0) { handled = this._notifyListeners(listeners, 0); }
413
-
413
+
414
414
  return this ;
415
415
  },
416
-
416
+
417
417
  /**
418
418
  String representation of the response object
419
419
 
@@ -513,7 +513,7 @@ SC.XHRResponse = SC.Response.extend(
513
513
  async = !!this.getPath('request.isAsynchronous');
514
514
 
515
515
  if (async) {
516
- if (!SC.browser.msie && !SC.browser.opera) {
516
+ if (!SC.browser.isIE && !SC.browser.isOpera) {
517
517
  SC.Event.add(rawRequest, 'readystatechange', this,
518
518
  this.finishRequest, rawRequest);
519
519
  } else {
@@ -609,12 +609,12 @@ SC.XHRResponse = SC.Response.extend(
609
609
  this.set('errorObject', error);
610
610
  }
611
611
 
612
- // set the status - this will trigger changes on relatedp properties
612
+ // set the status - this will trigger changes on related properties
613
613
  this.set('status', status);
614
614
  }, this);
615
615
 
616
616
  // Avoid memory leaks
617
- if (!SC.browser.msie && !SC.browser.opera) {
617
+ if (!SC.browser.isIE && !SC.browser.isOpera) {
618
618
  SC.Event.remove(rawRequest, 'readystatechange', this, this.finishRequest);
619
619
  } else {
620
620
  rawRequest.onreadystatechange = null;
@@ -223,7 +223,7 @@ test("Timeouts - SC.Request didReceive callback", function() {
223
223
  ok(elapsed >= 10,
224
224
  'timeout must not fire earlier than 10msec - actual %@'.fmt(elapsed));
225
225
  } else {
226
- // We received a response from thes server, which should never happen
226
+ // We received a response from the server, which should never happen
227
227
  ok(false, 'timeout did not fire before response was received. should have fired after 10msec. response time: %@msec'.fmt(Date.now() - now));
228
228
  }
229
229
  });
@@ -7,7 +7,8 @@
7
7
  // ==========================================================================
8
8
  /*globals */
9
9
 
10
- /** @namespace
10
+ /** @deprecated
11
+ @namespace
11
12
  A simple mixin called Animatable is provided. What does it do?
12
13
  It makes CSS transitions for you, and if they aren't available,
13
14
  implements them in JavaScript.
@@ -19,7 +20,7 @@
19
20
  - display, in a way. All animating display does is delay setting display:none
20
21
  until <em>after</em> the transition duration has passed. This allows you
21
22
  to set display:none after fading out. If mixing with CSS transitions, you will
22
- need to set the delay a tad longer to accomodate any delays in beginning the
23
+ need to set the delay a tad longer to accommodate any delays in beginning the
23
24
  transition.
24
25
 
25
26
  ## Example Usage:
@@ -32,6 +33,8 @@
32
33
  }
33
34
  })
34
35
  */
36
+ SC.warn("SC.Animatable is deprecated and will be removed in the next release. Animation can be achieved by using the .animate method on SC.View.");
37
+
35
38
  SC.Animatable = {
36
39
  /** @scope SC.Animatable.prototype */
37
40
 
@@ -255,7 +258,7 @@ SC.Animatable = {
255
258
  var propertyName = evt.originalEvent.propertyName,
256
259
  callback = this._transitionCallbacks[propertyName];
257
260
 
258
- // only callback is animation is not disabled; assume if anim was
261
+ // only callback is animation is not disabled; assume if anim was
259
262
  // disabled we already invoked the callback..
260
263
  if(callback && this._disableAnimation<=0) {
261
264
  SC.Animatable.runCallback(callback);
@@ -754,7 +757,7 @@ SC.Animatable = {
754
757
  },
755
758
 
756
759
  /**
757
- Overriden to support animation.
760
+ Overridden to support animation.
758
761
 
759
762
  Works by copying the styles to the object's "style" property.
760
763
  */
@@ -1079,7 +1082,7 @@ SC.mixin(SC.Animatable, {
1079
1082
  _ticks: 0,
1080
1083
  _timer_start_time: null,
1081
1084
 
1082
- // the global tiemr interval
1085
+ // the global timer interval
1083
1086
  interval: 10,
1084
1087
 
1085
1088
  // the current time (a placeholder, really)
@@ -7,189 +7,403 @@
7
7
 
8
8
  window.SC = window.SC || { MODULE_INFO: {}, LAZY_INSTANTIATION: {} };
9
9
 
10
- SC._detectBrowser = function(userAgent, language) {
11
- var version, webkitVersion, browser = {};
12
10
 
11
+ /**
12
+ The list of browsers that are automatically identified.
13
+
14
+ @static
15
+ @constant
16
+ */
17
+ SC.BROWSER = {
18
+ android: 'android',
19
+ blackberry: 'blackberry',
20
+ chrome: 'chrome',
21
+ firefox: 'firefox',
22
+ ie: 'ie',
23
+ opera: 'opera',
24
+ safari: 'safari',
25
+ unknown: 'unknown'
26
+ };
27
+
28
+ /**
29
+ The list of devices that are automatically identified.
30
+
31
+ @static
32
+ @constant
33
+ */
34
+ SC.DEVICE = {
35
+ android: 'android',
36
+ blackberry: 'blackberry',
37
+ desktop: 'desktop',
38
+ ipad: 'ipad',
39
+ iphone: 'iphone',
40
+ ipod: 'ipod',
41
+ mobile: 'mobile'
42
+ };
43
+
44
+ /**
45
+ The list of browser engines that are automatically identified.
46
+
47
+ @static
48
+ @constant
49
+ */
50
+ SC.ENGINE = {
51
+ gecko: 'gecko',
52
+ opera: 'opera',
53
+ presto: 'presto',
54
+ trident: 'trident',
55
+ webkit: 'webkit'
56
+ };
57
+
58
+ /**
59
+ The list of operating systems that are automatically identified.
60
+
61
+ @static
62
+ @constant
63
+ */
64
+ SC.OS = {
65
+ android: 'android',
66
+ blackberry: 'blackberry',
67
+ ios: 'ios',
68
+ linux: 'linux',
69
+ mac: 'mac',
70
+ win: 'windows'
71
+ };
72
+
73
+
74
+ /**
75
+ Detects browser properties based on the given userAgent and language.
76
+
77
+ @private
78
+ */
79
+ SC.detectBrowser = function(userAgent, language) {
80
+ var browser = {},
81
+ device,
82
+ engineAndVersion,
83
+ isIOSDevice,
84
+ conExp = '(?:[\\/:\\::\\s:;])', // Match the connecting character
85
+ numExp = '(\\S+[^\\s:;:\\)]|)', // Match the "number"
86
+ nameAndVersion,
87
+ osAndVersion,
88
+ override;
89
+
90
+ // Use the current values if none are provided.
13
91
  userAgent = (userAgent || navigator.userAgent).toLowerCase();
14
92
  language = language || navigator.language || navigator.browserLanguage;
15
93
 
16
- // Gibberish at the end is to determine when the browser version is done
17
- version = browser.version = (userAgent.match( /.*(?:rv|chrome|webkit|opera|ie)[\/: ](.+?)([ \);]|$)/ ) || [])[1];
18
- webkitVersion = (userAgent.match( /webkit\/(.+?) / ) || [])[1];
94
+ // Calculations to determine the device. See SC.DEVICE.
95
+ device =
96
+ userAgent.match( new RegExp('(android|ipad|iphone|ipod|blackberry)') ) ||
97
+ userAgent.match( new RegExp('(mobile)') ) ||
98
+ ['', SC.DEVICE.desktop];
99
+
100
+ /**
101
+ @name SC.browser.device
102
+ @type {SC.DEVICE}
103
+ */
104
+ browser.device = device[1];
105
+
106
+
107
+ // It simplifies further matching by recognizing this group of devices.
108
+ isIOSDevice =
109
+ browser.device === SC.DEVICE.ipad ||
110
+ browser.device === SC.DEVICE.iphone ||
111
+ browser.device === SC.DEVICE.ipod;
112
+
113
+
114
+ // Calculations to determine the name and version. See SC.BROWSER.
115
+
116
+ nameAndVersion =
117
+ // Match the specific names first, avoiding commonly spoofed browsers.
118
+ userAgent.match( new RegExp('(opera|chrome|firefox|android|blackberry)' + conExp + numExp) ) ||
119
+ userAgent.match( new RegExp('(ie|safari)' + conExp + numExp) ) ||
120
+ ['', SC.BROWSER.unknown, '0'];
121
+
122
+ // If the device is an iOS device, use SC.BROWSER.safari for browser.name.
123
+ if (isIOSDevice) { nameAndVersion[1] = SC.BROWSER.safari; }
124
+
125
+ // If a `Version` number is found, use that over the `Name` number
126
+ override = userAgent.match( new RegExp('(version)' + conExp + numExp) );
127
+ if (override) { nameAndVersion[2] = override[2]; }
128
+ // If there is no `Version` in Safari, don't use the Safari number since it is
129
+ // the Webkit number.
130
+ else if (nameAndVersion[1] === SC.BROWSER.safari) { nameAndVersion[2] = '0'; }
131
+
132
+
133
+ /**
134
+ @name SC.browser.name
135
+ @type {SC.BROWSER}
136
+ */
137
+ browser.name = nameAndVersion[1];
138
+
139
+ /**
140
+ @name SC.browser.version
141
+ @type String
142
+ */
143
+ browser.version = nameAndVersion[2];
144
+
145
+
146
+ // Calculations to determine the engine and version. See SC.ENGINE.
147
+ engineAndVersion =
148
+ // Match the specific engines first, avoiding commonly spoofed browsers.
149
+ userAgent.match( new RegExp('(presto)' + conExp + numExp) ) ||
150
+ userAgent.match( new RegExp('(opera|trident|webkit|gecko)' + conExp + numExp) ) ||
151
+ ['', SC.BROWSER.unknown, '0'];
152
+
153
+ // If the browser is SC.BROWSER.ie, use SC.ENGINE.trident.
154
+ override = browser.name === SC.BROWSER.ie ? SC.ENGINE.trident : false;
155
+ if (override) { engineAndVersion[1] = override; }
156
+
157
+ // If the engineVersion is unknown and the browser is SC.BROWSER.ie, use
158
+ // browser.version for browser.engineVersion.
159
+ override = browser.name === SC.BROWSER.ie && engineAndVersion[2] === '0';
160
+ if (override) { engineAndVersion[2] = browser.version; }
161
+
162
+ // If a `rv` number is found, use that over the engine number.
163
+ override = userAgent.match( new RegExp('(rv)' + conExp + numExp) );
164
+ if (override) { engineAndVersion[2] = override[2]; }
165
+
166
+
167
+ /**
168
+ @name SC.browser.engine
169
+ @type {SC.ENGINE}
170
+ @type {SC.BROWSER.unknown}
171
+ */
172
+ browser.engine = engineAndVersion[1];
173
+
174
+ /**
175
+ @name SC.browser.engineVersion
176
+ @type String
177
+ */
178
+ browser.engineVersion = engineAndVersion[2];
179
+
180
+
181
+ // If we don't know the name of the browser, use the name of the engine.
182
+ if (browser.name === SC.BROWSER.unknown) { browser.name = browser.engine; }
183
+
184
+ // Calculations to determine the os and version. See SC.OS.
185
+ osAndVersion =
186
+ // Match the specific names first, avoiding commonly spoofed os's.
187
+ userAgent.match( new RegExp('(blackberry)') ) ||
188
+ userAgent.match( new RegExp('(android|iphone(?: os)|windows(?: nt))' + conExp + numExp) ) ||
189
+ userAgent.match( new RegExp('(os|mac(?: os)(?: x))' + conExp + numExp) ) ||
190
+ userAgent.match( new RegExp('(linux)') ) ||
191
+ [null, SC.BROWSER.unknown, '0'];
192
+
193
+ // Normalize the os name.
194
+ if (isIOSDevice) { osAndVersion[1] = SC.OS.ios; }
195
+ else if (osAndVersion[1] === 'mac os x' || osAndVersion[1] === 'mac os') { osAndVersion[1] = SC.OS.mac; }
196
+ else if (osAndVersion[1] === 'windows nt') { osAndVersion[1] = SC.OS.windows; }
197
+
198
+ // Normalize the os version.
199
+ osAndVersion[2] = osAndVersion[2] ? osAndVersion[2].replace(/_/g, '.') : '0';
200
+
19
201
 
20
202
  /**
203
+ @name SC.browser.os
204
+ @type {SC.OS}
205
+ @type {SC.BROWSER.unknown}
206
+ */
207
+ browser.os = osAndVersion[1];
208
+
209
+ /**
210
+ @name SC.browser.osVersion
211
+ @type String
212
+ */
213
+ browser.osVersion = osAndVersion[2];
214
+
215
+
216
+ // The following long list of properties have all been deprecated. While they
217
+ // are a bit less verbose then the above constants, they lack standardization
218
+ // and can be prone to failure. Rather than continuing to expand this list
219
+ // with more and more one-off comparisons, which often muddle the line between
220
+ // the browser, the engine, the os and the device, it seems more practical to
221
+ // only maintain the 7 identifiable properties listed above: device, name,
222
+ // version, os, osVersion, engine and engineVersion.
223
+
224
+ /** @deprecated Since version 1.7. Use browser.os === SC.OS.windows.
21
225
  @name SC.browser.isWindows
22
226
  @type Boolean
23
227
  */
24
- browser.windows = browser.isWindows = !!/windows/.test(userAgent);
228
+ browser.windows = browser.isWindows = browser.os === SC.OS.windows;
25
229
 
26
- /**
230
+ /** @deprecated Since version 1.7. Use browser.os === SC.OS.mac.
27
231
  @name SC.browser.isMac
28
232
  @type Boolean
29
233
  */
30
- browser.mac = browser.isMac = !!/macintosh/.test(userAgent) || (/mac os x/.test(userAgent) && !/like mac os x/.test(userAgent));
234
+ browser.mac = browser.isMac = browser.os === SC.OS.mac;
31
235
 
32
- /**
236
+ /** @deprecated Since version 1.7. Use browser.os === SC.OS.mac && browser.compare(browser.osVersion, '10.7') == 0
237
+ @name SC.browser.isLion
238
+ @type Boolean
239
+ */
240
+ browser.lion = browser.isLion = !!(/mac os x 10_7/.test(userAgent) && !/like mac os x 10_7/.test(userAgent));
241
+
242
+ /** @deprecated Since version 1.7. Use browser.device === SC.DEVICE.iphone.
33
243
  @name SC.browser.isiPhone
34
244
  @type Boolean
35
245
  */
36
- browser.iPhone = browser.isiPhone = !!/iphone/.test(userAgent);
246
+ browser.iPhone = browser.isiPhone = browser.device === SC.DEVICE.iphone;
37
247
 
38
- /**
248
+ /** @deprecated Since version 1.7. Use browser.device === SC.DEVICE.ipod.
39
249
  @name SC.browser.isiPod
40
250
  @type Boolean
41
251
  */
42
- browser.iPod = browser.isiPod = !!/ipod/.test(userAgent);
252
+ browser.iPod = browser.isiPod = browser.device === SC.DEVICE.ipod;
43
253
 
44
- /**
254
+ /** @deprecated Since version 1.7. Use browser.device === SC.DEVICE.ipad.
45
255
  @name SC.browser.isiPad
46
256
  @type Boolean
47
257
  */
48
- browser.iPad = browser.isiPad = !!/ipad/.test(userAgent);
258
+ browser.iPad = browser.isiPad = browser.device === SC.DEVICE.ipad;
49
259
 
50
- /**
260
+ /** @deprecated Since version 1.7. Use browser.os === SC.OS.ios.
51
261
  @name SC.browser.isiOS
52
262
  @type Boolean
53
263
  */
54
- browser.iOS = browser.isiOS = browser.iPhone || browser.iPod || browser.iPad;
264
+ browser.iOS = browser.isiOS = browser.os === SC.OS.ios;
55
265
 
56
- /**
266
+ /** @deprecated Since version 1.7. Use browser.os === SC.OS.android or browser.name === SC.BROWSER.android or browser.device === SC.DEVICE.android.
57
267
  @name SC.browser.isAndroid
58
268
  @type Boolean
59
269
  */
60
- browser.android = browser.isAndroid = !!/android/.test(userAgent);
270
+ browser.android = browser.isAndroid = browser.os === SC.OS.android;
61
271
 
62
- /**
272
+ /** @deprecated Since version 1.7. Use browser.version or browser.engineVersion.
63
273
  @name SC.browser.opera
64
274
  @type String
65
275
  */
66
- browser.opera = /opera/.test(userAgent) ? version : 0;
276
+ browser.opera = browser.name === SC.BROWSER.opera ? browser.version : '0';
67
277
 
68
- /**
278
+ /** @deprecated Since version 1.7. Use browser.name === SC.BROWSER.opera.
69
279
  @name SC.browser.isOpera
70
280
  @type Boolean
71
281
  */
72
- browser.isOpera = !!browser.opera;
282
+ browser.isOpera = browser.name === SC.BROWSER.opera;
73
283
 
74
- /**
284
+ /** @deprecated Since version 1.7. Use browser.version or browser.engineVersion.
75
285
  @name SC.browser.msie
76
286
  @type String
77
287
  */
78
- browser.msie = /msie/.test(userAgent) && !browser.opera ? version : 0;
288
+ browser.msie = browser.name === SC.BROWSER.ie ? browser.version : '0';
79
289
 
80
- /**
290
+ /** @deprecated Since version 1.7. Use browser.engine === SC.ENGINE.trident.
81
291
  @name SC.browser.isIE
82
292
  @type Boolean
83
293
  */
84
- browser.isIE = !!browser.msie;
294
+ browser.isIE = browser.engine === SC.ENGINE.trident;
85
295
 
86
- /**
296
+ /** @deprecated Since version 1.7. Use browser.compare(browser.version, '8') <= 0.
87
297
  @name SC.browser.isIE8OrLower
88
298
  @type Boolean
89
299
  */
90
- browser.isIE8OrLower = !!(browser.msie && parseInt(browser.msie, 10) <= 8);
300
+ browser.isIE8OrLower = browser.name === SC.BROWSER.ie && browser.version <= 8;
91
301
 
92
- /**
302
+ /** @deprecated Since version 1.7. Use browser.version or browser.engineVersion.
93
303
  @name SC.browser.mozilla
94
304
  @type String
95
305
  */
96
- browser.mozilla = /mozilla/.test(userAgent) && !/(compatible|webkit|msie)/.test(userAgent) ? version : 0;
306
+ browser.mozilla = browser.engine === SC.ENGINE.gecko ? browser.version : '0';
97
307
 
98
- /**
308
+ /** @deprecated Since version 1.7. Use browser.name === SC.BROWSER.firefox or browser.engine === SC.ENGINE.gecko.
99
309
  @name SC.browser.isMozilla
100
310
  @type Boolean
101
311
  */
102
- browser.isMozilla = !!browser.mozilla;
312
+ browser.isMozilla = browser.engine === SC.ENGINE.gecko;
103
313
 
104
- /**
314
+ /** @deprecated Since version 1.7. Use browser.engineVersion.
105
315
  @name SC.browser.webkit
106
316
  @type String
107
317
  */
108
- browser.webkit = /webkit/.test(userAgent) ? webkitVersion : 0;
318
+ browser.webkit = browser.engine === SC.ENGINE.webkit ? browser.engineVersion : '0';
109
319
 
110
- /**
320
+ /** @deprecated Since version 1.7. Use browser.engine === SC.ENGINE.webkit.
111
321
  @name SC.browser.isWebkit
112
322
  @type Boolean
113
323
  */
114
- browser.isWebkit = !!browser.webkit;
324
+ browser.isWebkit = browser.engine === SC.ENGINE.webkit;
115
325
 
116
- /**
326
+ /** @deprecated Since version 1.7. Use browser.version.
117
327
  @name SC.browser.chrome
118
328
  @type String
119
329
  */
120
- browser.chrome = /chrome/.test(userAgent) ? version: 0;
330
+ browser.chrome = browser.name === SC.BROWSER.chrome ? browser.version : '0';
121
331
 
122
- /**
332
+ /** @deprecated Since version 1.7. Use browser.name === SC.BROWSER.chrome.
123
333
  @name SC.browser.isChrome
124
334
  @type Boolean
125
335
  */
126
- browser.isChrome = !!browser.chrome;
336
+ browser.isChrome = browser.name === SC.BROWSER.chrome;
127
337
 
128
- /**
338
+ /** @deprecated Since version 1.7. Use browser.version.
129
339
  @name SC.browser.mobileSafari
130
340
  @type String
131
341
  */
132
- browser.mobileSafari = /apple.*mobile/.test(userAgent) && browser.iOS ? webkitVersion : 0;
342
+ browser.mobileSafari = browser.os === SC.OS.ios ? browser.version : '0';
133
343
 
134
- /**
344
+ /** @deprecated Since version 1.7. Use browser.name === SC.BROWSER.safari && browser.os === SC.OS.ios
135
345
  @name SC.browser.isMobileSafari
136
346
  @type Boolean
137
347
  */
138
- browser.isMobileSafari = !!browser.mobileSafari;
348
+ browser.isMobileSafari = browser.name === SC.BROWSER.safari && browser.os === SC.OS.ios;
139
349
 
140
- /**
350
+ /** @deprecated Since version 1.7. Use browser.version.
141
351
  @name SC.browser.iPadSafari
142
352
  @type String
143
353
  */
144
- browser.iPadSafari = browser.iPad && browser.isMobileSafari ? webkitVersion : 0;
354
+ browser.iPadSafari = browser.device === SC.DEVICE.ipad && browser.name === SC.BROWSER.safari ?
355
+ browser.version : 0;
145
356
 
146
- /**
357
+ /** @deprecated Since version 1.7. Use browser.device === SC.DEVICE.ipad && browser.name === SC.BROWSER.safari
147
358
  @name SC.browser.isiPadSafari
148
359
  @type Boolean
149
360
  */
150
- browser.isiPadSafari = !!browser.iPadSafari;
361
+ browser.isiPadSafari = browser.device === SC.DEVICE.ipad && browser.name === SC.BROWSER.safari;
151
362
 
152
- /**
363
+ /** @deprecated Since version 1.7. Use browser.version.
153
364
  @name SC.browser.iPhoneSafari
154
365
  @type String
155
366
  */
156
- browser.iPhoneSafari = browser.iPhone && browser.isMobileSafari ? webkitVersion : 0;
367
+ browser.iPhoneSafari = browser.device === SC.DEVICE.iphone && browser.name === SC.BROWSER.safari ?
368
+ browser.version : 0;
157
369
 
158
- /**
370
+ /** @deprecated Since version 1.7. Use browser.device === SC.DEVICE.iphone && browser.name === SC.BROWSER.safari
159
371
  @name SC.browser.isiPhoneSafari
160
372
  @type Boolean
161
373
  */
162
- browser.isiPhoneSafari = !!browser.iphoneSafari;
374
+ browser.isiPhoneSafari = browser.device === SC.DEVICE.iphone && browser.name === SC.BROWSER.safari;
163
375
 
164
- /**
376
+ /** @deprecated Since version 1.7. Use browser.version.
165
377
  @name SC.browser.iPodSafari
166
378
  @type String
167
379
  */
168
- browser.iPodSafari = browser.iPod && browser.isMobileSafari ? webkitVersion : 0;
380
+ browser.iPodSafari = browser.device === SC.DEVICE.ipod && browser.name === SC.BROWSER.safari ?
381
+ browser.version : 0;
169
382
 
170
- /**
383
+ /** @deprecated Since version 1.7. Use browser.device === SC.DEVICE.ipod && browser.name === SC.BROWSER.safari
171
384
  @name SC.browser.isiPodSafari
172
385
  @type Boolean
173
386
  */
174
- browser.isiPodSafari = !!browser.iPodSafari;
387
+ browser.isiPodSafari = browser.device === SC.DEVICE.ipod && browser.name === SC.BROWSER.safari;
175
388
 
176
- /**
389
+ /** @deprecated Since version 1.7. Use SC.platform.standalone.
177
390
  @name SC.browser.isiOSHomeScreen
178
391
  @type Boolean
179
392
  */
180
- browser.isiOSHomeScreen = browser.isMobileSafari && !/apple.*mobile.*safari/.test(userAgent);
393
+ browser.isiOSHomeScreen = browser.isMobileSafari && !(/apple.*mobile.*safari/.test(userAgent));
181
394
 
182
- /**
395
+ /** @deprecated Since version 1.7. Use browser.version.
183
396
  @name SC.browser.safari
184
397
  @type String
185
398
  */
186
- browser.safari = browser.webkit && !browser.chrome && !browser.iOS && !browser.android ? webkitVersion : 0;
399
+ browser.safari = browser.name === SC.BROWSER.safari && browser.os === SC.OS.mac ?
400
+ browser.version : 0;
187
401
 
188
- /**
402
+ /** @deprecated Since version 1.7. Use browser.name === SC.BROWSER.safari && browser.os === SC.OS.mac.
189
403
  @name SC.browser.isSafari
190
404
  @type Boolean
191
405
  */
192
- browser.isSafari = !!browser.safari;
406
+ browser.isSafari = browser.name === SC.BROWSER.safari && browser.os === SC.OS.mac;
193
407
 
194
408
  /**
195
409
  @name SC.browser.language
@@ -198,6 +412,12 @@ SC._detectBrowser = function(userAgent, language) {
198
412
  browser.language = language.split('-', 1)[0];
199
413
 
200
414
  /**
415
+ @name SC.browser.countryCode
416
+ @type String
417
+ */
418
+ browser.countryCode = language.split('-')[1] ? language.split('-')[1].toLowerCase() : undefined;
419
+
420
+ /** @deprecated Since version 1.7. Use browser.name. See SC.BROWSER for possible values.
201
421
  Possible values:
202
422
 
203
423
  - 'msie'
@@ -212,20 +432,32 @@ SC._detectBrowser = function(userAgent, language) {
212
432
  @type String
213
433
  @default 'unknown'
214
434
  */
215
- browser.current = browser.msie ? 'msie' : browser.mozilla ? 'mozilla' : browser.chrome ? 'chrome' : browser.safari ? 'safari' : browser.opera ? 'opera' : browser.mobileSafari ? 'mobile-safari' : browser.android ? 'android' : 'unknown';
435
+ browser.current = browser.name;
436
+
216
437
  return browser;
217
438
  };
218
439
 
219
440
 
220
441
  /** @class
221
442
 
222
- Contains information about the browser environment that SproutCore
223
- is running in. String properties, such as `SC.browser.webkit` or
224
- `SC.browser.msie`, will have a value that represents the browser build
225
- number if that browser is being used. Otherwise, they will have a
226
- falsey value. For convenience, Boolean counterparts for all of the
227
- versioned properties are provided.
443
+ This object contains information about the browser environment SproutCore is
444
+ running in. This includes the following properties:
445
+
446
+ - browser.device ex. SC.DEVICE.ipad
447
+ - browser.name ex. SC.BROWSER.chrome
448
+ - browser.version ex. '16.0.2.34'
449
+ - browser.os ex. SC.OS.mac
450
+ - browser.osVersion ex. '10.6'
451
+ - browser.engine ex. SC.ENGINE.webkit
452
+ - browser.engineVersion ex. '533.29'
453
+
454
+ Note: User agent sniffing does not provide guaranteed results and spoofing may
455
+ affect the accuracy. Therefore, as a general rule, it is much better
456
+ to rely on the browser's verified capabilities in SC.platform.
457
+
458
+ Based on the unit test samples, the most stable browser properties appear to
459
+ be `engine` and `engineVersion`.
228
460
 
229
461
  @since SproutCore 1.0
230
462
  */
231
- SC.browser = SC._detectBrowser();
463
+ SC.browser = SC.detectBrowser();