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
@@ -5,8 +5,6 @@
5
5
  // License: Licened under MIT license (see license.js)
6
6
  // ==========================================================================
7
7
 
8
- sc_require('mixins/collection_item');
9
-
10
8
  SC.LIST_ITEM_ACTION_CANCEL = 'sc-list-item-cancel-action';
11
9
  SC.LIST_ITEM_ACTION_REFRESH = 'sc-list-item-cancel-refresh';
12
10
  SC.LIST_ITEM_ACTION_EJECT = 'sc-list-item-cancel-eject';
@@ -25,14 +23,14 @@ SC.LIST_ITEM_ACTION_EJECT = 'sc-list-item-cancel-eject';
25
23
  @extends SC.View
26
24
  @extends SC.Control
27
25
  @extends SC.InlineEditorDelegate
28
- @extends SC.CollectionItem
29
26
  @extends SC.Editable
27
+ @extends SC.StaticLayout
30
28
  @since SproutCore 1.0
31
29
  */
32
30
  SC.ListItemView = SC.View.extend(
31
+ SC.StaticLayout,
33
32
  SC.Control,
34
33
  SC.InlineEditorDelegate,
35
- SC.CollectionItem,
36
34
  /** @scope SC.ListItemView.prototype */ {
37
35
 
38
36
  classNames: ['sc-list-item-view'],
@@ -120,6 +118,24 @@ SC.ListItemView = SC.View.extend(
120
118
  */
121
119
  isEditing: NO,
122
120
 
121
+ /**
122
+ Indent to use when rendering a list item with an outline level > 0. The
123
+ left edge of the list item will be indented by this amount for each
124
+ outline level.
125
+ */
126
+ outlineIndent: 16,
127
+
128
+ /**
129
+ Outline level for this list item. Usually set by the collection view.
130
+ */
131
+ outlineLevel: 0,
132
+
133
+ /**
134
+ Disclosure state for this list item. Usually set by the collection view
135
+ when the list item is created.
136
+ */
137
+ disclosureState: SC.LEAF_NODE,
138
+
123
139
  contentPropertyDidChange: function() {
124
140
  if (this.get('isEditing')) this.discardEditing() ;
125
141
  this.displayDidChange();
@@ -135,54 +151,94 @@ SC.ListItemView = SC.View.extend(
135
151
  @returns {void}
136
152
  */
137
153
  render: function(context, firstTime) {
138
- var content = this.get('content') ;
139
- var del = this.displayDelegate ;
140
- var key, value ;
154
+ var content = this.get('content'),
155
+ del = this.displayDelegate,
156
+ level = this.get('outlineLevel'),
157
+ indent = this.get('outlineIndent'),
158
+ key, value, working ;
159
+
160
+ // outline level wrapper
161
+ working = context.begin("div").addClass("sc-outline");
162
+ if (level>=0 && indent>0) working.addStyle("left", indent*(level+1));
163
+
164
+ // handle disclosure triangle
165
+ value = this.get('disclosureState');
166
+ if (value !== SC.LEAF_NODE) {
167
+ this.renderDisclosure(working, value);
168
+ context.addClass('has-disclosure');
169
+ }
170
+
141
171
 
142
172
  // handle checkbox
143
- key = this.getDelegateProperty(del, 'contentCheckboxKey') ;
173
+ key = this.getDelegateProperty('contentCheckboxKey', del) ;
144
174
  if (key) {
145
175
  value = content ? (content.get ? content.get(key) : content[key]) : NO ;
146
- this.renderCheckbox(context, value);
176
+ this.renderCheckbox(working, value);
147
177
  context.addClass('has-checkbox');
148
178
  }
149
179
 
150
180
  // handle icon
151
- if (this.getDelegateProperty(del, 'hasContentIcon')) {
152
- key = this.getDelegateProperty(del,'contentIconKey') ;
181
+ if (this.getDelegateProperty('hasContentIcon', del)) {
182
+ key = this.getDelegateProperty('contentIconKey', del) ;
153
183
  value = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
154
184
 
155
- this.renderIcon(context, value);
185
+ this.renderIcon(working, value);
156
186
  context.addClass('has-icon');
157
187
  }
158
188
 
159
189
  // handle label -- always invoke
160
- key = this.getDelegateProperty(del, 'contentValueKey') ;
190
+ key = this.getDelegateProperty('contentValueKey', del) ;
161
191
  value = (key && content) ? (content.get ? content.get(key) : content[key]) : content ;
162
192
  if (value && SC.typeOf(value) !== SC.T_STRING) value = value.toString();
163
193
  if (this.get('escapeHTML')) value = SC.RenderContext.escapeHTML(value);
164
- this.renderLabel(context, value);
194
+ this.renderLabel(working, value);
165
195
 
166
196
  // handle unread count
167
- key = this.getDelegateProperty(del, 'contentUnreadCountKey') ;
197
+ key = this.getDelegateProperty('contentUnreadCountKey', del) ;
168
198
  value = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
169
- if (!SC.none(value) && (value !== 0)) this.renderCount(context, value) ;
199
+ if (!SC.none(value) && (value !== 0)) this.renderCount(working, value) ;
170
200
 
171
201
  // handle action
172
- key = this.getDelegateProperty(del, 'listItemActionProperty') ;
202
+ key = this.getDelegateProperty('listItemActionProperty', del) ;
173
203
  value = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
174
204
  if (value) {
175
- this.renderAction(context, value);
205
+ this.renderAction(working, value);
176
206
  context.addClass('has-action');
177
207
  }
178
208
 
179
209
  // handle branch
180
- if (this.getDelegateProperty(del, 'hasContentBranch')) {
181
- key = this.getDelegateProperty(del, 'contentIsBranchKey');
210
+ if (this.getDelegateProperty('hasContentBranch', del)) {
211
+ key = this.getDelegateProperty('contentIsBranchKey', del);
182
212
  value = (key && content) ? (content.get ? content.get(key) : content[key]) : NO ;
183
- this.renderBranch(context, value);
213
+ this.renderBranch(working, value);
184
214
  context.addClass('has-branch');
185
215
  }
216
+
217
+ context = working.end();
218
+ },
219
+
220
+ /**
221
+ Adds a disclosure triangle with the appropriate display to the content.
222
+ This method will only be called if the disclosure state of the view is
223
+ something other than SC.LEAF_NODE.
224
+
225
+ @param {SC.RenderContext} context the render context
226
+ @param {Boolean} state YES, NO or SC.MIXED_STATE
227
+ @returns {void}
228
+ */
229
+ renderDisclosure: function(context, state) {
230
+ var key = (state === SC.BRANCH_OPEN) ? "open" : "closed",
231
+ cache = this._scli_disclosureHtml,
232
+ html, tmp;
233
+
234
+ if (!cache) cache = this.constructor.prototype._scli_disclosureHtml = {};
235
+ html = cache[key];
236
+
237
+ if (!html) {
238
+ html = cache[key] = '<img src="%@" class="disclosure button %@" />'.fmt(SC.BLANK_IMAGE_URL, key);
239
+ }
240
+
241
+ context.push(html);
186
242
  },
187
243
 
188
244
  /**
@@ -195,20 +251,31 @@ SC.ListItemView = SC.View.extend(
195
251
  @returns {void}
196
252
  */
197
253
  renderCheckbox: function(context, state) {
198
- context = context.begin('a').attr('href', 'javascript:;')
199
- .classNames(SC.CheckboxView.prototype.classNames);
200
254
 
201
- // set state on html
202
- if (state === SC.MIXED_STATE) {
203
- context.addClass('mixed');
204
- } else context.setClass('sel', state);
255
+ var key = (state === SC.MIXED_STATE) ? "mixed" : state ? "sel" : "nosel",
256
+ cache = this._scli_checkboxHtml,
257
+ html, tmp;
258
+
259
+ if (!cache) cache = this.constructor.prototype._scli_checkboxHtml = {};
260
+ html = cache[key];
205
261
 
206
- // now add inner content. note we do not add a real checkbox because
207
- // we don't want to have to setup a change observer on it.
208
- context.push('<img src="', SC.BLANK_IMAGE_URL, '" class="button" />');
262
+ if (!html) {
263
+ tmp = SC.RenderContext('a').attr('href', 'javascript:;')
264
+ .classNames(SC.CheckboxView.prototype.classNames);
265
+
266
+ // set state on html
267
+ if (state === SC.MIXED_STATE) tmp.addClass('mixed');
268
+ else tmp.setClass('sel', state);
269
+
270
+ // now add inner content. note we do not add a real checkbox because
271
+ // we don't want to have to setup a change observer on it.
272
+ tmp.push('<img src="', SC.BLANK_IMAGE_URL, '" class="button" />');
273
+
274
+ // apply edit
275
+ html = cache[key] = tmp.join();
276
+ }
209
277
 
210
- // apply edit
211
- context.end();
278
+ context.push(html);
212
279
  },
213
280
 
214
281
  /**
@@ -324,10 +391,20 @@ SC.ListItemView = SC.View.extend(
324
391
  */
325
392
  _isInsideCheckbox: function(evt) {
326
393
  var del = this.displayDelegate ;
327
- var checkboxKey = this.getDelegateProperty(del, 'contentCheckboxKey') ;
394
+ var checkboxKey = this.getDelegateProperty('contentCheckboxKey', del) ;
328
395
  return checkboxKey && this._isInsideElementWithClassName('sc-checkbox-view', evt);
329
396
  },
330
397
 
398
+ /** @private
399
+ Returns YES if the list item has a disclosure triangle and the event
400
+ occurred inside of it.
401
+ */
402
+ _isInsideDisclosure: function(evt) {
403
+ if (this.get('disclosureSate')===SC.LEAF_NODE) return NO;
404
+ return this._isInsideElementWithClassName('disclosure', evt);
405
+ },
406
+
407
+
331
408
  /** @private
332
409
  mouseDown is handled only for clicks on the checkbox view or or action
333
410
  button.
@@ -339,43 +416,81 @@ SC.ListItemView = SC.View.extend(
339
416
  this._isMouseDownOnCheckbox = YES ;
340
417
  this._isMouseInsideCheckbox = YES ;
341
418
  return YES ; // listItem should handle this event
342
- }
419
+
420
+ } else if (this._isInsideDisclosure(evt)) {
421
+ this._addDisclosureActiveState();
422
+ this._isMouseDownOnDisclosure = YES;
423
+ this._isMouseInsideDisclosure = YES ;
424
+ return YES;
425
+
426
+ }
427
+
343
428
  return NO ; // let the collection view handle this event
344
429
  },
345
430
 
346
431
  mouseUp: function(evt) {
347
- var ret= NO ;
348
- // if mouse was down in checkbox -- then handle mouse up, otherwise
349
- // allow parent view to handle event.
350
- if (this._isMouseDownOnCheckbox) {
432
+ var ret= NO, del, checkboxKey, content, state, idx, set;
433
+
434
+ // if mouse was down in checkbox -- then handle mouse up, otherwise
435
+ // allow parent view to handle event.
436
+ if (this._isMouseDownOnCheckbox) {
351
437
 
352
- // update only if mouse inside on mouse up...
353
- if (this._isInsideCheckbox(evt)) {
354
- var del = this.displayDelegate ;
355
- var checkboxKey = this.getDelegateProperty(del, 'contentCheckboxKey') ;
356
- var content = this.get('content') ;
357
- if (content && content.get) {
358
- var value = content.get(checkboxKey) ;
359
- value = (value === SC.MIXED_STATE) ? YES : !value ;
360
- content.set(checkboxKey, value) ; // update content
361
- this.displayDidChange(); // repaint view...
362
- }
363
- }
438
+ // update only if mouse inside on mouse up...
439
+ if (this._isInsideCheckbox(evt)) {
440
+ del = this.displayDelegate ;
441
+ checkboxKey = this.getDelegateProperty('contentCheckboxKey', del);
442
+ content = this.get('content') ;
443
+ if (content && content.get) {
444
+ var value = content.get(checkboxKey) ;
445
+ value = (value === SC.MIXED_STATE) ? YES : !value ;
446
+ content.set(checkboxKey, value) ; // update content
447
+ this.displayDidChange(); // repaint view...
448
+ }
449
+ }
450
+
451
+ this._removeCheckboxActiveState() ;
452
+ ret = YES ;
453
+
454
+ // if mouse as down on disclosure -- handle mosue up. otherwise pass on
455
+ // to parent.
456
+ } else if (this._isMouseDownOnDisclosure) {
457
+ if (this._isInsideDisclosure(evt)) {
458
+ state = this.get('disclosureState');
459
+ idx = this.get('contentIndex');
460
+ set = (!SC.none(idx)) ? SC.IndexSet.create(idx) : null;
461
+ del = this.get('displayDelegate');
462
+
463
+ if (state === SC.BRANCH_OPEN) {
464
+ if (set && del && del.collapse) del.collapse(set);
465
+ else this.set('disclosureState', SC.BRANCH_CLOSED);
466
+ this.displayDidChange();
467
+
468
+ } else if (state === SC.BRANCH_CLOSED) {
469
+ if (set && del && del.expand) del.expand(set);
470
+ else this.set('disclosureState', SC.BRANCH_OPEN);
471
+ this.displayDidChange();
472
+ }
473
+ }
364
474
 
365
- this._removeCheckboxActiveState() ;
366
- ret = YES ;
367
- }
475
+ this._removeDisclosureActiveState();
476
+ ret = YES ;
477
+ }
368
478
 
369
- // clear cached info
370
- this._isMouseInsideCheckbox = this._isMouseDownOnCheckbox = NO ;
371
- return ret ;
479
+ // clear cached info
480
+ this._isMouseInsideCheckbox = this._isMouseDownOnCheckbox = NO ;
481
+ this._isMouseDownOnDisclosure = this._isMouseInsideDisclosure = NO ;
482
+ return ret ;
372
483
  },
373
484
 
374
485
  mouseExited: function(evt) {
375
486
  if (this._isMouseDownOnCheckbox) {
376
487
  this._removeCheckboxActiveState() ;
377
488
  this._isMouseInsideCheckbox = NO ;
378
- }
489
+
490
+ } else if (this._isMouseDownOnDisclosure) {
491
+ this._removeDisclosureActiveState();
492
+ this._isMouseInsideDisclosure = NO ;
493
+ }
379
494
  return NO ;
380
495
  },
381
496
 
@@ -383,7 +498,11 @@ SC.ListItemView = SC.View.extend(
383
498
  if (this._isMouseDownOnCheckbox) {
384
499
  this._addCheckboxActiveState() ;
385
500
  this._isMouseInsideCheckbox = YES ;
386
- }
501
+
502
+ } else if (this._isMouseDownOnDisclosure) {
503
+ this._addDisclosureActiveState();
504
+ this._isMouseInsideDisclosure = YES;
505
+ }
387
506
  return NO ;
388
507
  },
389
508
 
@@ -395,20 +514,30 @@ SC.ListItemView = SC.View.extend(
395
514
  _removeCheckboxActiveState: function() {
396
515
  this.$('.sc-checkbox-view').removeClass('active');
397
516
  },
517
+
518
+ _addDisclosureActiveState: function() {
519
+ var enabled = this.get('isEnabled');
520
+ this.$('img.disclosure').setClass('active', enabled);
521
+ },
522
+
523
+ _removeDisclosureActiveState: function() {
524
+ this.$('img.disclosure').removeClass('active');
525
+ },
398
526
 
399
527
  /**
400
- Returns true if a click is on the label text itself to enable editing.
528
+ Returns true if a click is on the label text itself to enable editing.
401
529
 
402
- Note that if you override renderLabel(), you probably need to override
403
- this as well.
530
+ Note that if you override renderLabel(), you probably need to override
531
+ this as well, or just $label() if you only want to control the element
532
+ returned.
404
533
 
405
- @param evt {Event} the mouseUp event.
406
- @returns {Boolean} YES if the mouse was on the content element itself.
534
+ @param evt {Event} the mouseUp event.
535
+ @returns {Boolean} YES if the mouse was on the content element itself.
407
536
  */
408
537
  contentHitTest: function(evt) {
409
538
  // if not content value is returned, not much to do.
410
539
  var del = this.displayDelegate ;
411
- var labelKey = this.getDelegateProperty(del, 'contentValueKey') ;
540
+ var labelKey = this.getDelegateProperty('contentValueKey', del) ;
412
541
  if (!labelKey) return NO ;
413
542
 
414
543
  // get the element to check for.
@@ -429,17 +558,24 @@ SC.ListItemView = SC.View.extend(
429
558
 
430
559
  var content = this.get('content') ;
431
560
  var del = this.displayDelegate ;
432
- var labelKey = this.getDelegateProperty(del, 'contentValueKey') ;
561
+ var labelKey = this.getDelegateProperty('contentValueKey', del) ;
433
562
  var v = (labelKey && content && content.get) ? content.get(labelKey) : null ;
434
563
 
435
- var f = this.get('frame') ;
564
+ var f= this.computeFrameWithParentFrame(null);
565
+ var parent = this.get('parentView');
566
+ var pf = parent.get('frame');
567
+
436
568
  var el = this.$label() ;
437
- if (!el) return NO ;
569
+ var offset = SC.viewportOffset(el[0]);
570
+ if (!el || el.get('length')===0) return NO ;
438
571
 
439
572
  // if the label has a large line height, try to adjust it to something
440
573
  // more reasonable so that it looks right when we show the popup editor.
441
574
  var oldLineHeight = el.css('lineHeight');
442
575
  var fontSize = el.css('fontSize');
576
+ var top = this.$().css('top');
577
+ if(top) top = parseInt(top.substring(0,top.length-2),00);
578
+ else top =0;
443
579
  var lineHeight = oldLineHeight;
444
580
  var lineHeightShift = 0;
445
581
 
@@ -451,17 +587,18 @@ SC.ListItemView = SC.View.extend(
451
587
  } else oldLineHeight = null ;
452
588
  }
453
589
 
454
- f.x += el.offsetLeft ;
455
- f.y += el.offsetTop + lineHeightShift - 2;
456
- f.height = el.offsetHeight ;
457
- f.width = (f.width - 30 - el.offsetLeft) ;
458
- f = this.convertFrameToView(f, null) ;
590
+ f.x = offset.x;
591
+ f.y = offset.y+top + lineHeightShift ;
592
+ f.height = el[0].offsetHeight ;
593
+ f.width = (f.width - 30 - el[0].offsetLeft) ;
459
594
 
460
595
  var ret = SC.InlineTextFieldView.beginEditing({
461
596
  frame: f,
462
597
  exampleElement: el,
463
598
  delegate: this,
464
- value: v
599
+ value: v,
600
+ multiline: NO,
601
+ isCollection: YES
465
602
  }) ;
466
603
 
467
604
  // restore old line height for original item if the old line height
@@ -513,7 +650,7 @@ SC.ListItemView = SC.View.extend(
513
650
 
514
651
  var content = this.get('content') ;
515
652
  var del = this.displayDelegate ;
516
- var labelKey = this.getDelegateProperty(del, 'contentValueKey') ;
653
+ var labelKey = this.getDelegateProperty('contentValueKey', del) ;
517
654
  if (labelKey && content && content.set) {
518
655
  content.set(labelKey, finalValue) ;
519
656
  }
@@ -4,21 +4,36 @@
4
4
  // Portions ©2008-2009 Apple, Inc. All rights reserved.
5
5
  // License: Licened under MIT license (see license.js)
6
6
  // ==========================================================================
7
- sc_require('views/button');
8
- sc_require('views/separator');
7
+ sc_require('views/button') ;
8
+ sc_require('views/separator') ;
9
+
10
+ // Constants
11
+ SC.BENCHMARK_MENU_ITEM_RENDER = YES ;
9
12
 
10
13
  /**
11
14
  @class SC.MenuItemView
12
15
  @extends SC.ButtonView
13
16
  @since SproutCore 1.0
14
17
  */
15
- SC.MenuItemView = SC.ButtonView.extend(
18
+ SC.MenuItemView = SC.ButtonView.extend( SC.ContentDisplay,
16
19
  /** @scope SC.MenuItemView.prototype */{
20
+
21
+
17
22
  classNames: ['sc-menu-item'],
18
23
  tagName: 'div',
19
- anchor:null,
20
- parentPane:null,
21
- acceptsFirstResponder:YES,
24
+
25
+ /**
26
+ This provides the parentPane for the current MenuItemView
27
+ */
28
+ parentPane: null,
29
+
30
+ /**
31
+ @private
32
+ @property
33
+ @type {Boolean}
34
+ */
35
+ acceptsFirstResponder: YES,
36
+
22
37
  // ..........................................................
23
38
  // KEY PROPERTIES
24
39
  //
@@ -29,21 +44,6 @@ SC.MenuItemView = SC.ButtonView.extend(
29
44
  */
30
45
  content: null,
31
46
 
32
- /**
33
- The cached Content to verify that the content has changed or not
34
-
35
- @type Object
36
- */
37
- cachedContent:null,
38
-
39
- /**
40
- This returns true if the child view is a menu list view.
41
- This property can be over written to have other child views as well.
42
-
43
- @type View
44
- */
45
- childView: null,
46
-
47
47
  /**
48
48
  This returns true if the child view is a menu list view.
49
49
  This property can be over written to have other child views as well.
@@ -53,16 +53,17 @@ SC.MenuItemView = SC.ButtonView.extend(
53
53
  isSubMenuViewVisible: null,
54
54
 
55
55
  /**
56
- This will return true if the menu item is a seperator.
56
+ This will return true if the menu item is a separator.
57
57
 
58
58
  @type Boolean
59
59
  */
60
- isSeperator: NO,
60
+ isSeparator: NO,
61
61
 
62
62
  /**
63
63
  (displayDelegate) The name of the property used for label itself
64
64
  If null, then the content object itself will be used.
65
-
65
+
66
+ @readOnly
66
67
  @type String
67
68
  */
68
69
  contentValueKey: null,
@@ -70,9 +71,10 @@ SC.MenuItemView = SC.ButtonView.extend(
70
71
  /**
71
72
  (displayDelegate) The name of the property used to determine if the menu
72
73
  item is a branch or leaf (i.e. if the branch arow should be displayed to
73
- the right edge.)
74
+ the right edge.)
74
75
  If this is null, then the branch arrow will be collapsed.
75
76
 
77
+ @readOnly
76
78
  @type String
77
79
  */
78
80
  contentIsBranchKey: null,
@@ -80,6 +82,7 @@ SC.MenuItemView = SC.ButtonView.extend(
80
82
  /**
81
83
  The name of the property which will set the image for the short cut keys
82
84
 
85
+ @readOnly
83
86
  @type String
84
87
  */
85
88
  shortCutKey: null,
@@ -87,29 +90,32 @@ SC.MenuItemView = SC.ButtonView.extend(
87
90
  /**
88
91
  The name of the property which will set the icon image for the menu item.
89
92
 
93
+ @readOnly
90
94
  @type String
91
95
  */
92
96
  contentIconKey: null,
93
97
 
94
- /*
98
+ /**
95
99
  The name of the property which will set the checkbox image for the menu
96
100
  item.
97
101
 
102
+ @readOnly
98
103
  @type String
99
104
  */
100
105
  contentCheckboxKey: null,
101
106
 
102
- /*
107
+ /**
103
108
  The name of the property which will set the checkbox image for the menu
104
109
  item.
105
110
 
111
+ @readOnly
106
112
  @type String
107
113
  */
108
114
  contentActionKey: null,
109
115
 
110
116
  /**
111
117
  The name of the property which will set the checkbox state
112
-
118
+
113
119
  @type Boolean
114
120
  */
115
121
  isCheckboxChecked: NO,
@@ -141,18 +147,31 @@ SC.MenuItemView = SC.ButtonView.extend(
141
147
  Sub Menu Items
142
148
  If this is null then there is no branching
143
149
 
144
- @type View
150
+ @type MenuPane
151
+ */
152
+ subMenu: null,
153
+
154
+ /**
155
+ This property specifies whether this menu item is currently in focus
156
+
157
+ @type Boolean
145
158
  */
146
- subMenu:null,
159
+ hasMouseExited: NO,
160
+
161
+ /**
162
+ Anchor for the Parent Menu of which the Menu Item is part of
163
+
164
+ @type ButtonView/MenuItemView
165
+ */
166
+ anchor: null,
147
167
 
148
- hasMouseExited:NO,
149
168
  /**
150
169
  This will hold the properties that can trigger a change in the diplay
151
170
  */
152
171
  displayProperties: ['contentValueKey', 'contentIconKey', 'shortCutKey',
153
172
  'contentIsBranchKey','isCheckboxChecked','itemHeight',
154
- 'subMenu'],
155
-
173
+ 'subMenu','isEnabled','content'],
174
+ contentDisplayProperties: 'title value icon separator action checkbox shortcut branchItem subMenu'.w(),
156
175
  /**
157
176
  Fills the passed html-array with strings that can be joined to form the
158
177
  innerHTML of the receiver element. Also populates an array of classNames
@@ -163,86 +182,81 @@ SC.MenuItemView = SC.ButtonView.extend(
163
182
  @returns {void}
164
183
  */
165
184
  render: function(context, firstTime) {
166
- if (SC.BENCHMARK_RENDER) {
167
-
168
- var bkey = '%@.render'.fmt(this) ;
169
- SC.Benchmark.start(bkey);
185
+ var bkey ;
186
+ if (SC.BENCHMARK_MENU_ITEM_RENDER) {
187
+ bkey = '%@.render'.fmt(this) ;
188
+ SC.Benchmark.start(bkey) ;
170
189
  }
171
-
172
190
  var content = this.get('content') ;
173
- if (this.cachedContent && this.cachedContent == content) return;
174
- this.cachedContent = content ;
175
-
176
191
  var del = this.displayDelegate ;
177
- var key, value ;
192
+ var key, val ;
178
193
  var ic ;
179
- var menu = this.parentMenu();
194
+ var menu = this.parentMenu() ;
180
195
  var itemWidth = this.get('itemWidth') || menu.layout.width ;
181
- var itemHeight = this.get('itemHeight') || menu.layout.height ;
182
- this.set('itemWidth',itemWidth);
183
- this.set('itemHeight',itemHeight);
184
- //handle seperator
185
- ic = context.begin('a').attr('href', 'javascript:;') ;
186
- key = this.getDelegateProperty(del, 'isSeparatorKey') ;
187
- value = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
188
- if (value) {
189
- this.set('itemHeight',5) ;
190
- this.adjust({height:this.get('itemHeight')}) ;
191
- ic = ic.begin('span').addClass('separator') ;
192
- ic = ic.end() ;
193
- return ;
196
+ var itemHeight = this.get('itemHeight') || 20 ;
197
+ this.set('itemWidth',itemWidth) ;
198
+ this.set('itemHeight',itemHeight) ;
199
+
200
+ if(!this.get('isEnabled')) context.addClass('disabled') ;
201
+
202
+ //handle separator
203
+ ic = context.begin('a').attr('href', 'javascript: ;') ;
204
+ key = this.getDelegateProperty('isSeparatorKey', del) ;
205
+ val = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
206
+ if (val) {
207
+ //ic.begin('span').addClass('separator').end() ;
208
+ ic.push("<span class='separator'></span>") ;
194
209
  } else {
195
- //handle checkbox
196
- key = this.getDelegateProperty(del, 'contentCheckboxKey') ;
210
+ // handle checkbox
211
+ key = this.getDelegateProperty('contentCheckboxKey', del) ;
197
212
  if (key) {
198
- value = content ? (content.get ? content.get(key) : content[key]) : NO ;
199
- if (value) {
200
- ic.begin('div').addClass('checkbox').end() ;
213
+ val = content ? (content.get ? content.get(key) : content[key]) : NO ;
214
+ if (val) {
215
+ ic.begin('div').addClass('checkbox').end() ;
201
216
  }
202
217
  }
203
218
 
204
219
  // handle image -- always invoke
205
- key = this.getDelegateProperty(del, 'contentIconKey') ;
206
- value = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
207
- if(value && SC.typeOf(value) !== SC.T_STRING) value = value.toString() ;
208
- if(value) this.renderImage(ic, value) ;
220
+ key = this.getDelegateProperty('contentIconKey', del) ;
221
+ val = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
222
+ if(val && SC.typeOf(val) !== SC.T_STRING) val = val.toString() ;
223
+ if(val) this.renderImage(ic, val) ;
209
224
 
210
225
  // handle label -- always invoke
211
- key = this.getDelegateProperty(del, 'contentValueKey') ;
212
- value = (key && content) ? (content.get ? content.get(key) : content[key]) : content ;
213
- if (value && SC.typeOf(value) !== SC.T_STRING) value = value.toString();
214
- this.renderLabel(ic, value||'') ;
226
+ key = this.getDelegateProperty('contentValueKey', del) ;
227
+ val = (key && content) ? (content.get ? content.get(key) : content[key]) : content ;
228
+ if (val && SC.typeOf(val) !== SC.T_STRING) val = val.toString() ;
229
+ this.renderLabel(ic, val||'') ;
215
230
 
216
231
  // handle branch
217
- key = this.getDelegateProperty(del, 'contentIsBranchKey') ;
218
- value = (key && content) ? (content.get ? content.get(key) : content[key]) : NO ;
219
- if (value) {
220
- this.renderBranch(ic, value) ;
232
+ key = this.getDelegateProperty('contentIsBranchKey', del) ;
233
+ val = (key && content) ? (content.get ? content.get(key) : content[key]) : NO ;
234
+ if (val) {
235
+ this.renderBranch(ic, val) ;
221
236
  ic.addClass('has-branch') ;
222
237
  } else { // handle action
223
238
 
224
- key = this.getDelegateProperty(del, 'action') ;
225
- value = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
226
- if (value && isNaN(value)) this.set('action', value) ;
239
+ key = this.getDelegateProperty('action', del) ;
240
+ val = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
241
+ if (val && isNaN(val)) this.set('action', val) ;
227
242
 
228
- key = this.getDelegateProperty(del, 'target') ;
229
- value = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
230
- if (value && isNaN(value)) this.set('target', value) ;
243
+ key = this.getDelegateProperty('target', del) ;
244
+ val = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
245
+ if (val && isNaN(val)) this.set('target', val) ;
231
246
 
232
247
  // handle short cut keys
233
- if (this.getDelegateProperty(del, 'shortCutKey')) {
234
- /* handle short cut keys here */
235
- key = this.getDelegateProperty(del, 'shortCutKey') ;
236
- value = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
237
- if (value) {
238
- this.renderShortcut(ic, value) ;
248
+ if (this.getDelegateProperty('shortCutKey', del)) {
249
+ key = this.getDelegateProperty('shortCutKey', del) ;
250
+ val = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
251
+ if (val) {
252
+ this.renderShortcut(ic, val) ;
239
253
  ic.addClass('shortcutkey') ;
240
254
  }
241
255
  }
242
256
  }
243
257
  }
244
- ic.end();
245
- if (SC.BENCHMARK_RENDER) SC.Benchmark.end(bkey);
258
+ ic.end() ;
259
+ if (SC.BENCHMARK_MENU_ITEM_RENDER) SC.Benchmark.end(bkey) ;
246
260
  },
247
261
 
248
262
  /**
@@ -250,13 +264,13 @@ SC.MenuItemView = SC.ButtonView.extend(
250
264
  return your own custom HTML
251
265
 
252
266
  @param {SC.RenderContext} context the render context
253
- @param {Boolean} hasBranch YES if the item has a branch
267
+ @param {String} the source path of the image
254
268
  @returns {void}
255
269
  */
256
270
  renderImage: function(context, image) {
257
271
  // get a class name and url to include if relevant
258
272
 
259
- var url = undefined, className = undefined ;
273
+ var url, className ;
260
274
  if (image && SC.ImageView.valueIsUrl(image)) {
261
275
  url = image ;
262
276
  className = '' ;
@@ -268,6 +282,15 @@ SC.MenuItemView = SC.ButtonView.extend(
268
282
  context.begin('img').addClass('image').addClass(className).attr('src', url).end() ;
269
283
  },
270
284
 
285
+ /**
286
+ Generates the label used to represent the menu item. override this to
287
+ return your own custom HTML
288
+
289
+ @param {SC.RenderContext} context the render context
290
+ @param {String} menu item name
291
+ @returns {void}
292
+ */
293
+
271
294
  renderLabel: function(context, label) {
272
295
  context.push("<span class='value'>"+label+"</span>") ;
273
296
  },
@@ -293,27 +316,120 @@ SC.MenuItemView = SC.ButtonView.extend(
293
316
  return your own custom HTML
294
317
 
295
318
  @param {SC.RenderContext} context the render context
296
- @param {Boolean} hasBranch YES if the item has a branch
319
+ @param {String} the shortcut key string to be displayed with menu item name
297
320
  @returns {void}
298
321
  */
299
322
  renderShortcut: function(context, shortcut) {
300
- context.push('<span class = "shortCut">' + shortcut + '</span>') ;
323
+ context.push('<span class = "shortcut">' + shortcut + '</span>') ;
301
324
  },
302
325
 
303
- superClass: NO,
326
+ /**
327
+ This method is used to fetch the Menu Item View to which the
328
+ Parent Menu Pane is anchored
329
+ to
304
330
 
331
+ @param {}
332
+ @returns MenuPane
333
+ */
305
334
  getAnchor: function() {
306
- var anchor = this.get('anchor');
307
- if(anchor.kindOf(SC.MenuItemView)) return anchor;
308
- return null;
335
+ var anchor = this.get('anchor') ;
336
+ if(anchor && anchor.kindOf(SC.MenuItemView)) return anchor ;
337
+ return null ;
338
+ },
339
+
340
+ isCurrent: NO,
341
+
342
+ /**
343
+ This method checks if the menu item is a separator.
344
+
345
+ @param {}
346
+ @returns Boolean
347
+ */
348
+ isSeparator: function() {
349
+ var content = this.get('content') ;
350
+ var del = this.displayDelegate ;
351
+ var key = this.getDelegateProperty('isSeparatorKey', del) ;
352
+ var val = (key && content) ? (content.get ? content.get(key) : content[key]) : null ;
353
+ if (val) return YES ;
354
+ return NO ;
355
+ },
356
+
357
+ /**
358
+ Checks if a menu is a sub menu, during branching.
359
+
360
+ @param {}
361
+ @returns MenuPane
362
+ */
363
+ isSubMenuAMenuPane: function() {
364
+ var content = this.get('content') ;
365
+ var subMenu = content.get('subMenu') ;
366
+ if(subMenu && subMenu.kindOf(SC.MenuPane)) return subMenu ;
367
+ return NO ;
309
368
  },
369
+
370
+
371
+ /**
372
+ This method will check whether the current Menu Item is still
373
+ selected and then create a submenu accordignly.
374
+
375
+ @param {}
376
+ @returns void
377
+ */
378
+ branching: function() {
379
+ if(this.get('hasMouseExited')) {
380
+ this.set('hasMouseExited',NO) ;
381
+ return ;
382
+ }
383
+ this.createSubMenu() ;
384
+ },
385
+
386
+ /**
387
+ This method will remove the focus of the current selected menu item.
388
+
389
+ @param {}
390
+ */
391
+ loseFocus: function() {
392
+ if(!this.isSubMenuAMenuPane()) {
393
+ this.set('hasMouseExited',YES) ;
394
+ this.set('isSelected',NO) ;
395
+ this.$().removeClass('focus') ;
396
+ }
397
+ },
398
+
399
+ /**
400
+ This method will create the sub Menu with the current Menu Item as anchor
401
+
402
+ @param {}
403
+ @returns void
404
+ */
405
+ createSubMenu: function() {
406
+ var subMenu = this.isSubMenuAMenuPane() ;
407
+ if(subMenu) {
408
+ subMenu.set('anchor', this) ;
409
+ subMenu.popup(this,[0,0,0]) ;
410
+ var context = SC.RenderContext(this) ;
411
+ context = context.begin(subMenu.get('tagName')) ;
412
+ subMenu.prepareContext(context, YES) ;
413
+ context = context.end() ;
414
+ var menuItemViews = subMenu.get('menuItemViews') ;
415
+ if(menuItemViews && menuItemViews.length>0) {
416
+ subMenu.set('currentSelectedMenuItem',menuItemViews[0]) ;
417
+ subMenu.set('keyPane',YES) ;
418
+ }
419
+ }
420
+ },
421
+
422
+ parentMenu: function() {
423
+ return this.get('parentPane') ;
424
+ },
425
+
310
426
  //..........................................
311
427
  //Mouse Events Handling
312
428
  //..........................................
313
429
 
314
430
  mouseUp: function(evt) {
315
- if (!this.isEnabled) return YES ;
316
- this.set('hasMouseExited',NO);
431
+ if (!this.get('isEnabled')) return YES ;
432
+ this.set('hasMouseExited',NO) ;
317
433
  this.isSelected = YES ;
318
434
  var key = this.get('contentCheckboxKey') ;
319
435
  var content = this.get('content') ;
@@ -326,112 +442,146 @@ SC.MenuItemView = SC.ButtonView.extend(
326
442
  content.set(key, YES) ;
327
443
  }
328
444
  }
329
- this._action(evt);
330
- var anchor = this.getAnchor();
331
- if(anchor) anchor.mouseUp(evt);
332
- var menu = this.parentMenu();
333
- if(menu) menu.remove();
445
+ this._action(evt) ;
446
+ var anchor = this.getAnchor() ;
447
+ if(anchor) anchor.mouseUp(evt) ;
448
+ else {
449
+ this.resignFirstResponder() ;
450
+ }
451
+ this.closeParent() ;
452
+ return YES ;
453
+ },
454
+
455
+ /** @private*/
456
+ mouseDown: function(evt) {
334
457
  return YES ;
335
458
  },
336
459
 
337
- isCurrent: NO,
338
-
339
460
  /** @private
340
461
  This has been over ridden from button view to prevent calling of render
341
462
  method (When isActive property is changed).
463
+ Also based on whether the menu item has a sub Branch we create a sub Menu
464
+
465
+ @returns Boolean
342
466
  */
343
467
  mouseEntered: function(evt) {
344
- if (!this.isEnabled) return YES ;
345
- this.becomeFirstResponder();
468
+ if (!this.get('isEnabled') && !this.isSeparator()) return YES ;
346
469
  this.isSelected = YES ;
347
470
 
348
471
  var parentPane = this.parentMenu() ;
349
- if(parentPane) parentPane.set('currentItemSelected', this) ;
472
+ if(parentPane) parentPane.set('currentSelectedMenuItem', this) ;
350
473
 
351
474
  var key = this.get('contentIsBranchKey') ;
352
- if(key){
353
- var content = this.get('content');
354
- var value = (key && content) ? (content.get ? content.get(key) : content[key]) : NO ;
355
- if(value) this.invokeLater(this.branching,100);
475
+ if(key) {
476
+ var content = this.get('content') ;
477
+ var val = (key && content) ? (content.get ? content.get(key) : content[key]) : NO ;
478
+ if(val) this.invokeLater(this.branching(),100) ;
356
479
  }
357
- this.$().addClass('sel');
358
- return YES;
359
- },
360
-
361
- isSubMenuAMenuPane: function(subMenu) {
362
- if(subMenu.kindOf(SC.MenuPane)) return YES;
363
- return NO;
364
- },
365
-
366
- hasSubMenu: function(){
367
- var content = this.get('content') ;
368
- var subMenu = content.get('subMenu') ;
369
- if(subMenu) return subMenu;
370
- return null;
371
- },
372
-
373
- branching: function() {
374
- if(this.get('hasMouseExited')) {
375
- this.set('hasMouseExited',NO);
376
- return;
377
- }
378
- var subMenu = this.hasSubMenu();
379
- if(subMenu) {
380
- subMenu.set('anchor', this);
381
- if(this.isSubMenuAMenuPane(subMenu)) {
382
- subMenu.popup(this,[0,0,0]) ;
383
- var context = SC.RenderContext(this) ;
384
- context = context.begin(subMenu.get('tagName')) ;
385
- subMenu.prepareContext(context, YES) ;
386
- context = context.end() ;
387
- }
388
- }
389
- },
390
-
391
- parentMenu: function() {
392
- return this.get('parentPane');
480
+ return YES ;
393
481
  },
394
482
 
483
+ /** @private
484
+ Set the focus based on whether the current Menu item is selected or not.
485
+
486
+ @returns Boolean
487
+ */
395
488
  mouseExited: function(evt) {
396
- this.loseFocus();
489
+ this.loseFocus() ;
490
+ var parentMenu = this.parentMenu() ;
491
+ if(parentMenu) {
492
+ parentMenu.set('previousSelectedMenuItem', this) ;
493
+ this.resignFirstResponder() ;
494
+ }
397
495
  return YES ;
398
496
  },
399
-
400
- mouseDown: function(evt) {
401
- return YES;
402
- },
403
497
 
404
- loseFocus: function() {
405
- if(!this.hasSubMenu()) this.$().removeClass('sel');
406
- this.set('hasMouseExited',YES);
407
- this.set('isSelected',NO) ;
408
- var menu = this.parentMenu();
409
- if(menu) menu.set('currentItemSelected', null) ;
410
- },
498
+
499
+ /** @private
500
+ Call the moveUp function on the parent Menu
411
501
 
502
+ @returns Boolean
503
+ */
412
504
  moveUp: function(sender,evt) {
413
- var menu = this.parentMenu();
505
+ var menu = this.parentMenu() ;
414
506
  if(menu) {
415
- menu.moveUp(this);
507
+ menu.moveUp(this) ;
416
508
  }
417
- return YES;
509
+ return YES ;
418
510
  },
419
511
 
512
+ /** @private
513
+ Call the moveDown function on the parent Menu
514
+
515
+ @returns Boolean
516
+ */
420
517
  moveDown: function(sender,evt) {
421
- var menu = this.parentMenu();
518
+ var menu = this.parentMenu() ;
422
519
  if(menu) {
423
- menu.moveDown(this);
520
+ menu.moveDown(this) ;
424
521
  }
425
- return YES;
522
+ return YES ;
523
+ },
524
+
525
+ /** @private
526
+ Call the function to create a branch
527
+
528
+ @returns Boolean
529
+ */
530
+ moveRight: function(sender,evt) {
531
+ this.createSubMenu() ;
532
+ return YES ;
426
533
  },
427
534
 
535
+ /** @private*/
428
536
  keyDown: function(evt) {
429
- // console.log('keyDown called on %@'.fmt(this));
430
537
  return this.interpretKeyEvents(evt) ;
431
538
  },
432
539
 
540
+ /** @private*/
433
541
  keyUp: function(evt) {
434
- return YES;
435
- }
542
+ return YES ;
543
+ },
544
+
545
+ /** @private*/
546
+ cancel: function(evt) {
547
+ this.loseFocus() ;
548
+ return YES ;
549
+ },
550
+
551
+ /** @private*/
552
+ didBecomeFirstResponder: function(responder) {
553
+ if (responder !== this) return;
554
+ if(!this.isSeparator()) this.$().addClass('focus') ;
555
+ },
556
+
557
+ /** @private*/
558
+ willLoseFirstResponder: function(responder) {
559
+ if (responder !== this) return;
560
+ this.$().removeClass('focus') ;
561
+ },
562
+
563
+ /** @private*/
564
+ insertNewline: function(sender, evt) {
565
+ this.mouseUp(evt) ;
566
+ },
436
567
 
437
- });
568
+ /**
569
+ Close the parent Menu and remove the focus of the current Selected
570
+ Menu Item
571
+
572
+ @returns void
573
+ */
574
+ closeParent: function() {
575
+ this.$().removeClass('focus') ;
576
+ var menu = this.parentMenu() ;
577
+ if(menu) {
578
+ menu.remove() ;
579
+ }
580
+ },
581
+
582
+ /** @private*/
583
+ clickInside: function(frame, evt) {
584
+ return SC.pointInRect({ x: evt.pageX, y: evt.pageY }, frame) ;
585
+ }
586
+
587
+ }) ;