sproutit-sproutcore 1.0.0.20090416161445 → 1.0.0.20090720093355

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 (754) hide show
  1. data/Buildfile +4 -2
  2. data/frameworks/sproutcore/Buildfile +3 -2
  3. data/frameworks/sproutcore/README +2 -1
  4. data/frameworks/sproutcore/apps/docs/core.js +27 -0
  5. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/QuickLook/Preview.pdf +0 -0
  6. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/QuickLook/Thumbnail.tiff +0 -0
  7. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/data.plist +14378 -0
  8. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image10.png +0 -0
  9. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image11.png +0 -0
  10. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image13.png +0 -0
  11. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image14.png +0 -0
  12. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image8.png +0 -0
  13. data/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image9.tiff +0 -0
  14. data/frameworks/sproutcore/apps/docs/english.lproj/loading.rhtml +9 -0
  15. data/frameworks/sproutcore/apps/docs/english.lproj/main_page.js +22 -0
  16. data/frameworks/sproutcore/apps/{sc_jsdoc → docs}/english.lproj/strings.js +7 -7
  17. data/frameworks/sproutcore/apps/docs/main.js +30 -0
  18. data/frameworks/sproutcore/apps/tests/controllers/detail.js +16 -0
  19. data/frameworks/sproutcore/apps/tests/controllers/source.js +29 -0
  20. data/frameworks/sproutcore/apps/tests/controllers/target.js +26 -0
  21. data/frameworks/sproutcore/apps/tests/controllers/targets.js +65 -26
  22. data/frameworks/sproutcore/apps/tests/controllers/tests.js +14 -19
  23. data/frameworks/sproutcore/apps/tests/core.js +114 -16
  24. data/frameworks/sproutcore/apps/tests/data_source.js +96 -0
  25. data/frameworks/sproutcore/apps/tests/english.lproj/main_page.css +22 -2
  26. data/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +168 -22
  27. data/frameworks/sproutcore/apps/tests/english.lproj/strings.js +14 -5
  28. data/frameworks/sproutcore/apps/tests/fixtures/target.js +81 -37
  29. data/frameworks/sproutcore/apps/tests/fixtures/test.js +38 -37
  30. data/frameworks/sproutcore/apps/tests/main.js +9 -20
  31. data/frameworks/sproutcore/apps/tests/models/target.js +74 -31
  32. data/frameworks/sproutcore/apps/tests/models/test.js +30 -2
  33. data/frameworks/sproutcore/{frameworks/desktop/mixins/collection_item.js → apps/tests/states/no_targets.js} +16 -12
  34. data/frameworks/sproutcore/apps/tests/states/ready.js +56 -0
  35. data/frameworks/sproutcore/apps/tests/states/ready_detail.js +41 -0
  36. data/frameworks/sproutcore/apps/tests/states/ready_empty.js +48 -0
  37. data/frameworks/sproutcore/apps/tests/states/ready_list.js +41 -0
  38. data/frameworks/sproutcore/apps/tests/states/ready_loading.js +44 -0
  39. data/frameworks/sproutcore/apps/tests/states/ready_no_tests.js +31 -0
  40. data/frameworks/sproutcore/apps/tests/states/start.js +39 -0
  41. data/frameworks/sproutcore/apps/tests/tests/controllers/{test.js → detail.js} +3 -3
  42. data/frameworks/sproutcore/apps/tests/tests/controllers/source.js +15 -0
  43. data/frameworks/sproutcore/apps/tests/tests/controllers/target.js +15 -0
  44. data/frameworks/sproutcore/apps/tests/tests/controllers/targets.js +3 -3
  45. data/frameworks/sproutcore/apps/tests/tests/views/offset_checkbox.js +15 -0
  46. data/frameworks/sproutcore/apps/tests/views/offset_checkbox.js +26 -0
  47. data/frameworks/sproutcore/design/CollectionView State Charts.graffle +4848 -0
  48. data/frameworks/sproutcore/design/Design Charts.graffle +8788 -6375
  49. data/frameworks/sproutcore/design/SproutCore Design Template.graffle/QuickLook/Preview.pdf +0 -0
  50. data/frameworks/sproutcore/design/SproutCore Design Template.graffle/QuickLook/Thumbnail.tiff +0 -0
  51. data/frameworks/sproutcore/design/SproutCore Design Template.graffle/data.plist +1452 -0
  52. data/frameworks/sproutcore/design/SproutCore Design Template.graffle/image8.png +0 -0
  53. data/frameworks/sproutcore/design/TestRunner Design.graffle/QuickLook/Preview.pdf +0 -0
  54. data/frameworks/sproutcore/design/TestRunner Design.graffle/QuickLook/Thumbnail.tiff +0 -0
  55. data/frameworks/sproutcore/design/TestRunner Design.graffle/data.plist +24187 -0
  56. data/frameworks/sproutcore/design/TestRunner Design.graffle/image10.png +0 -0
  57. data/frameworks/sproutcore/design/TestRunner Design.graffle/image11.png +0 -0
  58. data/frameworks/sproutcore/design/TestRunner Design.graffle/image13.png +0 -0
  59. data/frameworks/sproutcore/design/TestRunner Design.graffle/image15.png +0 -0
  60. data/frameworks/sproutcore/design/TestRunner Design.graffle/image16.png +0 -0
  61. data/frameworks/sproutcore/design/TestRunner Design.graffle/image17.png +0 -0
  62. data/frameworks/sproutcore/design/TestRunner Design.graffle/image18.png +0 -0
  63. data/frameworks/sproutcore/design/TestRunner Design.graffle/image19.png +0 -0
  64. data/frameworks/sproutcore/design/TestRunner Design.graffle/image22.tiff +0 -0
  65. data/frameworks/sproutcore/design/TestRunner Design.graffle/image23.png +0 -0
  66. data/frameworks/sproutcore/design/TestRunner Design.graffle/image24.png +0 -0
  67. data/frameworks/sproutcore/design/TestRunner Design.graffle/image25.png +0 -0
  68. data/frameworks/sproutcore/design/TestRunner Design.graffle/image30.png +0 -0
  69. data/frameworks/sproutcore/design/TestRunner Design.graffle/image31.png +0 -0
  70. data/frameworks/sproutcore/design/TestRunner Design.graffle/image8.png +0 -0
  71. data/frameworks/sproutcore/design/TestRunner Design.graffle/image9.png +0 -0
  72. data/frameworks/sproutcore/frameworks/datastore/data_sources/cascade.js +2 -2
  73. data/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +66 -49
  74. data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +146 -31
  75. data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures_with_queries.js +238 -0
  76. data/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +27 -11
  77. data/frameworks/sproutcore/frameworks/datastore/models/record.js +163 -32
  78. data/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +67 -5
  79. data/frameworks/sproutcore/frameworks/datastore/system/many_array.js +157 -0
  80. data/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +202 -19
  81. data/frameworks/sproutcore/frameworks/datastore/system/query.js +929 -78
  82. data/frameworks/sproutcore/frameworks/datastore/system/record_array.js +143 -5
  83. data/frameworks/sproutcore/frameworks/datastore/system/store.js +443 -125
  84. data/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +38 -3
  85. data/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +94 -0
  86. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/core_methods.js +30 -0
  87. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/normalize.js +238 -0
  88. data/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +105 -16
  89. data/frameworks/sproutcore/frameworks/datastore/tests/system/many_array/core_methods.js +178 -0
  90. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +1 -1
  91. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChanges.js +9 -8
  92. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +6 -6
  93. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/dataHashDidChange.js +6 -6
  94. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/discardChanges.js +3 -3
  95. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +7 -7
  96. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readEditableDataHash.js +4 -4
  97. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/removeDataHash.js +7 -7
  98. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/writeDataHash.js +7 -7
  99. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/compare_records.js +126 -0
  100. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation.js +165 -0
  101. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation_of_records.js +82 -0
  102. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/find_all.js +362 -0
  103. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/parsing.js +170 -0
  104. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/record_type_is.js +43 -0
  105. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_comparisons.js +60 -0
  106. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_query_extensions.js +67 -0
  107. data/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +2 -13
  108. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +3 -4
  109. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +73 -0
  110. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +15 -0
  111. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +4 -2
  112. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/destroyRecord.js +1 -1
  113. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +2 -2
  114. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/recordDidChange.js +1 -1
  115. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/retrieveRecord.js +2 -2
  116. data/frameworks/sproutcore/frameworks/debug/core.js +60 -0
  117. data/frameworks/sproutcore/frameworks/deprecated/core.js +0 -2
  118. data/frameworks/sproutcore/frameworks/deprecated/server/server.js +0 -1
  119. data/frameworks/sproutcore/frameworks/deprecated/system/browser.js +0 -2
  120. data/frameworks/sproutcore/frameworks/deprecated/system/classic_responder.js +0 -2
  121. data/frameworks/sproutcore/frameworks/deprecated/system/event.js +0 -2
  122. data/frameworks/sproutcore/frameworks/deprecated/system/misc.js +0 -2
  123. data/frameworks/sproutcore/frameworks/deprecated/system/object.js +0 -2
  124. data/frameworks/sproutcore/frameworks/deprecated/system/path_module.js +0 -1
  125. data/frameworks/sproutcore/frameworks/deprecated/system/string.js +0 -2
  126. data/frameworks/sproutcore/frameworks/designer/coders/design.js +1 -2
  127. data/frameworks/sproutcore/frameworks/designer/coders/localization.js +1 -2
  128. data/frameworks/sproutcore/frameworks/designer/coders/object.js +1 -1
  129. data/frameworks/sproutcore/frameworks/designer/controllers/page_design.js +1 -1
  130. data/frameworks/sproutcore/frameworks/designer/ext/page.js +0 -2
  131. data/frameworks/sproutcore/frameworks/designer/ext/view.js +0 -2
  132. data/frameworks/sproutcore/frameworks/designer/views/controls/button.js +2 -3
  133. data/frameworks/sproutcore/frameworks/designer/views/designer.js +24 -8
  134. data/frameworks/sproutcore/frameworks/designer/views/label.js +1 -2
  135. data/frameworks/sproutcore/frameworks/designer/views/mixins/button.js +0 -2
  136. data/frameworks/sproutcore/frameworks/designer/views/tab.js +1 -2
  137. data/frameworks/sproutcore/frameworks/desktop/english.lproj/alert.css +2 -2
  138. data/frameworks/sproutcore/frameworks/desktop/english.lproj/drag.css +6 -0
  139. data/frameworks/sproutcore/frameworks/desktop/english.lproj/list_item.css +63 -10
  140. data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +5 -4
  141. data/frameworks/sproutcore/frameworks/desktop/english.lproj/modal.css +5 -0
  142. data/frameworks/sproutcore/frameworks/desktop/english.lproj/panel.css +1 -0
  143. data/frameworks/sproutcore/frameworks/desktop/english.lproj/slider.css +5 -0
  144. data/frameworks/sproutcore/frameworks/desktop/english.lproj/split_divider.css +1 -0
  145. data/frameworks/sproutcore/frameworks/desktop/english.lproj/tab.css +1 -1
  146. data/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +61 -0
  147. data/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +136 -79
  148. data/frameworks/sproutcore/frameworks/desktop/panes/alert.js +55 -24
  149. data/frameworks/sproutcore/frameworks/desktop/panes/menu.js +295 -147
  150. data/frameworks/sproutcore/frameworks/desktop/panes/palette.js +1 -1
  151. data/frameworks/sproutcore/frameworks/desktop/panes/panel.js +1 -1
  152. data/frameworks/sproutcore/frameworks/desktop/panes/picker.js +18 -20
  153. data/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +2 -2
  154. data/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +4 -4
  155. data/frameworks/sproutcore/frameworks/desktop/system/drag.js +337 -231
  156. data/frameworks/sproutcore/frameworks/desktop/system/root_responder.js +3 -3
  157. data/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +1 -1
  158. data/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +2 -2
  159. data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +46 -1
  160. data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +4 -2
  161. data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/ui.js +5 -6
  162. data/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +11 -11
  163. data/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +11 -7
  164. data/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +9 -9
  165. data/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +19 -0
  166. data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +0 -1
  167. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/content.js +249 -0
  168. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deleteSelection.js +82 -0
  169. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deselect.js +199 -0
  170. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/itemViewForContentIndex.js +288 -0
  171. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/layerIdFor.js +65 -0
  172. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/length.js +88 -0
  173. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +165 -0
  174. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/nowShowing.js +121 -0
  175. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/reload.js +177 -0
  176. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/select.js +240 -0
  177. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectNextItem.js +191 -0
  178. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectPreviousItem.js +197 -39
  179. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selection.js +141 -0
  180. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/ui_diagram.js +182 -0
  181. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +183 -0
  182. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowHeightForContentIndex.js +133 -0
  183. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowOffsetForContentIndex.js +132 -0
  184. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_outline.js +56 -0
  185. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +167 -0
  186. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_simple.js +127 -0
  187. data/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +30 -1
  188. data/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/ui.js +8 -8
  189. data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +9 -9
  190. data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/methods.js +45 -6
  191. data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +2 -1
  192. data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +17 -1
  193. data/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +44 -29
  194. data/frameworks/sproutcore/frameworks/desktop/tests/views/stacked/ui_comments.js +231 -0
  195. data/frameworks/sproutcore/frameworks/desktop/tests/views/web/ui.js +1 -1
  196. data/frameworks/sproutcore/frameworks/desktop/views/button.js +15 -4
  197. data/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +8 -1
  198. data/frameworks/sproutcore/frameworks/desktop/views/collection.js +1739 -1123
  199. data/frameworks/sproutcore/frameworks/desktop/views/form.js +0 -1
  200. data/frameworks/sproutcore/frameworks/desktop/views/grid.js +13 -11
  201. data/frameworks/sproutcore/frameworks/desktop/views/list.js +405 -571
  202. data/frameworks/sproutcore/frameworks/desktop/views/list_item.js +211 -74
  203. data/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +319 -169
  204. data/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +57 -51
  205. data/frameworks/sproutcore/frameworks/desktop/views/progress.js +2 -2
  206. data/frameworks/sproutcore/frameworks/desktop/views/scene.js +150 -2
  207. data/frameworks/sproutcore/frameworks/desktop/views/scroll.js +92 -50
  208. data/frameworks/sproutcore/frameworks/desktop/views/scroller.js +86 -63
  209. data/frameworks/sproutcore/frameworks/desktop/views/segmented.js +38 -22
  210. data/frameworks/sproutcore/frameworks/desktop/views/select_field.js +51 -12
  211. data/frameworks/sproutcore/frameworks/desktop/views/slider.js +2 -0
  212. data/frameworks/sproutcore/frameworks/desktop/views/source_list.js +17 -1087
  213. data/frameworks/sproutcore/frameworks/desktop/views/source_list_group.js +3 -3
  214. data/frameworks/sproutcore/frameworks/desktop/views/split.js +35 -9
  215. data/frameworks/sproutcore/frameworks/desktop/views/stacked.js +101 -0
  216. data/frameworks/sproutcore/frameworks/desktop/views/tab.js +23 -22
  217. data/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +1 -1
  218. data/frameworks/sproutcore/frameworks/foundation/controllers/array.js +382 -363
  219. data/frameworks/sproutcore/frameworks/foundation/controllers/controller.js +7 -279
  220. data/frameworks/sproutcore/frameworks/foundation/controllers/object.js +212 -310
  221. data/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +109 -0
  222. data/frameworks/sproutcore/frameworks/foundation/core.js +25 -0
  223. data/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +30 -8
  224. data/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +19 -4
  225. data/frameworks/sproutcore/frameworks/foundation/english.lproj/core.css +219 -3
  226. data/frameworks/sproutcore/frameworks/foundation/english.lproj/debug/control-test-pane.css +1 -0
  227. data/frameworks/sproutcore/frameworks/foundation/english.lproj/label.css +30 -0
  228. data/frameworks/sproutcore/frameworks/foundation/english.lproj/strings.js +15 -0
  229. data/frameworks/sproutcore/frameworks/{desktop → foundation}/english.lproj/text_field.css +19 -3
  230. data/frameworks/sproutcore/frameworks/foundation/english.lproj/view.css +6 -1
  231. data/frameworks/sproutcore/frameworks/foundation/license.js +19 -0
  232. data/frameworks/sproutcore/frameworks/foundation/mixins/button.js +15 -7
  233. data/frameworks/sproutcore/frameworks/foundation/mixins/collection_content.js +171 -0
  234. data/frameworks/sproutcore/frameworks/foundation/mixins/control.js +5 -5
  235. data/frameworks/sproutcore/frameworks/foundation/mixins/inline_text_field.js +462 -0
  236. data/frameworks/sproutcore/frameworks/foundation/mixins/selection_support.js +162 -84
  237. data/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +33 -2
  238. data/frameworks/sproutcore/frameworks/foundation/mixins/string.js +17 -3
  239. data/frameworks/sproutcore/frameworks/foundation/mixins/tree_item_content.js +159 -0
  240. data/frameworks/sproutcore/frameworks/foundation/panes/pane.js +49 -20
  241. data/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +887 -0
  242. data/frameworks/sproutcore/frameworks/foundation/system/application.js +36 -0
  243. data/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +310 -62
  244. data/frameworks/sproutcore/frameworks/foundation/system/datetime.js +729 -0
  245. data/frameworks/sproutcore/frameworks/foundation/system/event.js +57 -21
  246. data/frameworks/sproutcore/frameworks/foundation/system/ready.js +11 -5
  247. data/frameworks/sproutcore/frameworks/foundation/system/render_context.js +55 -16
  248. data/frameworks/sproutcore/frameworks/foundation/system/request.js +152 -27
  249. data/frameworks/sproutcore/frameworks/foundation/system/responder.js +120 -0
  250. data/frameworks/sproutcore/frameworks/foundation/system/responder_context.js +243 -0
  251. data/frameworks/sproutcore/frameworks/foundation/system/root_responder.js +29 -6
  252. data/frameworks/sproutcore/frameworks/foundation/system/routes.js +143 -102
  253. data/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +9 -2
  254. data/frameworks/sproutcore/frameworks/foundation/system/utils.js +104 -9
  255. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/array_case.js +182 -0
  256. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/enum_case.js +193 -0
  257. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/null_case.js +64 -0
  258. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/single_case.js +136 -0
  259. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/empty_case.js +82 -0
  260. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/multiple_case.js +111 -0
  261. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/single_case.js +193 -0
  262. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/single_enumerable_case.js +179 -0
  263. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/tree/outline_case.js +108 -0
  264. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/keyEquivalents.js +35 -0
  265. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +128 -0
  266. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/string.js +17 -0
  267. data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/flat_case.js +325 -0
  268. data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/group_case.js +718 -0
  269. data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/outline_case.js +484 -0
  270. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_core.js +28 -28
  271. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_selector.js +1 -1
  272. data/frameworks/sproutcore/frameworks/foundation/tests/system/datetime.js +151 -0
  273. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/get.js +2 -2
  274. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_attr.js +1 -1
  275. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_basic.js +1 -1
  276. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_className.js +12 -12
  277. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_style.js +1 -1
  278. data/frameworks/sproutcore/frameworks/foundation/tests/system/request.js +52 -14
  279. data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/root_responder.js +27 -23
  280. data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/schedule.js +1 -1
  281. data/frameworks/sproutcore/frameworks/foundation/tests/validators/date.js +12 -10
  282. data/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +148 -0
  283. data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/append_remove.js +1 -1
  284. data/frameworks/sproutcore/frameworks/{desktop → foundation}/tests/views/text_field/methods.js +0 -0
  285. data/frameworks/sproutcore/frameworks/{desktop → foundation}/tests/views/text_field/ui.js +53 -1
  286. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/clippingFrame.js +1 -0
  287. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/convertFrames.js +1 -1
  288. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/createChildViews.js +35 -0
  289. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/findLayerInParentLayer.js +1 -1
  290. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisible.js +51 -0
  291. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisibleInWindow.js +12 -1
  292. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutStyle.js +83 -3
  293. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/prepareContext.js +1 -1
  294. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayer.js +4 -0
  295. data/frameworks/sproutcore/frameworks/foundation/views/container.js +1 -1
  296. data/frameworks/sproutcore/frameworks/foundation/views/field.js +27 -16
  297. data/frameworks/sproutcore/frameworks/foundation/views/image.js +4 -1
  298. data/frameworks/sproutcore/frameworks/foundation/views/label.js +16 -6
  299. data/frameworks/sproutcore/frameworks/{desktop → foundation}/views/text_field.js +39 -15
  300. data/frameworks/sproutcore/frameworks/foundation/views/view.js +328 -83
  301. data/frameworks/sproutcore/frameworks/runtime/README +1 -0
  302. data/frameworks/sproutcore/frameworks/runtime/core.js +110 -31
  303. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +238 -0
  304. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/indexOf.js +33 -0
  305. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/insertAt.js +121 -0
  306. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/objectAt.js +34 -0
  307. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/popObject.js +50 -0
  308. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/pushObject.js +46 -0
  309. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/rangeObserver.js +371 -0
  310. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeAt.js +100 -0
  311. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeObject.js +49 -0
  312. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/replace.js +94 -0
  313. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/shiftObject.js +50 -0
  314. data/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/unshiftObject.js +47 -0
  315. data/frameworks/sproutcore/frameworks/runtime/mixins/array.js +320 -110
  316. data/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +64 -0
  317. data/frameworks/sproutcore/frameworks/runtime/mixins/delegate_support.js +44 -6
  318. data/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +142 -77
  319. data/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +104 -0
  320. data/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +298 -142
  321. data/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +17 -11
  322. data/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +55 -15
  323. data/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +29 -5
  324. data/frameworks/sproutcore/frameworks/runtime/protocols/observable_protocol.js +40 -0
  325. data/frameworks/sproutcore/frameworks/runtime/system/binding.js +39 -15
  326. data/frameworks/sproutcore/frameworks/runtime/system/index_set.js +1166 -0
  327. data/frameworks/sproutcore/frameworks/runtime/system/object.js +33 -15
  328. data/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +201 -35
  329. data/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +42 -15
  330. data/frameworks/sproutcore/frameworks/runtime/system/selection_set.js +649 -0
  331. data/frameworks/sproutcore/frameworks/runtime/system/set.js +183 -54
  332. data/frameworks/sproutcore/frameworks/runtime/system/sparse_array.js +20 -11
  333. data/frameworks/sproutcore/frameworks/runtime/tests/core/clone.js +2 -2
  334. data/frameworks/sproutcore/frameworks/runtime/tests/core/compare.js +44 -0
  335. data/frameworks/sproutcore/frameworks/runtime/tests/core/console.js +16 -0
  336. data/frameworks/sproutcore/frameworks/runtime/tests/core/keys.js +1 -1
  337. data/frameworks/sproutcore/frameworks/runtime/tests/core/makeArray.js +1 -1
  338. data/frameworks/sproutcore/frameworks/runtime/tests/core/objectForPropertyPath.js +5 -5
  339. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +57 -0
  340. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable.js +21 -2
  341. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +249 -129
  342. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/propertyChanges.js +11 -2
  343. data/frameworks/sproutcore/frameworks/runtime/tests/private/observer_queue/isObservingSuspended.js +55 -0
  344. data/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +81 -6
  345. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/add.js +195 -0
  346. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/clone.js +43 -0
  347. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/contains.js +74 -0
  348. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/create.js +42 -0
  349. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexAfter.js +38 -0
  350. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexBefore.js +38 -0
  351. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/intersects.js +74 -0
  352. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/max.js +40 -0
  353. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/min.js +40 -0
  354. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/rangeStartForIndex.js +36 -0
  355. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/remove.js +189 -0
  356. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/without.js +89 -0
  357. data/frameworks/sproutcore/frameworks/runtime/tests/system/object/base.js +1 -1
  358. data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/create.js +59 -0
  359. data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/destroy.js +75 -0
  360. data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/objectPropertyDidChange.js +117 -0
  361. data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/rangeDidChange.js +110 -0
  362. data/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/update.js +65 -0
  363. data/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +3 -3
  364. data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/add.js +92 -0
  365. data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/copy.js +17 -0
  366. data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/indexSetForSource.js +85 -0
  367. data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/isEqual.js +60 -0
  368. data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/remove.js +87 -0
  369. data/frameworks/sproutcore/frameworks/runtime/tests/system/set.js +4 -25
  370. data/frameworks/sproutcore/frameworks/runtime/tests/system/sparse_array.js +39 -1
  371. data/frameworks/sproutcore/frameworks/testing/core.js +183 -0
  372. data/frameworks/sproutcore/frameworks/testing/english.lproj/runner.css +126 -0
  373. data/frameworks/sproutcore/frameworks/testing/extras.js +0 -26
  374. data/frameworks/sproutcore/frameworks/testing/qunit.js +33 -25
  375. data/frameworks/sproutcore/frameworks/testing/system/dump.js +205 -0
  376. data/frameworks/sproutcore/frameworks/testing/system/equiv.js +201 -0
  377. data/frameworks/sproutcore/frameworks/testing/system/plan.js +691 -0
  378. data/frameworks/sproutcore/frameworks/testing/system/runner.js +209 -0
  379. data/frameworks/sproutcore/frameworks/testing/system/suite.js +228 -0
  380. data/frameworks/sproutcore/frameworks/testing/utils.js +8 -1
  381. data/frameworks/sproutcore/lib/index.rhtml +4 -1
  382. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/10.png +0 -0
  383. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/100.png +0 -0
  384. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/102.png +0 -0
  385. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/110.png +0 -0
  386. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/120.png +0 -0
  387. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/127.png +0 -0
  388. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/18.png +0 -0
  389. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/19.png +0 -0
  390. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/2.png +0 -0
  391. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/24.png +0 -0
  392. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/26.png +0 -0
  393. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/27.png +0 -0
  394. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/28.png +0 -0
  395. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/29.png +0 -0
  396. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/30.png +0 -0
  397. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/31.png +0 -0
  398. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/33.png +0 -0
  399. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/37.png +0 -0
  400. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/41.png +0 -0
  401. data/frameworks/sproutcore/themes/standard_theme/Source/icons/16/99.png +0 -0
  402. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/10.png +0 -0
  403. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/100.png +0 -0
  404. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/102.png +0 -0
  405. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/110.png +0 -0
  406. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/120.png +0 -0
  407. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/127.png +0 -0
  408. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/18.png +0 -0
  409. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/19.png +0 -0
  410. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/2.png +0 -0
  411. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/24.png +0 -0
  412. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/26.png +0 -0
  413. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/27.png +0 -0
  414. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/28.png +0 -0
  415. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/29.png +0 -0
  416. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/30.png +0 -0
  417. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/31.png +0 -0
  418. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/33.png +0 -0
  419. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/37.png +0 -0
  420. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/41.png +0 -0
  421. data/frameworks/sproutcore/themes/standard_theme/Source/icons/24/99.png +0 -0
  422. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/10.png +0 -0
  423. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/100.png +0 -0
  424. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/102.png +0 -0
  425. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/110.png +0 -0
  426. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/120.png +0 -0
  427. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/127.png +0 -0
  428. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/18.png +0 -0
  429. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/19.png +0 -0
  430. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/2.png +0 -0
  431. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/24.png +0 -0
  432. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/26.png +0 -0
  433. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/27.png +0 -0
  434. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/28.png +0 -0
  435. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/29.png +0 -0
  436. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/30.png +0 -0
  437. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/31.png +0 -0
  438. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/33.png +0 -0
  439. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/37.png +0 -0
  440. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/41.png +0 -0
  441. data/frameworks/sproutcore/themes/standard_theme/Source/icons/32/99.png +0 -0
  442. data/frameworks/sproutcore/themes/standard_theme/Source/icons/48/10.png +0 -0
  443. data/frameworks/sproutcore/themes/standard_theme/Source/icons/48/18.png +0 -0
  444. data/frameworks/sproutcore/themes/standard_theme/Source/icons/48/19.png +0 -0
  445. data/frameworks/sproutcore/themes/standard_theme/Source/icons/48/2.png +0 -0
  446. data/frameworks/sproutcore/themes/standard_theme/Source/sc-theme-repeat-x-2.psd +0 -0
  447. data/frameworks/sproutcore/themes/standard_theme/Source/sc-theme-repeat-x.psd +0 -0
  448. data/frameworks/sproutcore/themes/standard_theme/Source/sc-theme-sprite.psd +0 -0
  449. data/frameworks/sproutcore/themes/standard_theme/Source/sc-theme-ysprite.psd +0 -0
  450. data/frameworks/sproutcore/themes/standard_theme/Source/shared-icons.psd +0 -0
  451. data/frameworks/sproutcore/themes/standard_theme/Source/sproutcore-logo.psd +0 -0
  452. data/frameworks/sproutcore/themes/standard_theme/Source/sticky-note.psd +0 -0
  453. data/frameworks/sproutcore/themes/standard_theme/english.lproj/button.css +191 -193
  454. data/frameworks/sproutcore/themes/standard_theme/english.lproj/checkbox.css +11 -10
  455. data/frameworks/sproutcore/themes/standard_theme/english.lproj/collection.css +85 -4
  456. data/frameworks/sproutcore/themes/standard_theme/english.lproj/core.css +15 -2
  457. data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-repeat-x.png +0 -0
  458. data/frameworks/sproutcore/themes/standard_theme/english.lproj/label.css +0 -26
  459. data/frameworks/sproutcore/themes/standard_theme/english.lproj/list_item.css +30 -0
  460. data/frameworks/sproutcore/themes/standard_theme/english.lproj/progress.css +9 -6
  461. data/frameworks/sproutcore/themes/standard_theme/english.lproj/radio.css +20 -11
  462. data/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +192 -54
  463. data/frameworks/sproutcore/themes/standard_theme/english.lproj/slider.css +56 -24
  464. data/frameworks/sproutcore/themes/standard_theme/english.lproj/tab.css +13 -7
  465. data/frameworks/sproutcore/themes/standard_theme/english.lproj/text_field.css +1 -4
  466. data/frameworks/sproutcore/themes/standard_theme/english.lproj/toolbar.css +4 -1
  467. data/lib/sproutcore/builders/minify.rb +2 -2
  468. data/lib/sproutcore/builders/test.rb +1 -1
  469. data/lib/sproutcore/buildfile.rb +1 -0
  470. data/lib/sproutcore/rack/dev.rb +1 -1
  471. data/lib/sproutcore/rack/filesystem.rb +265 -0
  472. data/lib/sproutcore/rack/proxy.rb +11 -3
  473. data/lib/sproutcore/rack/service.rb +11 -1
  474. data/lib/sproutcore/tools.rb +11 -1
  475. data/lib/sproutcore/tools/server.rb +6 -4
  476. data/vendor/jsdoc/README.txt +151 -0
  477. data/vendor/jsdoc/changes.txt +47 -0
  478. metadata +263 -308
  479. data/frameworks/sproutcore/apps/sc_jsdoc/controllers/docs.js +0 -149
  480. data/frameworks/sproutcore/apps/sc_jsdoc/core.js +0 -16
  481. data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/body.css +0 -17
  482. data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/body.js +0 -99
  483. data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/images/sproutcore-logo.png +0 -0
  484. data/frameworks/sproutcore/apps/sc_jsdoc/main.js +0 -27
  485. data/frameworks/sproutcore/apps/sc_jsdoc/models/doc.js +0 -21
  486. data/frameworks/sproutcore/apps/sc_qunit/controllers/runner.js +0 -209
  487. data/frameworks/sproutcore/apps/sc_qunit/core.js +0 -16
  488. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/body.css +0 -17
  489. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/body.js +0 -107
  490. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/images/sproutcore-logo.png +0 -0
  491. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/strings.js +0 -15
  492. data/frameworks/sproutcore/apps/sc_qunit/main.js +0 -18
  493. data/frameworks/sproutcore/apps/sc_qunit/models/test.js +0 -24
  494. data/frameworks/sproutcore/apps/sc_qunit/views/test_iframe.js +0 -52
  495. data/frameworks/sproutcore/apps/tests/controllers/test.js +0 -20
  496. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/blank.gif +0 -0
  497. data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu.css +0 -83
  498. data/frameworks/sproutcore/frameworks/desktop/english.lproj/palette.css +0 -3
  499. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/methods.js +0 -10
  500. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/methods.js +0 -10
  501. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui.js +0 -110
  502. data/frameworks/sproutcore/frameworks/foundation/mixins/responder.js +0 -156
  503. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array.js +0 -118
  504. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/controller.js +0 -268
  505. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object.js +0 -433
  506. data/frameworks/sproutcore/frameworks/runtime/tests/system/array.js +0 -263
  507. data/frameworks/sproutcore/frameworks/testing/tests/debug/qunit.js +0 -25
  508. data/spec/buildtasks/manifest/spec_helper.rb +0 -35
  509. data/spec/buildtasks/target_spec.rb +0 -214
  510. data/spec/fixtures/builder_tests/Buildfile +0 -15
  511. data/spec/fixtures/builder_tests/apps/combine_test/a.js +0 -1
  512. data/spec/fixtures/builder_tests/apps/combine_test/b.js +0 -1
  513. data/spec/fixtures/builder_tests/apps/combine_test/c.js +0 -1
  514. data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/a.css +0 -1
  515. data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/b.css +0 -1
  516. data/spec/fixtures/builder_tests/apps/combine_test/english.lproj/c.css +0 -1
  517. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/bar1_sample.rhtml +0 -2
  518. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/erb_sample.html.erb +0 -1
  519. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/icons/image.png +0 -0
  520. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/image.jpg +0 -0
  521. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/rhtml_sample.rhtml +0 -1
  522. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/strings.js +0 -4
  523. data/spec/fixtures/builder_tests/apps/html_test/english.lproj/style.css +0 -0
  524. data/spec/fixtures/builder_tests/apps/html_test/french.lproj/french-icons/fr.png +0 -0
  525. data/spec/fixtures/builder_tests/apps/html_test/french.lproj/strings.js +0 -4
  526. data/spec/fixtures/builder_tests/apps/html_test/lib/layout_template.rhtml +0 -1
  527. data/spec/fixtures/builder_tests/apps/html_test/scripts.js +0 -0
  528. data/spec/fixtures/builder_tests/apps/javascript_test/sc_static.js +0 -15
  529. data/spec/fixtures/builder_tests/apps/javascript_test/sc_super.js +0 -4
  530. data/spec/fixtures/builder_tests/apps/javascript_test/strings.js +0 -7
  531. data/spec/fixtures/builder_tests/apps/sass_test/sample.sass +0 -3
  532. data/spec/fixtures/builder_tests/apps/strings_test/lproj/strings.js +0 -8
  533. data/spec/fixtures/builder_tests/apps/stylesheet_test/build_directives.css +0 -9
  534. data/spec/fixtures/builder_tests/apps/stylesheet_test/sc_static.css +0 -12
  535. data/spec/fixtures/builder_tests/apps/test_test/lib/alt_layout.rhtml +0 -1
  536. data/spec/fixtures/builder_tests/apps/test_test/lib/test_layout.rhtml +0 -3
  537. data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test.js +0 -1
  538. data/spec/fixtures/builder_tests/apps/test_test/tests/qunit_test2.js +0 -1
  539. data/spec/fixtures/builder_tests/apps/test_test/tests/rhtml_test.rhtml +0 -4
  540. data/spec/fixtures/builder_tests/frameworks/debug/core.js +0 -0
  541. data/spec/fixtures/builder_tests/frameworks/debug/english.lproj/dummy.css +0 -0
  542. data/spec/fixtures/builder_tests/frameworks/qunit/core.js +0 -0
  543. data/spec/fixtures/builder_tests/frameworks/qunit/english.lproj/dummy.css +0 -0
  544. data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/req_style_1.css +0 -0
  545. data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/strings.js +0 -4
  546. data/spec/fixtures/builder_tests/frameworks/req_target_1/english.lproj/test.rhtml +0 -1
  547. data/spec/fixtures/builder_tests/frameworks/req_target_1/req_js_1.js +0 -0
  548. data/spec/fixtures/builder_tests/frameworks/req_target_2/english.lproj/req_style_2.css +0 -0
  549. data/spec/fixtures/builder_tests/frameworks/req_target_2/english.lproj/test.rhtml +0 -1
  550. data/spec/fixtures/builder_tests/frameworks/req_target_2/javascript.js +0 -1
  551. data/spec/fixtures/builder_tests/frameworks/req_target_2/lib/alt_layout.rhtml +0 -0
  552. data/spec/fixtures/builder_tests/frameworks/req_target_2/req_js_2.js +0 -0
  553. data/spec/fixtures/builder_tests/themes/sample_theme/Buildfile +0 -1
  554. data/spec/fixtures/buildfiles/basic/Buildfile +0 -16
  555. data/spec/fixtures/buildfiles/basic/task_module.rake +0 -6
  556. data/spec/fixtures/buildfiles/installed/Buildfile +0 -7
  557. data/spec/fixtures/buildfiles/installed/Buildfile2 +0 -5
  558. data/spec/fixtures/buildfiles/project_test/Buildfile +0 -4
  559. data/spec/fixtures/buildfiles/project_test/not_project/Buildfile +0 -2
  560. data/spec/fixtures/buildfiles/project_test/not_project/child/PLACEHOLDER +0 -0
  561. data/spec/fixtures/entry_for_project/Buildfile +0 -1
  562. data/spec/fixtures/entry_for_project/apps/test_app/frameworks/nested/PLACEHOLDER +0 -0
  563. data/spec/fixtures/entry_for_project/frameworks/shared/PLACEHOLDER +0 -0
  564. data/spec/fixtures/find_targets/custom/Buildfile +0 -8
  565. data/spec/fixtures/find_targets/custom/bars/bar1/bars/bar1/PLACEHOLDER +0 -0
  566. data/spec/fixtures/find_targets/custom/bars/bar1/bars/bar2/PLACEHOLDER +0 -0
  567. data/spec/fixtures/find_targets/custom/bars/bar1/foos/foo1/PLACEHOLDER +0 -0
  568. data/spec/fixtures/find_targets/custom/bars/bar1/foos/foo2/PLACEHOLDER +0 -0
  569. data/spec/fixtures/find_targets/custom/foos/custom_foos/Buildfile +0 -5
  570. data/spec/fixtures/find_targets/custom/foos/custom_foos/custom_foodir/foo1/PLACEHOLDER +0 -0
  571. data/spec/fixtures/find_targets/custom/foos/custom_foos/custom_foodir/foo2/PLACEHOLDER +0 -0
  572. data/spec/fixtures/find_targets/custom/foos/custom_foos/foos/not_foo1/PLACEHOLDER +0 -0
  573. data/spec/fixtures/find_targets/custom/foos/foo1/bars/bar1/PLACEHOLDER +0 -0
  574. data/spec/fixtures/find_targets/custom/foos/foo1/bars/bar2/PLACEHOLDER +0 -0
  575. data/spec/fixtures/find_targets/nested/Buildfile +0 -8
  576. data/spec/fixtures/find_targets/nested/apps/app1/Buildfile +0 -1
  577. data/spec/fixtures/find_targets/nested/apps/app1/apps/nested_app/PLACEHOLDER +0 -0
  578. data/spec/fixtures/find_targets/standard/Apps/app1/frameworks/framework1/PLACEHOLDER +0 -0
  579. data/spec/fixtures/find_targets/standard/Apps/app1/frameworks/framework2/PLACEHOLDER +0 -0
  580. data/spec/fixtures/find_targets/standard/clients/client1/PLACEHOLDER +0 -0
  581. data/spec/fixtures/find_targets/standard/frameworks/framework1/frameworks/framework1/PLACEHOLDER +0 -0
  582. data/spec/fixtures/find_targets/standard/frameworks/framework2/PLACEHOLDER +0 -0
  583. data/spec/fixtures/find_targets/standard/themes/theme1/PLACEHOLDER +0 -0
  584. data/spec/fixtures/find_targets/standard/themes/theme2/PLACEHOLDER +0 -0
  585. data/spec/fixtures/languages/apps/caps_long_names/English.lproj/PLACEHOLDER +0 -0
  586. data/spec/fixtures/languages/apps/caps_long_names/FreNCH.lproj/PLACEHOLDER +0 -0
  587. data/spec/fixtures/languages/apps/caps_long_names/UnknOWN.lproj/PLACEHOLDER +0 -0
  588. data/spec/fixtures/languages/apps/long_names/english.lproj/PLACEHOLDER +0 -0
  589. data/spec/fixtures/languages/apps/long_names/french.lproj/PLACEHOLDER +0 -0
  590. data/spec/fixtures/languages/apps/long_names/german.lproj/PLACEHOLDER +0 -0
  591. data/spec/fixtures/languages/apps/long_names/italian.lproj/PLACEHOLDER +0 -0
  592. data/spec/fixtures/languages/apps/long_names/japanese.lproj/PLACEHOLDER +0 -0
  593. data/spec/fixtures/languages/apps/long_names/spanish.lproj/PLACEHOLDER +0 -0
  594. data/spec/fixtures/languages/apps/long_names/unknown.lproj/PLACEHOLDER +0 -0
  595. data/spec/fixtures/languages/apps/no_names/PLACEHOLDER +0 -0
  596. data/spec/fixtures/languages/apps/short_names/de.lproj/PLACEHOLDER +0 -0
  597. data/spec/fixtures/languages/apps/short_names/en-CA.lproj/PLACEHOLDER +0 -0
  598. data/spec/fixtures/languages/apps/short_names/en-GB.lproj/PLACEHOLDER +0 -0
  599. data/spec/fixtures/languages/apps/short_names/en-US.lproj/PLACEHOLDER +0 -0
  600. data/spec/fixtures/languages/apps/short_names/en.lproj/PLACEHOLDER +0 -0
  601. data/spec/fixtures/languages/apps/short_names/es.lproj/PLACEHOLDER +0 -0
  602. data/spec/fixtures/languages/apps/short_names/foo.lproj/PLACEHOLDER +0 -0
  603. data/spec/fixtures/languages/apps/short_names/fr.lproj/PLACEHOLDER +0 -0
  604. data/spec/fixtures/languages/apps/short_names/it.lproj/PLACEHOLDER +0 -0
  605. data/spec/fixtures/languages/apps/short_names/ja.lproj/PLACEHOLDER +0 -0
  606. data/spec/fixtures/ordered_entries/apps/no_requires/1.js +0 -1
  607. data/spec/fixtures/ordered_entries/apps/no_requires/B.js +0 -1
  608. data/spec/fixtures/ordered_entries/apps/no_requires/a.js +0 -1
  609. data/spec/fixtures/ordered_entries/apps/no_requires/a/a.js +0 -1
  610. data/spec/fixtures/ordered_entries/apps/no_requires/a/b.js +0 -1
  611. data/spec/fixtures/ordered_entries/apps/no_requires/b/a.js +0 -1
  612. data/spec/fixtures/ordered_entries/apps/no_requires/c.js +0 -1
  613. data/spec/fixtures/ordered_entries/apps/no_requires/core.js +0 -1
  614. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/B.css +0 -0
  615. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a.css +0 -0
  616. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a/a.css +0 -0
  617. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/a/b.css +0 -0
  618. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/b/a.css +0 -0
  619. data/spec/fixtures/ordered_entries/apps/no_requires/english.lproj/c.css +0 -0
  620. data/spec/fixtures/ordered_entries/apps/no_requires/lproj/strings.js +0 -1
  621. data/spec/fixtures/ordered_entries/apps/no_requires/utils.js +0 -1
  622. data/spec/fixtures/ordered_entries/apps/with_requires/a.js +0 -2
  623. data/spec/fixtures/ordered_entries/apps/with_requires/b.js +0 -3
  624. data/spec/fixtures/ordered_entries/apps/with_requires/c.js +0 -2
  625. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/a.css +0 -2
  626. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/b.css +0 -2
  627. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/c.css +0 -2
  628. data/spec/fixtures/ordered_entries/apps/with_requires/english.lproj/d.js +0 -1
  629. data/spec/fixtures/real_world/Buildfile +0 -12
  630. data/spec/fixtures/real_world/apps/account/README +0 -1
  631. data/spec/fixtures/real_world/apps/calendar/README +0 -1
  632. data/spec/fixtures/real_world/apps/contacts/README_BEFORE_EDITING +0 -1
  633. data/spec/fixtures/real_world/apps/files/README +0 -1
  634. data/spec/fixtures/real_world/apps/mail/README +0 -1
  635. data/spec/fixtures/real_world/apps/mobile_photos/README +0 -1
  636. data/spec/fixtures/real_world/apps/photos/README +0 -1
  637. data/spec/fixtures/real_world/apps/uploader/README +0 -1
  638. data/spec/fixtures/real_world/frameworks/core_files/PLACEHOLDER +0 -0
  639. data/spec/fixtures/real_world/frameworks/core_photos/PLACEHOLDER +0 -0
  640. data/spec/fixtures/real_world/frameworks/shared/PLACEHOLDER +0 -0
  641. data/spec/fixtures/real_world/frameworks/sproutcore/Buildfile +0 -26
  642. data/spec/fixtures/real_world/frameworks/sproutcore/README +0 -1
  643. data/spec/fixtures/real_world/frameworks/sproutcore/apps/docs/PLACEHOLDER +0 -0
  644. data/spec/fixtures/real_world/frameworks/sproutcore/apps/test_runner/PLACEHOLDER +0 -0
  645. data/spec/fixtures/real_world/frameworks/sproutcore/core.js +0 -0
  646. data/spec/fixtures/real_world/frameworks/sproutcore/debug/debug-resource.html +0 -0
  647. data/spec/fixtures/real_world/frameworks/sproutcore/debug/sample_debug.js +0 -0
  648. data/spec/fixtures/real_world/frameworks/sproutcore/demo2.js +0 -0
  649. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/debug/sample_debug-loc.js +0 -0
  650. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.css +0 -4
  651. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo.html +0 -1
  652. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/demo2.sass +0 -0
  653. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.haml +0 -0
  654. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.html.erb +0 -1
  655. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/file_extension_test.rhtml +0 -0
  656. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/fixtures/sample_fixtures-loc.js +0 -0
  657. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/has_require.css +0 -4
  658. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_require.css +0 -1
  659. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/no_sc_resource.rhtml +0 -1
  660. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/protocols/sample-loc.js +0 -0
  661. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.css +0 -6
  662. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/sc_resource.rhtml +0 -3
  663. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/strings.js +0 -1
  664. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/tests/sample-loc.js +0 -0
  665. data/spec/fixtures/real_world/frameworks/sproutcore/fixtures/sample-json-fixture.json +0 -1
  666. data/spec/fixtures/real_world/frameworks/sproutcore/fixtures/sample_fixtures.js +0 -0
  667. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/application/PLACEHOLDER +0 -0
  668. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/costello/core.js +0 -0
  669. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/data_store/PLACEHOLDER +0 -0
  670. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/debug/PLACEHOLDER +0 -0
  671. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/desktop/PLACEHOLDER +0 -0
  672. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/empty_theme/PLACEHOLDER +0 -0
  673. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/foundation/PLACEHOLDER +0 -0
  674. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/mobile/PLACEHOLDER +0 -0
  675. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/qunit/PLACEHOLDER +0 -0
  676. data/spec/fixtures/real_world/frameworks/sproutcore/frameworks/uploader/PLACEHOLDER +0 -0
  677. data/spec/fixtures/real_world/frameworks/sproutcore/french.lproj/french-resource.js +0 -0
  678. data/spec/fixtures/real_world/frameworks/sproutcore/french.lproj/strings.js +0 -1
  679. data/spec/fixtures/real_world/frameworks/sproutcore/german.lproj/german-resource.js +0 -0
  680. data/spec/fixtures/real_world/frameworks/sproutcore/german.lproj/strings.js +0 -0
  681. data/spec/fixtures/real_world/frameworks/sproutcore/has_require.js +0 -4
  682. data/spec/fixtures/real_world/frameworks/sproutcore/lib/index.html +0 -1
  683. data/spec/fixtures/real_world/frameworks/sproutcore/no_require.js +0 -1
  684. data/spec/fixtures/real_world/frameworks/sproutcore/protocols/sample.js +0 -0
  685. data/spec/fixtures/real_world/frameworks/sproutcore/sc_resource.js +0 -6
  686. data/spec/fixtures/real_world/frameworks/sproutcore/tests/nested/sample1.js +0 -0
  687. data/spec/fixtures/real_world/frameworks/sproutcore/tests/nested/sample2.js +0 -0
  688. data/spec/fixtures/real_world/frameworks/sproutcore/tests/sample.js +0 -0
  689. data/spec/fixtures/real_world/frameworks/sproutcore/tests/sample.rhtml +0 -1
  690. data/spec/fixtures/real_world/frameworks/sproutcore/themes/standard_theme/README +0 -0
  691. data/spec/fixtures/real_world/frameworks/sproutcore/views/view.js +0 -1
  692. data/spec/fixtures/real_world/generators/sample_custom/Buildfile +0 -0
  693. data/spec/fixtures/real_world/generators/sample_custom/templates/{filename}.js +0 -1
  694. data/spec/fixtures/recursive_project/Buildfile +0 -8
  695. data/spec/fixtures/recursive_project/frameworks/sproutcore/frameworks/costello/PLACEHOLDER +0 -0
  696. data/spec/lib/builders/combine_spec.rb +0 -67
  697. data/spec/lib/builders/html_spec.rb +0 -577
  698. data/spec/lib/builders/javascript_spec.rb +0 -81
  699. data/spec/lib/builders/sass_spec.rb +0 -43
  700. data/spec/lib/builders/spec_helper.rb +0 -30
  701. data/spec/lib/builders/strings_spec.rb +0 -52
  702. data/spec/lib/builders/stylesheet_spec.rb +0 -63
  703. data/spec/lib/builders/test_index_spec.rb +0 -44
  704. data/spec/lib/builders/test_spec.rb +0 -135
  705. data/spec/lib/buildfile/config_for_spec.rb +0 -81
  706. data/spec/lib/buildfile/define_spec.rb +0 -59
  707. data/spec/lib/buildfile/dup_spec.rb +0 -65
  708. data/spec/lib/buildfile/invoke_spec.rb +0 -130
  709. data/spec/lib/buildfile/load_spec.rb +0 -49
  710. data/spec/lib/buildfile/task/dup_spec.rb +0 -55
  711. data/spec/lib/buildfile/task_defined_spec.rb +0 -17
  712. data/spec/lib/buildfile_commands/build_task_spec.rb +0 -19
  713. data/spec/lib/buildfile_commands/config_spec.rb +0 -97
  714. data/spec/lib/buildfile_commands/import_spec.rb +0 -17
  715. data/spec/lib/buildfile_commands/namespace_spec.rb +0 -18
  716. data/spec/lib/buildfile_commands/proxies_spec.rb +0 -38
  717. data/spec/lib/buildfile_commands/replace_task_spec.rb +0 -29
  718. data/spec/lib/buildfile_commands/task_spec.rb +0 -36
  719. data/spec/lib/helpers/packing_optimizer/optimize_spec.rb +0 -26
  720. data/spec/lib/models/hash_struct/deep_clone_spec.rb +0 -27
  721. data/spec/lib/models/hash_struct/has_options_spec.rb +0 -32
  722. data/spec/lib/models/hash_struct/hash_spec.rb +0 -64
  723. data/spec/lib/models/hash_struct/merge_spec.rb +0 -26
  724. data/spec/lib/models/hash_struct/method_missing.rb +0 -41
  725. data/spec/lib/models/manifest/add_entry_spec.rb +0 -36
  726. data/spec/lib/models/manifest/add_transform_spec.rb +0 -90
  727. data/spec/lib/models/manifest/build_spec.rb +0 -78
  728. data/spec/lib/models/manifest/entry_for_spec.rb +0 -94
  729. data/spec/lib/models/manifest/find_entry.rb +0 -84
  730. data/spec/lib/models/manifest/prepare_spec.rb +0 -62
  731. data/spec/lib/models/manifest_entry/cacheable_url_spec.rb +0 -31
  732. data/spec/lib/models/manifest_entry/prepare_spec.rb +0 -54
  733. data/spec/lib/models/project/add_target_spec.rb +0 -44
  734. data/spec/lib/models/project/buildfile_spec.rb +0 -35
  735. data/spec/lib/models/project/find_targets_for_spec.rb +0 -77
  736. data/spec/lib/models/project/load_nearest_project_spec.rb +0 -23
  737. data/spec/lib/models/project/target_for_spec.rb +0 -33
  738. data/spec/lib/models/project/targets_spec.rb +0 -62
  739. data/spec/lib/models/target/compute_build_number_spec.rb +0 -125
  740. data/spec/lib/models/target/config_spec.rb +0 -30
  741. data/spec/lib/models/target/expand_required_targets_spec.rb +0 -48
  742. data/spec/lib/models/target/installed_languages_spec.rb +0 -47
  743. data/spec/lib/models/target/lproj_for_spec.rb +0 -38
  744. data/spec/lib/models/target/manifest_for_spec.rb +0 -42
  745. data/spec/lib/models/target/parent_target_spec.rb +0 -21
  746. data/spec/lib/models/target/prepare_spec.rb +0 -53
  747. data/spec/lib/models/target/required_targets_spec.rb +0 -119
  748. data/spec/lib/models/target/target_for_spec.rb +0 -56
  749. data/spec/lib/tools/build_number_spec.rb +0 -28
  750. data/spec/lib/tools/gen_spec.rb +0 -207
  751. data/spec/lib/tools/tools_spec.rb +0 -78
  752. data/spec/spec_helper.rb +0 -138
  753. data/vendor/github_gem_lint.rb +0 -22
  754. data/vendor/yui-compressor/yuicompressor-2.4.2.jar +0 -0
@@ -0,0 +1,100 @@
1
+ // ==========================================================================
2
+ // Project: SproutCore Costello - Property Observing Library
3
+ // Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
4
+ // Portions ©2008-2009 Apple, Inc. All rights reserved.
5
+ // License: Licened under MIT license (see license.js)
6
+ // ==========================================================================
7
+
8
+ /*globals module test ok equals same CoreTest */
9
+
10
+ sc_require('debug/test_suites/array/base');
11
+
12
+ SC.ArraySuite.define(function(T) {
13
+
14
+ var observer, obj ;
15
+
16
+ module(T.desc("removeAt"), {
17
+ setup: function() {
18
+ obj = T.newObject();
19
+ observer = T.observer(obj);
20
+ }
21
+ });
22
+
23
+ test("[X].removeAt(0) => [] + notify", function() {
24
+
25
+ var before = T.expected(1);
26
+ obj.replace(0,0, before);
27
+ observer.observe('[]', 'length') ;
28
+
29
+ obj.removeAt(0) ;
30
+ T.validateAfter(obj, [], observer, YES);
31
+ });
32
+
33
+ test("[].removeAt(200) => OUT_OF_RANGE_EXCEPTION exception", function() {
34
+ var didThrow = NO ;
35
+ try {
36
+ obj.removeAt(200);
37
+ } catch (e) {
38
+ equals(e, SC.OUT_OF_RANGE_EXCEPTION, 'should throw SC.OUT_OF_RANGE_EXCEPTION');
39
+ didThrow = YES ;
40
+ }
41
+ ok(didThrow, 'should raise exception');
42
+ });
43
+
44
+ test("[A,B].removeAt(0) => [B] + notify", function() {
45
+ var before = T.expected(2),
46
+ after = [before[1]];
47
+
48
+ obj.replace(0,0,before);
49
+ observer.observe('[]', 'length') ;
50
+
51
+ obj.removeAt(0);
52
+ T.validateAfter(obj, after, observer, YES);
53
+ });
54
+
55
+ test("[A,B].removeAt(1) => [A] + notify", function() {
56
+ var before = T.expected(2),
57
+ after = [before[0]];
58
+
59
+ obj.replace(0,0,before);
60
+ observer.observe('[]', 'length') ;
61
+
62
+ obj.removeAt(1);
63
+ T.validateAfter(obj, after, observer, YES);
64
+ });
65
+
66
+ test("[A,B,C].removeAt(1) => [A,C] + notify", function() {
67
+ var before = T.expected(3),
68
+ after = [before[0], before[2]];
69
+
70
+ obj.replace(0,0,before);
71
+ observer.observe('[]', 'length') ;
72
+
73
+ obj.removeAt(1);
74
+ T.validateAfter(obj, after, observer, YES);
75
+ });
76
+
77
+ test("[A,B,C,D].removeAt(1,2) => [A,D] + notify", function() {
78
+ var before = T.expected(4),
79
+ after = [before[0], before[3]];
80
+
81
+ obj.replace(0,0,before);
82
+ observer.observe('[]', 'length') ;
83
+
84
+ obj.removeAt(1,2);
85
+ T.validateAfter(obj, after, observer, YES);
86
+ });
87
+
88
+ test("[A,B,C,D].removeAt(IndexSet<0,2-3>) => [B] + notify", function() {
89
+ var before = T.expected(4),
90
+ after = [before[1]];
91
+
92
+ obj.replace(0,0,before);
93
+ observer.observe('[]', 'length') ;
94
+
95
+ obj.removeAt(SC.IndexSet.create(0).add(2,2));
96
+ T.validateAfter(obj, after, observer, YES);
97
+ });
98
+
99
+ });
100
+
@@ -0,0 +1,49 @@
1
+ // ==========================================================================
2
+ // Project: SproutCore Costello - Property Observing Library
3
+ // Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
4
+ // Portions ©2008-2009 Apple, Inc. All rights reserved.
5
+ // License: Licened under MIT license (see license.js)
6
+ // ==========================================================================
7
+
8
+ /*globals module test ok equals same CoreTest */
9
+
10
+ sc_require('debug/test_suites/array/base');
11
+
12
+ SC.ArraySuite.define(function(T) {
13
+
14
+ var observer, obj ;
15
+
16
+ module(T.desc("removeObject"), {
17
+ setup: function() {
18
+ obj = T.newObject();
19
+ observer = T.observer(obj);
20
+ }
21
+ });
22
+
23
+ test("should return receiver", function() {
24
+ obj = T.newObject(3);
25
+ equals(obj.removeObject(obj.objectAt(0)), obj, 'should return receiver');
26
+ });
27
+
28
+ test("[A,B,C].removeObject(B) => [A,C] + notify", function() {
29
+
30
+ var before = T.expected(3),
31
+ after = [before[0], before[2]];
32
+ obj.replace(0,0, before);
33
+ observer.observe('[]', 'length') ;
34
+
35
+ obj.removeObject(before[1]) ;
36
+ T.validateAfter(obj, after, observer, YES);
37
+ });
38
+
39
+ test("[A,B,C].removeObject(D) => [A,B,C]", function() {
40
+ var exp = T.expected(4),
41
+ extra = exp.pop();
42
+ obj.replace(0,0,exp);
43
+ observer.observe('[]', 'length') ;
44
+
45
+ obj.removeObject(extra);
46
+ T.validateAfter(obj, exp, observer, NO, NO);
47
+ });
48
+
49
+ });
@@ -0,0 +1,94 @@
1
+ // ==========================================================================
2
+ // Project: SproutCore Costello - Property Observing Library
3
+ // Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
4
+ // Portions ©2008-2009 Apple, Inc. All rights reserved.
5
+ // License: Licened under MIT license (see license.js)
6
+ // ==========================================================================
7
+
8
+ /*globals module test ok equals same CoreTest */
9
+
10
+ sc_require('debug/test_suites/array/base');
11
+
12
+ SC.ArraySuite.define(function(T) {
13
+
14
+ var observer, obj ;
15
+
16
+ module(T.desc("replace"), {
17
+ setup: function() {
18
+ obj = T.newObject();
19
+ observer = T.observer(obj);
20
+ }
21
+ });
22
+
23
+ test("[].replace(0,0,'X') => ['X'] + notify", function() {
24
+
25
+ var exp = T.expected(1);
26
+
27
+ observer.observe('[]', 'length') ;
28
+ obj.replace(0,0,exp) ;
29
+
30
+ T.validateAfter(obj, exp, observer, YES);
31
+ });
32
+
33
+ test("[A,B,C,D].replace(1,2,X) => [A,X,D] + notify", function() {
34
+
35
+ var exp = T.expected(5),
36
+ before = exp.slice(0,4),
37
+ replace = exp.slice(4),
38
+ after = [before[0], replace[0], before[3]];
39
+
40
+ obj.replace(0,0, before) ; // precond
41
+ observer.observe('[]', 'length') ;
42
+
43
+ obj.replace(1,2,replace) ;
44
+
45
+ T.validateAfter(obj, after, observer, YES);
46
+ });
47
+
48
+ test("[A,B,C,D].replace(1,2,[X,Y]) => [A,X,Y,D] + notify", function() {
49
+
50
+ // setup the before, after, and replace arrays. Use generated objects
51
+ var exp = T.expected(6),
52
+ before = exp.slice(0, 4),
53
+ replace = exp.slice(4),
54
+ after = [before[0], replace[0], replace[1], before[3]];
55
+
56
+ obj.replace(0,0, before) ;
57
+ observer.observe('[]', 'length') ;
58
+
59
+ obj.replace(1,2, replace) ;
60
+
61
+ T.validateAfter(obj, after, observer, YES);
62
+ });
63
+
64
+ test("[A,B].replace(1,0,[X,Y]) => [A,X,Y,B] + notify", function() {
65
+
66
+ // setup the before, after, and replace arrays. Use generated objects
67
+ var exp = T.expected(4),
68
+ before = exp.slice(0, 2),
69
+ replace = exp.slice(2),
70
+ after = [before[0], replace[0], replace[1], before[1]] ;
71
+
72
+ obj.replace(0,0, before);
73
+ observer.observe('[]', 'length') ;
74
+
75
+ obj.replace(1,0, replace) ;
76
+
77
+ T.validateAfter(obj, after, observer, YES);
78
+ });
79
+
80
+ test("[A,B,C,D].replace(2,2) => [A,B] + notify", function() {
81
+
82
+ // setup the before, after, and replace arrays. Use generated objects
83
+ var before = T.expected(4),
84
+ after = [before[0], before[1]];
85
+
86
+ obj.replace(0,0, before);
87
+ observer.observe('[]', 'length') ;
88
+
89
+ obj.replace(2,2) ;
90
+
91
+ T.validateAfter(obj, after, observer, YES);
92
+ });
93
+
94
+ });
@@ -0,0 +1,50 @@
1
+ // ==========================================================================
2
+ // Project: SproutCore Costello - Property Observing Library
3
+ // Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
4
+ // Portions ©2008-2009 Apple, Inc. All rights reserved.
5
+ // License: Licened under MIT license (see license.js)
6
+ // ==========================================================================
7
+
8
+ /*globals module test ok equals same CoreTest */
9
+
10
+ sc_require('debug/test_suites/array/base');
11
+
12
+ SC.ArraySuite.define(function(T) {
13
+
14
+ var observer, obj ;
15
+
16
+ module(T.desc("shiftObject"), {
17
+ setup: function() {
18
+ obj = T.newObject();
19
+ observer = T.observer(obj);
20
+ }
21
+ });
22
+
23
+ test("[].shiftObject() => [] + returns undefined + NO notify", function() {
24
+ observer.observe('[]', 'length') ;
25
+ equals(obj.shiftObject(), undefined, 'should return undefined') ;
26
+ T.validateAfter(obj, [], observer, NO, NO);
27
+ });
28
+
29
+ test("[X].shiftObject() => [] + notify", function() {
30
+ var exp = T.expected(1)[0];
31
+
32
+ obj.replace(0,0, [exp]);
33
+ observer.observe('[]', 'length') ;
34
+
35
+ equals(obj.shiftObject(), exp, 'should return shifted object') ;
36
+ T.validateAfter(obj, [], observer, YES, YES);
37
+ });
38
+
39
+ test("[A,B,C].shiftObject() => [B,C] + notify", function() {
40
+ var before = T.expected(3),
41
+ value = before[0],
42
+ after = before.slice(1);
43
+
44
+ obj.replace(0,0,before);
45
+ observer.observe('[]', 'length') ;
46
+ equals(obj.shiftObject(), value, 'should return shifted object') ;
47
+ T.validateAfter(obj, after, observer, YES);
48
+ });
49
+
50
+ });
@@ -0,0 +1,47 @@
1
+ // ==========================================================================
2
+ // Project: SproutCore Costello - Property Observing Library
3
+ // Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
4
+ // Portions ©2008-2009 Apple, Inc. All rights reserved.
5
+ // License: Licened under MIT license (see license.js)
6
+ // ==========================================================================
7
+
8
+ /*globals module test ok equals same CoreTest */
9
+
10
+ sc_require('debug/test_suites/array/base');
11
+
12
+ SC.ArraySuite.define(function(T) {
13
+
14
+ var observer, obj ;
15
+
16
+ module(T.desc("unshiftObject"), {
17
+ setup: function() {
18
+ obj = T.newObject();
19
+ observer = T.observer(obj);
20
+ }
21
+ });
22
+
23
+ test("returns unshifted object", function() {
24
+ var exp = T.expected(1)[0];
25
+ equals(obj.pushObject(exp), exp, 'should return receiver');
26
+ });
27
+
28
+
29
+ test("[].unshiftObject(X) => [X] + notify", function() {
30
+ var exp = T.expected(1);
31
+ observer.observe('[]', 'length') ;
32
+ obj.unshiftObject(exp[0]) ;
33
+ T.validateAfter(obj, exp, observer, YES);
34
+ });
35
+
36
+ test("[A,B,C].unshiftObject(X) => [X,A,B,C] + notify", function() {
37
+ var after = T.expected(4),
38
+ before = after.slice(1),
39
+ value = after[0];
40
+
41
+ obj.replace(0,0,before);
42
+ observer.observe('[]', 'length') ;
43
+ obj.unshiftObject(value) ;
44
+ T.validateAfter(obj, after, observer, YES);
45
+ });
46
+
47
+ });
@@ -7,8 +7,8 @@
7
7
 
8
8
  // note: SC.Observable also enhances array. make sure we are called after
9
9
  // SC.Observable so our version of unknownProperty wins.
10
- sc_require('mixins/observable') ;
11
- sc_require('mixins/enumerable') ;
10
+ sc_require('mixins/observable');
11
+ sc_require('mixins/enumerable');
12
12
  sc_require('system/range_observer');
13
13
 
14
14
  SC.OUT_OF_RANGE_EXCEPTION = "Index out of range" ;
@@ -33,60 +33,65 @@ SC.OUT_OF_RANGE_EXCEPTION = "Index out of range" ;
33
33
 
34
34
  You can use the methods defined in this module to access and modify array
35
35
  contents in a KVO-friendly way. You can also be notified whenever the
36
- membership if an array changes by observing the "[]" property.
37
-
36
+ membership if an array changes by changing the syntax of the property to
37
+ .observes('*myProperty.[]') .
38
+
38
39
  To support SC.Array in your own class, you must override two
39
40
  primitives to use it: replace() and objectAt().
40
-
41
+
41
42
  Note that the SC.Array mixin also incorporates the SC.Enumerable mixin. All
42
43
  SC.Array-like objects are also enumerable.
43
-
44
+
44
45
  @extends SC.Enumerable
45
46
  @since SproutCore 0.9.0
46
47
  */
47
48
  SC.Array = {
48
-
49
- /**
50
- @field {Number} length
51
49
 
52
- Your array must support the length property. your replace methods should
53
- set this property whenever it changes.
54
- */
55
- // length: 0,
50
+ /**
51
+ Walk like a duck - use isSCArray to avoid conflicts
52
+ */
53
+ isSCArray: YES,
56
54
 
57
- /**
58
- This is one of the primitves you must implement to support SC.Array. You
59
- should replace amt objects started at idx with the objects in the passed
60
- array. You should also call this.enumerableContentDidChange() ;
55
+ /**
56
+ @field {Number} length
57
+
58
+ Your array must support the length property. Your replace methods should
59
+ set this property whenever it changes.
60
+ */
61
+ // length: 0,
61
62
 
62
- @param {Number} idx
63
- Starting index in the array to replace. If idx >= length, then append to
64
- the end of the array.
65
-
66
- @param {Number} amt
67
- Number of elements that should be removed from the array, starting at
68
- *idx*.
69
-
70
- @param {Array} objects
71
- An array of zero or more objects that should be inserted into the array at
72
- *idx*
73
- */
63
+ /**
64
+ This is one of the primitves you must implement to support SC.Array. You
65
+ should replace amt objects started at idx with the objects in the passed
66
+ array. You should also call this.enumerableContentDidChange() ;
67
+
68
+ @param {Number} idx
69
+ Starting index in the array to replace. If idx >= length, then append to
70
+ the end of the array.
71
+
72
+ @param {Number} amt
73
+ Number of elements that should be removed from the array, starting at
74
+ *idx*.
75
+
76
+ @param {Array} objects
77
+ An array of zero or more objects that should be inserted into the array at
78
+ *idx*
79
+ */
74
80
  replace: function(idx, amt, objects) {
75
81
  throw "replace() must be implemented to support SC.Array" ;
76
82
  },
77
-
78
- /**
79
- This is one of the primitives you must implement to support SC.Array.
80
- Returns the object at the named index. If your object supports retrieving
81
- the value of an array item using get() (i.e. myArray.get(0)), then you do
82
- not need to implement this method yourself.
83
-
84
- @param {Number} idx
85
- The index of the item to return. If idx exceeds the current length,
86
- return null.
87
- */
88
- objectAt: function(idx)
89
- {
83
+
84
+ /**
85
+ This is one of the primitives you must implement to support SC.Array.
86
+ Returns the object at the named index. If your object supports retrieving
87
+ the value of an array item using get() (i.e. myArray.get(0)), then you do
88
+ not need to implement this method yourself.
89
+
90
+ @param {Number} idx
91
+ The index of the item to return. If idx exceeds the current length,
92
+ return null.
93
+ */
94
+ objectAt: function(idx) {
90
95
  if (idx < 0) return undefined ;
91
96
  if (idx >= this.get('length')) return undefined;
92
97
  return this.get(idx);
@@ -94,7 +99,7 @@ SC.Array = {
94
99
 
95
100
  /**
96
101
  @field []
97
-
102
+
98
103
  This is the handler for the special array content property. If you get
99
104
  this property, it will return this. If you set this property it a new
100
105
  array, it will replace the current content.
@@ -108,13 +113,13 @@ SC.Array = {
108
113
  return this ;
109
114
  }.property(),
110
115
 
111
- /**
112
- This will use the primitive replace() method to insert an object at the
113
- specified index.
114
-
115
- @param {Number} idx index of insert the object at.
116
- @param {Object} object object to insert
117
- */
116
+ /**
117
+ This will use the primitive replace() method to insert an object at the
118
+ specified index.
119
+
120
+ @param {Number} idx index of insert the object at.
121
+ @param {Object} object object to insert
122
+ */
118
123
  insertAt: function(idx, object) {
119
124
  if (idx > this.get('length')) throw SC.OUT_OF_RANGE_EXCEPTION ;
120
125
  this.replace(idx,0,[object]) ;
@@ -122,17 +127,48 @@ SC.Array = {
122
127
  },
123
128
 
124
129
  /**
125
- Remove an object at the specified index using the replace() primitive method.
126
-
127
- @param {Number} idx index of object to remove
130
+ Remove an object at the specified index using the replace() primitive
131
+ method. You can pass either a single index, a start and a length or an
132
+ index set.
133
+
134
+ If you pass a single index or a start and length that is beyond the
135
+ length this method will throw an SC.OUT_OF_RANGE_EXCEPTION
136
+
137
+ @param {Number|SC.IndexSet} start index, start of range, or index set
138
+ @param {Number} length length of passing range
139
+ @returns {Object} receiver
128
140
  */
129
- removeAt: function(idx) {
130
- if ((idx < 0) || (idx >= this.get('length'))) throw SC.OUT_OF_RANGE_EXCEPTION;
131
- var ret = this.objectAt(idx) ;
132
- this.replace(idx,1,[]);
133
- return ret ;
141
+ removeAt: function(start, length) {
142
+
143
+ var delta = 0, // used to shift range
144
+ empty = [];
145
+
146
+ if (typeof start === SC.T_NUMBER) {
147
+
148
+ if ((start < 0) || (start >= this.get('length'))) {
149
+ throw SC.OUT_OF_RANGE_EXCEPTION;
150
+ }
151
+
152
+ // fast case
153
+ if (length === undefined) {
154
+ this.replace(start,1,empty);
155
+ return this ;
156
+ } else {
157
+ start = SC.IndexSet.create(start, length);
158
+ }
159
+ }
160
+
161
+ this.beginPropertyChanges();
162
+ start.forEachRange(function(start, length) {
163
+ start -= delta ;
164
+ delta += length ;
165
+ this.replace(start, length, empty); // remove!
166
+ }, this);
167
+ this.endPropertyChanges();
168
+
169
+ return this ;
134
170
  },
135
-
171
+
136
172
  /**
137
173
  Search the array of this object, removing any occurrences of it.
138
174
  @param {object} obj object to remove
@@ -146,6 +182,20 @@ SC.Array = {
146
182
  return this ;
147
183
  },
148
184
 
185
+ /**
186
+ Search the array for the passed set of objects and remove any occurrences
187
+ of the.
188
+
189
+ @param {SC.Enumerable} objects the objects to remove
190
+ @returns {SC.Array} receiver
191
+ */
192
+ removeObjects: function(objects) {
193
+ this.beginPropertyChanges();
194
+ objects.forEach(function(obj) { this.removeObject(obj); }, this);
195
+ this.endPropertyChanges();
196
+ return this;
197
+ },
198
+
149
199
  /**
150
200
  Push the object onto the end of the array. Works just like push() but it
151
201
  is KVO-compliant.
@@ -155,6 +205,21 @@ SC.Array = {
155
205
  return obj ;
156
206
  },
157
207
 
208
+
209
+ /**
210
+ Add the objects in the passed numerable to the end of the array. Defers
211
+ notifying observers of the change until all objects are added.
212
+
213
+ @param {SC.Enumerable} objects the objects to add
214
+ @returns {SC.Array} receiver
215
+ */
216
+ pushObjects: function(objects) {
217
+ this.beginPropertyChanges();
218
+ objects.forEach(function(obj) { this.pushObject(obj); }, this);
219
+ this.endPropertyChanges();
220
+ return this;
221
+ },
222
+
158
223
  /**
159
224
  Pop object from array or nil if none are left. Works just like pop() but
160
225
  it is KVO-compliant.
@@ -187,6 +252,21 @@ SC.Array = {
187
252
  this.insertAt(0, obj) ;
188
253
  return obj ;
189
254
  },
255
+
256
+
257
+ /**
258
+ Adds the named objects to the beginning of the array. Defers notifying
259
+ observers until all objects have been added.
260
+
261
+ @param {SC.Enumerable} objects the objects to add
262
+ @returns {SC.Array} receiver
263
+ */
264
+ unshiftObjects: function(objects) {
265
+ this.beginPropertyChanges();
266
+ objects.forEach(function(obj) { this.unshiftObject(obj); }, this);
267
+ this.endPropertyChanges();
268
+ return this;
269
+ },
190
270
 
191
271
  /**
192
272
  Compares each item in the array. Returns true if they are equal.
@@ -227,7 +307,7 @@ SC.Array = {
227
307
  }) ;
228
308
  return ret ;
229
309
  },
230
-
310
+
231
311
  /**
232
312
  Generates a new array with only unique values from the contents of the
233
313
  old array.
@@ -242,14 +322,6 @@ SC.Array = {
242
322
  return ret ;
243
323
  },
244
324
 
245
- /**
246
- SC.CollectionView compatibility. SC.Array does not calculate groups by
247
- default. Use SC.ArrayController and/or SC.ResultSet instead.
248
-
249
- @type SC.Array
250
- */
251
- groups: [],
252
-
253
325
  rangeObserverClass: SC.RangeObserver,
254
326
 
255
327
  /**
@@ -261,48 +333,135 @@ SC.Array = {
261
333
  The callback for a range observer should have the signature:
262
334
 
263
335
  {{{
264
- function rangePropertyDidChange(array, objects, key)
336
+ function rangePropertyDidChange(array, objects, key, indexes, conext)
265
337
  }}}
266
338
 
267
339
  If the passed key is '[]' it means that the object itself changed.
268
340
 
269
341
  The return value from this method is an opaque reference to the
270
- ranger observer object. You can use this reference to destroy the
342
+ range observer object. You can use this reference to destroy the
271
343
  range observer when you are done with it or to update its range.
344
+
345
+ @param {SC.IndexSet} indexes indexes to observe
346
+ @param {Object} target object to invoke on change
347
+ @param {String|Function} method the method to invoke
348
+ @param {Object} context optional context
349
+ @returns {SC.RangeObserver} range observer
272
350
  */
273
- createRangeObserver: function(start, length, target, method) {
351
+ addRangeObserver: function(indexes, target, method, context) {
274
352
  var rangeob = this._array_rangeObservers;
275
- if (!rangeob) rangeob = this._array_rangeObservers = [] ;
276
-
353
+ if (!rangeob) rangeob = this._array_rangeObservers = SC.CoreSet.create() ;
354
+
277
355
  var C = this.rangeObserverClass ;
278
- var ret = C.create(this, start, length, target, method) ;
279
- rangeob.push(ret);
356
+ var isDeep = NO; //disable this feature for now
357
+ var ret = C.create(this, indexes, target, method, context, isDeep) ;
358
+ rangeob.add(ret);
359
+
360
+ // first time a range observer is added, begin observing the [] property
361
+ if (!this._array_isNotifyingRangeObservers) {
362
+ this._array_isNotifyingRangeObservers = YES ;
363
+ this.addObserver('[]', this, this._array_notifyRangeObservers);
364
+ }
365
+
280
366
  return ret ;
281
367
  },
282
368
 
283
- updateRangeObserver: function(rangeObserver, start, length) {
284
- return rangeObserver.update(this, start, length);
369
+ /**
370
+ Moves a range observer so that it observes a new range of objects on the
371
+ array. You must have an existing range observer object from a call to
372
+ addRangeObserver().
373
+
374
+ The return value should replace the old range observer object that you
375
+ pass in.
376
+
377
+ @param {SC.RangeObserver} rangeObserver the range observer
378
+ @param {SC.IndexSet} indexes new indexes to observe
379
+ @returns {SC.RangeObserver} the range observer (or a new one)
380
+ */
381
+ updateRangeObserver: function(rangeObserver, indexes) {
382
+ return rangeObserver.update(this, indexes);
285
383
  },
286
-
287
- destroyRangeObserver: function(rangeObserver) {
384
+
385
+ /**
386
+ Removes a range observer from the receiver. The range observer must
387
+ already be active on the array.
388
+
389
+ The return value should replace the old range observer object. It will
390
+ usually be null.
391
+
392
+ @param {SC.RangeObserver} rangeObserver the range observer
393
+ @returns {SC.RangeObserver} updated range observer or null
394
+ */
395
+ removeRangeObserver: function(rangeObserver) {
288
396
  var ret = rangeObserver.destroy(this);
289
397
  var rangeob = this._array_rangeObservers;
290
- if (rangeob) rangeob[rangeob.indexOf(rangeObserver)] = null ; // clear
398
+ if (rangeob) rangeob.remove(rangeObserver) ; // clear
291
399
  return ret ;
292
400
  },
293
401
 
294
- enumerableContentDidChange: function(start, length) {
295
- // notify range observers
296
- var rangeob = this._array_rangeObservers, len, idx, cur;
297
- if (rangeob && (len = rangeob.length)>0) {
298
- for(idx=0;idx<len;idx++) {
299
- cur = rangeob[idx];
300
- if ((length === undefined) || ((start < (cur.start + cur.length)) && ((start+length) > cur.start))) cur.rangeDidChange();
402
+ /**
403
+ Updates observers with content change. To support range observers,
404
+ you must pass three change parameters to this method. Otherwise this
405
+ method will assume the entire range has changed.
406
+
407
+ This also assumes you have already updated the length property.
408
+ @param {Number} start the starting index of the change
409
+ @param {Number} amt the final range of objects changed
410
+ @param {Number} delta if you added or removed objects, the delta change
411
+ @returns {SC.Array} receiver
412
+ */
413
+ enumerableContentDidChange: function(start, amt, delta) {
414
+ var rangeob = this._array_rangeObservers,
415
+ oldlen = this._array_oldLength,
416
+ newlen, length, changes ;
417
+
418
+ this.beginPropertyChanges();
419
+ this.notifyPropertyChange('length'); // flush caches
420
+
421
+ // schedule info for range observers
422
+ if (rangeob && rangeob.length>0) {
423
+
424
+ // if no oldLength has been cached, just assume 0
425
+ if (oldlen === undefined) oldlen = 0;
426
+ this._array_oldLength = newlen = this.get('length');
427
+
428
+ // normalize input parameters
429
+ // if delta was not passed, assume it is the different between the
430
+ // new and old length.
431
+ if (start === undefined) start = 0;
432
+ if (delta === undefined) delta = newlen - oldlen ;
433
+ if (delta !== 0 || amt === undefined) {
434
+ length = newlen - start ;
435
+ if (delta<0) length -= delta; // cover removed range as well
436
+ } else {
437
+ length = amt ;
301
438
  }
439
+
440
+ changes = this._array_rangeChanges;
441
+ if (!changes) changes = this._array_rangeChanges = SC.IndexSet.create();
442
+ changes.add(start, length);
302
443
  }
303
444
 
304
445
  this.notifyPropertyChange('[]') ;
446
+ this.endPropertyChanges();
447
+
305
448
  return this ;
449
+ },
450
+
451
+ /**
452
+ Observer fires whenever the '[]' property changes. If there are
453
+ range observers, will notify observers of change.
454
+ */
455
+ _array_notifyRangeObservers: function() {
456
+ var rangeob = this._array_rangeObservers,
457
+ changes = this._array_rangeChanges,
458
+ len = rangeob ? rangeob.length : 0,
459
+ idx, cur;
460
+
461
+ if (len > 0 && changes && changes.length > 0) {
462
+ for(idx=0;idx<len;idx++) rangeob[idx].rangeDidChange(changes);
463
+ changes.clear(); // reset for later notifications
464
+ }
306
465
  }
307
466
 
308
467
  } ;
@@ -335,19 +494,48 @@ SC.Array.slice = function(beginIndex, endIndex) {
335
494
  Returns the index for a particular object in the index.
336
495
 
337
496
  @param {Object} object the item to search for
497
+ @param {NUmber} startAt optional starting location to search, default 0
338
498
  @returns {Number} index of -1 if not found
339
499
  */
340
- SC.Array.indexOf = function(object) {
500
+ SC.Array.indexOf = function(object, startAt) {
341
501
  var idx, len = this.get('length');
342
- for(idx=0;idx<len;idx++) {
502
+
503
+ if (startAt === undefined) startAt = 0;
504
+ else startAt = (startAt < 0) ? Math.ceil(startAt) : Math.floor(startAt);
505
+ if (startAt < 0) startAt += len;
506
+
507
+ for(idx=startAt;idx<len;idx++) {
343
508
  if (this.objectAt(idx) === object) return idx ;
344
509
  }
345
510
  return -1;
346
511
  };
347
512
 
348
513
  // Some browsers do not support indexOf natively. Patch if needed
349
- if (!Array.prototype.indexOf) {
350
- Array.prototype.indexOf = SC.Array.indexOf;
514
+ if (!Array.prototype.indexOf) Array.prototype.indexOf = SC.Array.indexOf;
515
+
516
+ /**
517
+ Returns the last index for a particular object in the index.
518
+
519
+ @param {Object} object the item to search for
520
+ @param {NUmber} startAt optional starting location to search, default 0
521
+ @returns {Number} index of -1 if not found
522
+ */
523
+ SC.Array.lastIndexOf = function(object, startAt) {
524
+ var idx, len = this.get('length');
525
+
526
+ if (startAt === undefined) startAt = len-1;
527
+ else startAt = (startAt < 0) ? Math.ceil(startAt) : Math.floor(startAt);
528
+ if (startAt < 0) startAt += len;
529
+
530
+ for(idx=startAt;idx>=0;idx--) {
531
+ if (this.objectAt(idx) === object) return idx ;
532
+ }
533
+ return -1;
534
+ };
535
+
536
+ // Some browsers do not support lastIndexOf natively. Patch if needed
537
+ if (!Array.prototype.lastIndexOf) {
538
+ Array.prototype.lastIndexOf = SC.Array.lastIndexOf;
351
539
  }
352
540
 
353
541
  // ......................................................
@@ -357,47 +545,69 @@ if (!Array.prototype.indexOf) {
357
545
  // because working with arrays are so common.
358
546
  (function() {
359
547
  SC.mixin(Array.prototype, {
360
-
548
+
361
549
  // primitive for array support.
362
550
  replace: function(idx, amt, objects) {
551
+ if (this.isFrozen) throw SC.FROZEN_ERROR ;
363
552
  if (!objects || objects.length === 0) {
364
553
  this.splice(idx, amt) ;
365
554
  } else {
366
555
  var args = [idx, amt].concat(objects) ;
367
556
  this.splice.apply(this,args) ;
368
557
  }
369
-
558
+
370
559
  // if we replaced exactly the same number of items, then pass only the
371
560
  // replaced range. Otherwise, pass the full remaining array length
372
561
  // since everything has shifted
373
562
  var len = objects ? (objects.get ? objects.get('length') : objects.length) : 0;
374
- if (amt !== len) amt = this.length - idx;
375
- this.enumerableContentDidChange(idx, amt) ;
563
+ this.enumerableContentDidChange(idx, amt, len - amt) ;
376
564
  return this ;
377
565
  },
378
-
566
+
379
567
  // If you ask for an unknown property, then try to collect the value
380
568
  // from member items.
381
569
  unknownProperty: function(key, value) {
382
570
  var ret = this.reducedProperty(key, value) ;
383
- if (ret === undefined) {
384
- ret = (value === undefined) ? this.invoke('get', key) : null ;
571
+ if ((value !== undefined) && ret === undefined) {
572
+ ret = this[key] = value;
385
573
  }
386
574
  return ret ;
387
- },
575
+ }
388
576
 
577
+ });
389
578
 
390
- //indexOf is not implemente in IE for Array
391
- indexOf: function(obj) {
392
- var len=this.length;
393
- for(var i=0; i<len; i++){
394
- if(this[i]===obj){
395
- return i;
396
- }
579
+ // If browser did not implement indexOf natively, then override with
580
+ // specialized version
581
+ var indexOf = Array.prototype.indexOf;
582
+ if (!indexOf || (indexOf === SC.Array.indexOf)) {
583
+ Array.prototype.indexOf = function(object, startAt) {
584
+ var idx, len = this.length;
585
+
586
+ if (startAt === undefined) startAt = 0;
587
+ else startAt = (startAt < 0) ? Math.ceil(startAt) : Math.floor(startAt);
588
+ if (startAt < 0) startAt += len;
589
+
590
+ for(idx=startAt;idx<len;idx++) {
591
+ if (this[idx] === object) return idx ;
397
592
  }
398
593
  return -1;
399
- }
400
- }) ;
594
+ } ;
595
+ }
401
596
 
402
- })() ;
403
-
597
+ var lastIndexOf = Array.prototype.lastIndexOf ;
598
+ if (!lastIndexOf || (lastIndexOf === SC.Array.lastIndexOf)) {
599
+ Array.prototype.lastIndexOf = function(object, startAt) {
600
+ var idx, len = this.length;
601
+
602
+ if (startAt === undefined) startAt = len-1;
603
+ else startAt = (startAt < 0) ? Math.ceil(startAt) : Math.floor(startAt);
604
+ if (startAt < 0) startAt += len;
605
+
606
+ for(idx=startAt;idx>=0;idx--) {
607
+ if (this[idx] === object) return idx ;
608
+ }
609
+ return -1;
610
+ };
611
+ }
612
+
613
+ })();