sproutcore 1.4.5-java → 1.5.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1916) hide show
  1. data/.rspec +1 -0
  2. data/CHANGELOG +126 -0
  3. data/README.txt +25 -0
  4. data/VERSION.yml +2 -2
  5. data/bin/sc-build +1 -1
  6. data/bin/sc-build-number +1 -1
  7. data/bin/sc-docs +1 -1
  8. data/bin/sc-gen +1 -1
  9. data/bin/sc-init +1 -1
  10. data/bin/sc-manifest +1 -1
  11. data/bin/sc-server +1 -1
  12. data/bin/sproutcore +1 -1
  13. data/lib/Buildfile +14 -5
  14. data/lib/buildtasks/build.rake +33 -17
  15. data/lib/buildtasks/manifest.rake +381 -103
  16. data/lib/buildtasks/target.rake +1 -0
  17. data/lib/doc_templates/sproutcore/index.tmpl +18 -4
  18. data/lib/doc_templates/sproutcore/publish.js +1 -1
  19. data/lib/frameworks/sproutcore/Buildfile +36 -33
  20. data/lib/frameworks/sproutcore/CHANGELOG.md +414 -0
  21. data/lib/frameworks/sproutcore/README.md +1 -0
  22. data/lib/frameworks/sproutcore/apps/test_controls/Buildfile +0 -0
  23. data/lib/frameworks/sproutcore/apps/test_controls/controllers/alert.js +39 -0
  24. data/lib/frameworks/sproutcore/apps/test_controls/controllers/buttons.js +21 -0
  25. data/lib/frameworks/sproutcore/apps/test_controls/controllers/categories.js +125 -0
  26. data/lib/frameworks/sproutcore/apps/test_controls/controllers/category.js +36 -0
  27. data/lib/frameworks/sproutcore/apps/test_controls/controllers/split.js +74 -0
  28. data/lib/frameworks/sproutcore/apps/test_controls/core.js +29 -0
  29. data/lib/frameworks/sproutcore/apps/test_controls/main.js +14 -0
  30. data/lib/frameworks/sproutcore/apps/test_controls/resources/buttons_page.js +158 -0
  31. data/lib/frameworks/sproutcore/apps/test_controls/resources/checkboxes_page.js +53 -0
  32. data/lib/frameworks/sproutcore/apps/test_controls/resources/flow_layout_page.js +85 -0
  33. data/lib/frameworks/sproutcore/apps/test_controls/resources/list_page.js +40 -0
  34. data/lib/frameworks/sproutcore/apps/test_controls/resources/loading.rhtml +9 -0
  35. data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.css +60 -0
  36. data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.js +151 -0
  37. data/lib/frameworks/sproutcore/apps/test_controls/resources/panels_page.js +62 -0
  38. data/lib/frameworks/sproutcore/apps/test_controls/resources/progress_page.js +33 -0
  39. data/lib/frameworks/sproutcore/apps/test_controls/resources/radio_page.js +55 -0
  40. data/lib/frameworks/sproutcore/apps/test_controls/resources/scroll_page.js +77 -0
  41. data/lib/frameworks/sproutcore/apps/test_controls/resources/segmented_page.js +99 -0
  42. data/lib/frameworks/sproutcore/apps/test_controls/resources/select_page.js +61 -0
  43. data/lib/frameworks/sproutcore/apps/test_controls/resources/sliders_page.js +54 -0
  44. data/lib/frameworks/sproutcore/apps/test_controls/resources/split_page.js +141 -0
  45. data/lib/frameworks/sproutcore/apps/test_controls/resources/strings.js +50 -0
  46. data/lib/frameworks/sproutcore/apps/test_controls/resources/tab_page.js +53 -0
  47. data/lib/frameworks/sproutcore/apps/test_controls/resources/text_field_page.js +65 -0
  48. data/lib/frameworks/sproutcore/apps/test_controls/theme.js +34 -0
  49. data/lib/frameworks/sproutcore/apps/tests/controllers/detail.js +1 -1
  50. data/lib/frameworks/sproutcore/apps/tests/controllers/source.js +1 -1
  51. data/lib/frameworks/sproutcore/apps/tests/controllers/target.js +1 -1
  52. data/lib/frameworks/sproutcore/apps/tests/controllers/targets.js +1 -1
  53. data/lib/frameworks/sproutcore/apps/tests/controllers/tests.js +1 -1
  54. data/lib/frameworks/sproutcore/apps/tests/core.js +1 -1
  55. data/lib/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +6 -6
  56. data/lib/frameworks/sproutcore/apps/tests/english.lproj/strings.js +1 -1
  57. data/lib/frameworks/sproutcore/apps/tests/main.js +1 -1
  58. data/lib/frameworks/sproutcore/apps/tests/states/no_targets.js +1 -1
  59. data/lib/frameworks/sproutcore/apps/tests/states/ready.js +1 -1
  60. data/lib/frameworks/sproutcore/apps/tests/states/ready_detail.js +1 -1
  61. data/lib/frameworks/sproutcore/apps/tests/states/ready_empty.js +1 -1
  62. data/lib/frameworks/sproutcore/apps/tests/states/ready_list.js +1 -1
  63. data/lib/frameworks/sproutcore/apps/tests/states/ready_loading.js +1 -1
  64. data/lib/frameworks/sproutcore/apps/tests/states/ready_no_tests.js +1 -1
  65. data/lib/frameworks/sproutcore/apps/tests/states/start.js +1 -1
  66. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/detail.js +1 -1
  67. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/source.js +1 -1
  68. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/target.js +1 -1
  69. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/targets.js +1 -1
  70. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/tests.js +1 -1
  71. data/lib/frameworks/sproutcore/apps/tests/tests/models/target.js +1 -1
  72. data/lib/frameworks/sproutcore/apps/tests/tests/models/test.js +1 -1
  73. data/lib/frameworks/sproutcore/apps/tests/tests/views/offset_checkbox.js +1 -1
  74. data/lib/frameworks/sproutcore/apps/tests/views/offset_checkbox.js +1 -1
  75. data/lib/frameworks/sproutcore/apps/welcome/controllers/targets.js +10 -4
  76. data/lib/frameworks/sproutcore/apps/welcome/core.js +1 -1
  77. data/lib/frameworks/sproutcore/apps/{greenhouse → welcome}/english.lproj/images/main-bg.png +0 -0
  78. data/lib/frameworks/sproutcore/apps/welcome/english.lproj/main_page.css +24 -6
  79. data/lib/frameworks/sproutcore/apps/welcome/english.lproj/main_page.js +37 -47
  80. data/lib/frameworks/sproutcore/apps/welcome/english.lproj/strings.js +1 -1
  81. data/lib/frameworks/sproutcore/apps/welcome/main.js +1 -1
  82. data/lib/frameworks/sproutcore/apps/welcome/tests/controllers/targets.js +1 -1
  83. data/lib/frameworks/sproutcore/design/{SproutCore Datastore Design.graffle → Sproutcore_DatastoreDesign.graffle}/QuickLook/Preview.pdf +0 -0
  84. data/lib/frameworks/sproutcore/design/{SproutCore Datastore Design.graffle → Sproutcore_DatastoreDesign.graffle}/QuickLook/Thumbnail.tiff +0 -0
  85. data/lib/frameworks/sproutcore/design/{SproutCore Datastore Design.graffle → Sproutcore_DatastoreDesign.graffle}/data.plist +0 -0
  86. data/lib/frameworks/sproutcore/{apps/docs/design/Doc Viewer.graffle → design/Sproutcore_DatastoreDesign.graffle}/image8.png +0 -0
  87. data/lib/frameworks/sproutcore/design/{SproutCore Design Template.graffle → Sproutcore_Design_Template.graffle}/QuickLook/Preview.pdf +0 -0
  88. data/lib/frameworks/sproutcore/design/{SproutCore Design Template.graffle → Sproutcore_Design_Template.graffle}/QuickLook/Thumbnail.tiff +0 -0
  89. data/lib/frameworks/sproutcore/design/{SproutCore Design Template.graffle → Sproutcore_Design_Template.graffle}/data.plist +0 -0
  90. data/lib/frameworks/sproutcore/design/{SproutCore Datastore Design.graffle → Sproutcore_Design_Template.graffle}/image8.png +0 -0
  91. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/QuickLook/Preview.pdf +0 -0
  92. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/QuickLook/Thumbnail.tiff +0 -0
  93. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/data.plist +0 -0
  94. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/image10.png +0 -0
  95. data/lib/frameworks/sproutcore/{apps/docs/design/Doc Viewer.graffle → design/TestRunner_Design.graffle}/image11.png +0 -0
  96. data/lib/frameworks/sproutcore/{apps/docs/design/Doc Viewer.graffle → design/TestRunner_Design.graffle}/image13.png +0 -0
  97. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/image15.png +0 -0
  98. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/image16.png +0 -0
  99. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/image17.png +0 -0
  100. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/image18.png +0 -0
  101. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/image19.png +0 -0
  102. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/image22.tiff +0 -0
  103. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/image23.png +0 -0
  104. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/image24.png +0 -0
  105. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/image25.png +0 -0
  106. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/image30.png +0 -0
  107. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/image31.png +0 -0
  108. data/lib/frameworks/sproutcore/design/{SproutCore Design Template.graffle → TestRunner_Design.graffle}/image8.png +0 -0
  109. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.graffle}/image9.png +0 -0
  110. data/lib/frameworks/sproutcore/frameworks/ajax/fixtures/file_exists.json +1 -0
  111. data/lib/frameworks/sproutcore/frameworks/ajax/fixtures/malformed.json +11 -0
  112. data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +611 -0
  113. data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +550 -0
  114. data/lib/frameworks/sproutcore/frameworks/ajax/tests/system/request.js +276 -0
  115. data/lib/frameworks/sproutcore/frameworks/animation/core.js +57 -45
  116. data/lib/frameworks/sproutcore/frameworks/animation/tests/core.js +10 -5
  117. data/lib/frameworks/sproutcore/frameworks/bootstrap/core.js +1 -1
  118. data/lib/frameworks/sproutcore/frameworks/bootstrap/setup_body_class_names.js +1 -1
  119. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/bench.js +14 -0
  120. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +219 -23
  121. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +16 -15
  122. data/lib/frameworks/sproutcore/frameworks/bootstrap/tests/system/browser.js +187 -0
  123. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +540 -0
  124. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/controller.js +44 -0
  125. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/object.js +342 -0
  126. data/lib/frameworks/sproutcore/frameworks/core_foundation/core.js +189 -0
  127. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/function.js +39 -0
  128. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/handlebars.js +73 -0
  129. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/handlebars/bind.js +293 -0
  130. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/handlebars/collection.js +55 -0
  131. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/handlebars/localization.js +5 -0
  132. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/handlebars/view.js +96 -0
  133. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/object.js +81 -0
  134. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/run_loop.js +163 -0
  135. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/string.js +60 -0
  136. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/delegate_support.js +110 -0
  137. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/responder_context.js +268 -0
  138. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/selection_support.js +249 -0
  139. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/template_helpers/checkbox_support.js +28 -0
  140. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/template_helpers/text_field_support.js +55 -0
  141. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/keyboard.js +74 -0
  142. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/layout.js +95 -0
  143. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/main.js +50 -0
  144. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/manipulation.js +33 -0
  145. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +670 -0
  146. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/template.js +31 -0
  147. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/visibility.js +17 -0
  148. data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/observable_protocol.js +40 -0
  149. data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/sparse_array_delegate.js +131 -0
  150. data/lib/frameworks/sproutcore/frameworks/core_foundation/resources/core.css +378 -0
  151. data/lib/frameworks/sproutcore/frameworks/core_foundation/resources/view.css +57 -0
  152. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/application.js +33 -0
  153. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/bindable_span.js +164 -0
  154. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/browser.js +36 -0
  155. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/builder.js +202 -0
  156. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/core_query.js +141 -0
  157. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/cursor.js +131 -0
  158. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/datetime.js +0 -0
  159. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/device.js +210 -0
  160. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +991 -0
  161. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +289 -0
  162. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/page.js +106 -0
  163. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/platform.js +419 -0
  164. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/ready.js +103 -0
  165. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +1063 -0
  166. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/responder.js +124 -0
  167. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +2174 -0
  168. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/selection_set.js +693 -0
  169. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +397 -0
  170. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/string.js +165 -0
  171. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/theme.js +316 -0
  172. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/timer.js +548 -0
  173. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils.js +155 -0
  174. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils/rect.js +104 -0
  175. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +301 -0
  176. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/enum_case.js +206 -0
  177. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/null_case.js +64 -0
  178. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/selection_support.js +344 -0
  179. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/single_case.js +136 -0
  180. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/empty_case.js +82 -0
  181. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/multiple_case.js +111 -0
  182. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/single_case.js +193 -0
  183. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/single_enumerable_case.js +265 -0
  184. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/responder_context.js +76 -0
  185. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +78 -0
  186. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/template_helpers/checkbox_support.js +38 -0
  187. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/template_helpers/text_field_support.js +79 -0
  188. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/panes/template.js +20 -0
  189. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/builder.js +49 -0
  190. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/core_query/within.js +71 -0
  191. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/locale.js +140 -0
  192. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/ready/done.js +40 -0
  193. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/begin.js +47 -0
  194. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/element.js +44 -0
  195. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/end.js +124 -0
  196. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/get.js +51 -0
  197. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_attr.js +50 -0
  198. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_basic.js +28 -0
  199. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_className.js +177 -0
  200. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_style.js +109 -0
  201. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/init.js +55 -0
  202. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/join.js +28 -0
  203. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/push_text.js +74 -0
  204. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/tag.js +46 -0
  205. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/update.js +219 -0
  206. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeKeyPane.js +124 -0
  207. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeMainPane.js +68 -0
  208. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeMenuPane.js +48 -0
  209. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/root_responder.js +108 -0
  210. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/targetForAction.js +288 -0
  211. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/add.js +92 -0
  212. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/copy.js +17 -0
  213. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/indexSetForSource.js +98 -0
  214. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/isEqual.js +60 -0
  215. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/remove.js +111 -0
  216. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/sparse_array.js +201 -0
  217. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/theme.js +78 -0
  218. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/invalidate.js +44 -0
  219. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/invokeLater.js +209 -0
  220. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/isPaused.js +77 -0
  221. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/performAction.js +75 -0
  222. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/schedule.js +176 -0
  223. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/normalizeURL.js +24 -0
  224. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/offset.js +284 -0
  225. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/rect.js +105 -0
  226. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/main_pane.js +49 -0
  227. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/append_remove.js +224 -0
  228. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/child_view.js +26 -0
  229. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/firstResponder.js +148 -0
  230. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/keyPane.js +133 -0
  231. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/layout.js +31 -0
  232. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/sendEvent.js +206 -0
  233. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/collection.js +201 -0
  234. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/core.js +160 -0
  235. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/handlebars.js +919 -0
  236. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/animation.js +382 -0
  237. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/build.js +85 -0
  238. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/build_children.js +89 -0
  239. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/clippingFrame.js +117 -0
  240. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/convertFrames.js +248 -0
  241. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/convertLayouts.js +153 -0
  242. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/createChildViews.js +132 -0
  243. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/createLayer.js +97 -0
  244. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/destroyLayer.js +83 -0
  245. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/didAppendToDocument.js +83 -0
  246. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/findLayerInParentLayer.js +50 -0
  247. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/init.js +50 -0
  248. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/insertBefore.js +217 -0
  249. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/isVisible.js +85 -0
  250. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/isVisibleInWindow.js +122 -0
  251. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/keyboard.js +28 -0
  252. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layer.js +146 -0
  253. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutChildViews.js +162 -0
  254. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +180 -0
  255. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutStyle.js +745 -0
  256. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/parentViewDidChange.js +67 -0
  257. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/prepareContext.js +203 -0
  258. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/removeChild.js +189 -0
  259. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/render.js +203 -0
  260. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/render_delegate_support.js +163 -0
  261. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/replaceChild.js +29 -0
  262. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/static_layout.js +28 -0
  263. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/theme.js +45 -0
  264. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/updateLayer.js +148 -0
  265. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/updateLayerLocation.js +213 -0
  266. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/view.js +64 -0
  267. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/viewDidResize.js +202 -0
  268. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template.js +131 -0
  269. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template_collection.js +242 -0
  270. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +1524 -0
  271. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +181 -0
  272. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/base.js +3 -0
  273. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/cursor.js +48 -0
  274. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/enabled.js +57 -0
  275. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +223 -0
  276. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +1115 -0
  277. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +624 -0
  278. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +401 -0
  279. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +400 -0
  280. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/touch.js +67 -0
  281. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/visibility.js +118 -0
  282. data/lib/frameworks/sproutcore/frameworks/core_tools/core.js +1 -1
  283. data/lib/frameworks/sproutcore/frameworks/core_tools/data_source.js +1 -1
  284. data/lib/frameworks/sproutcore/frameworks/core_tools/english.lproj/strings.js +1 -1
  285. data/lib/frameworks/sproutcore/frameworks/core_tools/fixtures/target.js +1 -1
  286. data/lib/frameworks/sproutcore/frameworks/core_tools/fixtures/test.js +1 -1
  287. data/lib/frameworks/sproutcore/frameworks/core_tools/models/target.js +1 -1
  288. data/lib/frameworks/sproutcore/frameworks/core_tools/models/test.js +1 -1
  289. data/lib/frameworks/sproutcore/frameworks/datastore/core.js +1 -1
  290. data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/cascade.js +17 -21
  291. data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +322 -132
  292. data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +5 -5
  293. data/lib/frameworks/sproutcore/frameworks/datastore/debug/json.js +1 -1
  294. data/lib/frameworks/sproutcore/frameworks/datastore/debug/standard_setup.js +1 -1
  295. data/lib/frameworks/sproutcore/frameworks/datastore/models/child_attribute.js +44 -61
  296. data/lib/frameworks/sproutcore/frameworks/datastore/models/child_record.js +16 -100
  297. data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +17 -24
  298. data/lib/frameworks/sproutcore/frameworks/datastore/models/fetched_attribute.js +8 -8
  299. data/lib/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +20 -21
  300. data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +457 -216
  301. data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +204 -94
  302. data/lib/frameworks/sproutcore/frameworks/datastore/models/single_attribute.js +17 -19
  303. data/lib/frameworks/sproutcore/frameworks/datastore/system/child_array.js +150 -115
  304. data/lib/frameworks/sproutcore/frameworks/datastore/system/many_array.js +148 -110
  305. data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +51 -26
  306. data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +160 -158
  307. data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +298 -204
  308. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +419 -233
  309. data/lib/frameworks/sproutcore/frameworks/datastore/tests/data_sources/cascade.js +1 -1
  310. data/lib/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +7 -2
  311. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/contact_model.js +1 -1
  312. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/cyclical_relationship.js +2 -2
  313. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/mail_model.js +1 -1
  314. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/test_runner_model.js +1 -1
  315. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/datetime_recordattribute.js +1 -1
  316. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +1 -1
  317. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/data_store.js +180 -0
  318. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +56 -18
  319. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array.js +36 -10
  320. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +11 -11
  321. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +8 -8
  322. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/core_methods.js +1 -1
  323. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/destroy.js +1 -1
  324. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/error_methods.js +1 -1
  325. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/normalize.js +26 -4
  326. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/readAttribute.js +1 -1
  327. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/refresh.js +2 -2
  328. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/storeDidChangeProperties.js +1 -1
  329. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/unknownProperty.js +1 -1
  330. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +1 -1
  331. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +1 -1
  332. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/single_attribute.js +1 -1
  333. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/many_array/core_methods.js +1 -1
  334. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +1 -1
  335. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChanges.js +5 -3
  336. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +5 -1
  337. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/core_methods.js +1 -1
  338. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/dataHashDidChange.js +1 -1
  339. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/discardChanges.js +5 -2
  340. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +1 -1
  341. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readEditableDataHash.js +1 -1
  342. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/removeDataHash.js +1 -1
  343. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/writeDataHash.js +1 -1
  344. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/builders.js +22 -22
  345. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/compare.js +1 -1
  346. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/contains.js +1 -1
  347. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/containsRecordTypes.js +1 -1
  348. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/copy.js +1 -1
  349. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation.js +1 -1
  350. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation_of_records.js +39 -14
  351. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/expandedRecordTypes.js +1 -1
  352. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/parse.js +14 -6
  353. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/queryWithScope.js +1 -1
  354. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/record_type_is.js +5 -1
  355. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_comparisons.js +5 -1
  356. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_query_extensions.js +5 -1
  357. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +1 -1
  358. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/error_methods.js +1 -1
  359. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/flush.js +89 -53
  360. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/cancelRecord.js +1 -1
  361. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +5 -1
  362. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +11 -1
  363. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +1 -1
  364. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +6 -2
  365. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataHashDidChange.js +1 -1
  366. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +1 -1
  367. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/destroyRecord.js +6 -2
  368. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/error_methods.js +1 -1
  369. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/find.js +1 -1
  370. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/init.js +1 -1
  371. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/loadRecord.js +64 -0
  372. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/loadRecords.js +100 -0
  373. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +1 -1
  374. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/readDataHash.js +1 -1
  375. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/readEditableDataHash.js +1 -1
  376. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/recordDidChange.js +39 -36
  377. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/removeDataHash.js +1 -1
  378. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/retrieveRecord.js +17 -1
  379. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/unloadRecord.js +55 -0
  380. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/unloadRecords.js +85 -32
  381. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/writeDataHash.js +1 -1
  382. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +1103 -0
  383. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/tests/system/datetime.js +390 -0
  384. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/resources/strings.js +14 -0
  385. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/system/datetime.js +91 -0
  386. data/lib/frameworks/sproutcore/frameworks/debug/core.js +3 -3
  387. data/lib/frameworks/sproutcore/frameworks/debug/invoke_once_last_debugging.js +10 -11
  388. data/lib/frameworks/sproutcore/frameworks/desktop/core.js +19 -3
  389. data/lib/frameworks/sproutcore/frameworks/desktop/debug/drag.js +8 -7
  390. data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/disclosure.css +0 -1
  391. data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/icons.css +0 -27
  392. data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/list_item.css +27 -3
  393. data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +1 -9
  394. data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/segmented.css +72 -74
  395. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/border.js +49 -27
  396. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_fast_path.js +63 -46
  397. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_group.js +6 -3
  398. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +53 -17
  399. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +84 -79
  400. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/navigation_builder.js +138 -0
  401. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +38 -24
  402. data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +396 -218
  403. data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +92 -123
  404. data/lib/frameworks/sproutcore/frameworks/desktop/panes/modal.js +23 -18
  405. data/lib/frameworks/sproutcore/frameworks/desktop/panes/palette.js +39 -17
  406. data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +66 -53
  407. data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +364 -121
  408. data/lib/frameworks/sproutcore/frameworks/desktop/panes/select_button.js +209 -108
  409. data/lib/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +40 -17
  410. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +16 -12
  411. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_source.js +25 -27
  412. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +36 -24
  413. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/responder.js +7 -5
  414. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +112 -0
  415. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/checkbox.js +98 -0
  416. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/collection.js +25 -0
  417. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +59 -0
  418. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/helpers/slicing.js +35 -0
  419. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/image_button.js +51 -0
  420. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/master_detail.js +29 -0
  421. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/menu.js +60 -0
  422. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/panel.js +28 -0
  423. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/picker.js +44 -0
  424. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/popup_button.js +21 -0
  425. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +100 -0
  426. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio.js +84 -0
  427. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio_group.js +116 -0
  428. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +58 -0
  429. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +80 -0
  430. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +81 -0
  431. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/source_list.js +8 -0
  432. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/toolbar.js +18 -0
  433. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/well.js +17 -0
  434. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/workspace.js +18 -0
  435. data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +197 -103
  436. data/lib/frameworks/sproutcore/frameworks/desktop/system/key_bindings.js +7 -5
  437. data/lib/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +74 -37
  438. data/lib/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +26 -5
  439. data/lib/frameworks/sproutcore/frameworks/desktop/tests/mixins/border.js +16 -6
  440. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/methods.js +1 -1
  441. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +190 -22
  442. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +2 -1
  443. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +69 -9
  444. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/methods.js +1 -1
  445. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/ui.js +2 -2
  446. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/pane_page.js +4 -3
  447. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +1 -1
  448. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +30 -1
  449. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/methods.js +91 -3
  450. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +9 -3
  451. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/select_button/methods.js +1 -1
  452. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/select_button/ui.js +11 -3
  453. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/methods.js +1 -1
  454. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +4 -2
  455. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/content.js +189 -0
  456. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/displayProperties.js +89 -0
  457. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/keyEquivalents.js +57 -0
  458. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +46 -4
  459. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +91 -18
  460. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +16 -32
  461. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/ui.js +29 -3
  462. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/content.js +1 -1
  463. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deleteSelection.js +1 -1
  464. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deselect.js +1 -1
  465. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/displayProperties.js +1 -1
  466. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/itemViewForContentIndex.js +1 -1
  467. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/layerIdFor.js +1 -1
  468. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/length.js +1 -1
  469. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +27 -5
  470. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/nowShowing.js +1 -1
  471. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/reload.js +1 -1
  472. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/select.js +1 -1
  473. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectNextItem.js +1 -1
  474. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectPreviousItem.js +1 -1
  475. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selection.js +1 -1
  476. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/ui_diagram.js +16 -10
  477. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/methods.js +1 -1
  478. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/ui.js +2 -2
  479. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/methods.js +1 -1
  480. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +40 -2
  481. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +1 -1
  482. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/ui.js +1 -1
  483. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/image_button/ui.js +52 -0
  484. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/render.js +1 -1
  485. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +1 -1
  486. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowHeightForContentIndex.js +1 -1
  487. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowOffsetForContentIndex.js +1 -1
  488. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_alternatingrows.js +1 -1
  489. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_outline.js +1 -1
  490. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +1 -1
  491. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_simple.js +5 -1
  492. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +129 -21
  493. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/methods.js +1 -1
  494. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/ui.js +1 -1
  495. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/methods.js +1 -1
  496. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +174 -43
  497. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +1 -1
  498. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/ui.js +93 -8
  499. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/integration.js +50 -0
  500. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +1 -1
  501. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +14 -2
  502. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroller.js +29 -1
  503. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +26 -83
  504. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +292 -61
  505. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/methods.js +1 -1
  506. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/ui.js +11 -3
  507. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/methods.js +32 -1
  508. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +78 -8
  509. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/separator.js +11 -4
  510. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/methods.js +1 -1
  511. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/ui.js +1 -1
  512. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +1 -1
  513. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/ui.js +11 -4
  514. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/stacked/ui_comments.js +16 -9
  515. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/static_content.js +1 -1
  516. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +1 -1
  517. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/ui.js +33 -29
  518. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/toolbar/method.js +33 -0
  519. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/toolbar/ui.js +29 -0
  520. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/web/methods.js +1 -1
  521. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/web/ui.js +1 -1
  522. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/well/ui.js +1 -1
  523. data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +550 -231
  524. data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +63 -55
  525. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +286 -187
  526. data/lib/frameworks/sproutcore/frameworks/desktop/views/date_field.js +77 -53
  527. data/lib/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +39 -31
  528. data/lib/frameworks/sproutcore/frameworks/desktop/views/file.js +148 -0
  529. data/lib/frameworks/sproutcore/frameworks/desktop/views/grid.js +43 -7
  530. data/lib/frameworks/sproutcore/frameworks/desktop/views/image_button.js +82 -0
  531. data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +58 -36
  532. data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +668 -509
  533. data/lib/frameworks/sproutcore/frameworks/desktop/views/master_detail.js +313 -0
  534. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +93 -54
  535. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +152 -38
  536. data/lib/frameworks/sproutcore/frameworks/desktop/views/navigation.js +261 -0
  537. data/lib/frameworks/sproutcore/frameworks/desktop/views/navigation_bar.js +191 -0
  538. data/lib/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +35 -30
  539. data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +131 -122
  540. data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +208 -208
  541. data/lib/frameworks/sproutcore/frameworks/desktop/views/scene.js +24 -17
  542. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +332 -135
  543. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroller.js +184 -73
  544. data/lib/frameworks/sproutcore/frameworks/desktop/views/segment.js +193 -0
  545. data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +829 -426
  546. data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +377 -143
  547. data/lib/frameworks/sproutcore/frameworks/desktop/views/select_field.js +96 -37
  548. data/lib/frameworks/sproutcore/frameworks/desktop/views/separator.js +26 -10
  549. data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +52 -39
  550. data/lib/frameworks/sproutcore/frameworks/desktop/views/source_list.js +19 -5
  551. data/lib/frameworks/sproutcore/frameworks/desktop/views/source_list_group.js +15 -8
  552. data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +387 -271
  553. data/lib/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +10 -9
  554. data/lib/frameworks/sproutcore/frameworks/desktop/views/stacked.js +15 -4
  555. data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +18 -4
  556. data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +114 -12
  557. data/lib/frameworks/sproutcore/frameworks/desktop/views/thumb.js +14 -2
  558. data/lib/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +103 -14
  559. data/lib/frameworks/sproutcore/frameworks/desktop/views/web.js +36 -20
  560. data/lib/frameworks/sproutcore/frameworks/desktop/views/well.js +27 -31
  561. data/lib/frameworks/sproutcore/frameworks/desktop/views/workspace.js +285 -0
  562. data/lib/frameworks/sproutcore/frameworks/documentation/core.js +0 -0
  563. data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +6 -0
  564. data/lib/frameworks/sproutcore/frameworks/experimental/README.md +23 -0
  565. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/README +18 -0
  566. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/TODO +56 -0
  567. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/beautify.js +0 -0
  568. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/controllers/design.js +0 -0
  569. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/file.js +35 -0
  570. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/controllers/files.js +0 -0
  571. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/controllers/layout.js +0 -0
  572. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/controllers/library.js +194 -0
  573. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/controllers/page.js +0 -0
  574. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/controllers/property.js +0 -0
  575. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/controllers/property_editor.js +0 -0
  576. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/controllers/target.js +0 -0
  577. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/controllers/targets.js +0 -0
  578. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/controllers/view_configs.js +0 -0
  579. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/core.js +65 -0
  580. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/core_file.js +124 -0
  581. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/data_source.js +250 -0
  582. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/app_page.js +399 -0
  583. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/app-selector.css +107 -0
  584. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/button.css +314 -0
  585. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/dock.css +90 -0
  586. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/general.css +51 -0
  587. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/main-page.css +93 -0
  588. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/menu.css +49 -0
  589. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/modal.css +41 -0
  590. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/css/picker.css +195 -0
  591. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/css/search.css +0 -0
  592. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/css/text-field.css +0 -0
  593. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/dialogs.js +303 -0
  594. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/fonts/museosans_500.eot +0 -0
  595. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/fonts/museosans_500.otf +0 -0
  596. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/fonts/museosans_500.woff +0 -0
  597. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/fonts/museosans_500_italic.eot +0 -0
  598. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/fonts/museosans_500_italic.otf +0 -0
  599. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/fonts/museosans_500_italic.woff +0 -0
  600. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/app-selector/choose-app.png +0 -0
  601. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/app-selector/list-item-sel.png +0 -0
  602. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule-xl/active-l.png +0 -0
  603. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule-xl/active-m.png +0 -0
  604. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule-xl/active-r.png +0 -0
  605. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule-xl/regular-l.png +0 -0
  606. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule-xl/regular-m.png +0 -0
  607. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule-xl/regular-r.png +0 -0
  608. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule/active-l.png +0 -0
  609. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule/active-r.png +0 -0
  610. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule/disabled-l.png +0 -0
  611. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule/disabled-r.png +0 -0
  612. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule/regular-l.png +0 -0
  613. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule/regular-r.png +0 -0
  614. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule/sel-active-l.png +0 -0
  615. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule/sel-active-r.png +0 -0
  616. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule/sel-disabled-l.png +0 -0
  617. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule/sel-disabled-r.png +0 -0
  618. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule/sel-l.png +0 -0
  619. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/capsule/sel-r.png +0 -0
  620. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/active-l.png +0 -0
  621. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/active-m.png +0 -0
  622. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/active-r.png +0 -0
  623. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/cap-active-l.png +0 -0
  624. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/cap-active-r.png +0 -0
  625. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/cap-l.png +0 -0
  626. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/cap-r.png +0 -0
  627. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/cap-sel-active-l.png +0 -0
  628. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/cap-sel-active-r.png +0 -0
  629. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/cap-sel-l.png +0 -0
  630. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/cap-sel-r.png +0 -0
  631. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/disabled-l.png +0 -0
  632. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/disabled-m.png +0 -0
  633. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/disabled-r.png +0 -0
  634. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/regular-l.png +0 -0
  635. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/regular-m.png +0 -0
  636. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/regular-r.png +0 -0
  637. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/sel-active-l.png +0 -0
  638. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/sel-active-m.png +0 -0
  639. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/sel-active-r.png +0 -0
  640. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/sel-disabled-l.png +0 -0
  641. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/sel-disabled-m.png +0 -0
  642. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/sel-disabled-r.png +0 -0
  643. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/sel-l.png +0 -0
  644. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/sel-m.png +0 -0
  645. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/dark/sel-r.png +0 -0
  646. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/shared/active-m.png +0 -0
  647. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/shared/disabled-m.png +0 -0
  648. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/shared/regular-m.png +0 -0
  649. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/shared/sel-active-m.png +0 -0
  650. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/shared/sel-disabled-m.png +0 -0
  651. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/shared/sel-m.png +0 -0
  652. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/square/active-l.png +0 -0
  653. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/square/active-r.png +0 -0
  654. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/square/disabled-l.png +0 -0
  655. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/square/disabled-r.png +0 -0
  656. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/square/regular-l.png +0 -0
  657. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/square/regular-r.png +0 -0
  658. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/square/sel-active-l.png +0 -0
  659. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/square/sel-active-r.png +0 -0
  660. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/square/sel-disabled-l.png +0 -0
  661. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/square/sel-disabled-r.png +0 -0
  662. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/square/sel-l.png +0 -0
  663. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/buttons/square/sel-r.png +0 -0
  664. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/icons/actions-active.png +0 -0
  665. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/icons/actions.png +0 -0
  666. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/icons/inspector-active.png +0 -0
  667. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/icons/inspector.png +0 -0
  668. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/icons/library-active.png +0 -0
  669. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/icons/library.png +0 -0
  670. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/icons/projects-active.png +0 -0
  671. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/icons/projects.png +0 -0
  672. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/icons/run-active.png +0 -0
  673. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/icons/run.png +0 -0
  674. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/icons/save-active.png +0 -0
  675. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/icons/save.png +0 -0
  676. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/logos/greenhouse-l.png +0 -0
  677. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/logos/greenhouse-s.png +0 -0
  678. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/logos/sproutcore.png +0 -0
  679. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/apps/greenhouse}/english.lproj/images/main-bg.png +0 -0
  680. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/bottom-left.png +0 -0
  681. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/bottom-right.png +0 -0
  682. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/bottom.png +0 -0
  683. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/close-active.png +0 -0
  684. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/close.png +0 -0
  685. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/left.png +0 -0
  686. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/pointer-bottom.png +0 -0
  687. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/pointer-left.png +0 -0
  688. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/pointer-right.png +0 -0
  689. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/pointer-top.png +0 -0
  690. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/right.png +0 -0
  691. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/search-active.png +0 -0
  692. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/search.png +0 -0
  693. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/top-left.png +0 -0
  694. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/top-right.png +0 -0
  695. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/picker/top.png +0 -0
  696. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/images/toolbar-bg.png +0 -0
  697. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/inspectors.js +365 -0
  698. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/loading.rhtml +0 -0
  699. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/english.lproj/main_page.js +0 -0
  700. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/english.lproj/strings.js +93 -0
  701. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/fixtures/file.js +0 -0
  702. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/main.js +28 -0
  703. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/mixins/drop_down.js +0 -0
  704. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/models/design.js +26 -0
  705. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/models/dir.js +93 -0
  706. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/models/file.js +51 -0
  707. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/models/target.js +0 -0
  708. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/models/view_config.js +0 -0
  709. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/resources/test_page.js +0 -0
  710. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/states/inspector.js +152 -0
  711. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/states/library.js +142 -0
  712. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/states/main.js +283 -0
  713. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/states/modals.js +299 -0
  714. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/states/ready.js +235 -0
  715. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/tests/controllers/design.js +0 -0
  716. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/tests/controllers/designs.js +0 -0
  717. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/tests/controllers/file.js +0 -0
  718. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/tests/controllers/files.js +0 -0
  719. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/tests/models/file.js +0 -0
  720. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/tests/models/view_config.js +0 -0
  721. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/tests/views/list_item.js +16 -0
  722. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/tests/views/plist_item.js +20 -0
  723. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/theme.js +25 -0
  724. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/views/anchor.js +0 -0
  725. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/views/application_list_item.js +0 -0
  726. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/views/event_blocker.js +0 -0
  727. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/views/label_designer.js +0 -0
  728. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/views/list_item.js +0 -0
  729. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/plist_item.js +178 -0
  730. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/views/simple_button.js +0 -0
  731. data/lib/frameworks/sproutcore/frameworks/experimental/apps/greenhouse/views/tear_off_picker.js +56 -0
  732. data/lib/frameworks/sproutcore/{apps → frameworks/experimental/apps}/greenhouse/views/web.js +0 -0
  733. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/coders/design.js +22 -0
  734. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/coders/object.js +349 -0
  735. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/controllers/controllers.js +23 -0
  736. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/controllers/design.js +43 -0
  737. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/controllers/designs.js +139 -0
  738. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/controllers/page_design.js +172 -0
  739. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/controllers/page_files.js +28 -0
  740. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/core.js +28 -0
  741. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/css/css_rule.js +22 -0
  742. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/css/css_style.js +29 -0
  743. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/css/css_style_sheet.js +201 -0
  744. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/button.js +23 -0
  745. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/label.js +18 -0
  746. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/object_designer.js +298 -0
  747. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/tab.js +20 -0
  748. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/text_field.js +17 -0
  749. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/view_designer.js +1269 -0
  750. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/frameworks/designer}/english.lproj/css/designer.css +0 -0
  751. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/design_page.js +55 -0
  752. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/frameworks/designer}/english.lproj/high_light.css +0 -0
  753. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/frameworks/designer}/english.lproj/images/controller.png +0 -0
  754. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/frameworks/designer}/english.lproj/images/dock-bg.png +0 -0
  755. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/frameworks/designer}/english.lproj/images/dock-item-bg.png +0 -0
  756. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/frameworks/designer}/english.lproj/images/dock-item-divider.png +0 -0
  757. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/frameworks/designer}/english.lproj/images/dock-item-sel-bg.png +0 -0
  758. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/frameworks/designer}/english.lproj/images/dock-item-sel-divider.png +0 -0
  759. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/english.lproj/images/main-bg.png +0 -0
  760. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/frameworks/designer}/english.lproj/images/page.png +0 -0
  761. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/frameworks/designer}/english.lproj/images/pane.png +0 -0
  762. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/frameworks/designer}/english.lproj/images/view.png +0 -0
  763. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/frameworks/designer}/english.lproj/selection_handles.css +0 -0
  764. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/ext/binding.js +39 -0
  765. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/ext/object.js +28 -0
  766. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/ext/page.js +60 -0
  767. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/ext/view.js +29 -0
  768. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/mixins/button.js +13 -0
  769. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/mixins/snap_lines.js +227 -0
  770. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/tests/coders/page.js +54 -0
  771. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/tests/designers/view_designer.js +47 -0
  772. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/designer_drop_target.js +144 -0
  773. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/drawing.js +219 -0
  774. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/frameworks/designer}/views/high_light.js +0 -0
  775. data/lib/frameworks/sproutcore/frameworks/{designer → experimental/frameworks/designer}/views/page_item_view.js +0 -0
  776. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/views/selection_handles.js +78 -0
  777. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/README.md +11 -0
  778. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/device.js +215 -0
  779. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/platform.js +67 -0
  780. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +46 -0
  781. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +112 -0
  782. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphism/many.js +79 -0
  783. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphism/simple.js +76 -0
  784. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphism/single.js +67 -0
  785. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_child.js +229 -0
  786. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_thumb.js +236 -0
  787. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/render_delegates/split.js +18 -0
  788. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/render_delegates/split_divider.js +26 -0
  789. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/children.js +100 -0
  790. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/dividers.js +243 -0
  791. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/methods.js +294 -0
  792. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/split_child.js +135 -0
  793. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/split_thumb.js +160 -0
  794. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/split.js +929 -0
  795. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/split_divider.js +40 -0
  796. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/thumb.js +26 -0
  797. data/lib/frameworks/sproutcore/frameworks/forms/english.lproj/default_styles.css +5 -0
  798. data/lib/frameworks/sproutcore/frameworks/forms/english.lproj/strings.js +15 -0
  799. data/lib/frameworks/sproutcore/frameworks/forms/mixins/edit_mode.js +48 -0
  800. data/lib/frameworks/sproutcore/frameworks/forms/mixins/emptiness.js +94 -0
  801. data/lib/frameworks/sproutcore/frameworks/forms/render_delegates/form.js +21 -0
  802. data/lib/frameworks/sproutcore/frameworks/forms/render_delegates/form_row.js +20 -0
  803. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form.js +17 -0
  804. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_checkbox_field.js +17 -0
  805. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_field.js +17 -0
  806. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_label.js +17 -0
  807. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_radio_field.js +17 -0
  808. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_row.js +17 -0
  809. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_text_field.js +17 -0
  810. data/lib/frameworks/sproutcore/frameworks/forms/views/form.js +286 -0
  811. data/lib/frameworks/sproutcore/frameworks/forms/views/form_row.js +187 -0
  812. data/lib/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +52 -43
  813. data/lib/frameworks/sproutcore/frameworks/foundation/core.js +15 -142
  814. data/lib/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +29 -21
  815. data/lib/frameworks/sproutcore/frameworks/foundation/delegates/inline_text_field.js +90 -0
  816. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/benchmark.css +146 -0
  817. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +4 -16
  818. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/checkbox_view.css +5 -0
  819. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/images/favicon.ico +0 -0
  820. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/images/sproutcore.png +0 -0
  821. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/label.css +5 -0
  822. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/radio_view.css +7 -0
  823. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/text_field.css +4 -6
  824. data/lib/frameworks/sproutcore/frameworks/foundation/ext/string.js +89 -0
  825. data/lib/frameworks/sproutcore/frameworks/foundation/gestures/pinch.js +119 -0
  826. data/lib/frameworks/sproutcore/frameworks/foundation/gestures/swipe.js +234 -0
  827. data/lib/frameworks/sproutcore/frameworks/foundation/gestures/tap.js +157 -0
  828. data/lib/frameworks/sproutcore/frameworks/foundation/license.js +24 -26
  829. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_mixin.js +41 -0
  830. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +355 -0
  831. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/button.js +4 -350
  832. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/collection_content.js +10 -8
  833. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +8 -9
  834. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +227 -0
  835. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/control.js +105 -200
  836. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +16 -15
  837. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +745 -0
  838. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/gestureable.js +214 -0
  839. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editable.js +254 -0
  840. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor.js +188 -0
  841. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor_delegate.js +195 -0
  842. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inner_frame.js +194 -0
  843. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +20 -21
  844. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/tree_item_content.js +57 -53
  845. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/validatable.js +18 -9
  846. data/lib/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +214 -203
  847. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +110 -0
  848. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/container.js +18 -0
  849. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/helpers/sizing.js +174 -0
  850. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/image.js +99 -0
  851. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +119 -0
  852. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/render_delegate.js +386 -0
  853. data/lib/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +404 -191
  854. data/lib/frameworks/sproutcore/frameworks/foundation/system/chance.js +65 -0
  855. data/lib/frameworks/sproutcore/frameworks/foundation/system/cookie.js +176 -0
  856. data/lib/frameworks/sproutcore/frameworks/foundation/system/core_query.js +20 -2006
  857. data/lib/frameworks/sproutcore/frameworks/foundation/system/exception_handler.js +9 -3
  858. data/lib/frameworks/sproutcore/frameworks/foundation/system/gesture.js +363 -0
  859. data/lib/frameworks/sproutcore/frameworks/foundation/system/image_queue.js +433 -0
  860. data/lib/frameworks/sproutcore/frameworks/foundation/system/math.js +1 -1
  861. data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +591 -0
  862. data/lib/frameworks/sproutcore/frameworks/foundation/system/routes.js +123 -24
  863. data/lib/frameworks/sproutcore/frameworks/foundation/system/string.js +422 -0
  864. data/lib/frameworks/sproutcore/frameworks/foundation/system/task_queue.js +19 -16
  865. data/lib/frameworks/sproutcore/frameworks/foundation/system/text_selection.js +1 -1
  866. data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +91 -96
  867. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/colors.js +87 -0
  868. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/misc.js +157 -0
  869. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/range.js +71 -0
  870. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_measurement.js +254 -0
  871. data/lib/frameworks/sproutcore/frameworks/foundation/tasks/preload_bundle.js +5 -5
  872. data/lib/frameworks/sproutcore/frameworks/foundation/tasks/task.js +1 -1
  873. data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/tree/outline_case.js +1 -1
  874. data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/tree/selection_support.js +1 -1
  875. data/lib/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/methods.js +1 -1
  876. data/lib/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/ui.js +1 -1
  877. data/lib/frameworks/sproutcore/frameworks/foundation/tests/delegates/inline_text_field/inline_text_field.js +150 -0
  878. data/lib/frameworks/sproutcore/frameworks/foundation/tests/integration/creating_views.js +9 -4
  879. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/content_display.js +6 -0
  880. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/content_value_support/content.js +168 -0
  881. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/control/displayProperties.js +1 -1
  882. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/editable/ui.js +44 -0
  883. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/beginEditing.js +194 -0
  884. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/commitEditing.js +150 -0
  885. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/discardEditing.js +151 -0
  886. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/beginEditing.js +114 -0
  887. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/commitEditing.js +151 -0
  888. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/discardEditing.js +152 -0
  889. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/api.js +1 -1
  890. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js +13 -22
  891. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/ui.js +64 -0
  892. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +8 -1
  893. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/validatable/ui.js +1 -1
  894. data/lib/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/flat_case.js +59 -59
  895. data/lib/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/group_case.js +114 -114
  896. data/lib/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/outline_case.js +74 -74
  897. data/lib/frameworks/sproutcore/frameworks/foundation/tests/render_delegates/render_delegate.js +78 -0
  898. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/cookie.js +182 -0
  899. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/setClass.js +19 -3
  900. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/math.js +1 -1
  901. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/routes.js +30 -20
  902. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/string.js +34 -0
  903. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/task_queue.js +8 -2
  904. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/user_defaults.js +6 -0
  905. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/utils/pointInElement.js +241 -0
  906. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/utils/range.js +6 -0
  907. data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/credit_card.js +6 -0
  908. data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/date.js +11 -13
  909. data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/not_empty.js +1 -1
  910. data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/number.js +6 -0
  911. data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/password.js +6 -0
  912. data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/validator.js +6 -0
  913. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/methods.js +10 -2
  914. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +76 -11
  915. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +499 -46
  916. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +32 -7
  917. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +1 -1
  918. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/nextValidKeyView.js +110 -0
  919. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +87 -3
  920. data/lib/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +2 -2
  921. data/lib/frameworks/sproutcore/frameworks/foundation/validators/date.js +39 -12
  922. data/lib/frameworks/sproutcore/frameworks/foundation/validators/date_time.js +2 -2
  923. data/lib/frameworks/sproutcore/frameworks/foundation/validators/email.js +2 -2
  924. data/lib/frameworks/sproutcore/frameworks/foundation/validators/not_empty.js +6 -10
  925. data/lib/frameworks/sproutcore/frameworks/foundation/validators/number.js +3 -2
  926. data/lib/frameworks/sproutcore/frameworks/foundation/validators/password.js +2 -2
  927. data/lib/frameworks/sproutcore/frameworks/foundation/validators/positive_integer.js +3 -2
  928. data/lib/frameworks/sproutcore/frameworks/foundation/validators/validator.js +5 -3
  929. data/lib/frameworks/sproutcore/frameworks/foundation/views/container.js +16 -14
  930. data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +23 -6
  931. data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +307 -105
  932. data/lib/frameworks/sproutcore/frameworks/foundation/views/inline_text_field.js +654 -0
  933. data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +81 -195
  934. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +287 -116
  935. data/lib/frameworks/sproutcore/frameworks/handlebars/handlebars.js +1435 -0
  936. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffer.js +390 -0
  937. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffered.js +210 -0
  938. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-sc.js +12 -0
  939. data/lib/frameworks/sproutcore/frameworks/jquery/jquery.js +7179 -0
  940. data/lib/frameworks/sproutcore/frameworks/jquery/tests/set_class.js +40 -0
  941. data/lib/frameworks/sproutcore/frameworks/media/views/audio.js +10 -8
  942. data/lib/frameworks/sproutcore/frameworks/media/views/controls.js +4 -6
  943. data/lib/frameworks/sproutcore/frameworks/media/views/media_slider.js +1 -1
  944. data/lib/frameworks/sproutcore/frameworks/media/views/mini_controls.js +3 -3
  945. data/lib/frameworks/sproutcore/frameworks/media/views/simple_controls.js +4 -5
  946. data/lib/frameworks/sproutcore/frameworks/media/views/video.js +7 -7
  947. data/lib/frameworks/sproutcore/frameworks/mini/license.js +30 -28
  948. data/lib/frameworks/sproutcore/frameworks/qunit/README.md +24 -0
  949. data/lib/frameworks/sproutcore/frameworks/qunit/package.json +21 -0
  950. data/lib/frameworks/sproutcore/frameworks/qunit/qunit/qunit.css +215 -0
  951. data/lib/frameworks/sproutcore/frameworks/qunit/qunit/qunit.js +1442 -0
  952. data/lib/frameworks/sproutcore/frameworks/qunit/test/headless.html +24 -0
  953. data/lib/frameworks/sproutcore/frameworks/qunit/test/index.html +18 -0
  954. data/lib/frameworks/sproutcore/frameworks/qunit/test/logs.html +17 -0
  955. data/lib/frameworks/sproutcore/frameworks/qunit/test/logs.js +150 -0
  956. data/lib/frameworks/sproutcore/frameworks/qunit/test/same.js +1421 -0
  957. data/lib/frameworks/sproutcore/frameworks/qunit/test/test.js +314 -0
  958. data/lib/frameworks/sproutcore/frameworks/runtime/core.js +232 -537
  959. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array.js +14 -0
  960. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +163 -4
  961. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/indexOf.js +1 -1
  962. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/insertAt.js +1 -1
  963. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/objectAt.js +1 -1
  964. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/popObject.js +1 -1
  965. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/pushObject.js +1 -1
  966. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/rangeObserver.js +74 -74
  967. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeAt.js +1 -1
  968. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeObject.js +1 -1
  969. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/replace.js +1 -1
  970. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/shiftObject.js +1 -1
  971. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/unshiftObject.js +1 -1
  972. data/lib/frameworks/sproutcore/frameworks/runtime/ext/array.js +92 -0
  973. data/lib/frameworks/sproutcore/frameworks/runtime/ext/date.js +15 -0
  974. data/lib/frameworks/sproutcore/frameworks/runtime/ext/function.js +189 -0
  975. data/lib/frameworks/sproutcore/frameworks/runtime/ext/string.js +31 -0
  976. data/lib/frameworks/sproutcore/frameworks/runtime/license.js +29 -28
  977. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +577 -317
  978. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/comparable.js +16 -13
  979. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +25 -18
  980. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +351 -308
  981. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +51 -52
  982. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +1149 -1001
  983. data/lib/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +85 -45
  984. data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +61 -55
  985. data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +51 -107
  986. data/lib/frameworks/sproutcore/frameworks/runtime/private/property_chain.js +195 -0
  987. data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +361 -348
  988. data/lib/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +24 -24
  989. data/lib/frameworks/sproutcore/frameworks/runtime/system/error.js +45 -40
  990. data/lib/frameworks/sproutcore/frameworks/runtime/system/function.js +76 -0
  991. data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +275 -265
  992. data/lib/frameworks/sproutcore/frameworks/runtime/system/json.js +515 -0
  993. data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +1337 -204
  994. data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +312 -259
  995. data/lib/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +89 -87
  996. data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +119 -106
  997. data/lib/frameworks/sproutcore/frameworks/runtime/system/set.js +107 -101
  998. data/lib/frameworks/sproutcore/frameworks/runtime/system/string.js +60 -0
  999. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/IsEqual.js +23 -47
  1000. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/beget.js +6 -0
  1001. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/clone.js +1 -1
  1002. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/compare.js +1 -1
  1003. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/console.js +5 -0
  1004. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/guidFor.js +59 -126
  1005. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/inspect.js +6 -0
  1006. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/isArray.js +21 -19
  1007. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +71 -33
  1008. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/keys.js +6 -0
  1009. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/makeArray.js +21 -1
  1010. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/objectForPropertyPath.js +6 -0
  1011. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/tupleForPropertyPath.js +6 -0
  1012. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +39 -15
  1013. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/comparable.js +1 -1
  1014. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable/enumerable.js +623 -0
  1015. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable/enumerable_observers.js +81 -0
  1016. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/chained.js +44 -0
  1017. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +286 -98
  1018. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observersForKey.js +36 -0
  1019. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/propertyChanges.js +7 -1
  1020. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/registerDependentKeys.js +78 -2
  1021. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/propertyChanges.js +7 -1
  1022. data/lib/frameworks/sproutcore/frameworks/runtime/tests/private/observer_queue/isObservingSuspended.js +1 -1
  1023. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +87 -8
  1024. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/error.js +6 -0
  1025. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/add.js +1 -1
  1026. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/addEach.js +1 -1
  1027. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/clone.js +1 -1
  1028. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/contains.js +1 -1
  1029. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/create.js +1 -1
  1030. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexAfter.js +1 -1
  1031. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexBefore.js +1 -1
  1032. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/intersects.js +1 -1
  1033. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/max.js +1 -1
  1034. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/min.js +1 -1
  1035. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/rangeStartForIndex.js +1 -1
  1036. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/remove.js +1 -1
  1037. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/removeEach.js +1 -1
  1038. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/without.js +1 -1
  1039. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/json.js +21 -0
  1040. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +180 -92
  1041. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/base.js +6 -0
  1042. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/bindings.js +11 -0
  1043. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/concatenated_properties.js +77 -0
  1044. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/enhance.js +196 -0
  1045. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/observer_set.js +56 -0
  1046. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/create.js +12 -12
  1047. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/destroy.js +1 -1
  1048. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/objectPropertyDidChange.js +1 -1
  1049. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/rangeDidChange.js +1 -1
  1050. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/update.js +1 -1
  1051. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +6 -0
  1052. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/set.js +77 -45
  1053. data/lib/frameworks/sproutcore/frameworks/statechart/core.js +4 -10
  1054. data/lib/frameworks/sproutcore/frameworks/statechart/debug/monitor.js +155 -0
  1055. data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +1241 -97
  1056. data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +1617 -0
  1057. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/advanced/respond_to_event.js +401 -0
  1058. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/advanced/without_concurrent_states.js +306 -0
  1059. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/basic/with_concurrent_states.js +183 -0
  1060. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/basic/without_concurrent_states.js +122 -0
  1061. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/pane.js +89 -0
  1062. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/responder_chain.js +109 -0
  1063. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/root_responder.js +74 -0
  1064. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/initial_substate.js +67 -0
  1065. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/is_current_state.js +60 -0
  1066. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/namespacing.js +248 -0
  1067. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/plugin/mixin.js +68 -0
  1068. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/plugin/nesting.js +95 -0
  1069. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/state_observes.js +235 -0
  1070. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/async/core.js +94 -0
  1071. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/async/with_concurrent_states.js +123 -0
  1072. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/async/without_concurrent_states.js +191 -0
  1073. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/initial_substate/core.js +48 -0
  1074. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/initial_substate/without_concurrent_states.js +218 -0
  1075. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/standard/with_concurrent_states.js +88 -0
  1076. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/standard/without_concurrent_states/context.js +191 -0
  1077. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/standard/without_concurrent_states/core.js +200 -0
  1078. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/with_concurrent_states/advanced.js +239 -0
  1079. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/with_concurrent_states/basic.js +131 -0
  1080. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/with_concurrent_states/intermediate.js +120 -0
  1081. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/without_concurrent_states/context.js +144 -0
  1082. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/without_concurrent_states/core.js +281 -0
  1083. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/transient/without_concurrent_states.js +162 -0
  1084. data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/create/assigned_root_state.js +76 -0
  1085. data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/create/unassigned_root_state.js +162 -0
  1086. data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/destroy.js +73 -0
  1087. data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/invoke_state_method.js +241 -0
  1088. data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/owner.js +236 -0
  1089. data/lib/frameworks/sproutcore/frameworks/table/mixins/table_delegate.js +1 -1
  1090. data/lib/frameworks/sproutcore/frameworks/table/system/table_column.js +1 -1
  1091. data/lib/frameworks/sproutcore/frameworks/table/views/table.js +6 -5
  1092. data/lib/frameworks/sproutcore/frameworks/table/views/table_cell.js +3 -2
  1093. data/lib/frameworks/sproutcore/frameworks/table/views/table_head.js +2 -2
  1094. data/lib/frameworks/sproutcore/frameworks/table/views/table_header.js +6 -4
  1095. data/lib/frameworks/sproutcore/frameworks/table/views/table_row.js +2 -2
  1096. data/lib/frameworks/sproutcore/frameworks/testing/core.js +4 -1
  1097. data/lib/frameworks/sproutcore/frameworks/testing/extras.js +1 -1
  1098. data/lib/frameworks/sproutcore/frameworks/testing/system/dump.js +1 -1
  1099. data/lib/frameworks/sproutcore/frameworks/testing/system/equiv.js +1 -1
  1100. data/lib/frameworks/sproutcore/frameworks/testing/system/plan.js +32 -19
  1101. data/lib/frameworks/sproutcore/frameworks/testing/system/runner.js +13 -3
  1102. data/lib/frameworks/sproutcore/frameworks/testing/system/suite.js +1 -1
  1103. data/lib/frameworks/sproutcore/frameworks/testing/utils.js +1 -1
  1104. data/lib/frameworks/sproutcore/lib/index.rhtml +54 -9
  1105. data/lib/frameworks/sproutcore/license.js +32 -30
  1106. data/lib/frameworks/sproutcore/themes/ace/designs/dark.png +0 -0
  1107. data/lib/frameworks/sproutcore/themes/ace/designs/dark.psd +0 -0
  1108. data/lib/frameworks/sproutcore/themes/ace/designs/light.png +0 -0
  1109. data/lib/frameworks/sproutcore/themes/ace/designs/light.psd +0 -0
  1110. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/18px/active_button.psd +0 -0
  1111. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/18px/normal_button.psd +0 -0
  1112. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/18px/selected_active_button.psd +0 -0
  1113. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/18px/selected_button.psd +0 -0
  1114. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/active_button.psd +0 -0
  1115. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/active_button_capsule.psd +0 -0
  1116. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/active_button_pointer.psd +0 -0
  1117. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/normal_button.psd +0 -0
  1118. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/normal_button_capsule.psd +0 -0
  1119. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/normal_button_pointer.psd +0 -0
  1120. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_active_button.psd +0 -0
  1121. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_active_button_capsule.psd +0 -0
  1122. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_active_button_pointer.psd +0 -0
  1123. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_button.psd +0 -0
  1124. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_button_capsule.psd +0 -0
  1125. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_button_pointer.psd +0 -0
  1126. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/active_button.psd +0 -0
  1127. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/active_button_pointer.psd +0 -0
  1128. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/normal_button.psd +0 -0
  1129. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/normal_button_pointer.psd +0 -0
  1130. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_active_button.psd +0 -0
  1131. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_active_button_pointer.psd +0 -0
  1132. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_button.psd +0 -0
  1133. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_button_pointer.psd +0 -0
  1134. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/44px/active_button.psd +0 -0
  1135. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/44px/normal_button.psd +0 -0
  1136. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/44px/selected_active_button.psd +0 -0
  1137. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/44px/selected_button.psd +0 -0
  1138. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/active_button.psd +0 -0
  1139. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/active_button_capsule.psd +0 -0
  1140. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/active_button_pointer.psd +0 -0
  1141. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/normal_button.psd +0 -0
  1142. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/normal_button_capsule.psd +0 -0
  1143. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/normal_button_pointer.psd +0 -0
  1144. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_active_button.psd +0 -0
  1145. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_active_button_capsule.psd +0 -0
  1146. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_active_button_pointer.psd +0 -0
  1147. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_button.psd +0 -0
  1148. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_button_capsule.psd +0 -0
  1149. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_button_pointer.psd +0 -0
  1150. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/active_button.psd +0 -0
  1151. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/active_button_pointer.psd +0 -0
  1152. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/normal_button.psd +0 -0
  1153. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/normal_button_pointer.psd +0 -0
  1154. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_active_button.psd +0 -0
  1155. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_active_button_pointer.psd +0 -0
  1156. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_button.psd +0 -0
  1157. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_button_pointer.psd +0 -0
  1158. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/popup/active_select.psd +0 -0
  1159. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/popup/normal_select.psd +0 -0
  1160. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_checked.psd +0 -0
  1161. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_checked_active.psd +0 -0
  1162. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_mixed.psd +0 -0
  1163. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_mixed_active.psd +0 -0
  1164. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_unchecked.psd +0 -0
  1165. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_unchecked_active.psd +0 -0
  1166. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_checked.psd +0 -0
  1167. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_checked_active.psd +0 -0
  1168. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_mixed.psd +0 -0
  1169. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_mixed_active.psd +0 -0
  1170. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_unchecked.psd +0 -0
  1171. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_unchecked_active.psd +0 -0
  1172. data/lib/frameworks/sproutcore/themes/ace/designs/psds/collection/source-list/selection.psd +0 -0
  1173. data/lib/frameworks/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_closed.psd +0 -0
  1174. data/lib/frameworks/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_closed_active.psd +0 -0
  1175. data/lib/frameworks/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_open.psd +0 -0
  1176. data/lib/frameworks/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_open_active.psd +0 -0
  1177. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/checkmark.psd +0 -0
  1178. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/checkmark_active.psd +0 -0
  1179. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/down.psd +0 -0
  1180. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/menu.psd +0 -0
  1181. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/menu_item.psd +0 -0
  1182. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/up.psd +0 -0
  1183. data/lib/frameworks/sproutcore/themes/ace/designs/psds/panel/panel.psd +0 -0
  1184. data/lib/frameworks/sproutcore/themes/ace/designs/psds/panel/pointers.psd +0 -0
  1185. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover.psd +0 -0
  1186. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover_empty.psd +0 -0
  1187. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover_notoolbar.psd +0 -0
  1188. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover_pointers.psd +0 -0
  1189. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover_pointers_notoolbar.psd +0 -0
  1190. data/lib/frameworks/sproutcore/themes/ace/designs/psds/progress/ace/progress_view_content.psd +0 -0
  1191. data/lib/frameworks/sproutcore/themes/ace/designs/psds/progress/ace/progress_view_indeterminate_content.psd +0 -0
  1192. data/lib/frameworks/sproutcore/themes/ace/designs/psds/progress/ace/progress_view_track.psd +0 -0
  1193. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_active.psd +0 -0
  1194. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_mixed.psd +0 -0
  1195. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_mixed_active.psd +0 -0
  1196. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_selected.psd +0 -0
  1197. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_selected_active.psd +0 -0
  1198. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_unselected.psd +0 -0
  1199. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/horizontal/thumb.psd +0 -0
  1200. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/horizontal/track_and_arrows.psd +0 -0
  1201. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/horizontal/track_and_arrows_active.psd +0 -0
  1202. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/vertical/thumb.psd +0 -0
  1203. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/vertical/track_and_arrows.psd +0 -0
  1204. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/vertical/track_and_arrows_active.psd +0 -0
  1205. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_active.psd +0 -0
  1206. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_normal.psd +0 -0
  1207. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_selected.psd +0 -0
  1208. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_selected_active.psd +0 -0
  1209. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_active.psd +0 -0
  1210. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_normal.psd +0 -0
  1211. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_selected.psd +0 -0
  1212. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_selected_active.psd +0 -0
  1213. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_active.psd +0 -0
  1214. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_normal.psd +0 -0
  1215. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_selected.psd +0 -0
  1216. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_selected_active.psd +0 -0
  1217. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_active.psd +0 -0
  1218. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_normal.psd +0 -0
  1219. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_selected.psd +0 -0
  1220. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_selected_active.psd +0 -0
  1221. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/14px/knob.psd +0 -0
  1222. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/14px/knob_active.psd +0 -0
  1223. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/16px/knob.psd +0 -0
  1224. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/16px/knob_active.psd +0 -0
  1225. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/22px/knob.psd +0 -0
  1226. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/22px/knob_active.psd +0 -0
  1227. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/22px/track.psd +0 -0
  1228. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/track.psd +0 -0
  1229. data/lib/frameworks/sproutcore/themes/ace/designs/psds/toolbar/toolbar.psd +0 -0
  1230. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch.psd +0 -0
  1231. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_handle.png +0 -0
  1232. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_handle.psd +0 -0
  1233. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_off.png +0 -0
  1234. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_off.psd +0 -0
  1235. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_on.png +0 -0
  1236. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_on.psd +0 -0
  1237. data/lib/frameworks/sproutcore/themes/ace/resources/body.css +13 -0
  1238. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/active_button.png +0 -0
  1239. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/button.css +33 -0
  1240. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/normal_button.png +0 -0
  1241. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/selected_active_button.png +0 -0
  1242. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/18px/selected_button.png +0 -0
  1243. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/active_button.png +0 -0
  1244. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/active_button_capsule.png +0 -0
  1245. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/active_button_pointer.png +0 -0
  1246. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/button.css +102 -0
  1247. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/normal_button.png +0 -0
  1248. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/normal_button_capsule.png +0 -0
  1249. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/normal_button_pointer.png +0 -0
  1250. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_active_button.png +0 -0
  1251. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_active_button_capsule.png +0 -0
  1252. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_active_button_pointer.png +0 -0
  1253. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_button.png +0 -0
  1254. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_button_capsule.png +0 -0
  1255. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/selected_button_pointer.png +0 -0
  1256. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/active_button.png +0 -0
  1257. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/active_button_pointer.png +0 -0
  1258. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/button.css +78 -0
  1259. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/normal_button.png +0 -0
  1260. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/normal_button_pointer.png +0 -0
  1261. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/selected_active_button.png +0 -0
  1262. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/selected_active_button_pointer.png +0 -0
  1263. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/selected_button.png +0 -0
  1264. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/30px/selected_button_pointer.png +0 -0
  1265. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/active_button.png +0 -0
  1266. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/button.css +39 -0
  1267. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/normal_button.png +0 -0
  1268. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/selected_active_button.png +0 -0
  1269. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/44px/selected_button.png +0 -0
  1270. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/button.css +41 -0
  1271. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/active_button.png +0 -0
  1272. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/active_button_capsule.png +0 -0
  1273. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/active_button_pointer.png +0 -0
  1274. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/button.css +93 -0
  1275. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/normal_button.png +0 -0
  1276. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/normal_button_capsule.png +0 -0
  1277. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/normal_button_pointer.png +0 -0
  1278. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_active_button.png +0 -0
  1279. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_active_button_capsule.png +0 -0
  1280. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_active_button_pointer.png +0 -0
  1281. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_button.png +0 -0
  1282. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_button_capsule.png +0 -0
  1283. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/24px/selected_button_pointer.png +0 -0
  1284. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/active_button.png +0 -0
  1285. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/active_button_pointer.png +0 -0
  1286. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/button.css +72 -0
  1287. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/normal_button.png +0 -0
  1288. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/normal_button_pointer.png +0 -0
  1289. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/selected_active_button.png +0 -0
  1290. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/selected_active_button_pointer.png +0 -0
  1291. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/selected_button.png +0 -0
  1292. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/30px/selected_button_pointer.png +0 -0
  1293. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/button.css +17 -0
  1294. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/button.js +5 -0
  1295. data/lib/frameworks/sproutcore/themes/ace/resources/button/popup/active_select.png +0 -0
  1296. data/lib/frameworks/sproutcore/themes/ace/resources/button/popup/normal_select.png +0 -0
  1297. data/lib/frameworks/sproutcore/themes/ace/resources/button/popup/select.css +21 -0
  1298. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox.css +40 -0
  1299. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_checked.png +0 -0
  1300. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_checked_active.png +0 -0
  1301. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_mixed.png +0 -0
  1302. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_mixed_active.png +0 -0
  1303. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_unchecked.png +0 -0
  1304. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/14px/checkbox_unchecked_active.png +0 -0
  1305. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox.css +40 -0
  1306. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_checked.png +0 -0
  1307. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_checked_active.png +0 -0
  1308. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_mixed.png +0 -0
  1309. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_mixed_active.png +0 -0
  1310. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_unchecked.png +0 -0
  1311. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/16px/checkbox_unchecked_active.png +0 -0
  1312. data/lib/frameworks/sproutcore/themes/ace/resources/checkbox/ace/checkbox.css +7 -0
  1313. data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list.css +4 -0
  1314. data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list_item.css +17 -0
  1315. data/lib/frameworks/sproutcore/themes/ace/resources/collection/source-list/selection.png +0 -0
  1316. data/lib/frameworks/sproutcore/themes/ace/resources/collection/source-list/source-list.js +3 -0
  1317. data/lib/frameworks/sproutcore/themes/ace/resources/collection/source-list/source_list_view.css +36 -0
  1318. data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure.css +24 -0
  1319. data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure_closed.png +0 -0
  1320. data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure_closed_active.png +0 -0
  1321. data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure_open.png +0 -0
  1322. data/lib/frameworks/sproutcore/themes/ace/resources/disclosure/ace/disclosure_open_active.png +0 -0
  1323. data/lib/frameworks/sproutcore/themes/ace/resources/imagebutton/ace/imagebutton.css +11 -0
  1324. data/lib/frameworks/sproutcore/themes/ace/resources/loading.css +50 -0
  1325. data/lib/frameworks/sproutcore/themes/ace/resources/master-detail/master-detail.css +27 -0
  1326. data/lib/frameworks/sproutcore/themes/ace/resources/menu/checkmark.png +0 -0
  1327. data/lib/frameworks/sproutcore/themes/ace/resources/menu/checkmark_active.png +0 -0
  1328. data/lib/frameworks/sproutcore/themes/ace/resources/menu/down.png +0 -0
  1329. data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu.css +79 -0
  1330. data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu.png +0 -0
  1331. data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu_item.png +0 -0
  1332. data/lib/frameworks/sproutcore/themes/ace/resources/menu/up.png +0 -0
  1333. data/lib/frameworks/sproutcore/themes/ace/resources/pane/pane.css +3 -0
  1334. data/lib/frameworks/sproutcore/themes/ace/resources/panel/panel.css +13 -0
  1335. data/lib/frameworks/sproutcore/themes/ace/resources/panel/panel.png +0 -0
  1336. data/lib/frameworks/sproutcore/themes/ace/resources/picker/ace/panel.png +0 -0
  1337. data/lib/frameworks/sproutcore/themes/ace/resources/picker/ace/picker.css +41 -0
  1338. data/lib/frameworks/sproutcore/themes/ace/resources/picker/ace/picker.js +0 -0
  1339. data/lib/frameworks/sproutcore/themes/ace/resources/picker/ace/pointers.png +0 -0
  1340. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/picker.js +32 -0
  1341. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.css +111 -0
  1342. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.js +12 -0
  1343. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.png +0 -0
  1344. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover_empty.png +0 -0
  1345. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover_notoolbar.png +0 -0
  1346. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover_pointers.png +0 -0
  1347. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover_pointers_notoolbar.png +0 -0
  1348. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/workspace.js +28 -0
  1349. data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress.css +27 -0
  1350. data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress_view_content.png +0 -0
  1351. data/lib/frameworks/sproutcore/themes/ace/resources/progress/ace/progress_view_track.png +0 -0
  1352. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio.css +57 -0
  1353. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_active.png +0 -0
  1354. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_mixed.png +0 -0
  1355. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_mixed_active.png +0 -0
  1356. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_selected.png +0 -0
  1357. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_selected_active.png +0 -0
  1358. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio_unselected.png +0 -0
  1359. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal.css +78 -0
  1360. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/horizontal_touch.css +91 -0
  1361. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/thumb.png +0 -0
  1362. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/track_and_arrows.png +0 -0
  1363. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/horizontal/track_and_arrows_active.png +0 -0
  1364. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/thumb.png +0 -0
  1365. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/track_and_arrows.png +0 -0
  1366. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/track_and_arrows_active.png +0 -0
  1367. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical.css +80 -0
  1368. data/lib/frameworks/sproutcore/themes/ace/resources/scroller/vertical/vertical_touch.css +92 -0
  1369. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented.css +91 -0
  1370. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented_active.png +0 -0
  1371. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented_normal.png +0 -0
  1372. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented_selected.png +0 -0
  1373. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/18px/segmented_selected_active.png +0 -0
  1374. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented.css +91 -0
  1375. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_active.png +0 -0
  1376. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_normal.png +0 -0
  1377. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_selected.png +0 -0
  1378. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/24px/segmented_selected_active.png +0 -0
  1379. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented.css +91 -0
  1380. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_active.png +0 -0
  1381. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_normal.png +0 -0
  1382. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_selected.png +0 -0
  1383. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/30px/segmented_selected_active.png +0 -0
  1384. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented.css +95 -0
  1385. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented_active.png +0 -0
  1386. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented_normal.png +0 -0
  1387. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented_selected.png +0 -0
  1388. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/44px/segmented_selected_active.png +0 -0
  1389. data/lib/frameworks/sproutcore/themes/ace/resources/segmented/segmented.css +83 -0
  1390. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/knob.png +0 -0
  1391. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/knob_active.png +0 -0
  1392. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/14px/slider.css +27 -0
  1393. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/knob.png +0 -0
  1394. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/knob_active.png +0 -0
  1395. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/16px/slider.css +27 -0
  1396. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/knob.png +0 -0
  1397. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/knob_active.png +0 -0
  1398. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/slider.css +27 -0
  1399. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/22px/track.png +0 -0
  1400. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.css +8 -0
  1401. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/track.png +0 -0
  1402. data/lib/frameworks/sproutcore/themes/ace/resources/split/split.css +31 -0
  1403. data/lib/frameworks/sproutcore/themes/ace/resources/tab/tab.css +3 -0
  1404. data/lib/frameworks/sproutcore/themes/ace/resources/toolbar/toolbar.css +8 -0
  1405. data/lib/frameworks/sproutcore/themes/ace/resources/toolbar/toolbar.png +0 -0
  1406. data/lib/frameworks/sproutcore/themes/ace/resources/well/well.css +7 -0
  1407. data/lib/frameworks/sproutcore/themes/ace/theme.js +30 -0
  1408. data/lib/frameworks/sproutcore/themes/empty_theme/theme.js +16 -0
  1409. data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/strings.js +1 -1
  1410. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/Panel.drawit/Data +0 -0
  1411. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/Panel.drawit/QuickLook/Preview.jpg +0 -0
  1412. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/Panel.drawit/QuickLook/Thumbnail.jpg +0 -0
  1413. data/lib/frameworks/sproutcore/themes/standard_theme/Source/SproutCore Theme Buttons.psd b/data/lib/frameworks/sproutcore/themes/legacy_theme/Source/SproutCore Theme → Buttons.psd +0 -0
  1414. data/lib/frameworks/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/Data b/data/lib/frameworks/sproutcore/themes/legacy_theme/Source/ToolbarView → Pattern.drawit/Data +0 -0
  1415. data/lib/frameworks/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/QuickLook/Preview.jpg b/data/lib/frameworks/sproutcore/themes/legacy_theme/Source/ToolbarView → Pattern.drawit/QuickLook/Preview.jpg +0 -0
  1416. data/lib/frameworks/sproutcore/themes/standard_theme/Source/ToolbarView Pattern.drawit/QuickLook/Thumbnail.jpg b/data/lib/frameworks/sproutcore/themes/legacy_theme/Source/ToolbarView → Pattern.drawit/QuickLook/Thumbnail.jpg +0 -0
  1417. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/10.png +0 -0
  1418. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/100.png +0 -0
  1419. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/102.png +0 -0
  1420. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/110.png +0 -0
  1421. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/120.png +0 -0
  1422. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/127.png +0 -0
  1423. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/18.png +0 -0
  1424. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/19.png +0 -0
  1425. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/2.png +0 -0
  1426. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/24.png +0 -0
  1427. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/26.png +0 -0
  1428. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/27.png +0 -0
  1429. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/28.png +0 -0
  1430. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/29.png +0 -0
  1431. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/30.png +0 -0
  1432. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/31.png +0 -0
  1433. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/33.png +0 -0
  1434. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/37.png +0 -0
  1435. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/41.png +0 -0
  1436. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/99.png +0 -0
  1437. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/10.png +0 -0
  1438. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/100.png +0 -0
  1439. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/102.png +0 -0
  1440. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/110.png +0 -0
  1441. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/120.png +0 -0
  1442. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/127.png +0 -0
  1443. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/18.png +0 -0
  1444. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/19.png +0 -0
  1445. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/2.png +0 -0
  1446. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/24.png +0 -0
  1447. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/26.png +0 -0
  1448. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/27.png +0 -0
  1449. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/28.png +0 -0
  1450. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/29.png +0 -0
  1451. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/30.png +0 -0
  1452. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/31.png +0 -0
  1453. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/33.png +0 -0
  1454. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/37.png +0 -0
  1455. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/41.png +0 -0
  1456. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/99.png +0 -0
  1457. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/10.png +0 -0
  1458. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/100.png +0 -0
  1459. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/102.png +0 -0
  1460. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/110.png +0 -0
  1461. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/120.png +0 -0
  1462. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/127.png +0 -0
  1463. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/18.png +0 -0
  1464. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/19.png +0 -0
  1465. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/2.png +0 -0
  1466. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/24.png +0 -0
  1467. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/26.png +0 -0
  1468. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/27.png +0 -0
  1469. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/28.png +0 -0
  1470. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/29.png +0 -0
  1471. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/30.png +0 -0
  1472. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/31.png +0 -0
  1473. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/33.png +0 -0
  1474. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/37.png +0 -0
  1475. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/41.png +0 -0
  1476. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/99.png +0 -0
  1477. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/48/10.png +0 -0
  1478. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/48/18.png +0 -0
  1479. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/48/19.png +0 -0
  1480. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/48/2.png +0 -0
  1481. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/panel-sprite-x.drawit/Data +0 -0
  1482. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/panel-sprite-x.drawit/QuickLook/Preview.jpg +0 -0
  1483. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/panel-sprite-x.drawit/QuickLook/Thumbnail.jpg +0 -0
  1484. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/panel-sprite-y.drawit/Data +0 -0
  1485. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/panel-sprite-y.drawit/QuickLook/Preview.jpg +0 -0
  1486. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/panel-sprite-y.drawit/QuickLook/Thumbnail.jpg +0 -0
  1487. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/sc-theme-repeat-x-2.psd +0 -0
  1488. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/sc-theme-repeat-x.psd +0 -0
  1489. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/sc-theme-sprite.psd +0 -0
  1490. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/sc-theme-ysprite.psd +0 -0
  1491. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/shared-icons.psd +0 -0
  1492. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/sproutcore-logo.psd +0 -0
  1493. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/sticky-note.psd +0 -0
  1494. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/button.css +0 -0
  1495. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/checkbox.css +0 -0
  1496. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/collection.css +0 -0
  1497. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/core.css +0 -0
  1498. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/disclosure.css +0 -0
  1499. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/icons/mini_222222.png +0 -0
  1500. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/icons/mini_454545.png +0 -0
  1501. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/icons/mini_888888.png +0 -0
  1502. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/icons/mini_ffffff.png +0 -0
  1503. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/panels/sprite-x.png +0 -0
  1504. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/panels/sprite-y.png +0 -0
  1505. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/sc-scroller-repeat-x.png +0 -0
  1506. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/sc-scroller-repeat-y.png +0 -0
  1507. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/sc-scroller-sprite.png +0 -0
  1508. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/sc-theme-repeat-x.png +0 -0
  1509. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/sc-theme-ysprite.png +0 -0
  1510. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/sc-toolbar-view.png +0 -0
  1511. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/label.css +0 -0
  1512. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/list_item.css +0 -0
  1513. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/menu.css +0 -0
  1514. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/menu_item_view.css +0 -0
  1515. data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/pane.css +18 -0
  1516. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/panel.css +0 -0
  1517. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/picker.css +0 -0
  1518. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/progress.css +0 -0
  1519. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/radio.css +0 -0
  1520. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/scroller.css +0 -0
  1521. data/lib/frameworks/sproutcore/themes/legacy_theme/english.lproj/segmented.css +270 -0
  1522. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/slider.css +0 -0
  1523. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/split_view.css +0 -0
  1524. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/tab.css +0 -0
  1525. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/table.css +0 -0
  1526. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/text_field.css +0 -0
  1527. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/toolbar.css +0 -0
  1528. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/well.css +0 -0
  1529. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/button.js +89 -0
  1530. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/panel.js +28 -0
  1531. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/progress.js +194 -0
  1532. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/slider.js +67 -0
  1533. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/well.js +27 -0
  1534. data/lib/frameworks/sproutcore/themes/legacy_theme/theme.js +13 -0
  1535. data/lib/gen/app/templates/apps/@target_name@/Buildfile +14 -0
  1536. data/lib/gen/app/templates/apps/@target_name@/theme.js +27 -0
  1537. data/lib/gen/html_app/Buildfile +36 -0
  1538. data/lib/gen/html_app/README +1 -0
  1539. data/lib/gen/html_app/USAGE +15 -0
  1540. data/lib/gen/html_app/templates/apps/@target_name@/@target_name@.js +14 -0
  1541. data/lib/gen/html_app/templates/apps/@target_name@/resources/images/.gitkeep +0 -0
  1542. data/lib/gen/html_app/templates/apps/@target_name@/resources/stylesheets/@target_name@.css +4 -0
  1543. data/lib/gen/html_app/templates/apps/@target_name@/resources/templates/@target_name@.handlebars +1 -0
  1544. data/lib/gen/html_project/Buildfile +45 -0
  1545. data/lib/gen/html_project/INIT +3 -0
  1546. data/lib/gen/html_project/README +1 -0
  1547. data/lib/gen/html_project/USAGE +2 -0
  1548. data/lib/gen/html_project/templates/@filename@/Buildfile +8 -0
  1549. data/lib/gen/html_project/templates/@filename@/README +7 -0
  1550. data/lib/gen/project/templates/@filename@/Buildfile +7 -2
  1551. data/lib/gen/theme/templates/themes/@target_name@/Buildfile +3 -0
  1552. data/lib/gen/theme/templates/themes/@target_name@/theme.js +23 -0
  1553. data/lib/sproutcore.rb +11 -2
  1554. data/lib/sproutcore/builders.rb +4 -2
  1555. data/lib/sproutcore/builders/base.rb +10 -3
  1556. data/lib/sproutcore/builders/chance_file.rb +78 -0
  1557. data/lib/sproutcore/builders/combine.rb +6 -5
  1558. data/lib/sproutcore/builders/handlebars.rb +30 -0
  1559. data/lib/sproutcore/builders/html.rb +2 -0
  1560. data/lib/sproutcore/builders/javascript.rb +15 -2
  1561. data/lib/sproutcore/builders/minify.rb +14 -25
  1562. data/lib/sproutcore/builders/module.rb +74 -0
  1563. data/lib/sproutcore/builders/string_wrapper.rb +41 -0
  1564. data/lib/sproutcore/buildfile.rb +17 -17
  1565. data/lib/sproutcore/buildfile/task.rb +4 -12
  1566. data/lib/sproutcore/buildfile/task_manager.rb +13 -4
  1567. data/lib/sproutcore/helpers.rb +1 -1
  1568. data/lib/sproutcore/helpers/entry_sorter.rb +5 -9
  1569. data/lib/sproutcore/helpers/minifier.rb +110 -0
  1570. data/lib/sproutcore/helpers/static_helper.rb +105 -39
  1571. data/lib/sproutcore/models/generator.rb +16 -0
  1572. data/lib/sproutcore/models/manifest.rb +3 -3
  1573. data/lib/sproutcore/models/manifest_entry.rb +10 -3
  1574. data/lib/sproutcore/models/target.rb +146 -34
  1575. data/lib/sproutcore/rack/dev.rb +3 -3
  1576. data/lib/sproutcore/rack/proxy.rb +1 -1
  1577. data/lib/sproutcore/tools.rb +53 -5
  1578. data/lib/sproutcore/tools/build.rb +10 -16
  1579. data/lib/sproutcore/tools/docs.rb +1 -1
  1580. data/lib/sproutcore/tools/gen.rb +1 -1
  1581. data/lib/sproutcore/tools/init.rb +26 -10
  1582. data/lib/sproutcore/tools/server.rb +9 -1
  1583. data/lib/sproutcore/version.rb +1 -0
  1584. data/spec/buildtasks/manifest/prepare_build_tasks/chance_2x_spec.rb +100 -0
  1585. data/spec/buildtasks/manifest/prepare_build_tasks/chance_spec.rb +104 -0
  1586. data/spec/buildtasks/manifest/prepare_build_tasks/combine_spec.rb +86 -9
  1587. data/spec/buildtasks/manifest/prepare_build_tasks/css_spec.rb +1 -1
  1588. data/spec/buildtasks/manifest/prepare_build_tasks/handlebars_spec.rb +39 -0
  1589. data/spec/buildtasks/manifest/prepare_build_tasks/minify_spec.rb +1 -1
  1590. data/spec/buildtasks/manifest/prepare_build_tasks/module_info_spec.rb +96 -0
  1591. data/spec/buildtasks/manifest/prepare_build_tasks/module_spec.rb +83 -0
  1592. data/spec/buildtasks/manifest/prepare_build_tasks/packed_2x_indirect_spec.rb +191 -0
  1593. data/spec/buildtasks/manifest/prepare_build_tasks/packed_2x_spec.rb +185 -0
  1594. data/spec/buildtasks/manifest/prepare_build_tasks/packed_spec.rb +46 -11
  1595. data/spec/buildtasks/manifest/spec_helper.rb +4 -0
  1596. data/spec/fixtures/builder_tests/Buildfile +11 -9
  1597. data/spec/fixtures/builder_tests/apps/chance_test/Buildfile +14 -0
  1598. data/spec/fixtures/builder_tests/apps/chance_test/core.js +27 -0
  1599. data/spec/fixtures/builder_tests/apps/chance_test/main.js +30 -0
  1600. data/spec/fixtures/builder_tests/apps/chance_test/resources/demo.css +6 -0
  1601. data/spec/fixtures/builder_tests/apps/chance_test/resources/force@2x.png +0 -0
  1602. data/spec/fixtures/builder_tests/apps/chance_test/resources/last_file.css +7 -0
  1603. data/spec/fixtures/builder_tests/apps/chance_test/resources/loading.rhtml +9 -0
  1604. data/spec/fixtures/builder_tests/apps/chance_test/resources/main_page.js +24 -0
  1605. data/spec/fixtures/builder_tests/apps/chance_test/resources/z_first_file.css +6 -0
  1606. data/spec/fixtures/builder_tests/apps/chance_test/theme.js +27 -0
  1607. data/spec/fixtures/builder_tests/apps/handlebars_test/template.handlebars +5 -0
  1608. data/spec/fixtures/builder_tests/apps/module_test/module.js +1 -0
  1609. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/english.lproj/req_style_2.css +0 -0
  1610. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/english.lproj/test.rhtml +1 -0
  1611. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/javascript.js +1 -0
  1612. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/lib/alt_layout.rhtml +0 -0
  1613. data/spec/fixtures/builder_tests/apps/module_test/modules/deferred_module/req_js_2.js +0 -0
  1614. data/spec/fixtures/builder_tests/apps/module_test/modules/dynamic_req_target_1/dynamic_req_js_1.js +0 -0
  1615. data/spec/fixtures/builder_tests/apps/module_test/modules/dynamic_req_target_1/english.lproj/dynamic_req_style_1.css +0 -0
  1616. data/spec/fixtures/builder_tests/apps/module_test/modules/inlined_module/README +0 -0
  1617. data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/req_style_1.css +0 -0
  1618. data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/strings.js +4 -0
  1619. data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/english.lproj/test.rhtml +1 -0
  1620. data/spec/fixtures/builder_tests/apps/module_test/modules/required_target/req_js_1.js +0 -0
  1621. data/spec/fixtures/helper_tests/apps/minifier_test/core.js +8 -0
  1622. data/spec/fixtures/real_world/Buildfile +11 -1
  1623. data/spec/fixtures/real_world/apps/account/modules/preferences/README +0 -0
  1624. data/spec/fixtures/real_world/apps/calendar/modules/preferences/README +0 -0
  1625. data/spec/fixtures/real_world/apps/contacts/modules/preferences/README +0 -0
  1626. data/spec/fixtures/real_world/apps/contacts/modules/printing/README +0 -0
  1627. data/spec/fixtures/real_world/apps/mail/modules/preferences/README +0 -0
  1628. data/spec/fixtures/real_world/apps/mail/modules/printing/README +0 -0
  1629. data/spec/fixtures/real_world/apps/photos/modules/email/README +0 -0
  1630. data/spec/fixtures/real_world/apps/photos/modules/preferences/README +0 -0
  1631. data/spec/fixtures/real_world/frameworks/no_2x/resources/test.css +1 -0
  1632. data/spec/fixtures/real_world/frameworks/no_2x/resources/test.png +0 -0
  1633. data/spec/fixtures/real_world/frameworks/sproutcore/english.lproj/templates/demo.handlebars +4 -0
  1634. data/spec/fixtures/real_world/frameworks/sproutcore/resources/force@2x.png +0 -0
  1635. data/spec/lib/builders/chance_file_spec.rb +44 -0
  1636. data/spec/lib/builders/handlebars_spec.rb +29 -0
  1637. data/spec/lib/builders/module_spec.rb +133 -0
  1638. data/spec/lib/builders/strings_spec.rb +1 -0
  1639. data/spec/lib/helpers/minifier.rb +31 -0
  1640. data/spec/lib/models/project/find_targets_for_spec.rb +1 -1
  1641. data/sproutcore.gemspec +11 -4
  1642. data/vendor/chance/.gitignore +5 -0
  1643. data/vendor/chance/Gemfile +4 -0
  1644. data/vendor/chance/Rakefile +2 -0
  1645. data/vendor/chance/bin/chance +46 -0
  1646. data/vendor/chance/chance.gemspec +28 -0
  1647. data/vendor/chance/lib/chance.rb +156 -0
  1648. data/vendor/chance/lib/chance/instance.rb +330 -0
  1649. data/vendor/chance/lib/chance/instance/data_url.rb +85 -0
  1650. data/vendor/chance/lib/chance/instance/javascript.rb +19 -0
  1651. data/vendor/chance/lib/chance/instance/slicing.rb +181 -0
  1652. data/vendor/chance/lib/chance/instance/spriting.rb +311 -0
  1653. data/vendor/chance/lib/chance/parser.rb +835 -0
  1654. data/vendor/chance/lib/chance/perf.rb +17 -0
  1655. data/vendor/chance/lib/chance/version.rb +3 -0
  1656. data/vendor/chance/lib/tester/test.rb +108 -0
  1657. data/vendor/chance/lib/tester/test_runner.rb +27 -0
  1658. data/vendor/chance/test/case/abc.png +0 -0
  1659. data/vendor/chance/test/case/more/abc.png +0 -0
  1660. data/vendor/chance/test/case/more/another.css +4 -0
  1661. data/vendor/chance/test/case/test1.css +22 -0
  1662. data/vendor/chance/test/case/test2.css +6 -0
  1663. data/vendor/chance/tests/parser/basic/input/test.css +4 -0
  1664. data/vendor/chance/tests/parser/basic/output/test.parsed.css +5 -0
  1665. data/vendor/sproutcore/SCCompiler.jar +0 -0
  1666. data/vendor/sproutcore/lib/args4j-2.0.12.jar +0 -0
  1667. data/vendor/sproutcore/lib/htmlcompressor-0.9.3.jar +0 -0
  1668. data/{lib/sproutcore/vendor/yui-compressor → vendor/sproutcore/lib}/yuicompressor-2.4.2.jar +0 -0
  1669. data/vendor/sproutcore/src/SCCompiler/build.xml +74 -0
  1670. data/vendor/sproutcore/src/SCCompiler/lib/args4j-2.0.12.jar +0 -0
  1671. data/vendor/sproutcore/src/SCCompiler/lib/htmlcompressor-0.9.3.jar +0 -0
  1672. data/vendor/sproutcore/src/SCCompiler/lib/yuicompressor-2.4.2.jar +0 -0
  1673. data/vendor/sproutcore/src/SCCompiler/lib/yuicompressor-2.4.4.jar +0 -0
  1674. data/vendor/sproutcore/src/SCCompiler/manifest.mf +3 -0
  1675. data/vendor/sproutcore/src/SCCompiler/nbproject/build-impl.xml +894 -0
  1676. data/vendor/sproutcore/src/SCCompiler/nbproject/genfiles.properties +8 -0
  1677. data/vendor/sproutcore/src/SCCompiler/nbproject/private/config.properties +0 -0
  1678. data/vendor/sproutcore/src/SCCompiler/nbproject/private/private.properties +10 -0
  1679. data/vendor/sproutcore/src/SCCompiler/nbproject/private/private.xml +4 -0
  1680. data/vendor/sproutcore/src/SCCompiler/nbproject/project.properties +90 -0
  1681. data/vendor/sproutcore/src/SCCompiler/nbproject/project.xml +15 -0
  1682. data/vendor/sproutcore/src/SCCompiler/src/com/sproutcore/Main.java +348 -0
  1683. metadata +1236 -560
  1684. data/lib/frameworks/sproutcore/CHANGELOG +0 -93
  1685. data/lib/frameworks/sproutcore/CHANGELOG-1.4.md +0 -170
  1686. data/lib/frameworks/sproutcore/apps/docs/core.js +0 -27
  1687. data/lib/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/QuickLook/Preview.pdf +0 -0
  1688. data/lib/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/QuickLook/Thumbnail.tiff +0 -0
  1689. data/lib/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/data.plist +0 -14378
  1690. data/lib/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image10.png +0 -0
  1691. data/lib/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image14.png +0 -0
  1692. data/lib/frameworks/sproutcore/apps/docs/design/Doc Viewer.graffle/image9.tiff +0 -0
  1693. data/lib/frameworks/sproutcore/apps/docs/english.lproj/loading.rhtml +0 -9
  1694. data/lib/frameworks/sproutcore/apps/docs/english.lproj/main_page.js +0 -22
  1695. data/lib/frameworks/sproutcore/apps/docs/english.lproj/strings.js +0 -15
  1696. data/lib/frameworks/sproutcore/apps/docs/main.js +0 -30
  1697. data/lib/frameworks/sproutcore/apps/greenhouse/README +0 -25
  1698. data/lib/frameworks/sproutcore/apps/greenhouse/TODO +0 -72
  1699. data/lib/frameworks/sproutcore/apps/greenhouse/controllers/file.js +0 -75
  1700. data/lib/frameworks/sproutcore/apps/greenhouse/controllers/library.js +0 -201
  1701. data/lib/frameworks/sproutcore/apps/greenhouse/core.js +0 -67
  1702. data/lib/frameworks/sproutcore/apps/greenhouse/core_file.js +0 -124
  1703. data/lib/frameworks/sproutcore/apps/greenhouse/data_source.js +0 -250
  1704. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/app_page.js +0 -377
  1705. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/css/app-selector.css +0 -111
  1706. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/css/button.css +0 -310
  1707. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/css/dock.css +0 -85
  1708. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/css/general.css +0 -52
  1709. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/css/main-page.css +0 -120
  1710. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/css/menu.css +0 -52
  1711. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/css/modal.css +0 -40
  1712. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/css/picker.css +0 -188
  1713. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/css/tabbed.css +0 -68
  1714. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/dialogs.js +0 -302
  1715. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/inspectors.js +0 -365
  1716. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/strings.js +0 -87
  1717. data/lib/frameworks/sproutcore/apps/greenhouse/main.js +0 -28
  1718. data/lib/frameworks/sproutcore/apps/greenhouse/models/design.js +0 -22
  1719. data/lib/frameworks/sproutcore/apps/greenhouse/models/dir.js +0 -92
  1720. data/lib/frameworks/sproutcore/apps/greenhouse/models/file.js +0 -51
  1721. data/lib/frameworks/sproutcore/apps/greenhouse/states/inspector.js +0 -144
  1722. data/lib/frameworks/sproutcore/apps/greenhouse/states/library.js +0 -133
  1723. data/lib/frameworks/sproutcore/apps/greenhouse/states/main.js +0 -224
  1724. data/lib/frameworks/sproutcore/apps/greenhouse/states/modals.js +0 -291
  1725. data/lib/frameworks/sproutcore/apps/greenhouse/states/ready.js +0 -197
  1726. data/lib/frameworks/sproutcore/apps/greenhouse/tests/views/list_item.js +0 -15
  1727. data/lib/frameworks/sproutcore/apps/greenhouse/views/plist_item.js +0 -39
  1728. data/lib/frameworks/sproutcore/apps/greenhouse/views/tear_off_picker.js +0 -56
  1729. data/lib/frameworks/sproutcore/design/TestRunner Design.graffle/image11.png +0 -0
  1730. data/lib/frameworks/sproutcore/design/TestRunner Design.graffle/image13.png +0 -0
  1731. data/lib/frameworks/sproutcore/design/TestRunner Design.graffle/image8.png +0 -0
  1732. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/parentless.js +0 -134
  1733. data/lib/frameworks/sproutcore/frameworks/datejs/core.js +0 -865
  1734. data/lib/frameworks/sproutcore/frameworks/datejs/english.lproj/en-US.js +0 -186
  1735. data/lib/frameworks/sproutcore/frameworks/datejs/extras.js +0 -332
  1736. data/lib/frameworks/sproutcore/frameworks/datejs/license.js +0 -25
  1737. data/lib/frameworks/sproutcore/frameworks/datejs/parser.js +0 -1116
  1738. data/lib/frameworks/sproutcore/frameworks/datejs/spanish.lproj/es-CO.js +0 -186
  1739. data/lib/frameworks/sproutcore/frameworks/datejs/sugarpak.js +0 -475
  1740. data/lib/frameworks/sproutcore/frameworks/datejs/time.js +0 -269
  1741. data/lib/frameworks/sproutcore/frameworks/datejs/validators/datejs.js +0 -34
  1742. data/lib/frameworks/sproutcore/frameworks/designer/coders/design.js +0 -20
  1743. data/lib/frameworks/sproutcore/frameworks/designer/coders/localization.js +0 -19
  1744. data/lib/frameworks/sproutcore/frameworks/designer/coders/object.js +0 -347
  1745. data/lib/frameworks/sproutcore/frameworks/designer/controllers/controllers.js +0 -16
  1746. data/lib/frameworks/sproutcore/frameworks/designer/controllers/design.js +0 -37
  1747. data/lib/frameworks/sproutcore/frameworks/designer/controllers/designs.js +0 -134
  1748. data/lib/frameworks/sproutcore/frameworks/designer/controllers/page_design.js +0 -170
  1749. data/lib/frameworks/sproutcore/frameworks/designer/controllers/page_files.js +0 -22
  1750. data/lib/frameworks/sproutcore/frameworks/designer/core.js +0 -26
  1751. data/lib/frameworks/sproutcore/frameworks/designer/css/css_rule.js +0 -22
  1752. data/lib/frameworks/sproutcore/frameworks/designer/css/css_style.js +0 -29
  1753. data/lib/frameworks/sproutcore/frameworks/designer/css/css_style_sheet.js +0 -201
  1754. data/lib/frameworks/sproutcore/frameworks/designer/designers/button.js +0 -21
  1755. data/lib/frameworks/sproutcore/frameworks/designer/designers/label.js +0 -16
  1756. data/lib/frameworks/sproutcore/frameworks/designer/designers/object_designer.js +0 -296
  1757. data/lib/frameworks/sproutcore/frameworks/designer/designers/tab.js +0 -18
  1758. data/lib/frameworks/sproutcore/frameworks/designer/designers/text_field.js +0 -15
  1759. data/lib/frameworks/sproutcore/frameworks/designer/designers/view_designer.js +0 -1259
  1760. data/lib/frameworks/sproutcore/frameworks/designer/english.lproj/design_page.js +0 -55
  1761. data/lib/frameworks/sproutcore/frameworks/designer/ext/object.js +0 -26
  1762. data/lib/frameworks/sproutcore/frameworks/designer/ext/page.js +0 -86
  1763. data/lib/frameworks/sproutcore/frameworks/designer/ext/view.js +0 -54
  1764. data/lib/frameworks/sproutcore/frameworks/designer/mixins/button.js +0 -11
  1765. data/lib/frameworks/sproutcore/frameworks/designer/mixins/snap_lines.js +0 -221
  1766. data/lib/frameworks/sproutcore/frameworks/designer/views/designer_drop_target.js +0 -138
  1767. data/lib/frameworks/sproutcore/frameworks/designer/views/drawing.js +0 -219
  1768. data/lib/frameworks/sproutcore/frameworks/designer/views/selection_handles.js +0 -78
  1769. data/lib/frameworks/sproutcore/frameworks/foundation/controllers/array.js +0 -518
  1770. data/lib/frameworks/sproutcore/frameworks/foundation/controllers/controller.js +0 -44
  1771. data/lib/frameworks/sproutcore/frameworks/foundation/controllers/object.js +0 -342
  1772. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/core.css +0 -474
  1773. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/strings.js +0 -15
  1774. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/view.css +0 -57
  1775. data/lib/frameworks/sproutcore/frameworks/foundation/ext/object.js +0 -83
  1776. data/lib/frameworks/sproutcore/frameworks/foundation/ext/run_loop.js +0 -162
  1777. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_text_field.js +0 -585
  1778. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/responder_context.js +0 -269
  1779. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/selection_support.js +0 -250
  1780. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/string.js +0 -543
  1781. data/lib/frameworks/sproutcore/frameworks/foundation/panes/main.js +0 -51
  1782. data/lib/frameworks/sproutcore/frameworks/foundation/panes/pane.js +0 -848
  1783. data/lib/frameworks/sproutcore/frameworks/foundation/protocols/inline_editor_delegate.js +0 -84
  1784. data/lib/frameworks/sproutcore/frameworks/foundation/system/application.js +0 -37
  1785. data/lib/frameworks/sproutcore/frameworks/foundation/system/browser.js +0 -59
  1786. data/lib/frameworks/sproutcore/frameworks/foundation/system/builder.js +0 -210
  1787. data/lib/frameworks/sproutcore/frameworks/foundation/system/bundle.js +0 -337
  1788. data/lib/frameworks/sproutcore/frameworks/foundation/system/cursor.js +0 -131
  1789. data/lib/frameworks/sproutcore/frameworks/foundation/system/datetime.js +0 -1140
  1790. data/lib/frameworks/sproutcore/frameworks/foundation/system/device.js +0 -143
  1791. data/lib/frameworks/sproutcore/frameworks/foundation/system/event.js +0 -894
  1792. data/lib/frameworks/sproutcore/frameworks/foundation/system/image_cache.js +0 -433
  1793. data/lib/frameworks/sproutcore/frameworks/foundation/system/json.js +0 -515
  1794. data/lib/frameworks/sproutcore/frameworks/foundation/system/locale.js +0 -293
  1795. data/lib/frameworks/sproutcore/frameworks/foundation/system/page.js +0 -108
  1796. data/lib/frameworks/sproutcore/frameworks/foundation/system/platform.js +0 -298
  1797. data/lib/frameworks/sproutcore/frameworks/foundation/system/ready.js +0 -197
  1798. data/lib/frameworks/sproutcore/frameworks/foundation/system/render_context.js +0 -988
  1799. data/lib/frameworks/sproutcore/frameworks/foundation/system/request.js +0 -599
  1800. data/lib/frameworks/sproutcore/frameworks/foundation/system/responder.js +0 -124
  1801. data/lib/frameworks/sproutcore/frameworks/foundation/system/response.js +0 -538
  1802. data/lib/frameworks/sproutcore/frameworks/foundation/system/root_responder.js +0 -2068
  1803. data/lib/frameworks/sproutcore/frameworks/foundation/system/time.js +0 -473
  1804. data/lib/frameworks/sproutcore/frameworks/foundation/system/timer.js +0 -551
  1805. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils.js +0 -710
  1806. data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/array_case.js +0 -218
  1807. data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/enum_case.js +0 -206
  1808. data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/null_case.js +0 -64
  1809. data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/selection_support.js +0 -318
  1810. data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/single_case.js +0 -136
  1811. data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/empty_case.js +0 -82
  1812. data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/multiple_case.js +0 -111
  1813. data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/single_case.js +0 -193
  1814. data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/object/single_enumerable_case.js +0 -265
  1815. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/content.js +0 -195
  1816. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/displayProperties.js +0 -89
  1817. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/keyEquivalents.js +0 -57
  1818. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/ui.js +0 -68
  1819. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/control/content.js +0 -168
  1820. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/responder_context.js +0 -75
  1821. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/string.js +0 -83
  1822. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/builder.js +0 -42
  1823. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_core.js +0 -1334
  1824. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_dimensions.js +0 -387
  1825. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_selector.js +0 -405
  1826. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/within.js +0 -66
  1827. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/datetime.js +0 -382
  1828. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/json.js +0 -14
  1829. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/locale.js +0 -134
  1830. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/begin.js +0 -47
  1831. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/element.js +0 -44
  1832. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/end.js +0 -124
  1833. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/get.js +0 -51
  1834. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_attr.js +0 -50
  1835. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_basic.js +0 -28
  1836. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_className.js +0 -179
  1837. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/helpers_style.js +0 -101
  1838. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/init.js +0 -55
  1839. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/join.js +0 -28
  1840. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/push_text.js +0 -74
  1841. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/tag.js +0 -46
  1842. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/update.js +0 -218
  1843. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/request.js +0 -223
  1844. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/makeKeyPane.js +0 -124
  1845. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/makeMainPane.js +0 -68
  1846. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/makeMenuPane.js +0 -48
  1847. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/root_responder.js +0 -101
  1848. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/targetForAction.js +0 -251
  1849. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/timer/invalidate.js +0 -38
  1850. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/timer/invokeLater.js +0 -201
  1851. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/timer/isPaused.js +0 -71
  1852. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/timer/performAction.js +0 -69
  1853. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/timer/schedule.js +0 -170
  1854. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/utils/normalizeURL.js +0 -18
  1855. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/utils/rect.js +0 -99
  1856. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/main_pane.js +0 -31
  1857. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/pane/append_remove.js +0 -124
  1858. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/pane/firstResponder.js +0 -148
  1859. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/pane/keyPane.js +0 -133
  1860. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/pane/layout.js +0 -31
  1861. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/pane/sendEvent.js +0 -206
  1862. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/clippingFrame.js +0 -133
  1863. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/convertFrames.js +0 -246
  1864. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/convertLayouts.js +0 -145
  1865. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/createChildViews.js +0 -122
  1866. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/createLayer.js +0 -97
  1867. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/destroyLayer.js +0 -83
  1868. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/didAppendToDocument.js +0 -48
  1869. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/findLayerInParentLayer.js +0 -50
  1870. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/init.js +0 -50
  1871. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/insertBefore.js +0 -200
  1872. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisible.js +0 -51
  1873. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/isVisibleInWindow.js +0 -116
  1874. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/layer.js +0 -150
  1875. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutChildViews.js +0 -162
  1876. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutDidChange.js +0 -127
  1877. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutStyle.js +0 -531
  1878. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/nextValidKeyView.js +0 -110
  1879. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/parentViewDidChange.js +0 -67
  1880. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/prepareContext.js +0 -180
  1881. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/removeChild.js +0 -189
  1882. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/render.js +0 -83
  1883. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/replaceChild.js +0 -29
  1884. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayer.js +0 -146
  1885. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/updateLayerLocation.js +0 -194
  1886. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/view/viewDidResize.js +0 -202
  1887. data/lib/frameworks/sproutcore/frameworks/foundation/views/view.js +0 -3313
  1888. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/delegate_support.js +0 -110
  1889. data/lib/frameworks/sproutcore/frameworks/runtime/protocols/observable_protocol.js +0 -40
  1890. data/lib/frameworks/sproutcore/frameworks/runtime/protocols/sparse_array_delegate.js +0 -131
  1891. data/lib/frameworks/sproutcore/frameworks/runtime/system/cookie.js +0 -160
  1892. data/lib/frameworks/sproutcore/frameworks/runtime/system/selection_set.js +0 -697
  1893. data/lib/frameworks/sproutcore/frameworks/runtime/system/sparse_array.js +0 -379
  1894. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable.js +0 -622
  1895. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/cookie.js +0 -163
  1896. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/add.js +0 -92
  1897. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/copy.js +0 -17
  1898. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/indexSetForSource.js +0 -98
  1899. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/isEqual.js +0 -60
  1900. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/remove.js +0 -111
  1901. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/sparse_array.js +0 -194
  1902. data/lib/frameworks/sproutcore/frameworks/statechart/mixins/statechart.js +0 -336
  1903. data/lib/frameworks/sproutcore/frameworks/statechart/tests/basic.js +0 -90
  1904. data/lib/frameworks/sproutcore/frameworks/statechart/tests/history.js +0 -71
  1905. data/lib/frameworks/sproutcore/frameworks/statechart/tests/nested.js +0 -59
  1906. data/lib/frameworks/sproutcore/frameworks/statechart/tests/transient.js +0 -148
  1907. data/lib/frameworks/sproutcore/frameworks/testing/jquery.js +0 -3559
  1908. data/lib/frameworks/sproutcore/frameworks/testing/qunit.js +0 -827
  1909. data/lib/frameworks/sproutcore/themes/standard_theme/english.lproj/pane.css +0 -18
  1910. data/lib/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +0 -275
  1911. data/lib/sproutcore/builders/bundle.rb +0 -63
  1912. data/lib/sproutcore/buildfile/cloneable.rb +0 -34
  1913. data/lib/sproutcore/vendor/yui-compressor/SCyuicompressor-2.4.2.jar +0 -0
  1914. data/spec/buildtasks/manifest/prepare_build_tasks/bundle_spec.rb +0 -254
  1915. data/spec/fixtures/builder_tests/apps/bundle_test/bundle.js +0 -1
  1916. data/spec/lib/builders/bundle_spec.rb +0 -295
@@ -1,26 +1,27 @@
1
1
  // ==========================================================================
2
2
  // Project: SproutCore Costello - Property Observing Library
3
3
  // Copyright: ©2006-2011 Strobe Inc. and contributors.
4
- // Portions ©2008-2010 Apple Inc. All rights reserved.
4
+ // Portions ©2008-2011 Apple Inc. All rights reserved.
5
5
  // License: Licensed under MIT license (see license.js)
6
6
  // ==========================================================================
7
7
 
8
8
 
9
9
  /**
10
10
  Standard Error that should be raised when you try to modify a frozen object.
11
-
11
+
12
12
  @property {Error}
13
13
  */
14
14
  SC.FROZEN_ERROR = new Error("Cannot modify a frozen object");
15
15
 
16
- /**
17
- @namespace
18
-
16
+ /**
17
+ @class
18
+
19
19
  The SC.Freezable mixin implements some basic methods for marking an object
20
- as frozen. Once an object is frozen it should be read only. No changes
20
+ as frozen. Once an object is frozen it should be read only. No changes
21
21
  may be made the internal state of the object.
22
-
23
- h2. Enforcement
22
+
23
+ Enforcement
24
+ ---
24
25
 
25
26
  To fully support freezing in your subclass, you must include this mixin and
26
27
  override any method that might alter any property on the object to instead
@@ -31,78 +32,76 @@ SC.FROZEN_ERROR = new Error("Cannot modify a frozen object");
31
32
  object objects, that is not the case today. Even if an object is freezable,
32
33
  it is still technically possible to modify the object, even though it could
33
34
  break other parts of your application that do not expect a frozen object to
34
- change. It is, therefore, very important that you always respect the
35
+ change. It is, therefore, very important that you always respect the
35
36
  isFrozen property on all freezable objects.
36
-
37
- h2. Example
38
-
39
- The example below shows a simple object that implement the SC.Freezable
40
- protocol.
41
-
42
- {{{
43
- Contact = SC.Object.extend(SC.Freezable, {
44
-
45
- firstName: null,
46
-
47
- lastName: null,
48
-
49
- // swaps the names
50
- swapNames: function() {
51
- if (this.get('isFrozen')) throw SC.FROZEN_ERROR;
52
- var tmp = this.get('firstName');
53
- this.set('firstName', this.get('lastName'));
54
- this.set('lastName', tmp);
55
- return this;
56
- }
57
-
58
- });
59
-
60
- c = Context.create({ firstName: "John", lastName: "Doe" });
61
- c.swapNames(); => returns c
62
- c.freeze();
63
- c.swapNames(); => EXCEPTION
64
-
65
- }}}
66
-
67
- h2. Copying
68
-
37
+
38
+ Example
39
+
40
+ The example below shows a simple object that implement the SC.Freezable
41
+ protocol.
42
+
43
+ Contact = SC.Object.extend(SC.Freezable, {
44
+
45
+ firstName: null,
46
+
47
+ lastName: null,
48
+
49
+ // swaps the names
50
+ swapNames: function() {
51
+ if (this.get('isFrozen')) throw SC.FROZEN_ERROR;
52
+ var tmp = this.get('firstName');
53
+ this.set('firstName', this.get('lastName'));
54
+ this.set('lastName', tmp);
55
+ return this;
56
+ }
57
+
58
+ });
59
+
60
+ c = Context.create({ firstName: "John", lastName: "Doe" });
61
+ c.swapNames(); => returns c
62
+ c.freeze();
63
+ c.swapNames(); => EXCEPTION
64
+
65
+ Copying
66
+ ---
67
+
69
68
  Usually the SC.Freezable protocol is implemented in cooperation with the
70
69
  SC.Copyable protocol, which defines a frozenCopy() method that will return
71
70
  a frozen object, if the object implements this method as well.
72
-
71
+
73
72
  */
74
- SC.Freezable = {
75
-
73
+ SC.Freezable = /** @scope SC.Freezable.prototype */ {
74
+
76
75
  /**
77
76
  Walk like a duck.
78
-
77
+
79
78
  @property {Boolean}
80
79
  */
81
80
  isFreezable: YES,
82
-
81
+
83
82
  /**
84
83
  Set to YES when the object is frozen. Use this property to detect whether
85
84
  your object is frozen or not.
86
-
85
+
87
86
  @property {Boolean}
88
87
  */
89
88
  isFrozen: NO,
90
-
89
+
91
90
  /**
92
91
  Freezes the object. Once this method has been called the object should
93
92
  no longer allow any properties to be edited.
94
-
93
+
95
94
  @returns {Object} reciever
96
95
  */
97
96
  freeze: function() {
98
97
  // NOTE: Once someone actually implements Object.freeze() in the browser,
99
98
  // add a call to that here also.
100
-
99
+
101
100
  if (this.set) this.set('isFrozen', YES);
102
101
  else this.isFrozen = YES;
103
102
  return this;
104
103
  }
105
-
104
+
106
105
  };
107
106
 
108
107
 
@@ -1,212 +1,206 @@
1
1
  // ==========================================================================
2
2
  // Project: SproutCore Costello - Property Observing Library
3
3
  // Copyright: ©2006-2011 Strobe Inc. and contributors.
4
- // Portions ©2008-2010 Apple Inc. All rights reserved.
4
+ // Portions ©2008-2011 Apple Inc. All rights reserved.
5
5
  // License: Licensed under MIT license (see license.js)
6
6
  // ==========================================================================
7
7
 
8
- require('private/observer_set') ;
8
+ sc_require('ext/function');
9
+ sc_require('private/observer_set');
10
+ sc_require('private/chain_observer');
9
11
 
10
12
  /*globals logChange */
11
13
 
12
14
  /**
13
- Set to YES to have all observing activity logged to the console. This
15
+ Set to YES to have all observing activity logged to the SC.Logger. This
14
16
  should be used for debugging only.
15
-
17
+
16
18
  @property {Boolean}
17
19
  */
18
20
  SC.LOG_OBSERVERS = NO ;
19
21
 
20
22
  /**
21
- @namespace
22
-
23
- Key-Value-Observing (KVO) simply allows one object to observe changes to a
24
- property on another object. It is one of the fundamental ways that models,
25
- controllers and views communicate with each other in a SproutCore
26
- application. Any object that has this module applied to it can be used in
23
+ @class
24
+
25
+ Key-Value-Observing (KVO) simply allows one object to observe changes to a
26
+ property on another object. It is one of the fundamental ways that models,
27
+ controllers and views communicate with each other in a SproutCore
28
+ application. Any object that has this module applied to it can be used in
27
29
  KVO-operations.
28
-
30
+
29
31
  This module is applied automatically to all objects that inherit from
30
- SC.Object, which includes most objects bundled with the SproutCore
32
+ SC.Object, which includes most objects bundled with the SproutCore
31
33
  framework. You will not generally apply this module to classes yourself,
32
34
  but you will use the features provided by this module frequently, so it is
33
35
  important to understand how to use it.
34
-
35
- h2. Enabling Key Value Observing
36
36
 
37
- With KVO, you can write functions that will be called automatically whenever
37
+ Enabling Key Value Observing
38
+ ---
39
+
40
+ With KVO, you can write functions that will be called automatically whenever
38
41
  a property on a particular object changes. You can use this feature to
39
- reduce the amount of "glue code" that you often write to tie the various
42
+ reduce the amount of "glue code" that you often write to tie the various
40
43
  parts of your application together.
41
-
42
- To use KVO, just use the KVO-aware methods get() and set() to access
44
+
45
+ To use KVO, just use the KVO-aware methods get() and set() to access
43
46
  properties instead of accessing properties directly. Instead of writing:
44
-
45
- {{{
46
- var aName = contact.firstName ;
47
- contact.firstName = 'Charles' ;
48
- }}}
47
+
48
+ var aName = contact.firstName ;
49
+ contact.firstName = 'Charles' ;
49
50
 
50
51
  use:
51
52
 
52
- {{{
53
- var aName = contact.get('firstName') ;
54
- contact.set('firstName', 'Charles') ;
55
- }}}
56
-
57
- get() and set() work just like the normal "dot operators" provided by
53
+ var aName = contact.get('firstName') ;
54
+ contact.set('firstName', 'Charles') ;
55
+
56
+ get() and set() work just like the normal "dot operators" provided by
58
57
  JavaScript but they provide you with much more power, including not only
59
58
  observing but computed properties as well.
60
59
 
61
- h2. Observing Property Changes
60
+ Observing Property Changes
61
+ ---
62
62
 
63
- You typically observe property changes simply by adding the observes()
63
+ You typically observe property changes simply by adding the observes()
64
64
  call to the end of your method declarations in classes that you write. For
65
65
  example:
66
-
67
- {{{
68
- SC.Object.create({
69
- valueObserver: function() {
70
- // Executes whenever the "Value" property changes
71
- }.observes('value')
72
- }) ;
73
- }}}
74
-
66
+
67
+ SC.Object.create({
68
+ valueObserver: function() {
69
+ // Executes whenever the "Value" property changes
70
+ }.observes('value')
71
+ }) ;
72
+
75
73
  Although this is the most common way to add an observer, this capability is
76
74
  actually built into the SC.Object class on top of two methods defined in
77
75
  this mixin called addObserver() and removeObserver(). You can use these two
78
- methods to add and remove observers yourself if you need to do so at run
79
- time.
80
-
76
+ methods to add and remove observers yourself if you need to do so at run
77
+ time.
78
+
81
79
  To add an observer for a property, just call:
82
-
83
- {{{
84
- object.addObserver('propertyKey', targetObject, targetAction) ;
85
- }}}
86
-
80
+
81
+ object.addObserver('propertyKey', targetObject, targetAction) ;
82
+
87
83
  This will call the 'targetAction' method on the targetObject to be called
88
84
  whenever the value of the propertyKey changes.
89
-
90
- h2. Observer Parameters
91
-
92
- An observer function typically does not need to accept any parameters,
93
- however you can accept certain arguments when writing generic observers.
85
+
86
+ Observer Parameters
87
+ ---
88
+
89
+ An observer function typically does not need to accept any parameters,
90
+ however you can accept certain arguments when writing generic observers.
94
91
  An observer function can have the following arguments:
95
-
96
- {{{
97
- propertyObserver(target, key, value, revision) ;
98
- }}}
99
-
92
+
93
+ propertyObserver(target, key, value, revision) ;
94
+
100
95
  - *target* - This is the object whose value changed. Usually this.
101
96
  - *key* - The key of the value that changed
102
97
  - *value* - this property is no longer used. It will always be null
103
98
  - *revision* - this is the revision of the target object
104
-
105
- h2. Implementing Manual Change Notifications
106
-
107
- Sometimes you may want to control the rate at which notifications for
108
- a property are delivered, for example by checking first to make sure
99
+
100
+ Implementing Manual Change Notifications
101
+ ---
102
+
103
+ Sometimes you may want to control the rate at which notifications for
104
+ a property are delivered, for example by checking first to make sure
109
105
  that the value has changed.
110
-
111
- To do this, you need to implement a computed property for the property
106
+
107
+ To do this, you need to implement a computed property for the property
112
108
  you want to change and override automaticallyNotifiesObserversFor().
113
-
109
+
114
110
  The example below will only notify if the "balance" property value actually
115
111
  changes:
116
-
117
- {{{
118
-
119
- automaticallyNotifiesObserversFor: function(key) {
120
- return (key === 'balance') ? NO : sc_super() ;
121
- },
122
-
123
- balance: function(key, value) {
124
- var balance = this._balance ;
125
- if ((value !== undefined) && (balance !== value)) {
126
- this.propertyWillChange(key) ;
127
- balance = this._balance = value ;
128
- this.propertyDidChange(key) ;
129
- }
130
- return balance ;
131
- }
132
-
133
- }}}
134
-
135
- h1. Implementation Details
136
-
112
+
113
+
114
+ automaticallyNotifiesObserversFor: function(key) {
115
+ return (key === 'balance') ? NO : sc_super() ;
116
+ },
117
+
118
+ balance: function(key, value) {
119
+ var balance = this._balance ;
120
+ if ((value !== undefined) && (balance !== value)) {
121
+ this.propertyWillChange(key) ;
122
+ balance = this._balance = value ;
123
+ this.propertyDidChange(key) ;
124
+ }
125
+ return balance ;
126
+ }
127
+
128
+
129
+ Implementation Details
130
+ ---
131
+
137
132
  Internally, SproutCore keeps track of observable information by adding a
138
133
  number of properties to the object adopting the observable. All of these
139
134
  properties begin with "_kvo_" to separate them from the rest of your object.
140
-
141
- @static
135
+
142
136
  @since SproutCore 1.0
143
137
  */
144
- SC.Observable = {
138
+ SC.Observable = /** @scope SC.Observable.prototype */{
139
+
140
+ /**
141
+ Walk like that ol' duck
145
142
 
146
- /**
147
- Walk like that ol' duck
148
-
149
143
  @property {Boolean}
150
144
  */
151
145
  isObservable: YES,
152
-
146
+
153
147
  /**
154
148
  Determines whether observers should be automatically notified of changes
155
149
  to a key.
156
-
150
+
157
151
  If you are manually implementing change notifications for a property, you
158
152
  can override this method to return NO for properties you do not want the
159
153
  observing system to automatically notify for.
160
-
154
+
161
155
  The default implementation always returns YES.
162
-
163
- @param key {String} the key that is changing
156
+
157
+ @param {String} key the key that is changing
164
158
  @returns {Boolean} YES if automatic notification should occur.
165
159
  */
166
- automaticallyNotifiesObserversFor: function(key) {
160
+ automaticallyNotifiesObserversFor: function(key) {
167
161
  return YES;
168
162
  },
169
163
 
170
164
  // ..........................................
171
165
  // PROPERTIES
172
- //
166
+ //
173
167
  // Use these methods to get/set properties. This will handle observing
174
- // notifications as well as allowing you to define functions that can be
168
+ // notifications as well as allowing you to define functions that can be
175
169
  // used as properties.
176
170
 
177
- /**
171
+ /**
178
172
  Retrieves the value of key from the object.
179
-
173
+
180
174
  This method is generally very similar to using object[key] or object.key,
181
175
  however it supports both computed properties and the unknownProperty
182
176
  handler.
183
-
184
- *Computed Properties*
185
-
177
+
178
+ Computed Properties
179
+ ---
180
+
186
181
  Computed properties are methods defined with the property() modifier
187
182
  declared at the end, such as:
188
-
189
- {{{
190
- fullName: function() {
191
- return this.getEach('firstName', 'lastName').compact().join(' ');
192
- }.property('firstName', 'lastName')
193
- }}}
194
-
183
+
184
+ fullName: function() {
185
+ return this.getEach('firstName', 'lastName').compact().join(' ');
186
+ }.property('firstName', 'lastName')
187
+
195
188
  When you call get() on a computed property, the property function will be
196
189
  called and the return value will be returned instead of the function
197
190
  itself.
198
-
199
- *Unknown Properties*
200
-
191
+
192
+ Unknown Properties
193
+ ---
194
+
201
195
  Likewise, if you try to call get() on a property whose values is
202
196
  undefined, the unknownProperty() method will be called on the object.
203
197
  If this method reutrns any value other than undefined, it will be returned
204
- instead. This allows you to implement "virtual" properties that are
198
+ instead. This allows you to implement "virtual" properties that are
205
199
  not defined upfront.
206
-
207
- @param key {String} the property to retrieve
200
+
201
+ @param {String} key the property to retrieve
208
202
  @returns {Object} the property value or undefined.
209
-
203
+
210
204
  */
211
205
  get: function(key) {
212
206
  var ret = this[key], cache ;
@@ -221,59 +215,72 @@ SC.Observable = {
221
215
  } else return ret ;
222
216
  },
223
217
 
224
- /**
218
+ /**
225
219
  Sets the key equal to value.
226
-
220
+
227
221
  This method is generally very similar to calling object[key] = value or
228
- object.key = value, except that it provides support for computed
222
+ object.key = value, except that it provides support for computed
229
223
  properties, the unknownProperty() method and property observers.
230
-
231
- *Computed Properties*
232
-
224
+
225
+ Computed Properties
226
+ ---
227
+
233
228
  If you try to set a value on a key that has a computed property handler
234
229
  defined (see the get() method for an example), then set() will call
235
- that method, passing both the value and key instead of simply changing
236
- the value itself. This is useful for those times when you need to
230
+ that method, passing both the value and key instead of simply changing
231
+ the value itself. This is useful for those times when you need to
237
232
  implement a property that is composed of one or more member
238
233
  properties.
239
-
240
- *Unknown Properties*
241
-
242
- If you try to set a value on a key that is undefined in the target
234
+
235
+ Unknown Properties
236
+ ---
237
+
238
+ If you try to set a value on a key that is undefined in the target
243
239
  object, then the unknownProperty() handler will be called instead. This
244
240
  gives you an opportunity to implement complex "virtual" properties that
245
- are not predefined on the obejct. If unknownProperty() returns
241
+ are not predefined on the obejct. If unknownProperty() returns
246
242
  undefined, then set() will simply set the value on the object.
247
-
248
- *Property Observers*
249
-
250
- In addition to changing the property, set() will also register a
251
- property change with the object. Unless you have placed this call
243
+
244
+ Property Observers
245
+ ---
246
+
247
+ In addition to changing the property, set() will also register a
248
+ property change with the object. Unless you have placed this call
252
249
  inside of a beginPropertyChanges() and endPropertyChanges(), any "local"
253
250
  observers (i.e. observer methods declared on the same object), will be
254
- called immediately. Any "remote" observers (i.e. observer methods
251
+ called immediately. Any "remote" observers (i.e. observer methods
255
252
  declared on another object) will be placed in a queue and called at a
256
253
  later time in a coelesced manner.
257
-
258
- *Chaining*
259
-
254
+
255
+ Chaining
256
+ ---
257
+
260
258
  In addition to property changes, set() returns the value of the object
261
259
  itself so you can do chaining like this:
262
-
263
- {{{
264
- record.set('firstName', 'Charles').set('lastName', 'Jolley');
265
- }}}
266
-
267
- @param key {String} the property to set
268
- @param value {Object} the value to set or null.
260
+
261
+ record.set('firstName', 'Charles').set('lastName', 'Jolley');
262
+
263
+ @param {String|Hash} key the property to set
264
+ @param {Object} value the value to set or null.
269
265
  @returns {SC.Observable}
270
266
  */
271
267
  set: function(key, value) {
272
- var func = this[key],
268
+ var func = this[key],
273
269
  notify = this.automaticallyNotifiesObserversFor(key),
274
- ret = value,
270
+ ret = value,
275
271
  cachedep, cache, idx, dfunc ;
276
272
 
273
+ if(value === undefined && SC.typeOf(key) === SC.T_HASH) {
274
+ var hash = key;
275
+
276
+ for(key in hash) {
277
+ if (!hash.hasOwnProperty(key)) continue;
278
+ this.set(key, hash[key]);
279
+ }
280
+
281
+ return this;
282
+ }
283
+
277
284
  // if there are any dependent keys and they use caching, then clear the
278
285
  // cache. (If we're notifying, then propertyDidChange will do this for
279
286
  // us.)
@@ -285,7 +292,7 @@ SC.Observable = {
285
292
  if (!cachedep || (cachedep = cachedep[key])===undefined) {
286
293
  cachedep = this._kvo_computeCachedDependentsFor(key);
287
294
  }
288
-
295
+
289
296
  if (cachedep) {
290
297
  idx = cachedep.length;
291
298
  while(--idx>=0) {
@@ -326,15 +333,15 @@ SC.Observable = {
326
333
  return this ;
327
334
  },
328
335
 
329
- /**
336
+ /**
330
337
  Called whenever you try to get or set an undefined property.
331
-
338
+
332
339
  This is a generic property handler. If you define it, it will be called
333
340
  when the named property is not yet set in the object. The default does
334
341
  nothing.
335
-
336
- @param key {String} the key that was requested
337
- @param value {Object} The value if called as a setter, undefined if called as a getter.
342
+
343
+ @param {String} key the key that was requested
344
+ @param {Object} value The value if called as a setter, undefined if called as a getter.
338
345
  @returns {Object} The new value for key.
339
346
  */
340
347
  unknownProperty: function(key,value) {
@@ -342,33 +349,33 @@ SC.Observable = {
342
349
  return value ;
343
350
  },
344
351
 
345
- /**
352
+ /**
346
353
  Begins a grouping of property changes.
347
-
354
+
348
355
  You can use this method to group property changes so that notifications
349
- will not be sent until the changes are finished. If you plan to make a
350
- large number of changes to an object at one time, you should call this
356
+ will not be sent until the changes are finished. If you plan to make a
357
+ large number of changes to an object at one time, you should call this
351
358
  method at the beginning of the changes to suspend change notifications.
352
- When you are done making changes, all endPropertyChanges() to allow
359
+ When you are done making changes, call endPropertyChanges() to allow
353
360
  notification to resume.
354
-
361
+
355
362
  @returns {SC.Observable}
356
363
  */
357
364
  beginPropertyChanges: function() {
358
- this._kvo_changeLevel = (this._kvo_changeLevel || 0) + 1;
365
+ this._kvo_changeLevel = (this._kvo_changeLevel || 0) + 1;
359
366
  return this;
360
367
  },
361
368
 
362
- /**
369
+ /**
363
370
  Ends a grouping of property changes.
364
-
371
+
365
372
  You can use this method to group property changes so that notifications
366
- will not be sent until the changes are finished. If you plan to make a
367
- large number of changes to an object at one time, you should call
368
- beginPropertyChanges() at the beginning of the changes to suspend change
369
- notifications. When you are done making changes, call this method to allow
373
+ will not be sent until the changes are finished. If you plan to make a
374
+ large number of changes to an object at one time, you should call
375
+ beginPropertyChanges() at the beginning of the changes to suspend change
376
+ notifications. When you are done making changes, call this method to allow
370
377
  notification to resume.
371
-
378
+
372
379
  @returns {SC.Observable}
373
380
  */
374
381
  endPropertyChanges: function() {
@@ -376,55 +383,74 @@ SC.Observable = {
376
383
  var level = this._kvo_changeLevel, changes = this._kvo_changes;
377
384
  if ((level<=0) && changes && (changes.length>0) && !SC.Observers.isObservingSuspended) {
378
385
  this._notifyPropertyObservers() ;
379
- }
386
+ }
380
387
  return this ;
381
388
  },
382
389
 
383
- /**
390
+ /**
384
391
  Notify the observer system that a property is about to change.
385
392
 
386
- Sometimes you need to change a value directly or indirectly without
387
- actually calling get() or set() on it. In this case, you can use this
388
- method and propertyDidChange() instead. Calling these two methods
389
- together will notify all observers that the property has potentially
393
+ Sometimes you need to change a value directly or indirectly without
394
+ actually calling get() or set() on it. In this case, you can use this
395
+ method and propertyDidChange() instead. Calling these two methods
396
+ together will notify all observers that the property has potentially
390
397
  changed value.
391
-
392
- Note that you must always call propertyWillChange and propertyDidChange as
393
- a pair. If you do not, it may get the property change groups out of order
398
+
399
+ Note that you must always call propertyWillChange and propertyDidChange as
400
+ a pair. If you do not, it may get the property change groups out of order
394
401
  and cause notifications to be delivered more often than you would like.
395
-
396
- @param key {String} The property key that is about to change.
402
+
403
+ @param {String} key The property key that is about to change.
397
404
  @returns {SC.Observable}
398
405
  */
399
406
  propertyWillChange: function(key) {
400
407
  return this ;
401
408
  },
402
409
 
403
- /**
410
+ /**
404
411
  Notify the observer system that a property has just changed.
405
412
 
406
- Sometimes you need to change a value directly or indirectly without
407
- actually calling get() or set() on it. In this case, you can use this
408
- method and propertyWillChange() instead. Calling these two methods
409
- together will notify all observers that the property has potentially
413
+ Sometimes you need to change a value directly or indirectly without
414
+ actually calling get() or set() on it. In this case, you can use this
415
+ method and propertyWillChange() instead. Calling these two methods
416
+ together will notify all observers that the property has potentially
410
417
  changed value.
411
-
412
- Note that you must always call propertyWillChange and propertyDidChange as
413
- a pair. If you do not, it may get the property change groups out of order
418
+
419
+ Note that you must always call propertyWillChange and propertyDidChange as
420
+ a pair. If you do not, it may get the property change groups out of order
414
421
  and cause notifications to be delivered more often than you would like.
415
-
416
- @param key {String} The property key that has just changed.
417
- @param value {Object} The new value of the key. May be null.
422
+
423
+ @param {String} key The property key that has just changed.
424
+ @param {Object} value The new value of the key. May be null.
425
+ @param {Boolean} _keepCache Private property
418
426
  @returns {SC.Observable}
419
427
  */
420
428
  propertyDidChange: function(key,value, _keepCache) {
421
-
422
- this._kvo_revision = (this._kvo_revision || 0) + 1;
429
+ this._kvo_revision = (this._kvo_revision || 0) + 1;
423
430
  var level = this._kvo_changeLevel || 0,
424
- cachedep, idx, dfunc, cache, func,
425
- log = SC.LOG_OBSERVERS && !(this.LOG_OBSERVING===NO);
431
+ cachedep, idx, dfunc, func,
432
+ log = SC.LOG_OBSERVERS && (this.LOG_OBSERVING !== NO);
433
+
434
+ // If any dependent keys contain this property in their path,
435
+ // invalidate the cache of the computed property and re-setup chain with
436
+ // new value.
437
+ var chains = this._kvo_property_chains;
438
+ if (chains) {
439
+ var keyChains = chains[key];
440
+
441
+ if (keyChains) {
442
+ this.beginPropertyChanges();
443
+ keyChains = SC.clone(keyChains);
444
+ keyChains.forEach(function(chain) {
445
+ // Invalidate the property that depends on the changed key.
446
+ chain.notifyPropertyDidChange();
447
+ });
448
+ this.endPropertyChanges();
449
+ }
450
+ }
426
451
 
427
- if (cache = this._kvo_cache) {
452
+ var cache = this._kvo_cache;
453
+ if (cache) {
428
454
 
429
455
  // clear any cached value
430
456
  if (!_keepCache) {
@@ -458,894 +484,1016 @@ SC.Observable = {
458
484
  var changes = this._kvo_changes ;
459
485
  if (!changes) changes = this._kvo_changes = SC.CoreSet.create() ;
460
486
  changes.add(key) ;
461
-
487
+
462
488
  if (suspended) {
463
- if (log) console.log("%@%@: will not notify observers because observing is suspended".fmt(SC.KVO_SPACES,this));
489
+ if (log) SC.Logger.log("%@%@: will not notify observers because observing is suspended".fmt(SC.KVO_SPACES,this));
464
490
  SC.Observers.objectHasPendingChanges(this) ;
465
491
  }
466
-
492
+
467
493
  // otherwise notify property observers immediately
468
494
  } else this._notifyPropertyObservers(key) ;
469
-
495
+
470
496
  return this ;
471
497
  },
472
498
 
473
499
  // ..........................................
474
500
  // DEPENDENT KEYS
475
- //
501
+ //
476
502
 
477
503
  /**
478
- Use this to indicate that one key changes if other keys it depends on
504
+ Use this to indicate that one key changes if other keys it depends on
479
505
  change. Pass the key that is dependent and additional keys it depends
480
- upon. You can either pass the additional keys inline as arguments or
506
+ upon. You can either pass the additional keys inline as arguments or
481
507
  in a single array.
482
-
508
+
483
509
  You generally do not call this method, but instead pass dependent keys to
484
510
  your property() method when you declare a computed property.
485
-
511
+
486
512
  You can call this method during your init to register the keys that should
487
- trigger a change notification for your computed properties.
488
-
513
+ trigger a change notification for your computed properties.
514
+
489
515
  @param {String} key the dependent key
490
- @param {Array|String} dependentKeys one or more dependent keys
516
+ @param {Array|String} dependentKeys one or more dependent keys
491
517
  @returns {Object} this
492
- */
518
+ */
493
519
  registerDependentKey: function(key, dependentKeys) {
494
- var dependents = this._kvo_dependents,
495
- func = this[key],
520
+ var dependents = this._kvo_dependents,
521
+ chainDependents = this._kvo_chain_dependents,
522
+ func = this[key],
496
523
  keys, idx, lim, dep, queue;
497
524
 
498
- // normalize input.
499
- if (typeof dependentKeys === "object" && (dependentKeys instanceof Array)) {
500
- keys = dependentKeys;
501
- lim = 0;
502
- } else {
503
- keys = arguments;
504
- lim = 1;
505
- }
506
- idx = keys.length;
525
+ // normalize input.
526
+ if (typeof dependentKeys === "object" && (dependentKeys instanceof Array)) {
527
+ keys = dependentKeys;
528
+ lim = 0;
529
+ } else {
530
+ keys = arguments;
531
+ lim = 1;
532
+ }
533
+ idx = keys.length;
534
+
535
+ // define dependents if not defined already.
536
+ if (!dependents) this._kvo_dependents = dependents = {} ;
537
+
538
+ // for each key, build array of dependents, add this key...
539
+ // note that we ignore the first argument since it is the key...
540
+ while(--idx >= lim) {
541
+ dep = keys[idx] ;
542
+
543
+ if (dep.indexOf('.') >= 0) {
544
+ SC._PropertyChain.createChain(dep, this, key).activate();
545
+ } else {
546
+ // add dependent key to dependents array of key it depends on
547
+ queue = dependents[dep] ;
548
+ if (!queue) { queue = dependents[dep] = [] ; }
549
+ queue.push(key) ;
550
+ }
551
+ }
552
+ },
507
553
 
508
- // define dependents if not defined already.
509
- if (!dependents) this._kvo_dependents = dependents = {} ;
554
+ /** @private
555
+ Register a property chain so that dependent keys can be invalidated
556
+ when a property on this object changes.
510
557
 
511
- // for each key, build array of dependents, add this key...
512
- // note that we ignore the first argument since it is the key...
513
- while(--idx >= lim) {
514
- dep = keys[idx] ;
558
+ @param {String} property the property on this object that invalidates the chain
559
+ @param {SC._PropertyChain} chain the chain to notify
560
+ */
561
+ registerDependentKeyWithChain: function(property, chain) {
562
+ var chains = this._chainsFor(property), next;
563
+ chains.add(chain);
564
+ },
515
565
 
516
- // add dependent key to dependents array of key it depends on
517
- queue = dependents[dep] ;
518
- if (!queue) queue = dependents[dep] = [] ;
519
- queue.push(key) ;
520
- }
521
- },
566
+ /** @private
567
+ Removes a property chain from the object.
522
568
 
523
- /** @private
524
-
525
- Helper method used by computeCachedDependents. Just loops over the
526
- array of dependent keys. If the passed function is cacheable, it will
527
- be added to the queue. Also, recursively call on each keys dependent
528
- keys.
529
-
530
- @param {Array} queue the queue to add functions to
531
- @param {Array} keys the array of dependent keys for this key
532
- @param {Hash} dependents the _kvo_dependents cache
533
- @param {SC.Set} seen already seen keys
534
- @returns {void}
535
- */
536
- _kvo_addCachedDependents: function(queue, keys, dependents, seen) {
537
- var idx = keys.length,
538
- func, key, deps ;
539
-
540
- while(--idx >= 0) {
541
- key = keys[idx];
569
+ @param {String} property the property on this object that invalidates the chain
570
+ @param {SC._PropertyChain} chain the chain to notify
571
+ */
572
+ removeDependentKeyWithChain: function(property, chain) {
573
+ var chains = this._chainsFor(property), next;
574
+ chains.remove(chain);
575
+
576
+ if (chains.get('length') === 0) {
577
+ delete this._kvo_property_chains[property];
578
+ }
579
+ },
580
+
581
+ /** @private
582
+ Returns an instance of SC.CoreSet in which to save SC._PropertyChains.
583
+
584
+ @param {String} property the property associated with the SC._PropertyChain
585
+ @returns {SC.CoreSet}
586
+ */
587
+ _chainsFor: function(property) {
588
+ this._kvo_property_chains = this._kvo_property_chains || {};
589
+ var chains = this._kvo_property_chains[property] || SC.CoreSet.create();
590
+ this._kvo_property_chains[property] = chains;
591
+
592
+ return chains;
593
+ },
594
+
595
+ /** @private
596
+
597
+ Helper method used by computeCachedDependents. Just loops over the
598
+ array of dependent keys. If the passed function is cacheable, it will
599
+ be added to the queue. Also, recursively call on each keys dependent
600
+ keys.
601
+
602
+ @param {Array} queue the queue to add functions to
603
+ @param {Array} keys the array of dependent keys for this key
604
+ @param {Hash} dependents the _kvo_dependents cache
605
+ @param {SC.Set} seen already seen keys
606
+ @returns {void}
607
+ */
608
+ _kvo_addCachedDependents: function(queue, keys, dependents, seen) {
609
+ var idx = keys.length,
610
+ func, key, deps ;
611
+
612
+ while(--idx >= 0) {
613
+ key = keys[idx];
614
+ seen.add(key);
615
+
616
+ // if the value for this key is a computed property, then add it to the
617
+ // set if it is cacheable, and process any of its dependent keys also.
618
+ func = this[key];
619
+ if (func && (func instanceof Function) && func.isProperty) {
620
+ if (func.isCacheable) queue.push(func); // handle this func
621
+ if ((deps = dependents[key]) && deps.length>0) { // and any dependents
622
+ this._kvo_addCachedDependents(queue, deps, dependents, seen);
623
+ }
624
+ }
625
+ }
626
+
627
+ },
628
+
629
+ /** @private
630
+
631
+ Called by set() whenever it needs to determine which cached dependent
632
+ keys to clear. Recursively searches dependent keys to determine all
633
+ cached property direcly or indirectly affected.
634
+
635
+ The return value is also saved for future reference
636
+
637
+ @param {String} key the key to compute
638
+ @returns {Array}
639
+ */
640
+ _kvo_computeCachedDependentsFor: function(key) {
641
+ var cached = this._kvo_cachedep,
642
+ dependents = this._kvo_dependents,
643
+ keys = dependents ? dependents[key] : null,
644
+ queue, seen ;
645
+ if (!cached) cached = this._kvo_cachedep = {};
646
+
647
+ // if there are no dependent keys, then just set and return null to avoid
648
+ // this mess again.
649
+ if (!keys || keys.length===0) return cached[key] = null;
650
+
651
+ // there are dependent keys, so we need to do the work to find out if
652
+ // any of them or their dependent keys are cached.
653
+ queue = cached[key] = [];
654
+ seen = SC._TMP_SEEN_SET = (SC._TMP_SEEN_SET || SC.CoreSet.create());
542
655
  seen.add(key);
543
-
544
- // if the value for this key is a computed property, then add it to the
545
- // set if it is cacheable, and process any of its dependent keys also.
546
- func = this[key];
547
- if (func && (func instanceof Function) && func.isProperty) {
548
- if (func.isCacheable) queue.push(func); // handle this func
549
- if ((deps = dependents[key]) && deps.length>0) { // and any dependents
550
- this._kvo_addCachedDependents(queue, deps, dependents, seen);
656
+ this._kvo_addCachedDependents(queue, keys, dependents, seen);
657
+ seen.clear(); // reset
658
+
659
+ if (queue.length === 0) queue = cached[key] = null ; // turns out nothing
660
+ return queue ;
661
+ },
662
+
663
+ // ..........................................
664
+ // OBSERVERS
665
+ //
666
+
667
+ _kvo_for: function(kvoKey, type) {
668
+ var ret = this[kvoKey] ;
669
+
670
+ if (!this._kvo_cloned) this._kvo_cloned = {} ;
671
+
672
+ // if the item does not exist, create it. Unless type is passed,
673
+ // assume array.
674
+ if (!ret) {
675
+ ret = this[kvoKey] = (type === undefined) ? [] : type.create();
676
+ this._kvo_cloned[kvoKey] = YES ;
677
+
678
+ // if item does exist but has not been cloned, then clone it. Note
679
+ // that all types must implement copy().0
680
+ } else if (!this._kvo_cloned[kvoKey]) {
681
+ ret = this[kvoKey] = ret.copy();
682
+ this._kvo_cloned[kvoKey] = YES;
683
+ }
684
+
685
+ return ret ;
686
+ },
687
+
688
+ /**
689
+ Adds an observer on a property.
690
+
691
+ This is the core method used to register an observer for a property.
692
+
693
+ Once you call this method, anytime the key's value is set, your observer
694
+ will be notified. Note that the observers are triggered anytime the
695
+ value is set, regardless of whether it has actually changed. Your
696
+ observer should be prepared to handle that.
697
+
698
+ You can also pass an optional context parameter to this method. The
699
+ context will be passed to your observer method whenever it is triggered.
700
+ Note that if you add the same target/method pair on a key multiple times
701
+ with different context parameters, your observer will only be called once
702
+ with the last context you passed.
703
+
704
+ Observer Methods
705
+ ---
706
+
707
+ Observer methods you pass should generally have the following signature if
708
+ you do not pass a "context" parameter:
709
+
710
+ fooDidChange: function(sender, key, value, rev);
711
+
712
+ The sender is the object that changed. The key is the property that
713
+ changes. The value property is currently reserved and unused. The rev
714
+ is the last property revision of the object when it changed, which you can
715
+ use to detect if the key value has really changed or not.
716
+
717
+ If you pass a "context" parameter, the context will be passed before the
718
+ revision like so:
719
+
720
+ fooDidChange: function(sender, key, value, context, rev);
721
+
722
+ Usually you will not need the value, context or revision parameters at
723
+ the end. In this case, it is common to write observer methods that take
724
+ only a sender and key value as parameters or, if you aren't interested in
725
+ any of these values, to write an observer that has no parameters at all.
726
+
727
+ @param {String} key the key to observer
728
+ @param {Object} target the target object to invoke
729
+ @param {String|Function} method the method to invoke.
730
+ @param {Object} context optional context
731
+ @returns {SC.Object} self
732
+ */
733
+ addObserver: function(key, target, method, context) {
734
+ var kvoKey, chain, chains, observers;
735
+
736
+ // normalize. if a function is passed to target, make it the method.
737
+ if (method === undefined) {
738
+ method = target; target = this ;
739
+ }
740
+ if (!target) target = this ;
741
+
742
+ if (typeof method === "string") method = target[method] ;
743
+ if (!method) throw "You must pass a method to addObserver()" ;
744
+
745
+ // Normalize key...
746
+ key = key.toString() ;
747
+ if (key.indexOf('.') >= 0) {
748
+
749
+ // create the chain and save it for later so we can tear it down if
750
+ // needed.
751
+ chain = SC._ChainObserver.createChain(this, key, target, method, context);
752
+ chain.masterTarget = target;
753
+ chain.masterMethod = method ;
754
+
755
+ // Save in set for chain observers.
756
+ this._kvo_for(SC.keyFor('_kvo_chains', key)).push(chain);
757
+
758
+ // Create observers if needed...
759
+ } else {
760
+
761
+ // Special case to support reduced properties. If the property
762
+ // key begins with '@' and its value is unknown, then try to get its
763
+ // value. This will configure the dependent keys if needed.
764
+ if ((this[key] === undefined) && (key.indexOf('@') === 0)) {
765
+ this.get(key) ;
551
766
  }
552
- }
553
- }
554
-
555
- },
556
-
557
- /** @private
558
-
559
- Called by set() whenever it needs to determine which cached dependent
560
- keys to clear. Recursively searches dependent keys to determine all
561
- cached property direcly or indirectly affected.
562
-
563
- The return value is also saved for future reference
564
-
565
- @param {String} key the key to compute
566
- @returns {Array}
567
- */
568
- _kvo_computeCachedDependentsFor: function(key) {
569
- var cached = this._kvo_cachedep,
570
- dependents = this._kvo_dependents,
571
- keys = dependents ? dependents[key] : null,
572
- queue, seen ;
573
- if (!cached) cached = this._kvo_cachedep = {};
574
-
575
- // if there are no dependent keys, then just set and return null to avoid
576
- // this mess again.
577
- if (!keys || keys.length===0) return cached[key] = null;
578
-
579
- // there are dependent keys, so we need to do the work to find out if
580
- // any of them or their dependent keys are cached.
581
- queue = cached[key] = [];
582
- seen = SC._TMP_SEEN_SET = (SC._TMP_SEEN_SET || SC.CoreSet.create());
583
- seen.add(key);
584
- this._kvo_addCachedDependents(queue, keys, dependents, seen);
585
- seen.clear(); // reset
586
-
587
- if (queue.length === 0) queue = cached[key] = null ; // turns out nothing
588
- return queue ;
589
- },
590
-
591
- // ..........................................
592
- // OBSERVERS
593
- //
594
-
595
- _kvo_for: function(kvoKey, type) {
596
- var ret = this[kvoKey] ;
597
-
598
- if (!this._kvo_cloned) this._kvo_cloned = {} ;
599
-
600
- // if the item does not exist, create it. Unless type is passed,
601
- // assume array.
602
- if (!ret) {
603
- ret = this[kvoKey] = (type === undefined) ? [] : type.create();
604
- this._kvo_cloned[kvoKey] = YES ;
605
-
606
- // if item does exist but has not been cloned, then clone it. Note
607
- // that all types must implement copy().0
608
- } else if (!this._kvo_cloned[kvoKey]) {
609
- ret = this[kvoKey] = ret.copy();
610
- this._kvo_cloned[kvoKey] = YES;
611
- }
612
-
613
- return ret ;
614
- },
615
767
 
616
- /**
617
- Adds an observer on a property.
618
-
619
- This is the core method used to register an observer for a property.
620
-
621
- Once you call this method, anytime the key's value is set, your observer
622
- will be notified. Note that the observers are triggered anytime the
623
- value is set, regardless of whether it has actually changed. Your
624
- observer should be prepared to handle that.
625
-
626
- You can also pass an optional context parameter to this method. The
627
- context will be passed to your observer method whenever it is triggered.
628
- Note that if you add the same target/method pair on a key multiple times
629
- with different context parameters, your observer will only be called once
630
- with the last context you passed.
631
-
632
- h2. Observer Methods
633
-
634
- Observer methods you pass should generally have the following signature if
635
- you do not pass a "context" parameter:
636
-
637
- {{{
638
- fooDidChange: function(sender, key, value, rev);
639
- }}}
640
-
641
- The sender is the object that changed. The key is the property that
642
- changes. The value property is currently reserved and unused. The rev
643
- is the last property revision of the object when it changed, which you can
644
- use to detect if the key value has really changed or not.
645
-
646
- If you pass a "context" parameter, the context will be passed before the
647
- revision like so:
648
-
649
- {{{
650
- fooDidChange: function(sender, key, value, context, rev);
651
- }}}
652
-
653
- Usually you will not need the value, context or revision parameters at
654
- the end. In this case, it is common to write observer methods that take
655
- only a sender and key value as parameters or, if you aren't interested in
656
- any of these values, to write an observer that has no parameters at all.
657
-
658
- @param key {String} the key to observer
659
- @param target {Object} the target object to invoke
660
- @param method {String|Function} the method to invoke.
661
- @param context {Object} optional context
662
- @returns {SC.Object} self
663
- */
664
- addObserver: function(key, target, method, context) {
665
-
666
- var kvoKey, chain, chains, observers;
667
-
668
- // normalize. if a function is passed to target, make it the method.
669
- if (method === undefined) {
670
- method = target; target = this ;
671
- }
672
- if (!target) target = this ;
673
-
674
- if (typeof method === "string") method = target[method] ;
675
- if (!method) throw "You must pass a method to addObserver()" ;
676
-
677
- // Normalize key...
678
- key = key.toString() ;
679
- if (key.indexOf('.') >= 0) {
680
-
681
- // create the chain and save it for later so we can tear it down if
682
- // needed.
683
- chain = SC._ChainObserver.createChain(this, key, target, method, context);
684
- chain.masterTarget = target;
685
- chain.masterMethod = method ;
686
-
687
- // Save in set for chain observers.
688
- this._kvo_for(SC.keyFor('_kvo_chains', key)).push(chain);
689
-
690
- // Create observers if needed...
691
- } else {
692
-
693
- // Special case to support reduced properties. If the property
694
- // key begins with '@' and its value is unknown, then try to get its
695
- // value. This will configure the dependent keys if needed.
696
- if ((this[key] === undefined) && (key.indexOf('@') === 0)) {
697
- this.get(key) ;
768
+ if (target === this) target = null ; // use null for observers only.
769
+ kvoKey = SC.keyFor('_kvo_observers', key);
770
+ this._kvo_for(kvoKey, SC.ObserverSet).add(target, method, context);
771
+ this._kvo_for('_kvo_observed_keys', SC.CoreSet).add(key) ;
698
772
  }
699
773
 
700
- if (target === this) target = null ; // use null for observers only.
701
- kvoKey = SC.keyFor('_kvo_observers', key);
702
- this._kvo_for(kvoKey, SC.ObserverSet).add(target, method, context);
703
- this._kvo_for('_kvo_observed_keys', SC.CoreSet).add(key) ;
704
- }
774
+ if (this.didAddObserver) this.didAddObserver(key, target, method);
775
+ return this;
776
+ },
705
777
 
706
- if (this.didAddObserver) this.didAddObserver(key, target, method);
707
- return this;
708
- },
778
+ /**
779
+ Remove an observer you have previously registered on this object. Pass
780
+ the same key, target, and method you passed to addObserver() and your
781
+ target will no longer receive notifications.
709
782
 
710
- /**
711
- Remove an observer you have previously registered on this object. Pass
712
- the same key, target, and method you passed to addObserver() and your
713
- target will no longer receive notifications.
714
-
715
- @returns {SC.Observable} reciever
716
- */
717
- removeObserver: function(key, target, method) {
718
-
719
- var kvoKey, chains, chain, observers, idx ;
720
-
721
- // normalize. if a function is passed to target, make it the method.
722
- if (method === undefined) {
723
- method = target; target = this ;
724
- }
725
- if (!target) target = this ;
726
-
727
- if (typeof method === "string") method = target[method] ;
728
- if (!method) throw "You must pass a method to removeObserver()" ;
729
-
730
- // if the key contains a '.', this is a chained observer.
731
- key = key.toString() ;
732
- if (key.indexOf('.') >= 0) {
733
-
734
- // try to find matching chains
735
- kvoKey = SC.keyFor('_kvo_chains', key);
736
- if (chains = this[kvoKey]) {
737
-
738
- // if chains have not been cloned yet, do so now.
739
- chains = this._kvo_for(kvoKey) ;
740
-
741
- // remove any chains
742
- idx = chains.length;
743
- while(--idx >= 0) {
744
- chain = chains[idx];
745
- if (chain && (chain.masterTarget===target) && (chain.masterMethod===method)) {
746
- chains[idx] = chain.destroyChain() ;
783
+ @param {String} key the key to observer
784
+ @param {Object} target the target object to invoke
785
+ @param {String|Function} method the method to invoke.
786
+ @returns {SC.Observable} reciever
787
+ */
788
+ removeObserver: function(key, target, method) {
789
+
790
+ var kvoKey, chains, chain, observers, idx ;
791
+
792
+ // normalize. if a function is passed to target, make it the method.
793
+ if (method === undefined) {
794
+ method = target; target = this ;
795
+ }
796
+ if (!target) target = this ;
797
+
798
+ if (typeof method === "string") method = target[method] ;
799
+ if (!method) throw "You must pass a method to removeObserver()" ;
800
+
801
+ // if the key contains a '.', this is a chained observer.
802
+ key = key.toString() ;
803
+ if (key.indexOf('.') >= 0) {
804
+
805
+ // try to find matching chains
806
+ kvoKey = SC.keyFor('_kvo_chains', key);
807
+ if (chains = this[kvoKey]) {
808
+
809
+ // if chains have not been cloned yet, do so now.
810
+ chains = this._kvo_for(kvoKey) ;
811
+
812
+ // remove any chains
813
+ idx = chains.length;
814
+ while(--idx >= 0) {
815
+ chain = chains[idx];
816
+ if (chain && (chain.masterTarget===target) && (chain.masterMethod===method)) {
817
+ chains[idx] = chain.destroyChain() ;
818
+ }
747
819
  }
748
820
  }
749
- }
750
-
751
- // otherwise, just like a normal observer.
752
- } else {
753
- if (target === this) target = null ; // use null for observers only.
754
- kvoKey = SC.keyFor('_kvo_observers', key) ;
755
- if (observers = this[kvoKey]) {
756
- // if observers have not been cloned yet, do so now
757
- observers = this._kvo_for(kvoKey) ;
758
- observers.remove(target, method) ;
759
- if (observers.targets <= 0) {
760
- this._kvo_for('_kvo_observed_keys', SC.CoreSet).remove(key);
821
+
822
+ // otherwise, just like a normal observer.
823
+ } else {
824
+ if (target === this) target = null ; // use null for observers only.
825
+ kvoKey = SC.keyFor('_kvo_observers', key) ;
826
+ if (observers = this[kvoKey]) {
827
+ // if observers have not been cloned yet, do so now
828
+ observers = this._kvo_for(kvoKey) ;
829
+ observers.remove(target, method) ;
830
+ if (observers.getMembers().length === 0) {
831
+ this._kvo_for('_kvo_observed_keys', SC.CoreSet).remove(key);
832
+ }
761
833
  }
762
834
  }
763
- }
764
835
 
765
- if (this.didRemoveObserver) this.didRemoveObserver(key, target, method);
766
- return this;
767
- },
768
-
769
- /**
770
- Returns YES if the object currently has observers registered for a
771
- particular key. You can use this method to potentially defer performing
772
- an expensive action until someone begins observing a particular property
773
- on the object.
774
-
775
- @param {String} key key to check
776
- @returns {Boolean}
777
- */
778
- hasObserverFor: function(key) {
779
- SC.Observers.flush(this) ; // hookup as many observers as possible.
780
-
781
- var observers = this[SC.keyFor('_kvo_observers', key)],
782
- locals = this[SC.keyFor('_kvo_local', key)],
783
- members ;
784
-
785
- if (locals && locals.length>0) return YES ;
786
- if (observers && observers.getMembers().length>0) return YES ;
787
- return NO ;
788
- },
836
+ if (this.didRemoveObserver) this.didRemoveObserver(key, target, method);
837
+ return this;
838
+ },
789
839
 
790
- /**
791
- This method will register any observers and computed properties saved on
792
- the object. Normally you do not need to call this method youself. It
793
- is invoked automatically just before property notifications are sent and
794
- from the init() method of SC.Object. You may choose to call this
795
- from your own initialization method if you are using SC.Observable in
796
- a non-SC.Object-based object.
797
-
798
- This method looks for several private variables, which you can setup,
799
- to initialize:
800
-
801
- - _observers: this should contain an array of key names for observers
802
- you need to configure.
803
-
804
- - _bindings: this should contain an array of key names that configure
805
- bindings.
806
-
807
- - _properties: this should contain an array of key names for computed
808
- properties.
809
-
810
- @returns {Object} this
811
- */
812
- initObservable: function() {
813
- if (this._observableInited) return ;
814
- this._observableInited = YES ;
815
-
816
- var loc, keys, key, value, observer, propertyPaths, propertyPathsLength,
817
- len, ploc, path, dotIndex, root, propertyKey, keysLen;
818
-
819
- // Loop through observer functions and register them
820
- if (keys = this._observers) {
821
- len = keys.length ;
822
- for(loc=0;loc<len;loc++) {
823
- key = keys[loc]; observer = this[key] ;
824
- propertyPaths = observer.propertyPaths ;
825
- propertyPathsLength = (propertyPaths) ? propertyPaths.length : 0 ;
826
- for(ploc=0;ploc<propertyPathsLength;ploc++) {
827
- path = propertyPaths[ploc] ;
828
- dotIndex = path.indexOf('.') ;
829
- // handle most common case, observing a local property
830
- if (dotIndex < 0) {
831
- this.addObserver(path, this, observer) ;
832
-
833
- // next most common case, use a chained observer
834
- } else if (path.indexOf('*') === 0) {
835
- this.addObserver(path.slice(1), this, observer) ;
836
-
837
- // otherwise register the observer in the observers queue. This
838
- // will add the observer now or later when the named path becomes
839
- // available.
840
- } else {
841
- root = null ;
842
-
843
- // handle special cases for observers that look to the local root
844
- if (dotIndex === 0) {
845
- root = this; path = path.slice(1) ;
846
- } else if (dotIndex===4 && path.slice(0,5) === 'this.') {
847
- root = this; path = path.slice(5) ;
848
- } else if (dotIndex<0 && path.length===4 && path === 'this') {
849
- root = this; path = '';
840
+ /**
841
+ Returns YES if the object currently has observers registered for a
842
+ particular key. You can use this method to potentially defer performing
843
+ an expensive action until someone begins observing a particular property
844
+ on the object.
845
+
846
+ @param {String} key key to check
847
+ @returns {Boolean}
848
+ */
849
+ hasObserverFor: function(key) {
850
+ SC.Observers.flush(this) ; // hookup as many observers as possible.
851
+
852
+ var observers = this[SC.keyFor('_kvo_observers', key)],
853
+ locals = this[SC.keyFor('_kvo_local', key)],
854
+ members ;
855
+
856
+ if (locals && locals.length>0) return YES ;
857
+ if (observers && observers.getMembers().length > 0) return YES ;
858
+ return NO ;
859
+ },
860
+
861
+ /**
862
+ This method will register any observers and computed properties saved on
863
+ the object. Normally you do not need to call this method youself. It
864
+ is invoked automatically just before property notifications are sent and
865
+ from the init() method of SC.Object. You may choose to call this
866
+ from your own initialization method if you are using SC.Observable in
867
+ a non-SC.Object-based object.
868
+
869
+ This method looks for several private variables, which you can setup,
870
+ to initialize:
871
+
872
+ - _observers: this should contain an array of key names for observers
873
+ you need to configure.
874
+
875
+ - _bindings: this should contain an array of key names that configure
876
+ bindings.
877
+
878
+ - _properties: this should contain an array of key names for computed
879
+ properties.
880
+
881
+ @returns {Object} this
882
+ */
883
+ initObservable: function() {
884
+ if (this._observableInited) return ;
885
+ this._observableInited = YES ;
886
+
887
+ var loc, keys, key, value, observer, propertyPaths, propertyPathsLength,
888
+ len, ploc, path, dotIndex, root, propertyKey, keysLen;
889
+
890
+ // Loop through observer functions and register them
891
+ if (keys = this._observers) {
892
+ len = keys.length ;
893
+ for(loc=0;loc<len;loc++) {
894
+ key = keys[loc]; observer = this[key] ;
895
+ propertyPaths = observer.propertyPaths ;
896
+ propertyPathsLength = (propertyPaths) ? propertyPaths.length : 0 ;
897
+ for(ploc=0;ploc<propertyPathsLength;ploc++) {
898
+ path = propertyPaths[ploc] ;
899
+ dotIndex = path.indexOf('.') ;
900
+ // handle most common case, observing a local property
901
+ if (dotIndex < 0) {
902
+ this.addObserver(path, this, observer) ;
903
+
904
+ // next most common case, use a chained observer
905
+ } else if (path.indexOf('*') === 0) {
906
+ this.addObserver(path.slice(1), this, observer) ;
907
+
908
+ // otherwise register the observer in the observers queue. This
909
+ // will add the observer now or later when the named path becomes
910
+ // available.
911
+ } else {
912
+ root = null ;
913
+
914
+ // handle special cases for observers that look to the local root
915
+ if (dotIndex === 0) {
916
+ root = this; path = path.slice(1) ;
917
+ } else if (dotIndex===4 && path.slice(0,5) === 'this.') {
918
+ root = this; path = path.slice(5) ;
919
+ } else if (dotIndex<0 && path.length===4 && path === 'this') {
920
+ root = this; path = '';
921
+ }
922
+
923
+ SC.Observers.addObserver(path, this, observer, root);
850
924
  }
851
-
852
- SC.Observers.addObserver(path, this, observer, root);
853
925
  }
854
926
  }
855
927
  }
856
- }
857
928
 
858
- // Add Bindings
859
- this.bindings = []; // will be filled in by the bind() method.
860
- if (keys = this._bindings) {
861
- for(loc=0, keysLen = keys.length; loc < keysLen;loc++) {
862
- // get propertyKey
863
- key = keys[loc] ; value = this[key] ;
864
- propertyKey = key.slice(0,-7) ; // contentBinding => content
865
- this[key] = this.bind(propertyKey, value) ;
929
+ // Add Bindings
930
+ this.bindings = []; // will be filled in by the bind() method.
931
+ if (keys = this._bindings) {
932
+ for(loc=0, keysLen = keys.length; loc < keysLen;loc++) {
933
+ // get propertyKey
934
+ key = keys[loc] ; value = this[key] ;
935
+ propertyKey = key.slice(0,-7) ; // contentBinding => content
936
+ this[key] = this.bind(propertyKey, value) ;
937
+ }
866
938
  }
867
- }
868
939
 
869
- // Add Properties
870
- if (keys = this._properties) {
871
- for(loc=0, keysLen = keys.length; loc<keysLen;loc++) {
872
- key = keys[loc];
873
- if (value = this[key]) {
940
+ // Add Properties
941
+ if (keys = this._properties) {
942
+ for(loc=0, keysLen = keys.length; loc<keysLen;loc++) {
943
+ key = keys[loc];
944
+ if (value = this[key]) {
874
945
 
875
- // activate cacheable only if needed for perf reasons
876
- if (value.isCacheable) this._kvo_cacheable = YES;
946
+ // activate cacheable only if needed for perf reasons
947
+ if (value.isCacheable) this._kvo_cacheable = YES;
877
948
 
878
- // register dependent keys
879
- if (value.dependentKeys && (value.dependentKeys.length>0)) {
880
- this.registerDependentKey(key, value.dependentKeys) ;
949
+ // register dependent keys
950
+ if (value.dependentKeys && (value.dependentKeys.length>0)) {
951
+ this.registerDependentKey(key, value.dependentKeys) ;
952
+ }
881
953
  }
882
954
  }
883
955
  }
884
- }
885
-
886
- },
887
-
888
- // ..........................................
889
- // NOTIFICATION
890
- //
891
956
 
892
- /**
893
- Returns an array with all of the observers registered for the specified
894
- key. This is intended for debugging purposes only. You generally do not
895
- want to rely on this method for production code.
896
-
897
- @params key {String} the key to evaluate
957
+ },
958
+
959
+ // ..........................................
960
+ // NOTIFICATION
961
+ //
962
+
963
+ /**
964
+ Returns an array with all of the observers registered for the specified
965
+ key. This is intended for debugging purposes only. You generally do not
966
+ want to rely on this method for production code.
967
+
968
+ @param {String} key the key to evaluate
898
969
  @returns {Array} array of Observer objects, describing the observer.
899
970
  */
900
971
  observersForKey: function(key) {
901
- var observers = this._kvo_for('_kvo_observers', key) ;
902
- return observers.getMembers() || [] ;
972
+ SC.Observers.flush(this) ; // hookup as many observers as possible.
973
+
974
+ var observers = this[SC.keyFor('_kvo_observers', key)];
975
+ return observers ? observers.getMembers() : [];
903
976
  },
904
-
905
- // this private method actually notifies the observers for any keys in the
906
- // observer queue. If you pass a key it will be added to the queue.
907
- _notifyPropertyObservers: function(key) {
908
977
 
909
- if (!this._observableInited) this.initObservable() ;
910
-
911
- SC.Observers.flush(this) ; // hookup as many observers as possible.
978
+ // this private method actually notifies the observers for any keys in the
979
+ // observer queue. If you pass a key it will be added to the queue.
980
+ _notifyPropertyObservers: function(key) {
981
+ if (!this._observableInited) this.initObservable() ;
912
982
 
913
- var log = SC.LOG_OBSERVERS && !(this.LOG_OBSERVING===NO),
914
- observers, changes, dependents, starObservers, idx, keys, rev,
915
- members, membersLength, member, memberLoc, target, method, loc, func,
916
- context, spaces, cache ;
983
+ SC.Observers.flush(this) ; // hookup as many observers as possible.
917
984
 
918
- if (log) {
919
- spaces = SC.KVO_SPACES = (SC.KVO_SPACES || '') + ' ';
920
- console.log('%@%@: notifying observers after change to key "%@"'.fmt(spaces, this, key));
921
- }
922
-
923
- // Get any starObservers -- they will be notified of all changes.
924
- starObservers = this['_kvo_observers_*'] ;
925
-
926
- // prevent notifications from being sent until complete
927
- this._kvo_changeLevel = (this._kvo_changeLevel || 0) + 1;
928
-
929
- // keep sending notifications as long as there are changes
930
- while(((changes = this._kvo_changes) && (changes.length > 0)) || key) {
931
-
932
- // increment revision
933
- rev = ++this.propertyRevision ;
934
-
935
- // save the current set of changes and swap out the kvo_changes so that
936
- // any set() calls by observers will be saved in a new set.
937
- if (!changes) changes = SC.CoreSet.create() ;
938
- this._kvo_changes = null ;
939
-
940
- // Add the passed key to the changes set. If a '*' was passed, then
941
- // add all keys in the observers to the set...
942
- // once finished, clear the key so the loop will end.
943
- if (key === '*') {
944
- changes.add('*') ;
945
- changes.addEach(this._kvo_for('_kvo_observed_keys', SC.CoreSet));
946
-
947
- } else if (key) changes.add(key) ;
948
-
949
- // Now go through the set and add all dependent keys...
950
- if (dependents = this._kvo_dependents) {
951
-
952
- // NOTE: each time we loop, we check the changes length, this
953
- // way any dependent keys added to the set will also be evaluated...
954
- for(idx=0;idx<changes.length;idx++) {
955
- key = changes[idx] ;
956
- keys = dependents[key] ;
957
-
958
- // for each dependent key, add to set of changes. Also, if key
959
- // value is a cacheable property, clear the cached value...
960
- if (keys && (loc = keys.length)) {
961
- if (log) {
962
- console.log("%@...including dependent keys for %@: %@".fmt(spaces, key, keys));
963
- }
964
- cache = this._kvo_cache;
965
- if (!cache) cache = this._kvo_cache = {};
966
- while(--loc >= 0) {
967
- changes.add(key = keys[loc]);
968
- if (func = this[key]) {
969
- this[func.cacheKey] = undefined;
970
- cache[func.cacheKey] = cache[func.lastSetValueKey] = undefined;
971
- } // if (func=)
972
- } // while (--loc)
973
- } // if (keys &&
974
- } // for(idx...
975
- } // if (dependents...)
976
-
977
- // now iterate through all changed keys and notify observers.
978
- while(changes.length > 0) {
979
- key = changes.pop() ; // the changed key
980
-
981
- // find any observers and notify them...
982
- observers = this[SC.keyFor('_kvo_observers', key)];
983
- if (observers) {
984
- members = observers.getMembers() ;
985
- membersLength = members.length ;
986
- for(memberLoc=0;memberLoc < membersLength; memberLoc++) {
987
- member = members[memberLoc] ;
988
- if (member[3] === rev) continue ; // skip notified items.
989
-
990
- target = member[0] || this;
991
- method = member[1] ;
992
- context = member[2];
993
- member[3] = rev;
994
-
995
- if (log) console.log('%@...firing observer on %@ for key "%@"'.fmt(spaces, target, key));
996
- if (context !== undefined) {
997
- method.call(target, this, key, null, context, rev);
998
- } else {
999
- method.call(target, this, key, null, rev) ;
985
+ var log = SC.LOG_OBSERVERS && !(this.LOG_OBSERVING===NO),
986
+ observers, changes, dependents, starObservers, idx, keys, rev,
987
+ members, membersLength, member, memberLoc, target, method, loc, func,
988
+ context, spaces, cache ;
989
+
990
+ if (log) {
991
+ spaces = SC.KVO_SPACES = (SC.KVO_SPACES || '') + ' ';
992
+ SC.Logger.log('%@%@: notifying observers after change to key "%@"'.fmt(spaces, this, key));
993
+ }
994
+
995
+ // Get any starObservers -- they will be notified of all changes.
996
+ starObservers = this['_kvo_observers_*'] ;
997
+
998
+ // prevent notifications from being sent until complete
999
+ this._kvo_changeLevel = (this._kvo_changeLevel || 0) + 1;
1000
+
1001
+ // keep sending notifications as long as there are changes
1002
+ while(((changes = this._kvo_changes) && (changes.length > 0)) || key) {
1003
+
1004
+ // increment revision
1005
+ rev = ++this.propertyRevision ;
1006
+
1007
+ // save the current set of changes and swap out the kvo_changes so that
1008
+ // any set() calls by observers will be saved in a new set.
1009
+ if (!changes) changes = SC.CoreSet.create() ;
1010
+ this._kvo_changes = null ;
1011
+
1012
+ // Add the passed key to the changes set. If a '*' was passed, then
1013
+ // add all keys in the observers to the set...
1014
+ // once finished, clear the key so the loop will end.
1015
+ if (key === '*') {
1016
+ changes.add('*') ;
1017
+ changes.addEach(this._kvo_for('_kvo_observed_keys', SC.CoreSet));
1018
+
1019
+ } else if (key) changes.add(key) ;
1020
+
1021
+ // Now go through the set and add all dependent keys...
1022
+ if (dependents = this._kvo_dependents) {
1023
+
1024
+ // NOTE: each time we loop, we check the changes length, this
1025
+ // way any dependent keys added to the set will also be evaluated...
1026
+ for(idx=0;idx<changes.length;idx++) {
1027
+ key = changes[idx] ;
1028
+ keys = dependents[key] ;
1029
+
1030
+ // for each dependent key, add to set of changes. Also, if key
1031
+ // value is a cacheable property, clear the cached value...
1032
+ if (keys && (loc = keys.length)) {
1033
+ if (log) {
1034
+ SC.Logger.log("%@...including dependent keys for %@: %@".fmt(spaces, key, keys));
1035
+ }
1036
+ cache = this._kvo_cache;
1037
+ if (!cache) cache = this._kvo_cache = {};
1038
+ while(--loc >= 0) {
1039
+ changes.add(key = keys[loc]);
1040
+ if (func = this[key]) {
1041
+ this[func.cacheKey] = undefined;
1042
+ cache[func.cacheKey] = cache[func.lastSetValueKey] = undefined;
1043
+ } // if (func=)
1044
+ } // while (--loc)
1045
+ } // if (keys &&
1046
+ } // for(idx...
1047
+ } // if (dependents...)
1048
+
1049
+ // now iterate through all changed keys and notify observers.
1050
+ while(changes.length > 0) {
1051
+ key = changes.pop() ; // the changed key
1052
+
1053
+ // find any observers and notify them...
1054
+ observers = this[SC.keyFor('_kvo_observers', key)];
1055
+
1056
+ if (observers) {
1057
+ // We need to clone the 'members' structure here in case any of the
1058
+ // observers we're about to notify happen to remove observers for
1059
+ // this key, which would mutate the structure underneath us.
1060
+ // (Cloning it rather than mutating gives us a clear policy: if you
1061
+ // were registered as an observer at the time notification begins,
1062
+ // you will be notified, regardless of whether you're removed as an
1063
+ // observer during that round of notification. Similarly, if you're
1064
+ // added as an observer during the notification round by another
1065
+ // observer, you will not be notified until the next time.)
1066
+ members = SC.clone(observers.getMembers()) ;
1067
+ membersLength = members.length ;
1068
+ for(memberLoc=0;memberLoc < membersLength; memberLoc++) {
1069
+ member = members[memberLoc] ;
1070
+
1071
+ if (member[3] === rev) continue ; // skip notified items.
1072
+
1073
+ if(!member[1]) SC.Logger.log(member);
1074
+
1075
+ target = member[0] || this;
1076
+ method = member[1] ;
1077
+ context = member[2];
1078
+ member[3] = rev;
1079
+
1080
+ if (log) SC.Logger.log('%@...firing observer on %@ for key "%@"'.fmt(spaces, target, key));
1081
+ if (context !== undefined) {
1082
+ method.call(target, this, key, null, context, rev);
1083
+ } else {
1084
+ method.call(target, this, key, null, rev) ;
1085
+ }
1000
1086
  }
1001
1087
  }
1002
- }
1003
1088
 
1004
- // look for local observers. Local observers are added by SC.Object
1005
- // as an optimization to avoid having to add observers for every
1006
- // instance when you are just observing your local object.
1007
- members = this[SC.keyFor('_kvo_local', key)];
1008
- if (members) {
1009
- membersLength = members.length ;
1010
- for(memberLoc=0;memberLoc<membersLength;memberLoc++) {
1011
- member = members[memberLoc];
1012
- method = this[member] ; // try to find observer function
1013
- if (method) {
1014
- if (log) console.log('%@...firing local observer %@.%@ for key "%@"'.fmt(spaces, this, member, key));
1015
- method.call(this, this, key, null, rev);
1089
+ // look for local observers. Local observers are added by SC.Object
1090
+ // as an optimization to avoid having to add observers for every
1091
+ // instance when you are just observing your local object.
1092
+ members = this[SC.keyFor('_kvo_local', key)];
1093
+ if (members) {
1094
+ // Note: Since, unlike above, we don't expect local observers to be
1095
+ // removed in general, we will not clone 'members'.
1096
+ membersLength = members.length ;
1097
+ for(memberLoc=0;memberLoc<membersLength;memberLoc++) {
1098
+ member = members[memberLoc];
1099
+ method = this[member] ; // try to find observer function
1100
+ if (method) {
1101
+ if (log) SC.Logger.log('%@...firing local observer %@.%@ for key "%@"'.fmt(spaces, this, member, key));
1102
+ method.call(this, this, key, null, rev);
1103
+ }
1016
1104
  }
1017
1105
  }
1018
- }
1019
-
1020
- // if there are starObservers, do the same thing for them
1021
- if (starObservers && key !== '*') {
1022
- members = starObservers.getMembers() ;
1023
- membersLength = members.length ;
1024
- for(memberLoc=0;memberLoc < membersLength; memberLoc++) {
1025
- member = members[memberLoc] ;
1026
- target = member[0] || this;
1027
- method = member[1] ;
1028
- context = member[2] ;
1029
-
1030
- if (log) console.log('%@...firing * observer on %@ for key "%@"'.fmt(spaces, target, key));
1031
- if (context !== undefined) {
1032
- method.call(target, this, key, null, context, rev);
1033
- } else {
1034
- method.call(target, this, key, null, rev) ;
1106
+
1107
+ // if there are starObservers, do the same thing for them
1108
+ if (starObservers && key !== '*') {
1109
+ // We clone the structure per the justification, above, for regular
1110
+ // observers.
1111
+ members = SC.clone(starObservers.getMembers()) ;
1112
+ membersLength = members.length ;
1113
+ for(memberLoc=0;memberLoc < membersLength; memberLoc++) {
1114
+ member = members[memberLoc] ;
1115
+ target = member[0] || this;
1116
+ method = member[1] ;
1117
+ context = member[2] ;
1118
+
1119
+ if (log) SC.Logger.log('%@...firing * observer on %@ for key "%@"'.fmt(spaces, target, key));
1120
+ if (context !== undefined) {
1121
+ method.call(target, this, key, null, context, rev);
1122
+ } else {
1123
+ method.call(target, this, key, null, rev) ;
1124
+ }
1035
1125
  }
1036
1126
  }
1037
- }
1038
1127
 
1039
- // if there is a default property observer, call that also
1040
- if (this.propertyObserver) {
1041
- if (log) console.log('%@...firing %@.propertyObserver for key "%@"'.fmt(spaces, this, key));
1042
- this.propertyObserver(this, key, null, rev);
1043
- }
1044
- } // while(changes.length>0)
1045
-
1046
- // changes set should be empty. release it for reuse
1047
- if (changes) changes.destroy() ;
1048
-
1049
- // key is no longer needed; clear it to avoid infinite loops
1050
- key = null ;
1051
-
1052
- } // while (changes)
1053
-
1054
- // done with loop, reduce change level so that future sets can resume
1055
- this._kvo_changeLevel = (this._kvo_changeLevel || 1) - 1;
1056
-
1057
- if (log) SC.KVO_SPACES = spaces.slice(0, -2);
1058
-
1059
- return YES ; // finished successfully
1060
- },
1128
+ // if there is a default property observer, call that also
1129
+ if (this.propertyObserver) {
1130
+ if (log) SC.Logger.log('%@...firing %@.propertyObserver for key "%@"'.fmt(spaces, this, key));
1131
+ this.propertyObserver(this, key, null, rev);
1132
+ }
1133
+ } // while(changes.length>0)
1061
1134
 
1062
- // ..........................................
1063
- // BINDINGS
1064
- //
1065
-
1066
- /**
1067
- Manually add a new binding to an object. This is the same as doing
1068
- the more familiar propertyBinding: 'property.path' approach.
1069
-
1070
- @param {String} toKey the key to bind to
1071
- @param {Object} target target or property path to bind from
1072
- @param {String|Function} method method for target to bind from
1073
- @returns {SC.Binding} new binding instance
1074
- */
1075
- bind: function(toKey, target, method) {
1076
-
1077
- var binding , pathType;
1078
-
1079
- // normalize...
1080
- if (method !== undefined) target = [target, method];
1081
-
1082
- // if a string or array (i.e. tuple) is passed, convert this into a
1083
- // binding. If a binding default was provided, use that.
1084
- pathType = typeof target;
1085
-
1086
- if (pathType === "string" || (pathType === "object" && (target instanceof Array))) {
1087
- binding = this[toKey + 'BindingDefault'] || SC.Binding;
1088
- binding = binding.beget().from(target) ;
1089
- } else binding = target ;
1090
-
1091
- // finish configuring the binding and then connect it.
1092
- binding = binding.to(toKey, this).connect() ;
1093
- this.bindings.push(binding) ;
1094
-
1095
- return binding ;
1096
- },
1097
-
1098
- /**
1099
- didChangeFor makes it easy for you to verify that you haven't seen any
1100
- changed values. You need to use this if your method observes multiple
1101
- properties. To use this, call it like this:
1102
-
1103
- if (this.didChangeFor('render','height','width')) {
1104
- // DO SOMETHING HERE IF CHANGED.
1105
- }
1106
- */
1107
- didChangeFor: function(context) {
1108
- var valueCache, revisionCache, seenValues, seenRevisions, ret,
1109
- currentRevision, idx, key, value;
1110
- context = SC.hashFor(context) ; // get a hash key we can use in caches.
1111
-
1112
- // setup caches...
1113
- valueCache = this._kvo_didChange_valueCache ;
1114
- if (!valueCache) valueCache = this._kvo_didChange_valueCache = {};
1115
- revisionCache = this._kvo_didChange_revisionCache;
1116
- if (!revisionCache) revisionCache=this._kvo_didChange_revisionCache={};
1117
-
1118
- // get the cache of values and revisions already seen in this context
1119
- seenValues = valueCache[context] || {} ;
1120
- seenRevisions = revisionCache[context] || {} ;
1121
-
1122
- // prepare too loop!
1123
- ret = false ;
1124
- currentRevision = this._kvo_revision || 0 ;
1125
- idx = arguments.length ;
1126
- while(--idx >= 1) { // NB: loop only to 1 to ignore context arg.
1127
- key = arguments[idx];
1128
-
1129
- // has the kvo revision changed since the last time we did this?
1130
- if (seenRevisions[key] != currentRevision) {
1131
- // yes, check the value with the last seen value
1132
- value = this.get(key) ;
1133
- if (seenValues[key] !== value) {
1134
- ret = true ; // did change!
1135
- seenValues[key] = value;
1135
+ // changes set should be empty. release it for reuse
1136
+ if (changes) changes.destroy() ;
1137
+
1138
+ // key is no longer needed; clear it to avoid infinite loops
1139
+ key = null ;
1140
+
1141
+ } // while (changes)
1142
+
1143
+ // done with loop, reduce change level so that future sets can resume
1144
+ this._kvo_changeLevel = (this._kvo_changeLevel || 1) - 1;
1145
+
1146
+ if (log) SC.KVO_SPACES = spaces.slice(0, -2);
1147
+
1148
+ return YES ; // finished successfully
1149
+ },
1150
+
1151
+ // ..........................................
1152
+ // BINDINGS
1153
+ //
1154
+
1155
+ /**
1156
+ Manually add a new binding to an object. This is the same as doing
1157
+ the more familiar propertyBinding: 'property.path' approach.
1158
+
1159
+ @param {String} toKey the key to bind to
1160
+ @param {Object} target target or property path to bind from
1161
+ @param {String|Function} method method for target to bind from
1162
+ @returns {SC.Binding} new binding instance
1163
+ */
1164
+ bind: function(toKey, target, method) {
1165
+
1166
+ var binding , pathType;
1167
+
1168
+ // normalize...
1169
+ if (method !== undefined) target = [target, method];
1170
+
1171
+ pathType = typeof target;
1172
+
1173
+ // if a string or array (i.e. tuple) is passed, convert this into a
1174
+ // binding. If a binding default was provided, use that.
1175
+ if (pathType === "string" || (pathType === "object" && (target instanceof Array))) {
1176
+ binding = this[toKey + 'BindingDefault'] || SC.Binding;
1177
+ binding = binding.beget().from(target) ;
1178
+ } else {
1179
+ // If a binding object was provided, clone it so that it gets
1180
+ // connected again if the original example binding was already
1181
+ // connected.
1182
+ binding = target.beget() ;
1183
+ }
1184
+
1185
+ // finish configuring the binding and then connect it.
1186
+ binding = binding.to(toKey, this).connect() ;
1187
+ this.bindings.push(binding) ;
1188
+
1189
+ return binding ;
1190
+ },
1191
+
1192
+ /**
1193
+ didChangeFor allows you to determine if a property has changed since the
1194
+ last time the method was called. You must pass a unique context as the
1195
+ first parameter (so didChangeFor can identify which method is calling it),
1196
+ followed by a list of keys that should be checked for changes.
1197
+
1198
+ For example, in your render method you might pass the following context:
1199
+ if (this.didChangeFor('render','height','width')) {
1200
+ // Only render if changed
1201
+ }
1202
+
1203
+ In your view's update method, you might instead pass 'update':
1204
+
1205
+ if (this.didChangeFor('update', 'height', 'width')) {
1206
+ // Only update height and width properties
1207
+ }
1208
+
1209
+ This method works by comparing property revision counts. Every time a
1210
+ property changes, an internal counter is incremented. When didChangeFor is
1211
+ invoked, the current revision count of the property is compared to the
1212
+ revision count from the last time this method was called.
1213
+
1214
+ @param {String|Object} context a unique identifier
1215
+ @param {String…} propertyNames one or more property names
1216
+ */
1217
+ didChangeFor: function(context) {
1218
+ var valueCache, revisionCache, seenValues, seenRevisions, ret,
1219
+ currentRevision, idx, key, value;
1220
+ context = SC.hashFor(context) ; // get a hash key we can use in caches.
1221
+
1222
+ // setup caches...
1223
+ valueCache = this._kvo_didChange_valueCache ;
1224
+ if (!valueCache) valueCache = this._kvo_didChange_valueCache = {};
1225
+ revisionCache = this._kvo_didChange_revisionCache;
1226
+ if (!revisionCache) revisionCache=this._kvo_didChange_revisionCache={};
1227
+
1228
+ // get the cache of values and revisions already seen in this context
1229
+ seenValues = valueCache[context] || {} ;
1230
+ seenRevisions = revisionCache[context] || {} ;
1231
+
1232
+ // prepare too loop!
1233
+ ret = false ;
1234
+ currentRevision = this._kvo_revision || 0 ;
1235
+ idx = arguments.length ;
1236
+ while(--idx >= 1) { // NB: loop only to 1 to ignore context arg.
1237
+ key = arguments[idx];
1238
+
1239
+ // has the kvo revision changed since the last time we did this?
1240
+ if (seenRevisions[key] != currentRevision) {
1241
+ // yes, check the value with the last seen value
1242
+ value = this.get(key) ;
1243
+ if (seenValues[key] !== value) {
1244
+ ret = true ; // did change!
1245
+ seenValues[key] = value;
1246
+ }
1136
1247
  }
1248
+ seenRevisions[key] = currentRevision;
1137
1249
  }
1138
- seenRevisions[key] = currentRevision;
1139
- }
1140
-
1141
- valueCache[context] = seenValues ;
1142
- revisionCache[context] = seenRevisions ;
1143
- return ret ;
1144
- },
1145
1250
 
1251
+ valueCache[context] = seenValues ;
1252
+ revisionCache[context] = seenRevisions ;
1253
+ return ret ;
1254
+ },
1146
1255
 
1256
+ /**
1257
+ Sets the property only if the passed value is different from the
1258
+ current value. Depending on how expensive a get() is on this property,
1259
+ this may be more efficient.
1260
+
1261
+ NOTE: By default, the set() method will not set the value unless it has
1262
+ changed. However, this check can skipped by setting .property().idempotent(NO)
1263
+ setIfChanged() may be useful in this case.
1264
+
1265
+ @param {String|Hash} key the key to change
1266
+ @param {Object} value the value to change
1267
+ @returns {SC.Observable}
1268
+ */
1269
+ setIfChanged: function(key, value) {
1270
+ if(value === undefined && SC.typeOf(key) === SC.T_HASH) {
1271
+ var hash = key;
1272
+
1273
+ for(key in hash) {
1274
+ if (!hash.hasOwnProperty(key)) continue;
1275
+ this.setIfChanged(key, hash[key]);
1276
+ }
1147
1277
 
1148
- /**
1149
- Sets the property only if the passed value is different from the
1150
- current value. Depending on how expensive a get() is on this property,
1151
- this may be more efficient.
1278
+ return this;
1279
+ }
1152
1280
 
1153
- NOTE: By default, the set() method will not set the value unless it has
1154
- changed. However, this check can skipped by setting .property().indempotent(NO)
1155
- setIfChanged() may be useful in this case.
1281
+ return (this.get(key) !== value) ? this.set(key, value) : this ;
1282
+ },
1156
1283
 
1157
- @param key {String} the key to change
1158
- @param value {Object} the value to change
1159
- @returns {SC.Observable}
1160
- */
1161
- setIfChanged: function(key, value) {
1162
- return (this.get(key) !== value) ? this.set(key, value) : this ;
1163
- },
1164
-
1165
- /**
1166
- Navigates the property path, returning the value at that point.
1167
-
1168
- If any object in the path is undefined, returns undefined.
1169
- */
1170
- getPath: function(path) {
1171
- var tuple = SC.tupleForPropertyPath(path, this) ;
1172
- if (tuple === null || tuple[0] === null) return undefined ;
1173
- return tuple[0].get(tuple[1]) ;
1174
- },
1175
-
1176
- /**
1177
- Navigates the property path, finally setting the value.
1178
-
1179
- @param path {String} the property path to set
1180
- @param value {Object} the value to set
1181
- @returns {SC.Observable}
1182
- */
1183
- setPath: function(path, value) {
1184
- if (path.indexOf('.') >= 0) {
1185
- var tuple = SC.tupleForPropertyPath(path, this) ;
1186
- if (!tuple || !tuple[0]) return null ;
1187
- tuple[0].set(tuple[1], value) ;
1188
- } else this.set(path, value) ; // shortcut
1189
- return this;
1190
- },
1284
+ /**
1285
+ Navigates the property path, returning the value at that point.
1191
1286
 
1192
- /**
1193
- Navigates the property path, finally setting the value but only if
1194
- the value does not match the current value. This will avoid sending
1195
- unecessary change notifications.
1196
-
1197
- @param path {String} the property path to set
1198
- @param value {Object} the value to set
1199
- @returns {Object} this
1200
- */
1201
- setPathIfChanged: function(path, value) {
1202
- if (path.indexOf('.') >= 0) {
1287
+ If any object in the path is undefined, returns undefined.
1288
+ @param {String} path The property path you want to retrieve
1289
+ */
1290
+ getPath: function(path) {
1203
1291
  var tuple = SC.tupleForPropertyPath(path, this) ;
1204
- if (!tuple || !tuple[0]) return null ;
1205
- if (tuple[0].get(tuple[1]) !== value) {
1292
+ if (tuple === null || tuple[0] === null) return undefined ;
1293
+ return SC.get(tuple[0], tuple[1]) ;
1294
+ },
1295
+
1296
+ /**
1297
+ Navigates the property path, finally setting the value.
1298
+
1299
+ @param {String} path the property path to set
1300
+ @param {Object} value the value to set
1301
+ @returns {SC.Observable}
1302
+ */
1303
+ setPath: function(path, value) {
1304
+ if (path.indexOf('.') >= 0) {
1305
+ var tuple = SC.tupleForPropertyPath(path, this) ;
1306
+ if (!tuple || !tuple[0]) return null ;
1206
1307
  tuple[0].set(tuple[1], value) ;
1308
+ } else this.set(path, value) ; // shortcut
1309
+ return this;
1310
+ },
1311
+
1312
+ /**
1313
+ Navigates the property path, finally setting the value but only if
1314
+ the value does not match the current value. This will avoid sending
1315
+ unecessary change notifications.
1316
+
1317
+ @param {String} path the property path to set
1318
+ @param {Object} value the value to set
1319
+ @returns {Object} this
1320
+ */
1321
+ setPathIfChanged: function(path, value) {
1322
+ if (path.indexOf('.') >= 0) {
1323
+ var tuple = SC.tupleForPropertyPath(path, this) ;
1324
+ if (!tuple || !tuple[0]) return null ;
1325
+ if (tuple[0].get(tuple[1]) !== value) {
1326
+ tuple[0].set(tuple[1], value) ;
1327
+ }
1328
+ } else this.setIfChanged(path, value) ; // shortcut
1329
+ return this;
1330
+ },
1331
+
1332
+ /**
1333
+ Convenience method to get an array of properties.
1334
+
1335
+ Pass in multiple property keys or an array of property keys. This
1336
+ method uses getPath() so you can also pass key paths.
1337
+
1338
+ @returns {Array} Values of property keys.
1339
+ */
1340
+ getEach: function() {
1341
+ var keys = SC.A(arguments),
1342
+ ret = [], idx, idxLen;
1343
+ for(idx=0, idxLen = keys.length; idx < idxLen;idx++) {
1344
+ ret[ret.length] = this.getPath(keys[idx]);
1207
1345
  }
1208
- } else this.setIfChanged(path, value) ; // shortcut
1209
- return this;
1210
- },
1211
-
1212
- /**
1213
- Convenience method to get an array of properties.
1214
-
1215
- Pass in multiple property keys or an array of property keys. This
1216
- method uses getPath() so you can also pass key paths.
1217
-
1218
- @returns {Array} Values of property keys.
1219
- */
1220
- getEach: function() {
1221
- var keys = SC.A(arguments),
1222
- ret = [], idx, idxLen;
1223
- for(idx=0, idxLen = keys.length; idx < idxLen;idx++) {
1224
- ret[ret.length] = this.getPath(keys[idx]);
1225
- }
1226
- return ret ;
1227
- },
1228
-
1229
-
1230
- /**
1231
- Increments the value of a property.
1232
-
1233
- @param key {String} property name
1234
- @param increment {Number} the amount to increment (optional)
1235
- @returns {Number} new value of property
1236
- */
1237
- incrementProperty: function(key,increment) {
1238
- if (!increment) increment = 1;
1239
- this.set(key,(this.get(key) || 0)+increment);
1240
- return this.get(key) ;
1241
- },
1346
+ return ret ;
1347
+ },
1242
1348
 
1243
- /**
1244
- Decrements the value of a property.
1245
-
1246
- @param key {String} property name
1247
- @param increment {Number} the amount to decrement (optional)
1248
- @returns {Number} new value of property
1249
- */
1250
- decrementProperty: function(key,increment) {
1251
- if (!increment) increment = 1;
1252
- this.set(key,(this.get(key) || 0) - increment) ;
1253
- return this.get(key) ;
1254
- },
1255
1349
 
1256
- /**
1257
- Inverts a property. Property should be a bool.
1258
-
1259
- @param key {String} property name
1260
- @param value {Object} optional parameter for "true" value
1261
- @param alt {Object} optional parameter for "false" value
1262
- @returns {Object} new value
1263
- */
1264
- toggleProperty: function(key,value,alt) {
1265
- if (value === undefined) value = true ;
1266
- if (alt === undefined) alt = false ;
1267
- value = (this.get(key) == value) ? alt : value ;
1268
- this.set(key,value);
1269
- return this.get(key) ;
1270
- },
1350
+ /**
1351
+ Increments the value of a property.
1271
1352
 
1272
- /**
1273
- Convenience method to call propertyWillChange/propertyDidChange.
1274
-
1275
- Sometimes you need to notify observers that a property has changed value
1276
- without actually changing this value. In those cases, you can use this
1277
- method as a convenience instead of calling propertyWillChange() and
1278
- propertyDidChange().
1279
-
1280
- @param key {String} The property key that has just changed.
1281
- @param value {Object} The new value of the key. May be null.
1282
- @returns {SC.Observable}
1283
- */
1284
- notifyPropertyChange: function(key, value) {
1285
- this.propertyWillChange(key) ;
1286
- this.propertyDidChange(key, value) ;
1287
- return this;
1288
- },
1289
-
1290
- /**
1291
- Notifies all of observers of a property changes.
1292
-
1293
- Sometimes when you make a major update to your object, it is cheaper to
1294
- simply notify all observers that their property might have changed than
1295
- to figure out specifically which properties actually did change.
1296
-
1297
- In those cases, you can simply call this method to notify all property
1298
- observers immediately. Note that this ignores property groups.
1299
-
1300
- @returns {SC.Observable}
1301
- */
1302
- allPropertiesDidChange: function() {
1303
- this._kvo_cache = null; //clear cached props
1304
- this._notifyPropertyObservers('*') ;
1305
- return this ;
1306
- },
1353
+ @param {String} key property name
1354
+ @param {Number} increment the amount to increment (optional)
1355
+ @returns {Number} new value of property
1356
+ */
1357
+ incrementProperty: function(key,increment) {
1358
+ if (!increment) increment = 1;
1359
+ this.set(key,(this.get(key) || 0)+increment);
1360
+ return this.get(key) ;
1361
+ },
1307
1362
 
1308
- addProbe: function(key) { this.addObserver(key,SC.logChange); },
1309
- removeProbe: function(key) { this.removeObserver(key,SC.logChange); },
1363
+ /**
1364
+ Decrements the value of a property.
1365
+
1366
+ @param {String} key property name
1367
+ @param {Number} increment the amount to decrement (optional)
1368
+ @returns {Number} new value of property
1369
+ */
1370
+ decrementProperty: function(key,increment) {
1371
+ if (!increment) increment = 1;
1372
+ this.set(key,(this.get(key) || 0) - increment) ;
1373
+ return this.get(key) ;
1374
+ },
1310
1375
 
1311
- /**
1312
- Logs the named properties to the console.
1313
-
1314
- @param {String...} propertyNames one or more property names
1315
- */
1316
- logProperty: function() {
1317
- var props = SC.$A(arguments),
1318
- prop, propsLen, idx;
1319
- for(idx=0, propsLen = props.length; idx<propsLen; idx++) {
1320
- prop = props[idx] ;
1321
- console.log('%@:%@: '.fmt(SC.guidFor(this), prop), this.get(prop)) ;
1322
- }
1323
- },
1376
+ /**
1377
+ Inverts a property. Property should be a bool.
1378
+
1379
+ @param {String} key property name
1380
+ @param {Object} value optional parameter for "true" value
1381
+ @param {Object} alt optional parameter for "false" value
1382
+ @returns {Object} new value
1383
+ */
1384
+ toggleProperty: function(key,value,alt) {
1385
+ if (value === undefined) value = true ;
1386
+ if (alt === undefined) alt = false ;
1387
+ value = (this.get(key) == value) ? alt : value ;
1388
+ this.set(key,value);
1389
+ return this.get(key) ;
1390
+ },
1324
1391
 
1325
- propertyRevision: 1
1326
-
1327
- } ;
1392
+ /**
1393
+ Convenience method to call propertyWillChange/propertyDidChange.
1394
+
1395
+ Sometimes you need to notify observers that a property has changed value
1396
+ without actually changing this value. In those cases, you can use this
1397
+ method as a convenience instead of calling propertyWillChange() and
1398
+ propertyDidChange().
1399
+
1400
+ @param {String} key The property key that has just changed.
1401
+ @param {Object} value The new value of the key. May be null.
1402
+ @returns {SC.Observable}
1403
+ */
1404
+ notifyPropertyChange: function(key, value) {
1405
+ this.propertyWillChange(key) ;
1406
+ this.propertyDidChange(key, value) ;
1407
+ return this;
1408
+ },
1328
1409
 
1329
- /** @private used by addProbe/removeProbe */
1330
- SC.logChange = function logChange(target, key, value) {
1331
- console.log("CHANGE: %@[%@] => %@".fmt(target, key, target.get(key)));
1332
- };
1410
+ /**
1411
+ Notifies observers of all possible property changes.
1333
1412
 
1334
- /**
1335
- Retrieves a property from an object, using get() if the
1336
- object implements SC.Observable.
1413
+ Sometimes when you make a major update to your object, it is cheaper to
1414
+ simply notify all observers that their property might have changed than
1415
+ to figure out specifically which properties actually did change.
1337
1416
 
1338
- @param {Object} object the object to query
1339
- @param {String} key the property to retrieve
1340
- */
1341
- SC.mixin(SC, {
1342
- get: function(object, key) {
1343
- if (!object) return undefined;
1344
- if (key === undefined) return this[object];
1345
- if (object.get) return object.get(key);
1346
- return object[key];
1347
- }
1348
- });
1349
-
1350
- // Make all Array's observable
1351
- SC.mixin(Array.prototype, SC.Observable) ;
1417
+ In those cases, you can simply call this method to notify all property
1418
+ observers immediately. Note that this ignores property groups.
1419
+
1420
+ @returns {SC.Observable}
1421
+ */
1422
+ allPropertiesDidChange: function() {
1423
+ this._kvo_cache = null; //clear cached props
1424
+ this._notifyPropertyObservers('*') ;
1425
+ return this ;
1426
+ },
1427
+
1428
+ /**
1429
+ Allows you to inspect a property for changes. Whenever the named property
1430
+ changes, a log will be printed to the console. This (along with removeProbe)
1431
+ are convenience methods meant for debugging purposes.
1432
+
1433
+ @param {String} key The name of the property you want probed for changes
1434
+ */
1435
+ addProbe: function(key) { this.addObserver(key,SC.logChange); },
1436
+
1437
+ /**
1438
+ Stops a running probe from observing changes to the observer.
1439
+
1440
+ @param {String} key The name of the property you want probed for changes
1441
+ */
1442
+ removeProbe: function(key) { this.removeObserver(key,SC.logChange); },
1443
+
1444
+ /**
1445
+ Logs the named properties to the SC.Logger.
1446
+
1447
+ @param {String...} propertyNames one or more property names
1448
+ */
1449
+ logProperty: function() {
1450
+ var props = SC.$A(arguments),
1451
+ prop, propsLen, idx;
1452
+ for(idx=0, propsLen = props.length; idx<propsLen; idx++) {
1453
+ prop = props[idx] ;
1454
+ SC.Logger.log('%@:%@: '.fmt(SC.guidFor(this), prop), this.get(prop)) ;
1455
+ }
1456
+ },
1457
+
1458
+ propertyRevision: 1
1459
+
1460
+ } ;
1461
+
1462
+ /** @private used by addProbe/removeProbe */
1463
+ SC.logChange = function logChange(target, key, value) {
1464
+ SC.Logger.log("CHANGE: %@[%@] => %@".fmt(target, key, target.get(key)));
1465
+ };
1466
+
1467
+ /**
1468
+ Retrieves a property from an object, using get() if the
1469
+ object implements SC.Observable.
1470
+
1471
+ @param {Object} object the object to query
1472
+ @param {String} key the property to retrieve
1473
+ */
1474
+ SC.mixin(SC, {
1475
+ get: function(object, key) {
1476
+ if (!object) return undefined;
1477
+ if (key === undefined) return this[object];
1478
+ if (object.get) return object.get(key);
1479
+ return object[key];
1480
+ },
1481
+
1482
+ /**
1483
+ Retrieves a property from an object at a specified path, using get() if
1484
+ the object implements SC.Observable.
1485
+
1486
+ @param {Object} object the object to query
1487
+ @param {String} path the path to the property to retrieve
1488
+ */
1489
+ getPath: function(object, path) {
1490
+ if (path === undefined) {
1491
+ path = object;
1492
+ object = window;
1493
+ }
1494
+ return SC.objectForPropertyPath(path, object);
1495
+ }
1496
+ });
1497
+
1498
+ // Make all Array's observable
1499
+ SC.mixin(Array.prototype, SC.Observable) ;