sproutit-sproutcore 1.0.0.20090407205609 → 1.0.0.20090408130025

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 (574) hide show
  1. data/frameworks/sproutcore/Buildfile +63 -0
  2. data/frameworks/sproutcore/HISTORY +682 -0
  3. data/frameworks/sproutcore/README +22 -0
  4. data/frameworks/sproutcore/apps/sc_jsdoc/controllers/docs.js +149 -0
  5. data/frameworks/sproutcore/apps/sc_jsdoc/core.js +16 -0
  6. data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/body.css +17 -0
  7. data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/body.js +99 -0
  8. data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/images/sproutcore-logo.png +0 -0
  9. data/frameworks/sproutcore/apps/sc_jsdoc/english.lproj/strings.js +15 -0
  10. data/frameworks/sproutcore/apps/sc_jsdoc/main.js +27 -0
  11. data/frameworks/sproutcore/apps/sc_jsdoc/models/doc.js +21 -0
  12. data/frameworks/sproutcore/apps/sc_qunit/controllers/runner.js +209 -0
  13. data/frameworks/sproutcore/apps/sc_qunit/core.js +16 -0
  14. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/body.css +17 -0
  15. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/body.js +107 -0
  16. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/images/sproutcore-logo.png +0 -0
  17. data/frameworks/sproutcore/apps/sc_qunit/english.lproj/strings.js +15 -0
  18. data/frameworks/sproutcore/apps/sc_qunit/main.js +18 -0
  19. data/frameworks/sproutcore/apps/sc_qunit/models/test.js +24 -0
  20. data/frameworks/sproutcore/apps/sc_qunit/views/test_iframe.js +52 -0
  21. data/frameworks/sproutcore/apps/tests/controllers/targets.js +47 -0
  22. data/frameworks/sproutcore/apps/tests/controllers/test.js +20 -0
  23. data/frameworks/sproutcore/apps/tests/controllers/tests.js +38 -0
  24. data/frameworks/sproutcore/apps/tests/core.js +35 -0
  25. data/frameworks/sproutcore/apps/tests/english.lproj/loading.rhtml +9 -0
  26. data/frameworks/sproutcore/apps/tests/english.lproj/main_page.css +19 -0
  27. data/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +86 -0
  28. data/frameworks/sproutcore/apps/tests/english.lproj/strings.js +17 -0
  29. data/frameworks/sproutcore/apps/tests/fixtures/target.js +43 -0
  30. data/frameworks/sproutcore/apps/tests/fixtures/test.js +43 -0
  31. data/frameworks/sproutcore/apps/tests/main.js +39 -0
  32. data/frameworks/sproutcore/apps/tests/models/target.js +49 -0
  33. data/frameworks/sproutcore/apps/tests/models/test.js +20 -0
  34. data/frameworks/sproutcore/apps/tests/tests/controllers/targets.js +15 -0
  35. data/frameworks/sproutcore/apps/tests/tests/controllers/test.js +15 -0
  36. data/frameworks/sproutcore/apps/tests/tests/controllers/tests.js +15 -0
  37. data/frameworks/sproutcore/apps/tests/tests/models/target.js +15 -0
  38. data/frameworks/sproutcore/apps/tests/tests/models/test.js +15 -0
  39. data/frameworks/sproutcore/apps/welcome/core.js +23 -0
  40. data/frameworks/sproutcore/apps/welcome/english.lproj/loading.rhtml +8 -0
  41. data/frameworks/sproutcore/apps/welcome/english.lproj/main_page.js +43 -0
  42. data/frameworks/sproutcore/apps/welcome/english.lproj/strings.js +15 -0
  43. data/frameworks/sproutcore/apps/welcome/main.js +36 -0
  44. data/frameworks/sproutcore/design/Design Charts.graffle +15819 -0
  45. data/frameworks/sproutcore/design/Record State Table.numbers +0 -0
  46. data/frameworks/sproutcore/frameworks/datastore/core.js +14 -0
  47. data/frameworks/sproutcore/frameworks/datastore/data_sources/cascade.js +113 -0
  48. data/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +256 -0
  49. data/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +196 -0
  50. data/frameworks/sproutcore/frameworks/datastore/debug/json.js +71 -0
  51. data/frameworks/sproutcore/frameworks/datastore/debug/standard_setup.js +96 -0
  52. data/frameworks/sproutcore/frameworks/datastore/fixtures/author_fixtures.js +2503 -0
  53. data/frameworks/sproutcore/frameworks/datastore/fixtures/sample.js +17 -0
  54. data/frameworks/sproutcore/frameworks/datastore/models/fetched_attribute.js +92 -0
  55. data/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +38 -0
  56. data/frameworks/sproutcore/frameworks/datastore/models/record.js +430 -0
  57. data/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +361 -0
  58. data/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +305 -0
  59. data/frameworks/sproutcore/frameworks/datastore/system/query.js +128 -0
  60. data/frameworks/sproutcore/frameworks/datastore/system/record_array.js +149 -0
  61. data/frameworks/sproutcore/frameworks/datastore/system/store.js +1689 -0
  62. data/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +86 -0
  63. data/frameworks/sproutcore/frameworks/datastore/tests/integration/contact_model.js +114 -0
  64. data/frameworks/sproutcore/frameworks/datastore/tests/integration/mail_model.js +91 -0
  65. data/frameworks/sproutcore/frameworks/datastore/tests/integration/test_runner_model.js +56 -0
  66. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/destroy.js +73 -0
  67. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/readAttribute.js +48 -0
  68. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/refresh.js +42 -0
  69. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/storeDidChangeProperties.js +138 -0
  70. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/unknownProperty.js +46 -0
  71. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +71 -0
  72. data/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +115 -0
  73. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +40 -0
  74. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChanges.js +116 -0
  75. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +135 -0
  76. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/dataHashDidChange.js +110 -0
  77. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/discardChanges.js +99 -0
  78. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +180 -0
  79. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readEditableDataHash.js +126 -0
  80. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/removeDataHash.js +163 -0
  81. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/writeDataHash.js +166 -0
  82. data/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +175 -0
  83. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/cancelRecord.js +54 -0
  84. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +126 -0
  85. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +127 -0
  86. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +57 -0
  87. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataHashDidChange.js +78 -0
  88. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +247 -0
  89. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/destroyRecord.js +106 -0
  90. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/init.js +21 -0
  91. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +61 -0
  92. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/readDataHash.js +74 -0
  93. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/readEditableDataHash.js +74 -0
  94. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/recordDidChange.js +74 -0
  95. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/removeDataHash.js +144 -0
  96. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/retrieveRecord.js +137 -0
  97. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/writeDataHash.js +130 -0
  98. data/frameworks/sproutcore/frameworks/debug/core.js +1 -0
  99. data/frameworks/sproutcore/frameworks/deprecated/core.js +61 -0
  100. data/frameworks/sproutcore/frameworks/deprecated/lib/button_views.rb +330 -0
  101. data/frameworks/sproutcore/frameworks/deprecated/lib/collection_view.rb +83 -0
  102. data/frameworks/sproutcore/frameworks/deprecated/lib/core_views.rb +326 -0
  103. data/frameworks/sproutcore/frameworks/deprecated/lib/form_views.rb +253 -0
  104. data/frameworks/sproutcore/frameworks/deprecated/lib/index.rhtml +75 -0
  105. data/frameworks/sproutcore/frameworks/deprecated/lib/menu_views.rb +93 -0
  106. data/frameworks/sproutcore/frameworks/deprecated/server/rails_server.js +80 -0
  107. data/frameworks/sproutcore/frameworks/deprecated/server/rest_server.js +178 -0
  108. data/frameworks/sproutcore/frameworks/deprecated/server/server.js +674 -0
  109. data/frameworks/sproutcore/frameworks/deprecated/system/animator.js +679 -0
  110. data/frameworks/sproutcore/frameworks/deprecated/system/binding.js +36 -0
  111. data/frameworks/sproutcore/frameworks/deprecated/system/browser.js +77 -0
  112. data/frameworks/sproutcore/frameworks/deprecated/system/classic_responder.js +314 -0
  113. data/frameworks/sproutcore/frameworks/deprecated/system/event.js +60 -0
  114. data/frameworks/sproutcore/frameworks/deprecated/system/globals.js +20 -0
  115. data/frameworks/sproutcore/frameworks/deprecated/system/misc.js +60 -0
  116. data/frameworks/sproutcore/frameworks/deprecated/system/node_descriptor.js +72 -0
  117. data/frameworks/sproutcore/frameworks/deprecated/system/object.js +124 -0
  118. data/frameworks/sproutcore/frameworks/deprecated/system/path_module.js +433 -0
  119. data/frameworks/sproutcore/frameworks/deprecated/system/string.js +109 -0
  120. data/frameworks/sproutcore/frameworks/deprecated/tests/application/application.rhtml +125 -0
  121. data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/clippingFrame.rhtml +401 -0
  122. data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/frame.rhtml +357 -0
  123. data/frameworks/sproutcore/frameworks/deprecated/tests/views/classic_view/isVisibleInWindow.rhtml +147 -0
  124. data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/base.rhtml +298 -0
  125. data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/incremental_rendering.rhtml +260 -0
  126. data/frameworks/sproutcore/frameworks/deprecated/tests/views/collection/source_list_rendering.rhtml +143 -0
  127. data/frameworks/sproutcore/frameworks/deprecated/tests/views/popup_button.rhtml +128 -0
  128. data/frameworks/sproutcore/frameworks/deprecated/tests/views/text_field.rhtml +37 -0
  129. data/frameworks/sproutcore/frameworks/deprecated/views/collection.js +24 -0
  130. data/frameworks/sproutcore/frameworks/designer/coders/design.js +30 -0
  131. data/frameworks/sproutcore/frameworks/designer/coders/localization.js +28 -0
  132. data/frameworks/sproutcore/frameworks/designer/coders/object.js +347 -0
  133. data/frameworks/sproutcore/frameworks/designer/controllers/page_design.js +102 -0
  134. data/frameworks/sproutcore/frameworks/designer/css/css_rule.js +22 -0
  135. data/frameworks/sproutcore/frameworks/designer/css/css_style.js +29 -0
  136. data/frameworks/sproutcore/frameworks/designer/css/css_style_sheet.js +201 -0
  137. data/frameworks/sproutcore/frameworks/designer/ext/page.js +88 -0
  138. data/frameworks/sproutcore/frameworks/designer/ext/view.js +40 -0
  139. data/frameworks/sproutcore/frameworks/designer/views/controls/button.js +18 -0
  140. data/frameworks/sproutcore/frameworks/designer/views/designer.js +553 -0
  141. data/frameworks/sproutcore/frameworks/designer/views/label.js +17 -0
  142. data/frameworks/sproutcore/frameworks/designer/views/mixins/button.js +13 -0
  143. data/frameworks/sproutcore/frameworks/designer/views/tab.js +17 -0
  144. data/frameworks/sproutcore/frameworks/desktop/core.js +6 -0
  145. data/frameworks/sproutcore/frameworks/desktop/debug/drag.js +41 -0
  146. data/frameworks/sproutcore/frameworks/desktop/english.lproj/alert.css +56 -0
  147. data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/a_sample_image.jpg +0 -0
  148. data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/apple-logo1.jpeg +0 -0
  149. data/frameworks/sproutcore/frameworks/desktop/english.lproj/debug/iframe.html +23 -0
  150. data/frameworks/sproutcore/frameworks/desktop/english.lproj/disclosure.css +71 -0
  151. data/frameworks/sproutcore/frameworks/desktop/english.lproj/icons.css +943 -0
  152. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/blank.gif +0 -0
  153. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_222222.png +0 -0
  154. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_454545.png +0 -0
  155. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_888888.png +0 -0
  156. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/mini_ffffff.png +0 -0
  157. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/icons/shared.png +0 -0
  158. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/indicator.gif +0 -0
  159. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/panels/sprite-x.png +0 -0
  160. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/panels/sprite-y.png +0 -0
  161. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/sc-theme-sprite.png +0 -0
  162. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/standard_fade/000000.png +0 -0
  163. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/standard_fade/ffffff.png +0 -0
  164. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/sticky-note.png +0 -0
  165. data/frameworks/sproutcore/frameworks/desktop/english.lproj/list_item.css +156 -0
  166. data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu.css +83 -0
  167. data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +99 -0
  168. data/frameworks/sproutcore/frameworks/desktop/english.lproj/palette.css +3 -0
  169. data/frameworks/sproutcore/frameworks/desktop/english.lproj/panel.css +94 -0
  170. data/frameworks/sproutcore/frameworks/desktop/english.lproj/picker.css +39 -0
  171. data/frameworks/sproutcore/frameworks/desktop/english.lproj/progress.css +31 -0
  172. data/frameworks/sproutcore/frameworks/desktop/english.lproj/radio.css +10 -0
  173. data/frameworks/sproutcore/frameworks/desktop/english.lproj/scroller.css +26 -0
  174. data/frameworks/sproutcore/frameworks/desktop/english.lproj/segmented.css +141 -0
  175. data/frameworks/sproutcore/frameworks/desktop/english.lproj/separator.css +19 -0
  176. data/frameworks/sproutcore/frameworks/desktop/english.lproj/slider.css +57 -0
  177. data/frameworks/sproutcore/frameworks/desktop/english.lproj/split.css +70 -0
  178. data/frameworks/sproutcore/frameworks/desktop/english.lproj/split_divider.css +8 -0
  179. data/frameworks/sproutcore/frameworks/desktop/english.lproj/strings.js +14 -0
  180. data/frameworks/sproutcore/frameworks/desktop/english.lproj/tab.css +12 -0
  181. data/frameworks/sproutcore/frameworks/desktop/english.lproj/text_field.css +29 -0
  182. data/frameworks/sproutcore/frameworks/desktop/english.lproj/toolbar.css +6 -0
  183. data/frameworks/sproutcore/frameworks/desktop/mixins/border.js +53 -0
  184. data/frameworks/sproutcore/frameworks/desktop/mixins/collection_group.js +22 -0
  185. data/frameworks/sproutcore/frameworks/desktop/mixins/collection_item.js +22 -0
  186. data/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +226 -0
  187. data/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +247 -0
  188. data/frameworks/sproutcore/frameworks/desktop/panes/alert.js +377 -0
  189. data/frameworks/sproutcore/frameworks/desktop/panes/menu.js +504 -0
  190. data/frameworks/sproutcore/frameworks/desktop/panes/modal.js +68 -0
  191. data/frameworks/sproutcore/frameworks/desktop/panes/palette.js +63 -0
  192. data/frameworks/sproutcore/frameworks/desktop/panes/panel.js +184 -0
  193. data/frameworks/sproutcore/frameworks/desktop/panes/picker.js +402 -0
  194. data/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +46 -0
  195. data/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +39 -0
  196. data/frameworks/sproutcore/frameworks/desktop/protocols/drag_source.js +81 -0
  197. data/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +175 -0
  198. data/frameworks/sproutcore/frameworks/desktop/protocols/responder.js +280 -0
  199. data/frameworks/sproutcore/frameworks/desktop/system/drag.js +721 -0
  200. data/frameworks/sproutcore/frameworks/desktop/system/key_bindings.js +40 -0
  201. data/frameworks/sproutcore/frameworks/desktop/system/root_responder.js +641 -0
  202. data/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +187 -0
  203. data/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +43 -0
  204. data/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/methods.js +10 -0
  205. data/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +152 -0
  206. data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +10 -0
  207. data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +57 -0
  208. data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/methods.js +10 -0
  209. data/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/ui.js +36 -0
  210. data/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +10 -0
  211. data/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +40 -0
  212. data/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/methods.js +10 -0
  213. data/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +80 -0
  214. data/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/methods.js +10 -0
  215. data/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +38 -0
  216. data/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +45 -0
  217. data/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +140 -0
  218. data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +145 -0
  219. data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/ui.js +99 -0
  220. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/methods.js +10 -0
  221. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectPreviousItem.js +39 -0
  222. data/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/methods.js +10 -0
  223. data/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +64 -0
  224. data/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +10 -0
  225. data/frameworks/sproutcore/frameworks/desktop/tests/views/grid/ui.js +10 -0
  226. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/methods.js +10 -0
  227. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui.js +110 -0
  228. data/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +255 -0
  229. data/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/methods.js +10 -0
  230. data/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/ui.js +44 -0
  231. data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/methods.js +128 -0
  232. data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +240 -0
  233. data/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +113 -0
  234. data/frameworks/sproutcore/frameworks/desktop/tests/views/radio/ui.js +202 -0
  235. data/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +139 -0
  236. data/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +111 -0
  237. data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/methods.js +63 -0
  238. data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/ui.js +70 -0
  239. data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +94 -0
  240. data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +206 -0
  241. data/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/methods.js +81 -0
  242. data/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +85 -0
  243. data/frameworks/sproutcore/frameworks/desktop/tests/views/separator.js +37 -0
  244. data/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/methods.js +10 -0
  245. data/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/ui.js +10 -0
  246. data/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +50 -0
  247. data/frameworks/sproutcore/frameworks/desktop/tests/views/split/ui.js +52 -0
  248. data/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +54 -0
  249. data/frameworks/sproutcore/frameworks/desktop/tests/views/tab/ui.js +88 -0
  250. data/frameworks/sproutcore/frameworks/desktop/tests/views/text_field/methods.js +76 -0
  251. data/frameworks/sproutcore/frameworks/desktop/tests/views/text_field/ui.js +198 -0
  252. data/frameworks/sproutcore/frameworks/desktop/tests/views/web/methods.js +10 -0
  253. data/frameworks/sproutcore/frameworks/desktop/tests/views/web/ui.js +110 -0
  254. data/frameworks/sproutcore/frameworks/desktop/views/button.js +320 -0
  255. data/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +98 -0
  256. data/frameworks/sproutcore/frameworks/desktop/views/collection.js +2141 -0
  257. data/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +44 -0
  258. data/frameworks/sproutcore/frameworks/desktop/views/form.js +595 -0
  259. data/frameworks/sproutcore/frameworks/desktop/views/grid.js +199 -0
  260. data/frameworks/sproutcore/frameworks/desktop/views/list.js +706 -0
  261. data/frameworks/sproutcore/frameworks/desktop/views/list_item.js +523 -0
  262. data/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +437 -0
  263. data/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +62 -0
  264. data/frameworks/sproutcore/frameworks/desktop/views/progress.js +207 -0
  265. data/frameworks/sproutcore/frameworks/desktop/views/radio.js +332 -0
  266. data/frameworks/sproutcore/frameworks/desktop/views/scene.js +56 -0
  267. data/frameworks/sproutcore/frameworks/desktop/views/scroll.js +648 -0
  268. data/frameworks/sproutcore/frameworks/desktop/views/scroller.js +203 -0
  269. data/frameworks/sproutcore/frameworks/desktop/views/segmented.js +509 -0
  270. data/frameworks/sproutcore/frameworks/desktop/views/select_field.js +292 -0
  271. data/frameworks/sproutcore/frameworks/desktop/views/separator.js +37 -0
  272. data/frameworks/sproutcore/frameworks/desktop/views/slider.js +178 -0
  273. data/frameworks/sproutcore/frameworks/desktop/views/source_list.js +1117 -0
  274. data/frameworks/sproutcore/frameworks/desktop/views/source_list_group.js +169 -0
  275. data/frameworks/sproutcore/frameworks/desktop/views/split.js +651 -0
  276. data/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +55 -0
  277. data/frameworks/sproutcore/frameworks/desktop/views/tab.js +190 -0
  278. data/frameworks/sproutcore/frameworks/desktop/views/text_field.js +233 -0
  279. data/frameworks/sproutcore/frameworks/desktop/views/thumb.js +49 -0
  280. data/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +49 -0
  281. data/frameworks/sproutcore/frameworks/desktop/views/web.js +86 -0
  282. data/frameworks/sproutcore/frameworks/foundation/TESTING +46 -0
  283. data/frameworks/sproutcore/frameworks/foundation/controllers/array.js +490 -0
  284. data/frameworks/sproutcore/frameworks/foundation/controllers/controller.js +317 -0
  285. data/frameworks/sproutcore/frameworks/foundation/controllers/object.js +421 -0
  286. data/frameworks/sproutcore/frameworks/foundation/core.js +111 -0
  287. data/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +172 -0
  288. data/frameworks/sproutcore/frameworks/foundation/english.lproj/blank.gif +0 -0
  289. data/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +53 -0
  290. data/frameworks/sproutcore/frameworks/foundation/english.lproj/button_view.css +55 -0
  291. data/frameworks/sproutcore/frameworks/foundation/english.lproj/core.css +5 -0
  292. data/frameworks/sproutcore/frameworks/foundation/english.lproj/debug/control-test-pane.css +8 -0
  293. data/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore-logo.png +0 -0
  294. data/frameworks/sproutcore/frameworks/foundation/english.lproj/static_layout.css +5 -0
  295. data/frameworks/sproutcore/frameworks/foundation/english.lproj/view.css +40 -0
  296. data/frameworks/sproutcore/frameworks/foundation/ext/object.js +81 -0
  297. data/frameworks/sproutcore/frameworks/foundation/ext/run_loop.js +158 -0
  298. data/frameworks/sproutcore/frameworks/foundation/fixtures/file_exists.json +1 -0
  299. data/frameworks/sproutcore/frameworks/foundation/mixins/button.js +291 -0
  300. data/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +88 -0
  301. data/frameworks/sproutcore/frameworks/foundation/mixins/control.js +352 -0
  302. data/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +146 -0
  303. data/frameworks/sproutcore/frameworks/foundation/mixins/responder.js +156 -0
  304. data/frameworks/sproutcore/frameworks/foundation/mixins/selection_support.js +154 -0
  305. data/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +101 -0
  306. data/frameworks/sproutcore/frameworks/foundation/mixins/string.js +237 -0
  307. data/frameworks/sproutcore/frameworks/foundation/mixins/validatable.js +176 -0
  308. data/frameworks/sproutcore/frameworks/foundation/panes/main.js +47 -0
  309. data/frameworks/sproutcore/frameworks/foundation/panes/pane.js +555 -0
  310. data/frameworks/sproutcore/frameworks/foundation/protocols/inline_editor_delegate.js +84 -0
  311. data/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +244 -0
  312. data/frameworks/sproutcore/frameworks/foundation/system/browser.js +64 -0
  313. data/frameworks/sproutcore/frameworks/foundation/system/builder.js +210 -0
  314. data/frameworks/sproutcore/frameworks/foundation/system/core_query.js +2015 -0
  315. data/frameworks/sproutcore/frameworks/foundation/system/cursor.js +129 -0
  316. data/frameworks/sproutcore/frameworks/foundation/system/error.js +93 -0
  317. data/frameworks/sproutcore/frameworks/foundation/system/event.js +817 -0
  318. data/frameworks/sproutcore/frameworks/foundation/system/image_cache.js +433 -0
  319. data/frameworks/sproutcore/frameworks/foundation/system/json.js +440 -0
  320. data/frameworks/sproutcore/frameworks/foundation/system/locale.js +288 -0
  321. data/frameworks/sproutcore/frameworks/foundation/system/page.js +106 -0
  322. data/frameworks/sproutcore/frameworks/foundation/system/ready.js +189 -0
  323. data/frameworks/sproutcore/frameworks/foundation/system/render_context.js +865 -0
  324. data/frameworks/sproutcore/frameworks/foundation/system/request.js +255 -0
  325. data/frameworks/sproutcore/frameworks/foundation/system/root_responder.js +368 -0
  326. data/frameworks/sproutcore/frameworks/foundation/system/routes.js +446 -0
  327. data/frameworks/sproutcore/frameworks/foundation/system/time.js +478 -0
  328. data/frameworks/sproutcore/frameworks/foundation/system/timer.js +549 -0
  329. data/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +158 -0
  330. data/frameworks/sproutcore/frameworks/foundation/system/utils.js +330 -0
  331. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array.js +118 -0
  332. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/controller.js +268 -0
  333. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/object.js +433 -0
  334. data/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/methods.js +10 -0
  335. data/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/ui.js +113 -0
  336. data/frameworks/sproutcore/frameworks/foundation/tests/integration/creating_views.js +113 -0
  337. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/content.js +195 -0
  338. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/displayProperties.js +89 -0
  339. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/control/content.js +168 -0
  340. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/control/displayProperties.js +89 -0
  341. data/frameworks/sproutcore/frameworks/foundation/tests/system/builder.js +42 -0
  342. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_core.js +1323 -0
  343. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_dimensions.js +387 -0
  344. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_selector.js +405 -0
  345. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/setClass.js +49 -0
  346. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/within.js +66 -0
  347. data/frameworks/sproutcore/frameworks/foundation/tests/system/error.js +41 -0
  348. data/frameworks/sproutcore/frameworks/foundation/tests/system/json.js +14 -0
  349. data/frameworks/sproutcore/frameworks/foundation/tests/system/locale.js +128 -0
  350. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/begin.js +47 -0
  351. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/element.js +44 -0
  352. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/end.js +119 -0
  353. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/get.js +51 -0
  354. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_attr.js +50 -0
  355. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_basic.js +28 -0
  356. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_className.js +179 -0
  357. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_style.js +100 -0
  358. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/init.js +55 -0
  359. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/join.js +28 -0
  360. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/push_text.js +74 -0
  361. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/tag.js +45 -0
  362. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/update.js +205 -0
  363. data/frameworks/sproutcore/frameworks/foundation/tests/system/request.js +89 -0
  364. data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/makeKeyPane.js +124 -0
  365. data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/makeMainPane.js +68 -0
  366. data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/root_responder.js +97 -0
  367. data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/targetForAction.js +238 -0
  368. data/frameworks/sproutcore/frameworks/foundation/tests/system/routes.js +33 -0
  369. data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/invalidate.js +38 -0
  370. data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/invokeLater.js +201 -0
  371. data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/isPaused.js +71 -0
  372. data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/performAction.js +67 -0
  373. data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/schedule.js +170 -0
  374. data/frameworks/sproutcore/frameworks/foundation/tests/system/user_defaults.js +27 -0
  375. data/frameworks/sproutcore/frameworks/foundation/tests/system/utils/normalizeURL.js +18 -0
  376. data/frameworks/sproutcore/frameworks/foundation/tests/system/utils/range.js +62 -0
  377. data/frameworks/sproutcore/frameworks/foundation/tests/validators/credit_card.js +35 -0
  378. data/frameworks/sproutcore/frameworks/foundation/tests/validators/date.js +21 -0
  379. data/frameworks/sproutcore/frameworks/foundation/tests/validators/number.js +47 -0
  380. data/frameworks/sproutcore/frameworks/foundation/tests/validators/password.js +13 -0
  381. data/frameworks/sproutcore/frameworks/foundation/tests/views/container/methods.js +10 -0
  382. data/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +83 -0
  383. data/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +39 -0
  384. data/frameworks/sproutcore/frameworks/foundation/tests/views/main_pane.js +31 -0
  385. data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/append_remove.js +89 -0
  386. data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/firstResponder.js +148 -0
  387. data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/keyPane.js +133 -0
  388. data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/sendEvent.js +165 -0
  389. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/clippingFrame.js +132 -0
  390. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/convertFrames.js +246 -0
  391. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/createChildViews.js +87 -0
  392. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/createLayer.js +97 -0
  393. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/destroyLayer.js +85 -0
  394. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/findLayerInParentLayer.js +52 -0
  395. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/init.js +50 -0
  396. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/insertBefore.js +200 -0
  397. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisibleInWindow.js +102 -0
  398. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layer.js +150 -0
  399. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutChildViews.js +162 -0
  400. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutDidChange.js +127 -0
  401. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutStyle.js +248 -0
  402. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/parentViewDidChange.js +67 -0
  403. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/prepareContext.js +166 -0
  404. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/removeChild.js +189 -0
  405. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/render.js +83 -0
  406. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/replaceChild.js +29 -0
  407. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayer.js +142 -0
  408. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayerLocation.js +194 -0
  409. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/viewDidResize.js +185 -0
  410. data/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +125 -0
  411. data/frameworks/sproutcore/frameworks/foundation/validators/date.js +52 -0
  412. data/frameworks/sproutcore/frameworks/foundation/validators/email.js +45 -0
  413. data/frameworks/sproutcore/frameworks/foundation/validators/not_empty.js +33 -0
  414. data/frameworks/sproutcore/frameworks/foundation/validators/number.js +82 -0
  415. data/frameworks/sproutcore/frameworks/foundation/validators/password.js +86 -0
  416. data/frameworks/sproutcore/frameworks/foundation/validators/validator.js +311 -0
  417. data/frameworks/sproutcore/frameworks/foundation/views/container.js +136 -0
  418. data/frameworks/sproutcore/frameworks/foundation/views/field.js +276 -0
  419. data/frameworks/sproutcore/frameworks/foundation/views/image.js +158 -0
  420. data/frameworks/sproutcore/frameworks/foundation/views/label.js +261 -0
  421. data/frameworks/sproutcore/frameworks/foundation/views/view.js +2160 -0
  422. data/frameworks/sproutcore/frameworks/mobile/english.lproj/core.css +12 -0
  423. data/frameworks/sproutcore/frameworks/mobile/lib/index.rhtml +126 -0
  424. data/frameworks/sproutcore/frameworks/mobile/system/root_responder.js +109 -0
  425. data/frameworks/sproutcore/frameworks/mobile/tests/views/button/ui.js +9 -0
  426. data/frameworks/sproutcore/frameworks/mobile/views/button.js +190 -0
  427. data/frameworks/sproutcore/frameworks/runtime/README +11 -0
  428. data/frameworks/sproutcore/frameworks/runtime/core.js +777 -0
  429. data/frameworks/sproutcore/frameworks/runtime/license.js +28 -0
  430. data/frameworks/sproutcore/frameworks/runtime/mixins/array.js +403 -0
  431. data/frameworks/sproutcore/frameworks/runtime/mixins/delegate_support.js +70 -0
  432. data/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +1193 -0
  433. data/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +1149 -0
  434. data/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +135 -0
  435. data/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +108 -0
  436. data/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +128 -0
  437. data/frameworks/sproutcore/frameworks/runtime/protocols/sparse_array_delegate.js +131 -0
  438. data/frameworks/sproutcore/frameworks/runtime/system/binding.js +891 -0
  439. data/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +107 -0
  440. data/frameworks/sproutcore/frameworks/runtime/system/object.js +783 -0
  441. data/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +99 -0
  442. data/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +214 -0
  443. data/frameworks/sproutcore/frameworks/runtime/system/set.js +246 -0
  444. data/frameworks/sproutcore/frameworks/runtime/system/sparse_array.js +286 -0
  445. data/frameworks/sproutcore/frameworks/runtime/tests/core/IsEqual.js +56 -0
  446. data/frameworks/sproutcore/frameworks/runtime/tests/core/beget.js +23 -0
  447. data/frameworks/sproutcore/frameworks/runtime/tests/core/clone.js +66 -0
  448. data/frameworks/sproutcore/frameworks/runtime/tests/core/guidFor.js +147 -0
  449. data/frameworks/sproutcore/frameworks/runtime/tests/core/inspect.js +27 -0
  450. data/frameworks/sproutcore/frameworks/runtime/tests/core/isArray.js +25 -0
  451. data/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +38 -0
  452. data/frameworks/sproutcore/frameworks/runtime/tests/core/keys.js +20 -0
  453. data/frameworks/sproutcore/frameworks/runtime/tests/core/makeArray.js +30 -0
  454. data/frameworks/sproutcore/frameworks/runtime/tests/core/objectForPropertyPath.js +19 -0
  455. data/frameworks/sproutcore/frameworks/runtime/tests/core/tupleForPropertyPath.js +37 -0
  456. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable.js +592 -0
  457. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +467 -0
  458. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/propertyChanges.js +123 -0
  459. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/registerDependentKeys.js +79 -0
  460. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/propertyChanges.js +80 -0
  461. data/frameworks/sproutcore/frameworks/runtime/tests/system/array.js +263 -0
  462. data/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +190 -0
  463. data/frameworks/sproutcore/frameworks/runtime/tests/system/object/base.js +135 -0
  464. data/frameworks/sproutcore/frameworks/runtime/tests/system/object/bindings.js +339 -0
  465. data/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +120 -0
  466. data/frameworks/sproutcore/frameworks/runtime/tests/system/set.js +313 -0
  467. data/frameworks/sproutcore/frameworks/runtime/tests/system/sparse_array.js +84 -0
  468. data/frameworks/sproutcore/frameworks/testing/core.js +13 -0
  469. data/frameworks/sproutcore/frameworks/testing/english.lproj/additions.css +8 -0
  470. data/frameworks/sproutcore/frameworks/testing/english.lproj/testsuite.css +131 -0
  471. data/frameworks/sproutcore/frameworks/testing/extras.js +43 -0
  472. data/frameworks/sproutcore/frameworks/testing/jquery.js +3559 -0
  473. data/frameworks/sproutcore/frameworks/testing/qunit.js +819 -0
  474. data/frameworks/sproutcore/frameworks/testing/tests/debug/qunit.js +25 -0
  475. data/frameworks/sproutcore/frameworks/testing/utils.js +55 -0
  476. data/frameworks/sproutcore/lib/index.rhtml +118 -0
  477. data/frameworks/sproutcore/license.js +28 -0
  478. data/frameworks/sproutcore/themes/empty_theme/tests/mini_icons.rhtml +69 -0
  479. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/button.css +41 -0
  480. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/core.css +8 -0
  481. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/backButton.png +0 -0
  482. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/blueButton.png +0 -0
  483. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/cancel.png +0 -0
  484. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/grayButton.png +0 -0
  485. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/leftButton.png +0 -0
  486. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listArrow.png +0 -0
  487. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listArrowSel.png +0 -0
  488. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/listGroup.png +0 -0
  489. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/loading.gif +0 -0
  490. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/pinstripes.png +0 -0
  491. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/rightButton.png +0 -0
  492. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/selection.png +0 -0
  493. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/thumb.png +0 -0
  494. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toggle.png +0 -0
  495. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toggleOn.png +0 -0
  496. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toolButton.png +0 -0
  497. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/toolbar.png +0 -0
  498. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/images/whiteButton.png +0 -0
  499. data/frameworks/sproutcore/themes/iphone_theme/english.lproj/strings.js +15 -0
  500. data/frameworks/sproutcore/themes/standard_theme/Source/Panel.drawit/Data +0 -0
  501. data/frameworks/sproutcore/themes/standard_theme/Source/Panel.drawit/QuickLook/Preview.jpg +0 -0
  502. data/frameworks/sproutcore/themes/standard_theme/Source/Panel.drawit/QuickLook/Thumbnail.jpg +0 -0
  503. data/frameworks/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/Data +0 -0
  504. data/frameworks/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/QuickLook/Preview.jpg +0 -0
  505. data/frameworks/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/QuickLook/Thumbnail.jpg +0 -0
  506. data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-x.drawit/Data +0 -0
  507. data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-x.drawit/QuickLook/Preview.jpg +0 -0
  508. data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-x.drawit/QuickLook/Thumbnail.jpg +0 -0
  509. data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-y.drawit/Data +0 -0
  510. data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-y.drawit/QuickLook/Preview.jpg +0 -0
  511. data/frameworks/sproutcore/themes/standard_theme/Source/panel-sprite-y.drawit/QuickLook/Thumbnail.jpg +0 -0
  512. data/frameworks/sproutcore/themes/standard_theme/english.lproj/button.css +333 -0
  513. data/frameworks/sproutcore/themes/standard_theme/english.lproj/checkbox.css +90 -0
  514. data/frameworks/sproutcore/themes/standard_theme/english.lproj/collection.css +53 -0
  515. data/frameworks/sproutcore/themes/standard_theme/english.lproj/core.css +47 -0
  516. data/frameworks/sproutcore/themes/standard_theme/english.lproj/disclosure.css +55 -0
  517. data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-sprite.png +0 -0
  518. data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-ysprite.png +0 -0
  519. data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-toolbar-view.png +0 -0
  520. data/frameworks/sproutcore/themes/standard_theme/english.lproj/label.css +37 -0
  521. data/frameworks/sproutcore/themes/standard_theme/english.lproj/pane.css +8 -0
  522. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/background-fat.jpg +0 -0
  523. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/background-thin.jpg +0 -0
  524. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-edge.png +0 -0
  525. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-left-corner.png +0 -0
  526. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/bottom-right-corner.png +0 -0
  527. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/left-edge.png +0 -0
  528. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/overlay.png +0 -0
  529. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/right-edge.png +0 -0
  530. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-edge.png +0 -0
  531. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-left-corner.png +0 -0
  532. data/frameworks/sproutcore/themes/standard_theme/english.lproj/panels/top-right-corner.png +0 -0
  533. data/frameworks/sproutcore/themes/standard_theme/english.lproj/progress.css +23 -0
  534. data/frameworks/sproutcore/themes/standard_theme/english.lproj/radio.css +113 -0
  535. data/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +141 -0
  536. data/frameworks/sproutcore/themes/standard_theme/english.lproj/slider.css +62 -0
  537. data/frameworks/sproutcore/themes/standard_theme/english.lproj/split_view.css +27 -0
  538. data/frameworks/sproutcore/themes/standard_theme/english.lproj/tab.css +12 -0
  539. data/frameworks/sproutcore/themes/standard_theme/english.lproj/text_field.css +13 -0
  540. data/frameworks/sproutcore/themes/standard_theme/english.lproj/toolbar.css +4 -0
  541. data/lib/thor/.autotest +7 -0
  542. data/lib/thor/CHANGELOG.rdoc +52 -0
  543. data/lib/thor/LICENSE +20 -0
  544. data/lib/thor/README.markdown +76 -0
  545. data/lib/thor/Rakefile +6 -0
  546. data/lib/thor/Thorfile +45 -0
  547. data/lib/thor/bin/rake2thor +83 -0
  548. data/lib/thor/bin/thor +7 -0
  549. data/lib/thor/lib/thor/error.rb +3 -0
  550. data/lib/thor/lib/thor/options.rb +267 -0
  551. data/lib/thor/lib/thor/ordered_hash.rb +64 -0
  552. data/lib/thor/lib/thor/runner.rb +305 -0
  553. data/lib/thor/lib/thor/task.rb +83 -0
  554. data/lib/thor/lib/thor/task_hash.rb +22 -0
  555. data/lib/thor/lib/thor/tasks/package.rb +18 -0
  556. data/lib/thor/lib/thor/tasks.rb +77 -0
  557. data/lib/thor/lib/thor/util.rb +75 -0
  558. data/lib/thor/lib/thor.rb +170 -0
  559. data/lib/thor/script/destroy +14 -0
  560. data/lib/thor/script/generate +14 -0
  561. data/lib/thor/spec/fixtures/task.thor +10 -0
  562. data/lib/thor/spec/options_spec.rb +271 -0
  563. data/lib/thor/spec/ordered_hash_spec.rb +84 -0
  564. data/lib/thor/spec/spec.opts +1 -0
  565. data/lib/thor/spec/spec_helper.rb +30 -0
  566. data/lib/thor/spec/task_spec.rb +11 -0
  567. data/lib/thor/spec/tasks_spec.rb +28 -0
  568. data/lib/thor/spec/thor_runner_spec.rb +194 -0
  569. data/lib/thor/spec/thor_spec.rb +206 -0
  570. data/lib/thor/spec/util_spec.rb +99 -0
  571. data/lib/thor/task.thor +15 -0
  572. data/lib/thor/thor.gemspec +29 -0
  573. metadata +3 -4
  574. data/sproutcore.gemspec +0 -47
@@ -0,0 +1,783 @@
1
+ // ==========================================================================
2
+ // Project: SproutCore Costello - Property Observing Library
3
+ // Copyright: ©2006-2009 Sprout Systems, Inc. and contributors.
4
+ // Portions ©2008-2009 Apple, Inc. All rights reserved.
5
+ // License: Licened under MIT license (see license.js)
6
+ // ==========================================================================
7
+
8
+ require('core') ;
9
+ require('mixins/observable') ;
10
+ require('mixins/array') ;
11
+
12
+ /*globals $$sel */
13
+
14
+ SC.BENCHMARK_OBJECTS = NO;
15
+
16
+ // ..........................................................
17
+ // PRIVATE HELPER METHODS
18
+ //
19
+ // Private helper methods. These are not kept as part of the class
20
+ // definition because SC.Object is copied frequently and we want to keep the
21
+ // number of class methods to a minimum.
22
+
23
+ /** @private
24
+ Augments a base object by copying the properties from the extended hash.
25
+ In addition to simply copying properties, this method also performs a
26
+ number of optimizations that can make init'ing a new object much faster
27
+ including:
28
+
29
+ - concating concatenatedProperties
30
+ - prepping a list of bindings, observers, and dependent keys
31
+ - caching local observers so they don't need to be manually constructed.
32
+
33
+ @param {Hash} base hash
34
+ @param {Hash} extension
35
+ @returns {Hash} base hash
36
+ */
37
+ SC._object_extend = function _object_extend(base, ext) {
38
+ if (!ext) return base; // nothing to do
39
+
40
+ // set _kvo_cloned for later use
41
+ base._kvo_cloned = null;
42
+
43
+ // get some common vars
44
+ var key, idx, len, cur, cprops = base.concatenatedProperties, K = SC.K ;
45
+ var p1,p2;
46
+
47
+ // first, save any concat props. use old or new array or concat
48
+ idx = (cprops) ? cprops.length : 0 ;
49
+ var concats = (idx>0) ? {} : null;
50
+ while(--idx>=0) {
51
+ key = cprops[idx]; p1 = base[key]; p2 = ext[key];
52
+
53
+ if (p1) {
54
+ if (!(p1 instanceof Array)) p1 = SC.$A(p1);
55
+ concats[key] = (p2) ? p1.concat(p2) : p2 ;
56
+ } else {
57
+ if (!(p2 instanceof Array)) p2 = SC.$A(p2);
58
+ concats[key] = p2 ;
59
+ }
60
+ }
61
+
62
+ // setup arrays for bindings, observers, and properties. Normally, just
63
+ // save the arrays from the base. If these need to be changed during
64
+ // processing, then they will be cloned first.
65
+ var bindings = base._bindings, clonedBindings = NO;
66
+ var observers = base._observers, clonedObservers = NO;
67
+ var properties = base._properties, clonedProperties = NO;
68
+ var paths, pathLoc, local ;
69
+
70
+ // outlets are treated a little differently because you can manually
71
+ // name outlets in the passed in hash. If this is the case, then clone
72
+ // the array first.
73
+ var outlets = base.outlets, clonedOutlets = NO ;
74
+ if (ext.outlets) {
75
+ outlets = (outlets || SC.EMPTY_ARRAY).concat(ext.outlets);
76
+ clonedOutlets = YES ;
77
+ }
78
+
79
+ // now copy properties, add superclass to func.
80
+ for(key in ext) {
81
+
82
+ if (key === '_kvo_cloned') continue; // do not copy
83
+
84
+ // avoid copying builtin methods
85
+ if (!ext.hasOwnProperty(key)) continue ;
86
+
87
+ // get the value. use concats if defined
88
+ var value = (concats.hasOwnProperty(key) ? concats[key] : null) || ext[key] ;
89
+
90
+ // Possibly add to a bindings.
91
+ if (key.slice(-7) === "Binding") {
92
+ if (!clonedBindings) {
93
+ bindings = (bindings || SC.EMPTY_ARRAY).slice() ;
94
+ clonedBindings = YES ;
95
+ }
96
+
97
+ if (bindings === null) bindings = (base._bindings || SC.EMPTY_ARRAY).slice();
98
+ bindings[bindings.length] = key ;
99
+
100
+ // Also add observers, outlets, and properties for functions...
101
+ } else if (value && (value instanceof Function)) {
102
+
103
+ // add super to funcs. Be sure not to set the base of a func to
104
+ // itself to avoid infinite loops.
105
+ if (!value.superclass && (value !== (cur=base[key]))) {
106
+ value.superclass = value.base = cur || K;
107
+ }
108
+
109
+ // handle regular observers
110
+ if (value.propertyPaths) {
111
+ if (!clonedObservers) {
112
+ observers = (observers || SC.EMPTY_ARRAY).slice() ;
113
+ clonedObservers = YES ;
114
+ }
115
+ observers[observers.length] = key ;
116
+
117
+ // handle local properties
118
+ } else if (paths = value.localPropertyPaths) {
119
+ pathLoc = paths.length;
120
+ while(--pathLoc >= 0) {
121
+ local = base._kvo_for(SC.keyFor('_kvo_local', paths[pathLoc]), SC.Set);
122
+ local.add(key);
123
+ base._kvo_for('_kvo_observed_keys', SC.Set).add(paths[pathLoc]) ;
124
+ }
125
+
126
+ // handle computed properties
127
+ } else if (value.dependentKeys) {
128
+ if (!clonedProperties) {
129
+ properties = (properties || SC.EMPTY_ARRAY).slice() ;
130
+ clonedProperties = YES ;
131
+ }
132
+ properties[properties.length] = key ;
133
+
134
+ // handle outlets
135
+ } else if (value.autoconfiguredOutlet) {
136
+ if (!clonedOutlets) {
137
+ outlets = (outlets || SC.EMPTY_ARRAY).slice();
138
+ clonedOutlets = YES ;
139
+ }
140
+ outlets[outlets.length] = key ;
141
+ }
142
+ }
143
+
144
+ // copy property
145
+ base[key] = value ;
146
+ }
147
+
148
+ // copy bindings, observers, and properties
149
+ base._bindings = bindings || [];
150
+ base._observers = observers || [] ;
151
+ base._properties = properties || [] ;
152
+ base.outlets = outlets || [];
153
+
154
+ // toString is usually skipped. Don't do that!
155
+ if (ext.hasOwnProperty('toString')) base.toString = ext.toString;
156
+
157
+ return base ;
158
+ } ;
159
+
160
+ /** @class
161
+
162
+ Root object for the SproutCore framework. SC.Object is the root class for
163
+ most classes defined by SproutCore. It builds on top of the native object
164
+ support provided by JavaScript to provide support for class-like
165
+ inheritance, automatic bindings, properties observers, and more.
166
+
167
+ Most of the classes you define in your application should inherit from
168
+ SC.Object or one of its subclasses. If you are writing objects of your
169
+ own, you should read this documentation to learn some of the details of
170
+ how SC.Object's behave and how they differ from other frameworks.
171
+
172
+ h2. About SproutCore Classes
173
+
174
+ JavaScript is not a class-based language. Instead it uses a type of
175
+ inheritence inspired by self called "prototypical" inheritance.
176
+ ...
177
+
178
+ h2. Using SproutCore objects with other JavaScript object.
179
+
180
+ You can create a SproutCore object just like any other object...
181
+ obj = new SC.Object() ;
182
+
183
+ @extends SC.Observable
184
+ @author Charles Jolley
185
+ @constructor
186
+ @since SproutCore 1.0
187
+ */
188
+ SC.Object = function(props) { return this._object_init(props); };
189
+
190
+ SC.mixin(SC.Object, /** @scope SC.Object @static */ {
191
+
192
+ /**
193
+ Adds the passed properties to the object's class definition. You can
194
+ pass as many hashes as you want, including Mixins, and they will be
195
+ added in the order they are passed.
196
+
197
+ This is a shorthand for calling SC.mixin(MyClass, props...);
198
+
199
+ @params {Hash} props the properties you want to add.
200
+ @returns {Object} receiver
201
+ */
202
+ mixin: function(props) {
203
+ var len = arguments.length, loc ;
204
+ for(loc =0;loc<len;loc++) SC.mixin(this, arguments[loc]);
205
+ return this ;
206
+ },
207
+
208
+ // ..........................................
209
+ // CREATING CLASSES AND INSTANCES
210
+ //
211
+
212
+ /**
213
+ Points to the superclass for this class. You can use this to trace a
214
+ class hierarchy.
215
+ */
216
+ superclass: null,
217
+
218
+ /**
219
+ Creates a new subclass of the receiver, adding any passed properties to
220
+ the instance definition of the new class. You should use this method
221
+ when you plan to create several objects based on a class with similar
222
+ properties.
223
+
224
+ h2. Init
225
+
226
+ If you define an init() method, it will be called when you create
227
+ instances of your new class. Since SproutCore uses the init() method to
228
+ do important setup, you must be sure to always call sc_super() somewhere
229
+ in your init() to allow the normal setup to proceed.
230
+
231
+ @params {Hash} props the methods of properties you want to add
232
+ @returns {Class} A new object class
233
+ */
234
+ extend: function(props) {
235
+ var bench = SC.BENCHMARK_OBJECTS ;
236
+ if (bench) SC.Benchmark.start('SC.Object.extend') ;
237
+
238
+ // build a new constructor and copy class methods. Do this before
239
+ // adding any other properties so they are not overwritten by the copy.
240
+ var prop, ret = function(props) { return this._object_init(props); } ;
241
+ for(prop in this) {
242
+ if (!this.hasOwnProperty(prop)) continue ;
243
+ ret[prop] = this[prop];
244
+ }
245
+
246
+ // manually copy toString() because some JS engines do not enumerate it
247
+ if (this.hasOwnProperty('toString')) ret.toString = this.toString;
248
+
249
+ // now setup superclass, guid
250
+ ret.superclass = this ;
251
+ SC.generateGuid(ret); // setup guid
252
+
253
+ // setup new prototype and add properties to it
254
+ var base = (ret.prototype = SC.beget(this.prototype));
255
+ var idx, len = arguments.length;
256
+ for(idx=0;idx<len;idx++) SC._object_extend(base, arguments[idx]) ;
257
+ base.constructor = ret; // save constructor
258
+
259
+ if (bench) SC.Benchmark.end('SC.Object.extend') ;
260
+ return ret ;
261
+ },
262
+
263
+ /**
264
+ Creates a new instance of the class.
265
+
266
+ Unlike most frameworks, you do not pass paramters into the init funciton
267
+ for an object. Instead, you pass a hash of additonal properties you
268
+ want to have assigned to the object when it is first created. This is
269
+ functionally like creating a anonymous subclass of the receiver and then
270
+ instantiating it, but more efficient.
271
+
272
+ You can use create() like you would a normal constructor in a
273
+ class-based system, or you can use it to create highly customized
274
+ singleton objects such as controllers or app-level objects. This is
275
+ often more efficient than creating subclasses and than instantiating
276
+ them.
277
+
278
+ You can pass any hash of properties to this method, including mixins.
279
+
280
+ @param {Hash} props optional hash of method or properties to add to the instance.
281
+ @returns {SC.Object} new instance of the receiver class.
282
+ */
283
+ create: function(props) { var C=this; return new C(arguments); },
284
+
285
+ /**
286
+ Walk like a duck. You can use this to quickly test classes.
287
+ */
288
+ isClass: YES,
289
+
290
+ /** @private */
291
+ toString: function() { return SC._object_className(this); },
292
+
293
+ // ..........................................
294
+ // PROPERTY SUPPORT METHODS
295
+ //
296
+
297
+ /**
298
+ Returns YES if the receiver is a subclass of the named class. If the
299
+ receiver is the class passed, this will return NO since the class is not
300
+ a subclass of itself. See also kindOf().
301
+
302
+ h2. Example
303
+
304
+ {{{
305
+ ClassA = SC.Object.extend();
306
+ ClassB = ClassA.extend();
307
+
308
+ ClassB.subclassOf(ClassA) => YES
309
+ ClassA.subclassOf(ClassA) => NO
310
+ }}}
311
+
312
+ @param {Class} scClass class to compare
313
+ @returns {Boolean}
314
+ */
315
+ subclassOf: function(scClass) {
316
+ if (this === scClass) return NO ;
317
+ var t = this ;
318
+ while(t = t.superclass) if (t === scClass) return YES ;
319
+ return NO ;
320
+ },
321
+
322
+ /**
323
+ Returns YES if the passed object is a subclass of the receiver. This is
324
+ the inverse of subclassOf() which you call on the class you want to test.
325
+
326
+ @param {Class} scClass class to compare
327
+ @returns {Boolean}
328
+ */
329
+ hasSubclass: function(scClass) {
330
+ return (scClass && scClass.subclassOf) ? scClass.subclassOf(this) : NO;
331
+ },
332
+
333
+ /**
334
+ Returns YES if the receiver is the passed class or is a subclass of the
335
+ passed class. Unlike subclassOf(), this method will return YES if you
336
+ pass the receiver itself, since class is a kind of itself. See also
337
+ subclassOf().
338
+
339
+ h2. Example
340
+
341
+ {{{
342
+ ClassA = SC.Object.extend();
343
+ ClassB = ClassA.extend();
344
+
345
+ ClassB.kindOf(ClassA) => YES
346
+ ClassA.kindOf(ClassA) => YES
347
+ }}}
348
+
349
+ @param {Class} scClass class to compare
350
+ @returns {Boolean}
351
+ */
352
+ kindOf: function(scClass) {
353
+ return (this === scClass) || this.subclassOf(scClass) ;
354
+ }
355
+
356
+ }) ;
357
+
358
+ // ..........................................
359
+ // DEFAULT OBJECT INSTANCE
360
+ //
361
+ SC.Object.prototype = {
362
+
363
+ /** @private
364
+ This is the first method invoked on a new instance. It will first apply
365
+ any added properties to the new instance and then calls the real init()
366
+ method.
367
+
368
+ @param {Array} extensions an array-like object with hashes to apply.
369
+ @returns {Object} receiver
370
+ */
371
+ _object_init: function(extensions) {
372
+ // apply any new properties
373
+ var idx, len = (extensions) ? extensions.length : 0;
374
+ for(idx=0;idx<len;idx++) SC._object_extend(this, extensions[idx]) ;
375
+ SC.generateGuid(this) ; // add guid
376
+ this.init() ; // call real init
377
+
378
+ // Call 'initMixin' methods to automatically setup modules.
379
+ var inits = this.initMixin; len = (inits) ? inits.length : 0 ;
380
+ for(idx=0;idx < len; idx++) inits[idx].call(this);
381
+
382
+ return this ; // done!
383
+ },
384
+
385
+ /**
386
+ You can call this method on an object to mixin one or more hashes of
387
+ properties on the receiver object. In addition to simply copying
388
+ properties, this method will also prepare the properties for use in
389
+ bindings, computed properties, etc.
390
+
391
+ If you plan to use this method, you should call it before you call
392
+ the inherited init method from SC.Object or else your instance may not
393
+ function properly.
394
+
395
+ h2. Example
396
+
397
+ {{{
398
+ // dynamically apply a mixin specified in an object property
399
+ var MyClass = SC.Object.extend({
400
+ extraMixin: null,
401
+
402
+ init: function() {
403
+ this.mixin(this.extraMixin);
404
+ sc_super();
405
+ }
406
+ });
407
+
408
+ var ExampleMixin = { foo: "bar" };
409
+
410
+ var instance = MyClass.create({ extraMixin: ExampleMixin }) ;
411
+
412
+ instance.get('foo') => "bar"
413
+ }}}
414
+
415
+ @param {Hash} ext a hash to copy. Only one.
416
+ @returns {Object} receiver
417
+ */
418
+ mixin: function() {
419
+ var idx, len = arguments.length;
420
+ for(idx=0;idx<len;idx++) SC.mixin(this, arguments[idx]) ;
421
+
422
+ // call initMixin
423
+ for(idx=0;idx<len;idx++) {
424
+ var init = arguments[idx].initMixin ;
425
+ if (init) init.call(this) ;
426
+ }
427
+ return this ;
428
+ },
429
+
430
+ /**
431
+ This method is invoked automatically whenever a new object is
432
+ instantiated. You can override this method as you like to setup your
433
+ new object.
434
+
435
+ Within your object, be sure to call sc_super() to ensure that the
436
+ built-in init method is also called or your observers and computed
437
+ properties may not be configured.
438
+
439
+ Although the default init() method returns the receiver, the return
440
+ value is ignored.
441
+
442
+ @returns {Object} reciever
443
+ */
444
+ init: function() {
445
+ this.initObservable();
446
+ return this ;
447
+ },
448
+
449
+ /**
450
+ Set to NO once this object has been destroyed.
451
+ */
452
+ isDestroyed: NO,
453
+
454
+ /**
455
+ Call this method when you are finished with an object to teardown its
456
+ contents. Because JavaScript is garbage collected, you do not usually
457
+ need to call this method. However, you may choose to do so for certain
458
+ objects, especially views, in order to let them reclaim memory they
459
+ consume immediately.
460
+
461
+ If you would like to perform additional cleanup when an object is
462
+ finished, you may override this method. Be sure to call sc_super().
463
+
464
+ @returns {SC.Object} receiver
465
+ */
466
+ destroy: function() {
467
+ if (this.get('isDestroyed')) return this; // nothing to do
468
+ this.set('isDestroyed', YES);
469
+
470
+ // destroy any mixins
471
+ var idx, inits = this.destroyMixin, len = (inits) ? inits.length : 0 ;
472
+ for(idx=0;idx < len; idx++) inits[idx].call(this);
473
+
474
+ return this ;
475
+ },
476
+
477
+ /**
478
+ Walk like a duck. Always YES since this is an object and not a class.
479
+ */
480
+ isObject: true,
481
+
482
+ /**
483
+ Returns YES if the named value is an executable function.
484
+
485
+ @param methodName {String} the property name to check
486
+ @returns {Boolean}
487
+ */
488
+ respondsTo: function( methodName ) {
489
+ return !!(SC.typeOf(this[methodName]) === SC.T_FUNCTION);
490
+ },
491
+
492
+ /**
493
+ Attemps to invoked the named method, passing the included two arguments.
494
+ Returns NO if the method is either not implemented or if the handler
495
+ returns NO (indicating that it did not handle the event). This method
496
+ is invoked to deliver actions from menu items and to deliver events.
497
+ You can override this method to provide additional handling if you
498
+ prefer.
499
+
500
+ @param {String} methodName
501
+ @param {Object} arg1
502
+ @param {Object} arg2
503
+ @returns {Boolean} YES if handled, NO if not handled
504
+ */
505
+ tryToPerform: function(methodName, arg1, arg2) {
506
+ return this.respondsTo(methodName) && (this[methodName](arg1, arg2) !== NO);
507
+ },
508
+
509
+ /**
510
+ EXPERIMENTAL: You can use this to invoke a superclass implementation in
511
+ any method. This does not work in Safari 2 or earlier. If you need to
512
+ target these methods, you should use one of the alternatives below:
513
+
514
+ - *With Build Tools:* sc_super();
515
+ - *Without Build Tools:* arguments.callee.base.apply(this, arguments);
516
+
517
+ h2. Example
518
+
519
+ All of the following methods will call the superclass implementation of
520
+ your method:
521
+
522
+ {{{
523
+ SC.Object.create({
524
+
525
+ // DOES NOT WORK IN SAFARI 2 OR EARLIER
526
+ method1: function() {
527
+ this.superclass();
528
+ },
529
+
530
+ // REQUIRES SC-BUILD TOOLS
531
+ method2: function() {
532
+ sc_super();
533
+ },
534
+
535
+ // WORKS ANYTIME
536
+ method3: function() {
537
+ arguments.callee.base.apply(this, arguments);
538
+ }
539
+ });
540
+ }}}
541
+
542
+ @params args {*args} any arguments you want to pass along.
543
+ @returns {Object} return value from super
544
+ */
545
+ superclass: function(args) {
546
+ var caller = arguments.callee.caller;
547
+ if (!caller) throw "superclass cannot determine the caller method" ;
548
+ return caller.superclass ? caller.superclass.apply(this, arguments) : null;
549
+ },
550
+
551
+ /**
552
+ returns YES if the receiver is an instance of the named class. See also
553
+ kindOf().
554
+
555
+ h2. Example
556
+
557
+ {{{
558
+ var ClassA = SC.Object.extend();
559
+ var ClassB = SC.Object.extend();
560
+
561
+ var instA = ClassA.create();
562
+ var instB = ClassB.create();
563
+
564
+ instA.instanceOf(ClassA) => YES
565
+ instB.instanceOf(ClassA) => NO
566
+ }}}
567
+
568
+ @param {Class} scClass the class
569
+ @returns {Boolean}
570
+ */
571
+ instanceOf: function(scClass) {
572
+ return this.constructor === scClass ;
573
+ },
574
+
575
+ /**
576
+ Returns true if the receiver is an instance of the named class or any
577
+ subclass of the named class. See also instanceOf().
578
+
579
+ h2. Example
580
+
581
+ {{{
582
+ var ClassA = SC.Object.extend();
583
+ var ClassB = SC.Object.extend();
584
+
585
+ var instA = ClassA.create();
586
+ var instB = ClassB.create();
587
+
588
+ instA.kindOf(ClassA) => YES
589
+ instB.kindOf(ClassA) => YES
590
+ }}}
591
+
592
+ @param scClass {Class} the class
593
+ @returns {Boolean}
594
+ */
595
+ kindOf: function(scClass) { return this.constructor.kindOf(scClass); },
596
+
597
+ /** @private */
598
+ toString: function() {
599
+ if (!this._object_toString) {
600
+ this._object_toString = "%@:%@".fmt(SC._object_className(this.constructor), SC.guidFor(this));
601
+ }
602
+ return this._object_toString ;
603
+ },
604
+
605
+ /**
606
+ Activates any outlet connections in object and syncs any bindings. This
607
+ method is called automatically for view classes but may be used for any
608
+ object.
609
+
610
+ @returns {void}
611
+ */
612
+ awake: function(key) {
613
+ this.outlets.forEach(function(key) { this.get(key); },this) ;
614
+ this.bindings.invoke('sync');
615
+ },
616
+
617
+ /**
618
+ Invokes the passed method or method name one time during the runloop. You
619
+ can use this method to schedule methods that need to execute but may be
620
+ too expensive to execute more than once, such as methods that update the
621
+ DOM.
622
+
623
+ @param {Funciton|String} method method or method name
624
+ @returns {SC.Object} receiver
625
+ */
626
+ invokeOnce: function(method) {
627
+ SC.RunLoop.currentRunLoop.invokeOnce(this, method) ;
628
+ return this ;
629
+ },
630
+
631
+ /**
632
+ Invokes the passed method once at the beginning of the next runloop,
633
+ before any other methods (including events) are processed. This is useful
634
+ for situations where you know you need to update something, but due to
635
+ the way the run loop works, you can't actually do the update until the
636
+ run loop has completed.
637
+
638
+ A simple example is setting the selection on a collection controller to a
639
+ newly created object. Because the collection controller won't have its
640
+ content collection updated until later in the run loop, setting the
641
+ selection immediately will have no affect. In this situation, you could do
642
+ this instead:
643
+
644
+ {{{
645
+ // Creates a new MyRecord object and sets the selection of the
646
+ // myRecord collection controller to the new object.
647
+ createObjectAction: function(sender, evt) {
648
+ // create a new record and add it to the store
649
+ var obj = MyRecord.newRecord() ;
650
+
651
+ // update the collection controller's selection
652
+ MyApp.myRecordCollectionController.invokeNext( function() {
653
+ this.set('selection', [obj]) ;
654
+ });
655
+ }
656
+ }}}
657
+
658
+ You can call invokeNext as many times as you like and the method will
659
+ only be invoked once.
660
+
661
+ @param {Funciton|String} method method or method name
662
+ @returns {SC.Object} receiver
663
+ */
664
+ invokeNext: function(method) {
665
+ SC.RunLoop.currentRunLoop.invokeNext(this, method) ;
666
+ return this ;
667
+ },
668
+
669
+ /**
670
+ The properties named in this array will be concatenated in subclasses
671
+ instead of replaced. This allows you to name special properties that
672
+ should contain any values you specify plus values specified by parents.
673
+
674
+ It is used by SproutCore and is available for your use, though you
675
+ should limit the number of properties you include in this list as it
676
+ adds a slight overhead to new class and instance creation.
677
+
678
+ @property
679
+ */
680
+ concatenatedProperties: ['concatenatedProperties', 'initMixin', 'destroyMixin']
681
+
682
+ } ;
683
+
684
+ // bootstrap the constructor for SC.Object.
685
+ SC.Object.prototype.constructor = SC.Object;
686
+
687
+ // Add observable to mixin
688
+ SC.mixin(SC.Object.prototype, SC.Observable) ;
689
+
690
+ // ..........................................................
691
+ // CLASS NAME SUPPORT
692
+ //
693
+
694
+ /** @private
695
+ This is a way of performing brute-force introspection. This searches
696
+ through all the top-level properties looking for classes. When it finds
697
+ one, it saves the class path name.
698
+ */
699
+ function findClassNames() {
700
+
701
+ if (SC._object_foundObjectClassNames) return ;
702
+ SC._object_foundObjectClassNames = true ;
703
+
704
+ var seen = [] ;
705
+ var searchObject = function(root, object, levels) {
706
+ levels-- ;
707
+
708
+ // not the fastest, but safe
709
+ if (seen.indexOf(object) >= 0) return ;
710
+ seen.push(object) ;
711
+
712
+ for(var key in object) {
713
+ if (key == '__scope__') continue ;
714
+ if (key == 'superclass') continue ;
715
+ if (!key.match(/^[A-Z0-9]/)) continue ;
716
+
717
+ var path = (root) ? [root,key].join('.') : key ;
718
+ var value = object[key] ;
719
+
720
+
721
+ switch(SC.typeOf(value)) {
722
+ case SC.T_CLASS:
723
+ if (!value._object_className) value._object_className = path;
724
+ if (levels>=0) searchObject(path, value, levels) ;
725
+ break ;
726
+
727
+ case SC.T_OBJECT:
728
+ if (levels>=0) searchObject(path, value, levels) ;
729
+ break ;
730
+
731
+ case SC.T_HASH:
732
+ if (((root) || (path==='SC')) && (levels>=0)) searchObject(path, value, levels) ;
733
+ break ;
734
+
735
+ default:
736
+ break;
737
+ }
738
+ }
739
+ } ;
740
+
741
+ searchObject(null, window, 2) ;
742
+
743
+ // Internet Explorer doesn's loop over global variables...
744
+ /*if ( SC.browser.isIE ) {
745
+ searchObject('SC', SC, 2) ; // get names for the SC classes
746
+
747
+ // get names for the model classes, including nested namespaces (untested)
748
+ for ( var i = 0; i < SC.Server.servers.length; i++ ) {
749
+ var server = SC.Server.servers[i];
750
+ if (server.prefix) {
751
+ for (var prefixLoc = 0; prefixLoc < server.prefix.length; prefixLoc++) {
752
+ var prefixParts = server.prefix[prefixLoc].split('.');
753
+ var namespace = window;
754
+ var namespaceName;
755
+ for (var prefixPartsLoc = 0; prefixPartsLoc < prefixParts.length; prefixPartsLoc++) {
756
+ namespace = namespace[prefixParts[prefixPartsLoc]] ;
757
+ namespaceName = prefixParts[prefixPartsLoc];
758
+ }
759
+ searchObject(namespaceName, namespace, 2) ;
760
+ }
761
+ }
762
+ }
763
+ }*/
764
+ }
765
+
766
+ /** @private
767
+ Returns the name of this class. If the name is not known, triggers
768
+ a search. This can be expensive the first time it is called.
769
+
770
+ This method is used to allow classes to determine their own name.
771
+ */
772
+ SC._object_className = function(obj) {
773
+ if (!SC.isReady) return ''; // class names are not available until ready
774
+ if (!obj._object_className) findClassNames() ;
775
+ if (obj._object_className) return obj._object_className ;
776
+
777
+ // if no direct classname was found, walk up class chain looking for a
778
+ // match.
779
+ var ret = obj ;
780
+ while(ret && !ret._object_className) ret = ret.superclass;
781
+ return (ret && ret._object_className) ? ret._object_className : 'Anonymous';
782
+ } ;
783
+