sproutcore 1.5.0.pre.5 → 1.5.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1030) hide show
  1. data/CHANGELOG +20 -0
  2. data/VERSION.yml +1 -1
  3. data/lib/buildtasks/manifest.rake +171 -78
  4. data/lib/frameworks/sproutcore/Buildfile +7 -6
  5. data/lib/frameworks/sproutcore/CHANGELOG.md +56 -0
  6. data/lib/frameworks/sproutcore/apps/docs/core.js +1 -1
  7. data/lib/frameworks/sproutcore/apps/docs/english.lproj/main_page.js +1 -1
  8. data/lib/frameworks/sproutcore/apps/docs/english.lproj/strings.js +1 -1
  9. data/lib/frameworks/sproutcore/apps/docs/main.js +1 -1
  10. data/lib/frameworks/sproutcore/apps/greenhouse/english.lproj/dialogs.js +3 -3
  11. data/lib/frameworks/sproutcore/apps/test_controls/controllers/alert.js +39 -0
  12. data/lib/frameworks/sproutcore/apps/test_controls/controllers/buttons.js +1 -1
  13. data/lib/frameworks/sproutcore/apps/test_controls/controllers/categories.js +19 -2
  14. data/lib/frameworks/sproutcore/apps/test_controls/controllers/category.js +1 -1
  15. data/lib/frameworks/sproutcore/apps/test_controls/controllers/split.js +74 -0
  16. data/lib/frameworks/sproutcore/apps/test_controls/core.js +1 -1
  17. data/lib/frameworks/sproutcore/apps/test_controls/main.js +1 -1
  18. data/lib/frameworks/sproutcore/apps/test_controls/resources/buttons_page.js +11 -7
  19. data/lib/frameworks/sproutcore/apps/test_controls/resources/checkboxes_page.js +2 -1
  20. data/lib/frameworks/sproutcore/apps/test_controls/resources/flow_layout_page.js +2 -1
  21. data/lib/frameworks/sproutcore/apps/test_controls/resources/list_page.js +1 -1
  22. data/lib/frameworks/sproutcore/apps/test_controls/resources/main_page.js +7 -1
  23. data/lib/frameworks/sproutcore/apps/test_controls/resources/panels_page.js +62 -0
  24. data/lib/frameworks/sproutcore/apps/test_controls/resources/progress_page.js +2 -1
  25. data/lib/frameworks/sproutcore/apps/test_controls/resources/radio_page.js +2 -1
  26. data/lib/frameworks/sproutcore/apps/test_controls/resources/scroll_page.js +2 -1
  27. data/lib/frameworks/sproutcore/apps/test_controls/resources/segmented_page.js +2 -1
  28. data/lib/frameworks/sproutcore/apps/test_controls/resources/select_page.js +2 -1
  29. data/lib/frameworks/sproutcore/apps/test_controls/resources/sliders_page.js +2 -1
  30. data/lib/frameworks/sproutcore/apps/test_controls/resources/split_page.js +141 -0
  31. data/lib/frameworks/sproutcore/apps/test_controls/resources/tab_page.js +3 -2
  32. data/lib/frameworks/sproutcore/apps/test_controls/resources/text_field_page.js +28 -4
  33. data/lib/frameworks/sproutcore/apps/test_controls/theme.js +1 -1
  34. data/lib/frameworks/sproutcore/apps/tests/controllers/detail.js +1 -1
  35. data/lib/frameworks/sproutcore/apps/tests/controllers/source.js +1 -1
  36. data/lib/frameworks/sproutcore/apps/tests/controllers/target.js +1 -1
  37. data/lib/frameworks/sproutcore/apps/tests/controllers/targets.js +1 -1
  38. data/lib/frameworks/sproutcore/apps/tests/controllers/tests.js +1 -1
  39. data/lib/frameworks/sproutcore/apps/tests/core.js +1 -1
  40. data/lib/frameworks/sproutcore/apps/tests/english.lproj/main_page.js +6 -6
  41. data/lib/frameworks/sproutcore/apps/tests/english.lproj/strings.js +1 -1
  42. data/lib/frameworks/sproutcore/apps/tests/main.js +1 -1
  43. data/lib/frameworks/sproutcore/apps/tests/states/no_targets.js +1 -1
  44. data/lib/frameworks/sproutcore/apps/tests/states/ready.js +1 -1
  45. data/lib/frameworks/sproutcore/apps/tests/states/ready_detail.js +1 -1
  46. data/lib/frameworks/sproutcore/apps/tests/states/ready_empty.js +1 -1
  47. data/lib/frameworks/sproutcore/apps/tests/states/ready_list.js +1 -1
  48. data/lib/frameworks/sproutcore/apps/tests/states/ready_loading.js +1 -1
  49. data/lib/frameworks/sproutcore/apps/tests/states/ready_no_tests.js +1 -1
  50. data/lib/frameworks/sproutcore/apps/tests/states/start.js +1 -1
  51. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/detail.js +1 -1
  52. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/source.js +1 -1
  53. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/target.js +1 -1
  54. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/targets.js +1 -1
  55. data/lib/frameworks/sproutcore/apps/tests/tests/controllers/tests.js +1 -1
  56. data/lib/frameworks/sproutcore/apps/tests/tests/models/target.js +1 -1
  57. data/lib/frameworks/sproutcore/apps/tests/tests/models/test.js +1 -1
  58. data/lib/frameworks/sproutcore/apps/tests/tests/views/offset_checkbox.js +1 -1
  59. data/lib/frameworks/sproutcore/apps/tests/views/offset_checkbox.js +1 -1
  60. data/lib/frameworks/sproutcore/apps/welcome/controllers/targets.js +1 -1
  61. data/lib/frameworks/sproutcore/apps/welcome/core.js +1 -1
  62. data/lib/frameworks/sproutcore/apps/welcome/english.lproj/main_page.js +1 -1
  63. data/lib/frameworks/sproutcore/apps/welcome/english.lproj/strings.js +1 -1
  64. data/lib/frameworks/sproutcore/apps/welcome/main.js +1 -1
  65. data/lib/frameworks/sproutcore/apps/welcome/tests/controllers/targets.js +1 -1
  66. data/lib/frameworks/sproutcore/design/{SproutCore Datastore Design.graffle → Sproutcore_DatastoreDesign.graffle}/QuickLook/Preview.pdf +0 -0
  67. data/lib/frameworks/sproutcore/design/{SproutCore Datastore Design.graffle → Sproutcore_DatastoreDesign.graffle}/QuickLook/Thumbnail.tiff +0 -0
  68. data/lib/frameworks/sproutcore/design/{SproutCore Datastore Design.graffle → Sproutcore_DatastoreDesign.graffle}/data.plist +0 -0
  69. data/lib/frameworks/sproutcore/design/{SproutCore Datastore Design.graffle → Sproutcore_DatastoreDesign.graffle}/image8.png +0 -0
  70. data/lib/frameworks/sproutcore/design/{SproutCore Design Template.graffle → Sproutcore_Design_Template.graffle}/QuickLook/Preview.pdf +0 -0
  71. data/lib/frameworks/sproutcore/design/{SproutCore Design Template.graffle → Sproutcore_Design_Template.graffle}/QuickLook/Thumbnail.tiff +0 -0
  72. data/lib/frameworks/sproutcore/design/{SproutCore Design Template.graffle → Sproutcore_Design_Template.graffle}/data.plist +0 -0
  73. data/lib/frameworks/sproutcore/design/{SproutCore Design Template.graffle → Sproutcore_Design_Template.graffle}/image8.png +0 -0
  74. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/QuickLook/Preview.pdf +0 -0
  75. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/QuickLook/Thumbnail.tiff +0 -0
  76. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/data.plist +0 -0
  77. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image10.png +0 -0
  78. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image11.png +0 -0
  79. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image13.png +0 -0
  80. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image15.png +0 -0
  81. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image16.png +0 -0
  82. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image17.png +0 -0
  83. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image18.png +0 -0
  84. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image19.png +0 -0
  85. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image22.tiff +0 -0
  86. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image23.png +0 -0
  87. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image24.png +0 -0
  88. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image25.png +0 -0
  89. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image30.png +0 -0
  90. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image31.png +0 -0
  91. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image8.png +0 -0
  92. data/lib/frameworks/sproutcore/design/{TestRunner Design.graffle → TestRunner_Design.gaffle}/image9.png +0 -0
  93. data/lib/frameworks/sproutcore/frameworks/bootstrap/core.js +1 -1
  94. data/lib/frameworks/sproutcore/frameworks/bootstrap/setup_body_class_names.js +1 -1
  95. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/bench.js +1 -1
  96. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +1 -1
  97. data/lib/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +1 -1
  98. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +58 -7
  99. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/controller.js +1 -1
  100. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/object.js +1 -1
  101. data/lib/frameworks/sproutcore/frameworks/core_foundation/core.js +1 -1
  102. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/object.js +1 -1
  103. data/lib/frameworks/sproutcore/frameworks/core_foundation/ext/run_loop.js +1 -1
  104. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/delegate_support.js +2 -2
  105. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/responder_context.js +1 -2
  106. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/selection_support.js +6 -7
  107. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/string.js +1 -1
  108. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/template_helpers/checkbox_support.js +28 -0
  109. data/lib/frameworks/sproutcore/frameworks/core_foundation/{views/template → mixins/template_helpers}/text_field_support.js +10 -1
  110. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/keyboard.js +6 -0
  111. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/layout.js +25 -38
  112. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/main.js +1 -1
  113. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/manipulation.js +6 -0
  114. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +2 -2
  115. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/template.js +7 -0
  116. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/visibility.js +6 -0
  117. data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/observable_protocol.js +1 -1
  118. data/lib/frameworks/sproutcore/frameworks/core_foundation/protocols/sparse_array_delegate.js +1 -1
  119. data/lib/frameworks/sproutcore/frameworks/core_foundation/resources/core.css +6 -0
  120. data/lib/frameworks/sproutcore/frameworks/core_foundation/resources/view.css +2 -2
  121. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/application.js +1 -1
  122. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/bindable_span.js +164 -0
  123. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/browser.js +1 -1
  124. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/builder.js +1 -1
  125. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/core_query.js +1 -1
  126. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/cursor.js +1 -1
  127. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/device.js +1 -1
  128. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +45 -17
  129. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/json.js +1 -1
  130. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +1 -1
  131. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/page.js +1 -1
  132. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/platform.js +24 -4
  133. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/ready.js +48 -22
  134. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +1 -1
  135. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/responder.js +1 -1
  136. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +34 -5
  137. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/selection_set.js +1 -1
  138. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +1 -1
  139. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/theme.js +1 -1
  140. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/timer.js +6 -5
  141. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils.js +8 -2
  142. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils/rect.js +6 -0
  143. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +84 -1
  144. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/enum_case.js +1 -1
  145. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/null_case.js +1 -1
  146. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/selection_support.js +1 -1
  147. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/single_case.js +1 -1
  148. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/empty_case.js +1 -1
  149. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/multiple_case.js +1 -1
  150. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/single_case.js +1 -1
  151. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/single_enumerable_case.js +1 -1
  152. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/responder_context.js +2 -1
  153. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +2 -1
  154. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/{views/template → mixins/template_helpers}/checkbox_support.js +6 -0
  155. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/{views/template → mixins/template_helpers}/text_field_support.js +6 -0
  156. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/panes/template.js +6 -0
  157. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/builder.js +7 -0
  158. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/core_query/within.js +6 -0
  159. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/json.js +7 -0
  160. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/locale.js +6 -0
  161. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/ready/done.js +8 -0
  162. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/begin.js +1 -1
  163. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/element.js +1 -1
  164. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/end.js +1 -1
  165. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/get.js +1 -1
  166. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_attr.js +1 -1
  167. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_basic.js +1 -1
  168. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_className.js +1 -1
  169. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/helpers_style.js +1 -1
  170. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/init.js +1 -1
  171. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/join.js +1 -1
  172. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/push_text.js +1 -1
  173. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/tag.js +1 -1
  174. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/render_context/update.js +1 -1
  175. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeKeyPane.js +1 -1
  176. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeMainPane.js +1 -1
  177. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/makeMenuPane.js +1 -1
  178. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/root_responder.js +7 -0
  179. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/targetForAction.js +1 -1
  180. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/add.js +1 -1
  181. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/copy.js +1 -1
  182. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/indexSetForSource.js +1 -1
  183. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/isEqual.js +1 -1
  184. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/selection_set/remove.js +1 -1
  185. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/sparse_array.js +8 -1
  186. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/theme.js +2 -1
  187. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/invalidate.js +6 -0
  188. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/invokeLater.js +6 -0
  189. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/isPaused.js +6 -0
  190. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/performAction.js +6 -0
  191. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/timer/schedule.js +6 -0
  192. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/normalizeURL.js +6 -0
  193. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/offset.js +23 -10
  194. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/utils/rect.js +6 -0
  195. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/main_pane.js +6 -0
  196. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/append_remove.js +7 -1
  197. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/child_view.js +6 -0
  198. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/firstResponder.js +1 -1
  199. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/keyPane.js +1 -1
  200. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/layout.js +1 -1
  201. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/sendEvent.js +1 -1
  202. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/{template_view → template}/collection.js +77 -11
  203. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/core.js +160 -0
  204. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/{template_view → template}/handlebars.js +279 -8
  205. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/animation.js +6 -0
  206. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/build.js +1 -1
  207. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/build_children.js +1 -1
  208. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/clippingFrame.js +1 -1
  209. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/convertFrames.js +1 -1
  210. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/convertLayouts.js +6 -0
  211. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/createChildViews.js +8 -1
  212. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/createLayer.js +1 -1
  213. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/destroyLayer.js +1 -1
  214. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/didAppendToDocument.js +1 -1
  215. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/findLayerInParentLayer.js +1 -1
  216. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/init.js +1 -1
  217. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/insertBefore.js +1 -1
  218. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/isVisible.js +7 -1
  219. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/isVisibleInWindow.js +7 -1
  220. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/keyboard.js +6 -0
  221. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layer.js +1 -1
  222. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutChildViews.js +1 -1
  223. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +1 -1
  224. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutStyle.js +6 -0
  225. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/parentViewDidChange.js +1 -1
  226. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/prepareContext.js +4 -4
  227. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/removeChild.js +1 -1
  228. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/render.js +1 -1
  229. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/render_delegate_support.js +1 -1
  230. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/replaceChild.js +1 -1
  231. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/static_layout.js +7 -0
  232. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/theme.js +1 -1
  233. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/updateLayer.js +1 -1
  234. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/updateLayerLocation.js +1 -1
  235. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/view.js +1 -1
  236. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/viewDidResize.js +1 -1
  237. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template.js +58 -8
  238. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template_collection.js +179 -0
  239. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +92 -65
  240. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/base.js +2 -0
  241. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +2 -2
  242. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +37 -15
  243. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +1 -1
  244. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +67 -29
  245. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/visibility.js +6 -1
  246. data/lib/frameworks/sproutcore/frameworks/core_tools/core.js +1 -1
  247. data/lib/frameworks/sproutcore/frameworks/core_tools/data_source.js +1 -1
  248. data/lib/frameworks/sproutcore/frameworks/core_tools/english.lproj/strings.js +1 -1
  249. data/lib/frameworks/sproutcore/frameworks/core_tools/fixtures/target.js +1 -1
  250. data/lib/frameworks/sproutcore/frameworks/core_tools/fixtures/test.js +1 -1
  251. data/lib/frameworks/sproutcore/frameworks/core_tools/models/target.js +1 -1
  252. data/lib/frameworks/sproutcore/frameworks/core_tools/models/test.js +1 -1
  253. data/lib/frameworks/sproutcore/frameworks/datastore/core.js +1 -1
  254. data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/cascade.js +2 -2
  255. data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/data_source.js +1 -1
  256. data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +1 -1
  257. data/lib/frameworks/sproutcore/frameworks/datastore/debug/json.js +1 -1
  258. data/lib/frameworks/sproutcore/frameworks/datastore/debug/standard_setup.js +1 -1
  259. data/lib/frameworks/sproutcore/frameworks/datastore/models/child_attribute.js +23 -12
  260. data/lib/frameworks/sproutcore/frameworks/datastore/models/children_attribute.js +1 -0
  261. data/lib/frameworks/sproutcore/frameworks/datastore/models/fetched_attribute.js +1 -1
  262. data/lib/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +1 -1
  263. data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +211 -90
  264. data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +121 -91
  265. data/lib/frameworks/sproutcore/frameworks/datastore/models/single_attribute.js +15 -17
  266. data/lib/frameworks/sproutcore/frameworks/datastore/system/child_array.js +50 -14
  267. data/lib/frameworks/sproutcore/frameworks/datastore/system/many_array.js +35 -20
  268. data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +13 -9
  269. data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +56 -73
  270. data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +35 -22
  271. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +138 -62
  272. data/lib/frameworks/sproutcore/frameworks/datastore/tests/data_sources/cascade.js +1 -1
  273. data/lib/frameworks/sproutcore/frameworks/datastore/tests/data_sources/fixtures.js +1 -1
  274. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/contact_model.js +1 -1
  275. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/cyclical_relationship.js +1 -1
  276. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/mail_model.js +1 -1
  277. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/test_runner_model.js +1 -1
  278. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/datetime_recordattribute.js +1 -1
  279. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +1 -1
  280. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +5 -1
  281. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/core_methods.js +1 -1
  282. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/destroy.js +1 -1
  283. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/error_methods.js +1 -1
  284. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/normalize.js +1 -1
  285. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/readAttribute.js +1 -1
  286. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/refresh.js +2 -2
  287. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/storeDidChangeProperties.js +1 -1
  288. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/unknownProperty.js +1 -1
  289. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +1 -1
  290. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +1 -1
  291. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/single_attribute.js +1 -1
  292. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/many_array/core_methods.js +1 -1
  293. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +1 -1
  294. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChanges.js +1 -1
  295. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +1 -1
  296. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/core_methods.js +1 -1
  297. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/dataHashDidChange.js +1 -1
  298. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/discardChanges.js +1 -1
  299. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readDataHash.js +1 -1
  300. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/readEditableDataHash.js +1 -1
  301. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/removeDataHash.js +1 -1
  302. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/writeDataHash.js +1 -1
  303. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/builders.js +1 -1
  304. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/compare.js +1 -1
  305. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/contains.js +1 -1
  306. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/containsRecordTypes.js +1 -1
  307. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/copy.js +1 -1
  308. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation.js +1 -1
  309. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation_of_records.js +1 -1
  310. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/expandedRecordTypes.js +1 -1
  311. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/parse.js +1 -1
  312. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/queryWithScope.js +1 -1
  313. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/record_type_is.js +1 -1
  314. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_comparisons.js +1 -1
  315. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/query/registered_query_extensions.js +1 -1
  316. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/core_methods.js +1 -1
  317. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/error_methods.js +1 -1
  318. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/flush.js +49 -12
  319. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/cancelRecord.js +1 -1
  320. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +1 -1
  321. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +11 -1
  322. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +1 -1
  323. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/createRecord.js +1 -1
  324. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataHashDidChange.js +1 -1
  325. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +1 -1
  326. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/destroyRecord.js +1 -1
  327. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/error_methods.js +1 -1
  328. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/find.js +1 -1
  329. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/init.js +1 -1
  330. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushChanges.js +1 -1
  331. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/readDataHash.js +1 -1
  332. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/readEditableDataHash.js +1 -1
  333. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/recordDidChange.js +1 -1
  334. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/removeDataHash.js +1 -1
  335. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/retrieveRecord.js +17 -1
  336. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/unloadRecords.js +1 -1
  337. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/writeDataHash.js +1 -1
  338. data/lib/frameworks/sproutcore/frameworks/datetime/resources/strings.js +1 -1
  339. data/lib/frameworks/sproutcore/frameworks/datetime/system/datetime.js +48 -7
  340. data/lib/frameworks/sproutcore/frameworks/datetime/tests/system/datetime.js +7 -0
  341. data/lib/frameworks/sproutcore/frameworks/debug/core.js +1 -1
  342. data/lib/frameworks/sproutcore/frameworks/debug/invoke_once_last_debugging.js +1 -1
  343. data/lib/frameworks/sproutcore/frameworks/designer/coders/design.js +7 -5
  344. data/lib/frameworks/sproutcore/frameworks/designer/coders/object.js +7 -5
  345. data/lib/frameworks/sproutcore/frameworks/designer/controllers/controllers.js +7 -0
  346. data/lib/frameworks/sproutcore/frameworks/designer/controllers/design.js +6 -0
  347. data/lib/frameworks/sproutcore/frameworks/designer/controllers/designs.js +6 -0
  348. data/lib/frameworks/sproutcore/frameworks/designer/controllers/page_design.js +7 -5
  349. data/lib/frameworks/sproutcore/frameworks/designer/controllers/page_files.js +6 -0
  350. data/lib/frameworks/sproutcore/frameworks/designer/core.js +6 -4
  351. data/lib/frameworks/sproutcore/frameworks/designer/css/css_rule.js +1 -1
  352. data/lib/frameworks/sproutcore/frameworks/designer/css/css_style.js +1 -1
  353. data/lib/frameworks/sproutcore/frameworks/designer/css/css_style_sheet.js +1 -1
  354. data/lib/frameworks/sproutcore/frameworks/designer/designers/button.js +7 -5
  355. data/lib/frameworks/sproutcore/frameworks/designer/designers/label.js +7 -5
  356. data/lib/frameworks/sproutcore/frameworks/designer/designers/object_designer.js +7 -5
  357. data/lib/frameworks/sproutcore/frameworks/designer/designers/tab.js +7 -5
  358. data/lib/frameworks/sproutcore/frameworks/designer/designers/text_field.js +7 -5
  359. data/lib/frameworks/sproutcore/frameworks/designer/designers/view_designer.js +7 -5
  360. data/lib/frameworks/sproutcore/frameworks/designer/ext/binding.js +6 -0
  361. data/lib/frameworks/sproutcore/frameworks/designer/ext/object.js +7 -5
  362. data/lib/frameworks/sproutcore/frameworks/designer/ext/page.js +7 -5
  363. data/lib/frameworks/sproutcore/frameworks/designer/ext/view.js +7 -5
  364. data/lib/frameworks/sproutcore/frameworks/designer/mixins/button.js +7 -5
  365. data/lib/frameworks/sproutcore/frameworks/designer/mixins/snap_lines.js +6 -0
  366. data/lib/frameworks/sproutcore/frameworks/designer/tests/designers/view_designer.js +1 -1
  367. data/lib/frameworks/sproutcore/frameworks/desktop/core.js +1 -1
  368. data/lib/frameworks/sproutcore/frameworks/desktop/debug/drag.js +6 -5
  369. data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/disclosure.css +0 -1
  370. data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/icons.css +0 -27
  371. data/lib/frameworks/sproutcore/frameworks/desktop/english.lproj/menu_item_view.css +1 -9
  372. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/border.js +7 -5
  373. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_fast_path.js +6 -0
  374. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_group.js +1 -1
  375. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_row_delegate.js +1 -1
  376. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +1 -1
  377. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/navigation_builder.js +7 -5
  378. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +7 -5
  379. data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +293 -203
  380. data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +35 -107
  381. data/lib/frameworks/sproutcore/frameworks/desktop/panes/modal.js +7 -5
  382. data/lib/frameworks/sproutcore/frameworks/desktop/panes/palette.js +2 -1
  383. data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +10 -36
  384. data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +44 -4
  385. data/lib/frameworks/sproutcore/frameworks/desktop/panes/select_button.js +1 -1
  386. data/lib/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +2 -1
  387. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +6 -5
  388. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_source.js +7 -5
  389. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +7 -5
  390. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/responder.js +7 -5
  391. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +70 -63
  392. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/checkbox.js +29 -31
  393. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/collection.js +2 -1
  394. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +12 -22
  395. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/helpers/slicing.js +4 -3
  396. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/image_button.js +9 -3
  397. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/master_detail.js +2 -1
  398. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/menu.js +46 -33
  399. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/panel.js +16 -16
  400. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/picker.js +3 -2
  401. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/popup_button.js +21 -0
  402. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +56 -143
  403. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio.js +17 -28
  404. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio_group.js +8 -1
  405. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +5 -2
  406. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +7 -4
  407. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +38 -15
  408. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/source_list.js +1 -1
  409. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/toolbar.js +1 -1
  410. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/well.js +3 -13
  411. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/workspace.js +2 -2
  412. data/lib/frameworks/sproutcore/frameworks/desktop/system/drag.js +17 -7
  413. data/lib/frameworks/sproutcore/frameworks/desktop/system/key_bindings.js +7 -5
  414. data/lib/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +7 -5
  415. data/lib/frameworks/sproutcore/frameworks/desktop/tests/integration/dialog.js +19 -3
  416. data/lib/frameworks/sproutcore/frameworks/desktop/tests/mixins/border.js +10 -1
  417. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/methods.js +1 -1
  418. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +215 -53
  419. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +2 -1
  420. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/ui.js +33 -8
  421. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/methods.js +1 -1
  422. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/palette/ui.js +2 -2
  423. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/pane_page.js +4 -3
  424. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +1 -1
  425. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/ui.js +4 -18
  426. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/methods.js +91 -3
  427. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +2 -2
  428. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/select_button/methods.js +1 -1
  429. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/select_button/ui.js +1 -1
  430. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/methods.js +1 -1
  431. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/sheet/ui.js +4 -2
  432. data/lib/frameworks/sproutcore/frameworks/{foundation/tests/mixins → desktop/tests/views}/button/content.js +9 -15
  433. data/lib/frameworks/sproutcore/frameworks/{foundation/tests/mixins → desktop/tests/views}/button/displayProperties.js +4 -4
  434. data/lib/frameworks/sproutcore/frameworks/{foundation/tests/mixins → desktop/tests/views}/button/keyEquivalents.js +3 -3
  435. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +1 -1
  436. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/button/ui.js +5 -5
  437. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +1 -1
  438. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/ui.js +4 -7
  439. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/content.js +1 -1
  440. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deleteSelection.js +1 -1
  441. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deselect.js +1 -1
  442. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/displayProperties.js +1 -1
  443. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/itemViewForContentIndex.js +1 -1
  444. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/layerIdFor.js +1 -1
  445. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/length.js +1 -1
  446. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +1 -1
  447. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/nowShowing.js +1 -1
  448. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/reload.js +1 -1
  449. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/select.js +1 -1
  450. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectNextItem.js +1 -1
  451. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectPreviousItem.js +1 -1
  452. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selection.js +1 -1
  453. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/collection/ui_diagram.js +1 -1
  454. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/methods.js +1 -1
  455. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/ui.js +1 -1
  456. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/methods.js +1 -1
  457. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/disclosure/ui.js +9 -11
  458. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/methods.js +1 -1
  459. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/grid/ui.js +1 -1
  460. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/image_button/ui.js +0 -1
  461. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/render.js +1 -1
  462. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowDelegate.js +1 -1
  463. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowHeightForContentIndex.js +1 -1
  464. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowOffsetForContentIndex.js +1 -1
  465. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_alternatingrows.js +1 -1
  466. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_outline.js +1 -1
  467. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +1 -1
  468. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_simple.js +5 -1
  469. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list_item.js +1 -1
  470. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/methods.js +1 -1
  471. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/menu_item/ui.js +1 -1
  472. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/methods.js +1 -1
  473. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +37 -40
  474. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +1 -1
  475. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/radio/ui.js +10 -21
  476. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scene_view/databind.js +111 -0
  477. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/integration.js +50 -0
  478. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +1 -1
  479. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +2 -2
  480. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroller.js +1 -1
  481. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +1 -47
  482. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +16 -16
  483. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/methods.js +1 -1
  484. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/ui.js +1 -1
  485. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/methods.js +1 -1
  486. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/ui.js +69 -6
  487. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/separator.js +1 -1
  488. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/methods.js +1 -1
  489. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/source_list/ui.js +1 -1
  490. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +1 -1
  491. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/ui.js +1 -1
  492. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/stacked/ui_comments.js +1 -1
  493. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/static_content.js +1 -1
  494. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +1 -1
  495. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/tab/ui.js +1 -1
  496. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/toolbar/method.js +1 -1
  497. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/toolbar/ui.js +1 -1
  498. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/web/methods.js +1 -1
  499. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/web/ui.js +1 -1
  500. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/well/ui.js +1 -1
  501. data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +329 -13
  502. data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +4 -26
  503. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +1 -1
  504. data/lib/frameworks/sproutcore/frameworks/desktop/views/date_field.js +1 -1
  505. data/lib/frameworks/sproutcore/frameworks/desktop/views/disclosure.js +1 -9
  506. data/lib/frameworks/sproutcore/frameworks/desktop/views/file.js +1 -2
  507. data/lib/frameworks/sproutcore/frameworks/desktop/views/grid.js +6 -0
  508. data/lib/frameworks/sproutcore/frameworks/desktop/views/image_button.js +15 -13
  509. data/lib/frameworks/sproutcore/frameworks/desktop/views/list.js +1 -1
  510. data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +76 -75
  511. data/lib/frameworks/sproutcore/frameworks/desktop/views/master_detail.js +1 -1
  512. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +2 -2
  513. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +1 -1
  514. data/lib/frameworks/sproutcore/frameworks/desktop/views/navigation.js +1 -1
  515. data/lib/frameworks/sproutcore/frameworks/desktop/views/navigation_bar.js +1 -1
  516. data/lib/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +8 -0
  517. data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +18 -6
  518. data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +6 -5
  519. data/lib/frameworks/sproutcore/frameworks/desktop/views/scene.js +1 -1
  520. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +13 -14
  521. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroller.js +20 -7
  522. data/lib/frameworks/sproutcore/frameworks/desktop/views/segment.js +10 -3
  523. data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +15 -3
  524. data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +2 -2
  525. data/lib/frameworks/sproutcore/frameworks/desktop/views/select_field.js +11 -9
  526. data/lib/frameworks/sproutcore/frameworks/desktop/views/separator.js +7 -5
  527. data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +10 -2
  528. data/lib/frameworks/sproutcore/frameworks/desktop/views/source_list.js +1 -1
  529. data/lib/frameworks/sproutcore/frameworks/desktop/views/source_list_group.js +1 -1
  530. data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +1 -1
  531. data/lib/frameworks/sproutcore/frameworks/desktop/views/split_divider.js +1 -2
  532. data/lib/frameworks/sproutcore/frameworks/desktop/views/stacked.js +1 -1
  533. data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +1 -1
  534. data/lib/frameworks/sproutcore/frameworks/desktop/views/tab.js +11 -10
  535. data/lib/frameworks/sproutcore/frameworks/desktop/views/thumb.js +1 -1
  536. data/lib/frameworks/sproutcore/frameworks/desktop/views/toolbar.js +1 -1
  537. data/lib/frameworks/sproutcore/frameworks/desktop/views/web.js +1 -1
  538. data/lib/frameworks/sproutcore/frameworks/desktop/views/well.js +1 -1
  539. data/lib/frameworks/sproutcore/frameworks/desktop/views/workspace.js +1 -1
  540. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/device.js +1 -1
  541. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/device_motion/platform.js +1 -1
  542. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +35 -23
  543. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +83 -9
  544. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphism/many.js +79 -0
  545. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphism/simple.js +66 -0
  546. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphism/single.js +67 -0
  547. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_child.js +229 -0
  548. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_thumb.js +236 -0
  549. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/render_delegates/split.js +18 -0
  550. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/render_delegates/split_divider.js +26 -0
  551. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/children.js +100 -0
  552. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/dividers.js +243 -0
  553. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/methods.js +294 -0
  554. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/split_child.js +135 -0
  555. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/tests/split_thumb.js +160 -0
  556. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/split.js +929 -0
  557. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/split_divider.js +40 -0
  558. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/thumb.js +26 -0
  559. data/lib/frameworks/sproutcore/frameworks/forms/mixins/edit_mode.js +5 -0
  560. data/lib/frameworks/sproutcore/frameworks/forms/mixins/emptiness.js +1 -2
  561. data/lib/frameworks/sproutcore/frameworks/forms/renderer_delegates/form.js +1 -2
  562. data/lib/frameworks/sproutcore/frameworks/forms/renderer_delegates/form_row.js +1 -2
  563. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form.js +4 -2
  564. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_checkbox_field.js +4 -2
  565. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_field.js +4 -2
  566. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_label.js +4 -2
  567. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_radio_field.js +4 -2
  568. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_row.js +4 -2
  569. data/lib/frameworks/sproutcore/frameworks/forms/tests/views/form_text_field.js +4 -2
  570. data/lib/frameworks/sproutcore/frameworks/forms/views/form.js +7 -3
  571. data/lib/frameworks/sproutcore/frameworks/forms/views/form_row.js +5 -2
  572. data/lib/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +39 -38
  573. data/lib/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +1 -2
  574. data/lib/frameworks/sproutcore/frameworks/foundation/delegates/inline_text_field.js +92 -0
  575. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +1 -1
  576. data/lib/frameworks/sproutcore/frameworks/foundation/english.lproj/label.css +5 -0
  577. data/lib/frameworks/sproutcore/frameworks/foundation/gestures/pinch.js +1 -1
  578. data/lib/frameworks/sproutcore/frameworks/foundation/gestures/swipe.js +1 -1
  579. data/lib/frameworks/sproutcore/frameworks/foundation/gestures/tap.js +6 -2
  580. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_mixin.js +1 -1
  581. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +239 -126
  582. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/button.js +4 -350
  583. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/collection_content.js +1 -1
  584. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +1 -1
  585. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +217 -0
  586. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/control.js +17 -186
  587. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/editable.js +3 -7
  588. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +345 -287
  589. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/gestureable.js +1 -1
  590. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editable.js +249 -59
  591. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor.js +197 -0
  592. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor_delegate.js +177 -114
  593. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_text_field.js +404 -340
  594. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inner_frame.js +1 -1
  595. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +1 -1
  596. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/string.js +7 -0
  597. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/tree_item_content.js +47 -47
  598. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/validatable.js +1 -1
  599. data/lib/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +205 -200
  600. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/container.js +1 -1
  601. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/helpers/sizing.js +174 -0
  602. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +16 -32
  603. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/render_delegate.js +375 -6
  604. data/lib/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +1 -1
  605. data/lib/frameworks/sproutcore/frameworks/foundation/system/cookie.js +6 -0
  606. data/lib/frameworks/sproutcore/frameworks/foundation/system/core_query.js +8 -1
  607. data/lib/frameworks/sproutcore/frameworks/foundation/system/exception_handler.js +1 -1
  608. data/lib/frameworks/sproutcore/frameworks/foundation/system/gesture.js +1 -1
  609. data/lib/frameworks/sproutcore/frameworks/foundation/system/image_queue.js +1 -1
  610. data/lib/frameworks/sproutcore/frameworks/foundation/system/math.js +1 -1
  611. data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +34 -26
  612. data/lib/frameworks/sproutcore/frameworks/foundation/system/request.js +44 -29
  613. data/lib/frameworks/sproutcore/frameworks/foundation/system/response.js +1 -1
  614. data/lib/frameworks/sproutcore/frameworks/foundation/system/routes.js +1 -1
  615. data/lib/frameworks/sproutcore/frameworks/foundation/system/staticqueue.js +6 -0
  616. data/lib/frameworks/sproutcore/frameworks/foundation/system/task_queue.js +1 -1
  617. data/lib/frameworks/sproutcore/frameworks/foundation/system/text_selection.js +1 -1
  618. data/lib/frameworks/sproutcore/frameworks/foundation/system/time.js +6 -5
  619. data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +1 -1
  620. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/colors.js +7 -0
  621. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/misc.js +28 -7
  622. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/range.js +7 -0
  623. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_measurement.js +7 -0
  624. data/lib/frameworks/sproutcore/frameworks/foundation/tasks/preload_bundle.js +1 -1
  625. data/lib/frameworks/sproutcore/frameworks/foundation/tasks/task.js +1 -1
  626. data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/tree/outline_case.js +1 -1
  627. data/lib/frameworks/sproutcore/frameworks/foundation/tests/controllers/tree/selection_support.js +1 -1
  628. data/lib/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/methods.js +1 -1
  629. data/lib/frameworks/sproutcore/frameworks/foundation/tests/debug/control_test_pane/ui.js +1 -1
  630. data/lib/frameworks/sproutcore/frameworks/foundation/tests/delegates/inline_text_field/inline_text_field.js +150 -0
  631. data/lib/frameworks/sproutcore/frameworks/foundation/tests/integration/creating_views.js +1 -1
  632. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/content_display.js +6 -0
  633. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/{control → content_value_support}/content.js +8 -8
  634. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/control/displayProperties.js +1 -1
  635. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/beginEditing.js +194 -0
  636. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/commitEditing.js +150 -0
  637. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editable/discardEditing.js +151 -0
  638. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/beginEditing.js +114 -0
  639. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/commitEditing.js +151 -0
  640. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/discardEditing.js +152 -0
  641. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/api.js +1 -1
  642. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js +10 -9
  643. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +6 -1
  644. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/string.js +6 -0
  645. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/validatable/ui.js +1 -1
  646. data/lib/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/flat_case.js +59 -59
  647. data/lib/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/group_case.js +114 -114
  648. data/lib/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/outline_case.js +74 -74
  649. data/lib/frameworks/sproutcore/frameworks/foundation/tests/render_delegates/render_delegate.js +78 -0
  650. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/cookie.js +4 -1
  651. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/setClass.js +6 -0
  652. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/math.js +1 -1
  653. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/request.js +6 -0
  654. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/routes.js +6 -0
  655. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/task_queue.js +8 -2
  656. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/user_defaults.js +6 -0
  657. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/utils/pointInElement.js +6 -0
  658. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/utils/range.js +6 -0
  659. data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/credit_card.js +6 -0
  660. data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/date.js +1 -1
  661. data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/not_empty.js +1 -1
  662. data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/number.js +6 -0
  663. data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/password.js +6 -0
  664. data/lib/frameworks/sproutcore/frameworks/foundation/tests/validators/validator.js +6 -0
  665. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/methods.js +1 -1
  666. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +1 -1
  667. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +1 -1
  668. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +7 -15
  669. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +1 -1
  670. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/nextValidKeyView.js +1 -1
  671. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +1 -1
  672. data/lib/frameworks/sproutcore/frameworks/foundation/validators/credit_card.js +1 -1
  673. data/lib/frameworks/sproutcore/frameworks/foundation/validators/date.js +1 -1
  674. data/lib/frameworks/sproutcore/frameworks/foundation/validators/date_time.js +1 -1
  675. data/lib/frameworks/sproutcore/frameworks/foundation/validators/email.js +1 -1
  676. data/lib/frameworks/sproutcore/frameworks/foundation/validators/not_empty.js +1 -1
  677. data/lib/frameworks/sproutcore/frameworks/foundation/validators/number.js +1 -1
  678. data/lib/frameworks/sproutcore/frameworks/foundation/validators/password.js +1 -1
  679. data/lib/frameworks/sproutcore/frameworks/foundation/validators/positive_integer.js +2 -1
  680. data/lib/frameworks/sproutcore/frameworks/foundation/validators/validator.js +1 -1
  681. data/lib/frameworks/sproutcore/frameworks/foundation/views/container.js +1 -1
  682. data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +1 -1
  683. data/lib/frameworks/sproutcore/frameworks/foundation/views/image.js +3 -3
  684. data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +47 -33
  685. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +28 -4
  686. data/lib/frameworks/sproutcore/frameworks/handlebars/extensions.js +88 -2
  687. data/lib/frameworks/sproutcore/frameworks/handlebars/extensions/bind.js +100 -46
  688. data/lib/frameworks/sproutcore/frameworks/handlebars/extensions/collection.js +21 -46
  689. data/lib/frameworks/sproutcore/frameworks/handlebars/extensions/view.js +28 -49
  690. data/lib/frameworks/sproutcore/frameworks/handlebars/handlebars.js +62 -28
  691. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffer.js +28 -18
  692. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-buffered.js +5 -0
  693. data/lib/frameworks/sproutcore/frameworks/jquery/jquery-sc.js +5 -0
  694. data/lib/frameworks/sproutcore/frameworks/jquery/tests/set_class.js +40 -0
  695. data/lib/frameworks/sproutcore/frameworks/media/views/audio.js +1 -1
  696. data/lib/frameworks/sproutcore/frameworks/media/views/controls.js +1 -1
  697. data/lib/frameworks/sproutcore/frameworks/media/views/media_slider.js +1 -1
  698. data/lib/frameworks/sproutcore/frameworks/media/views/mini_controls.js +1 -1
  699. data/lib/frameworks/sproutcore/frameworks/media/views/simple_controls.js +1 -1
  700. data/lib/frameworks/sproutcore/frameworks/media/views/video.js +1 -1
  701. data/lib/frameworks/sproutcore/frameworks/mini/license.js +2 -1
  702. data/lib/frameworks/sproutcore/frameworks/runtime/core.js +166 -137
  703. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/base.js +1 -1
  704. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/indexOf.js +1 -1
  705. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/insertAt.js +1 -1
  706. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/objectAt.js +1 -1
  707. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/popObject.js +1 -1
  708. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/pushObject.js +1 -1
  709. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/rangeObserver.js +1 -1
  710. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeAt.js +1 -1
  711. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeObject.js +1 -1
  712. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/replace.js +1 -1
  713. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/shiftObject.js +1 -1
  714. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/unshiftObject.js +1 -1
  715. data/lib/frameworks/sproutcore/frameworks/runtime/license.js +1 -1
  716. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +50 -13
  717. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/comparable.js +7 -4
  718. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +10 -3
  719. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +437 -120
  720. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +24 -25
  721. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +916 -825
  722. data/lib/frameworks/sproutcore/frameworks/runtime/private/chain_observer.js +9 -6
  723. data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +2 -1
  724. data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_set.js +2 -1
  725. data/lib/frameworks/sproutcore/frameworks/runtime/private/property_chain.js +190 -0
  726. data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +88 -95
  727. data/lib/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +2 -2
  728. data/lib/frameworks/sproutcore/frameworks/runtime/system/error.js +13 -11
  729. data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +40 -30
  730. data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +40 -38
  731. data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +100 -98
  732. data/lib/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +5 -2
  733. data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +11 -12
  734. data/lib/frameworks/sproutcore/frameworks/runtime/system/set.js +5 -3
  735. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/IsEqual.js +6 -0
  736. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/beget.js +6 -0
  737. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/clone.js +1 -1
  738. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/compare.js +1 -1
  739. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/console.js +5 -0
  740. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/guidFor.js +6 -0
  741. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/inspect.js +6 -0
  742. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +6 -0
  743. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/keys.js +6 -0
  744. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/makeArray.js +6 -0
  745. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/objectForPropertyPath.js +6 -0
  746. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/tupleForPropertyPath.js +6 -0
  747. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/array.js +1 -1
  748. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/comparable.js +1 -1
  749. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/{enumerable.js → enumerable/enumerable.js} +1 -2
  750. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/enumerable/enumerable_observers.js +92 -0
  751. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/chained.js +32 -19
  752. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observable.js +138 -3
  753. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/observersForKey.js +36 -0
  754. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/propertyChanges.js +6 -0
  755. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/registerDependentKeys.js +33 -1
  756. data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/propertyChanges.js +6 -0
  757. data/lib/frameworks/sproutcore/frameworks/runtime/tests/private/observer_queue/isObservingSuspended.js +1 -1
  758. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +61 -7
  759. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/error.js +6 -0
  760. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/add.js +1 -1
  761. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/addEach.js +1 -1
  762. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/clone.js +1 -1
  763. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/contains.js +1 -1
  764. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/create.js +1 -1
  765. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexAfter.js +1 -1
  766. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/indexBefore.js +1 -1
  767. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/intersects.js +1 -1
  768. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/max.js +1 -1
  769. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/min.js +1 -1
  770. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/rangeStartForIndex.js +1 -1
  771. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/remove.js +1 -1
  772. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/removeEach.js +1 -1
  773. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/without.js +1 -1
  774. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +5 -0
  775. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/base.js +6 -0
  776. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/bindings.js +6 -0
  777. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/concatenated_properties.js +6 -0
  778. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/enhance.js +19 -0
  779. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/observer_set.js +6 -0
  780. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/create.js +1 -1
  781. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/destroy.js +1 -1
  782. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/objectPropertyDidChange.js +1 -1
  783. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/rangeDidChange.js +1 -1
  784. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/update.js +1 -1
  785. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/run_loop.js +6 -0
  786. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/set.js +6 -0
  787. data/lib/frameworks/sproutcore/frameworks/statechart/core.js +2 -2
  788. data/lib/frameworks/sproutcore/frameworks/statechart/debug/monitor.js +23 -4
  789. data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +661 -54
  790. data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +990 -324
  791. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/advanced/respond_to_event.js +401 -0
  792. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/{advanced_event_handling.js → advanced/without_concurrent_states.js} +1 -5
  793. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{with_concurrent_states/send_event.js → event_handling/basic/with_concurrent_states.js} +0 -0
  794. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{without_concurrent_states/send_event.js → event_handling/basic/without_concurrent_states.js} +0 -0
  795. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{without_concurrent_states/default_responder.js → event_handling/responder/pane.js} +1 -2
  796. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/responder_chain.js +109 -0
  797. data/lib/frameworks/sproutcore/frameworks/statechart/tests/event_handling/responder/root_responder.js +74 -0
  798. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/initial_substate.js +67 -0
  799. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/is_current_state.js +0 -4
  800. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{namespace/access_substates.js → state/namespacing.js} +0 -4
  801. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/plugin/mixin.js +68 -0
  802. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{without_concurrent_states/state_plugin.js → state/plugin/nesting.js} +1 -5
  803. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state/state_observes.js +235 -0
  804. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{async.js → state_transitioning/async/core.js} +0 -0
  805. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{with_concurrent_states/goto_state_async.js → state_transitioning/async/with_concurrent_states.js} +0 -0
  806. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{without_concurrent_states/goto_state_async.js → state_transitioning/async/without_concurrent_states.js} +4 -0
  807. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/initial_substate/core.js +48 -0
  808. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/initial_substate/without_concurrent_states.js +218 -0
  809. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{with_concurrent_states/goto_history_state.js → state_transitioning/history_state/standard/with_concurrent_states.js} +1 -1
  810. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/history_state/standard/without_concurrent_states/context.js +191 -0
  811. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{without_concurrent_states/goto_history_state.js → state_transitioning/history_state/standard/without_concurrent_states/core.js} +0 -0
  812. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{with_concurrent_states/goto_state_advanced.js → state_transitioning/standard/with_concurrent_states/advanced.js} +37 -32
  813. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{with_concurrent_states/goto_state_basic.js → state_transitioning/standard/with_concurrent_states/basic.js} +17 -25
  814. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{with_concurrent_states/goto_state_intermediate.js → state_transitioning/standard/with_concurrent_states/intermediate.js} +22 -21
  815. data/lib/frameworks/sproutcore/frameworks/statechart/tests/state_transitioning/standard/without_concurrent_states/context.js +144 -0
  816. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{without_concurrent_states/goto_state.js → state_transitioning/standard/without_concurrent_states/core.js} +49 -24
  817. data/lib/frameworks/sproutcore/frameworks/statechart/tests/{without_concurrent_states/transient.js → state_transitioning/transient/without_concurrent_states.js} +1 -1
  818. data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/create/assigned_root_state.js +76 -0
  819. data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/create/unassigned_root_state.js +162 -0
  820. data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/destroy.js +73 -0
  821. data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/invoke_state_method.js +241 -0
  822. data/lib/frameworks/sproutcore/frameworks/statechart/tests/statechart/owner.js +236 -0
  823. data/lib/frameworks/sproutcore/frameworks/table/mixins/table_delegate.js +1 -1
  824. data/lib/frameworks/sproutcore/frameworks/table/system/table_column.js +1 -1
  825. data/lib/frameworks/sproutcore/frameworks/table/views/table.js +1 -1
  826. data/lib/frameworks/sproutcore/frameworks/table/views/table_cell.js +1 -1
  827. data/lib/frameworks/sproutcore/frameworks/table/views/table_head.js +1 -1
  828. data/lib/frameworks/sproutcore/frameworks/table/views/table_header.js +1 -1
  829. data/lib/frameworks/sproutcore/frameworks/table/views/table_row.js +1 -1
  830. data/lib/frameworks/sproutcore/frameworks/testing/core.js +1 -1
  831. data/lib/frameworks/sproutcore/frameworks/testing/extras.js +1 -1
  832. data/lib/frameworks/sproutcore/frameworks/testing/system/dump.js +1 -1
  833. data/lib/frameworks/sproutcore/frameworks/testing/system/equiv.js +1 -1
  834. data/lib/frameworks/sproutcore/frameworks/testing/system/plan.js +7 -1
  835. data/lib/frameworks/sproutcore/frameworks/testing/system/runner.js +1 -1
  836. data/lib/frameworks/sproutcore/frameworks/testing/system/suite.js +1 -1
  837. data/lib/frameworks/sproutcore/frameworks/testing/utils.js +1 -1
  838. data/lib/frameworks/sproutcore/license.js +2 -1
  839. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/24px/button.css +10 -6
  840. data/lib/frameworks/sproutcore/themes/ace/resources/button/ace/button.css +5 -0
  841. data/lib/frameworks/sproutcore/themes/ace/resources/button/dark/button.js +3 -1
  842. data/lib/frameworks/sproutcore/themes/ace/resources/button/popup/select.css +1 -0
  843. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/picker.js +1 -1
  844. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/workspace.js +1 -1
  845. data/lib/frameworks/sproutcore/themes/ace/resources/radio/radio.css +0 -6
  846. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.css +2 -1
  847. data/lib/frameworks/sproutcore/themes/ace/resources/split/split.css +29 -3
  848. data/lib/frameworks/sproutcore/themes/ace/theme.js +17 -1
  849. data/lib/frameworks/sproutcore/themes/empty_theme/theme.js +1 -1
  850. data/lib/frameworks/sproutcore/themes/iphone_theme/english.lproj/strings.js +1 -1
  851. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/Panel.drawit/Data +0 -0
  852. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/Panel.drawit/QuickLook/Preview.jpg +0 -0
  853. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/Panel.drawit/QuickLook/Thumbnail.jpg +0 -0
  854. 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
  855. 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
  856. 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
  857. 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
  858. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/10.png +0 -0
  859. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/100.png +0 -0
  860. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/102.png +0 -0
  861. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/110.png +0 -0
  862. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/120.png +0 -0
  863. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/127.png +0 -0
  864. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/18.png +0 -0
  865. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/19.png +0 -0
  866. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/2.png +0 -0
  867. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/24.png +0 -0
  868. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/26.png +0 -0
  869. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/27.png +0 -0
  870. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/28.png +0 -0
  871. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/29.png +0 -0
  872. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/30.png +0 -0
  873. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/31.png +0 -0
  874. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/33.png +0 -0
  875. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/37.png +0 -0
  876. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/41.png +0 -0
  877. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/16/99.png +0 -0
  878. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/10.png +0 -0
  879. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/100.png +0 -0
  880. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/102.png +0 -0
  881. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/110.png +0 -0
  882. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/120.png +0 -0
  883. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/127.png +0 -0
  884. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/18.png +0 -0
  885. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/19.png +0 -0
  886. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/2.png +0 -0
  887. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/24.png +0 -0
  888. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/26.png +0 -0
  889. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/27.png +0 -0
  890. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/28.png +0 -0
  891. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/29.png +0 -0
  892. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/30.png +0 -0
  893. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/31.png +0 -0
  894. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/33.png +0 -0
  895. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/37.png +0 -0
  896. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/41.png +0 -0
  897. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/24/99.png +0 -0
  898. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/10.png +0 -0
  899. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/100.png +0 -0
  900. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/102.png +0 -0
  901. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/110.png +0 -0
  902. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/120.png +0 -0
  903. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/127.png +0 -0
  904. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/18.png +0 -0
  905. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/19.png +0 -0
  906. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/2.png +0 -0
  907. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/24.png +0 -0
  908. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/26.png +0 -0
  909. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/27.png +0 -0
  910. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/28.png +0 -0
  911. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/29.png +0 -0
  912. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/30.png +0 -0
  913. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/31.png +0 -0
  914. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/33.png +0 -0
  915. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/37.png +0 -0
  916. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/41.png +0 -0
  917. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/32/99.png +0 -0
  918. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/48/10.png +0 -0
  919. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/48/18.png +0 -0
  920. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/48/19.png +0 -0
  921. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/icons/48/2.png +0 -0
  922. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/panel-sprite-x.drawit/Data +0 -0
  923. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/panel-sprite-x.drawit/QuickLook/Preview.jpg +0 -0
  924. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/panel-sprite-x.drawit/QuickLook/Thumbnail.jpg +0 -0
  925. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/panel-sprite-y.drawit/Data +0 -0
  926. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/panel-sprite-y.drawit/QuickLook/Preview.jpg +0 -0
  927. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/panel-sprite-y.drawit/QuickLook/Thumbnail.jpg +0 -0
  928. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/sc-theme-repeat-x-2.psd +0 -0
  929. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/sc-theme-repeat-x.psd +0 -0
  930. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/sc-theme-sprite.psd +0 -0
  931. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/sc-theme-ysprite.psd +0 -0
  932. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/shared-icons.psd +0 -0
  933. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/sproutcore-logo.psd +0 -0
  934. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/Source/sticky-note.psd +0 -0
  935. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/button.css +0 -0
  936. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/checkbox.css +0 -0
  937. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/collection.css +0 -0
  938. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/core.css +0 -0
  939. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/disclosure.css +0 -0
  940. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/icons/mini_222222.png +0 -0
  941. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/icons/mini_454545.png +0 -0
  942. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/icons/mini_888888.png +0 -0
  943. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/icons/mini_ffffff.png +0 -0
  944. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/panels/sprite-x.png +0 -0
  945. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/panels/sprite-y.png +0 -0
  946. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/sc-scroller-repeat-x.png +0 -0
  947. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/sc-scroller-repeat-y.png +0 -0
  948. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/sc-scroller-sprite.png +0 -0
  949. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/sc-theme-repeat-x.png +0 -0
  950. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/sc-theme-ysprite.png +0 -0
  951. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/images/sc-toolbar-view.png +0 -0
  952. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/label.css +0 -0
  953. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/list_item.css +0 -0
  954. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/menu.css +0 -0
  955. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/menu_item_view.css +0 -0
  956. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/pane.css +1 -1
  957. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/panel.css +0 -0
  958. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/picker.css +0 -0
  959. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/progress.css +0 -0
  960. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/radio.css +0 -0
  961. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/scroller.css +0 -0
  962. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/segmented.css +0 -0
  963. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/slider.css +0 -0
  964. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/split_view.css +0 -0
  965. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/tab.css +0 -0
  966. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/table.css +0 -0
  967. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/text_field.css +0 -0
  968. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/toolbar.css +0 -0
  969. data/lib/frameworks/sproutcore/themes/{standard_theme → legacy_theme}/english.lproj/well.css +0 -0
  970. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/button.js +89 -0
  971. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/panel.js +28 -0
  972. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/progress.js +194 -0
  973. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/slider.js +67 -0
  974. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/well.js +27 -0
  975. data/lib/frameworks/sproutcore/themes/legacy_theme/theme.js +13 -0
  976. data/lib/sproutcore/builders.rb +0 -1
  977. data/lib/sproutcore/builders/base.rb +3 -1
  978. data/lib/sproutcore/builders/chance_file.rb +29 -10
  979. data/lib/sproutcore/builders/combine.rb +2 -4
  980. data/lib/sproutcore/builders/javascript.rb +14 -1
  981. data/lib/sproutcore/builders/minify.rb +3 -2
  982. data/lib/sproutcore/builders/module.rb +2 -0
  983. data/lib/sproutcore/helpers/minifier.rb +91 -37
  984. data/lib/sproutcore/helpers/static_helper.rb +26 -10
  985. data/lib/sproutcore/models/target.rb +36 -6
  986. data/lib/sproutcore/tools.rb +26 -20
  987. data/lib/sproutcore/tools/build.rb +2 -1
  988. data/spec/buildtasks/manifest/prepare_build_tasks/chance_2x_spec.rb +100 -0
  989. data/spec/buildtasks/manifest/prepare_build_tasks/chance_spec.rb +17 -13
  990. data/spec/buildtasks/manifest/prepare_build_tasks/combine_spec.rb +3 -3
  991. data/spec/buildtasks/manifest/prepare_build_tasks/packed_2x_indirect_spec.rb +191 -0
  992. data/spec/buildtasks/manifest/prepare_build_tasks/packed_2x_spec.rb +185 -0
  993. data/spec/buildtasks/manifest/prepare_build_tasks/packed_spec.rb +32 -30
  994. data/spec/fixtures/builder_tests/apps/chance_test/resources/force@2x.png +0 -0
  995. data/spec/fixtures/real_world/frameworks/no_2x/resources/test.css +1 -0
  996. data/spec/fixtures/real_world/frameworks/no_2x/resources/test.png +0 -0
  997. data/spec/fixtures/real_world/frameworks/sproutcore/resources/force@2x.png +0 -0
  998. data/spec/lib/builders/chance_file_spec.rb +11 -30
  999. data/sproutcore.gemspec +2 -2
  1000. data/vendor/chance/bin/chance +20 -46
  1001. data/vendor/chance/lib/chance.rb +20 -3
  1002. data/vendor/chance/lib/chance/instance.rb +154 -76
  1003. data/vendor/chance/lib/chance/instance/data_url.rb +85 -0
  1004. data/vendor/chance/lib/chance/instance/javascript.rb +19 -0
  1005. data/vendor/chance/lib/chance/instance/slicing.rb +181 -0
  1006. data/vendor/chance/lib/chance/instance/spriting.rb +311 -0
  1007. data/vendor/chance/lib/chance/parser.rb +24 -20
  1008. data/vendor/chance/lib/tester/test.rb +108 -0
  1009. data/vendor/chance/lib/tester/test_runner.rb +27 -0
  1010. data/vendor/chance/tests/parser/basic/input/test.css +4 -0
  1011. data/vendor/chance/tests/parser/basic/output/test.parsed.css +5 -0
  1012. metadata +255 -195
  1013. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template_view/core.js +0 -85
  1014. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template/checkbox_support.js +0 -20
  1015. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template/collection.js +0 -106
  1016. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/polymorphic_single_attribute.js +0 -183
  1017. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/tests/models/polymorphic/single.js +0 -124
  1018. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/button/ui.js +0 -69
  1019. data/lib/frameworks/sproutcore/themes/ace/resources/button/button.js +0 -75
  1020. data/lib/frameworks/sproutcore/themes/ace/resources/panel/panel.js +0 -20
  1021. data/lib/frameworks/sproutcore/themes/ace/resources/progress/progress.js +0 -78
  1022. data/lib/frameworks/sproutcore/themes/ace/resources/slider/ace/slider.js +0 -56
  1023. data/lib/frameworks/sproutcore/themes/ace/resources/well/well.js +0 -17
  1024. data/lib/sproutcore/builders/chance.rb +0 -64
  1025. data/spec/lib/builders/chance_spec.rb +0 -81
  1026. data/vendor/chance/lib/chance/imager.rb +0 -13
  1027. data/vendor/chance/lib/chance/imagers/data_url.rb +0 -117
  1028. data/vendor/chance/lib/chance/importer.rb +0 -64
  1029. data/vendor/chance/lib/chance/sass_extensions.rb +0 -24
  1030. data/vendor/chance/lib/chance/slicing.rb +0 -166
@@ -1,139 +1,202 @@
1
1
  // ==========================================================================
2
2
  // Project: SproutCore - JavaScript Application Framework
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
- This delegate controls the editing capability of a view. It allows you to customize when a view that uses it is allowed to begin and end editing, as well as the type of editor it uses.
9
+ @protocol
10
+
11
+ This delegate is consulted by view implementing SC.InlineEditable and
12
+ SC.InlineEditor and controls the lifecycle of the editor as well as begin
13
+ notified of events in the editing process.
10
14
 
11
15
  By default it edits an SC.LabelView using an SC.InlineTextFieldView.
16
+
17
+ All methods will be attempted to be called on the inlineEditorDelegate of the
18
+ inlineEditor or inlineEditable first and then the target view if it didn't exist
19
+ on the delegate. This allows you to implement default delegate handlers on your
20
+ editable view.
12
21
 
13
22
  @since SproutCore 1.0
14
23
  */
15
24
  SC.InlineEditorDelegate = {
16
- // quack
17
- isInlineEditorDelegate: YES,
25
+ /** REQUIRED FUNCTIONS **/
26
+ /*
27
+ * @method
28
+ *
29
+ * Acquires an editor for the view. This may simply create one and return it,
30
+ * or you may implement more complex lifecycle management like pooling of
31
+ * editors.
32
+ *
33
+ * May return null if for some reason an editor could not be required.
34
+ *
35
+ * @params {SC.InlineEditable} the view that is begin edited
36
+ * @returns {SC.InlineEditor} an editor for the view
37
+ */
38
+ acquireEditor:function(editable) {},
18
39
 
19
- /**
20
- The exampleInlineTextFieldView property is by default a
21
- SC.InlineTextFieldView but it can be set to a customized inline text field
22
- view.
40
+ /*
41
+ * @method
42
+ *
43
+ * Releases an editor. This may simply remove it from its parent and dispose of
44
+ * it, or you may implement more complex lifecycle management like pooling of
45
+ * editors.
46
+ *
47
+ * @params {SC.InlineEditor} the editor being released
48
+ * @returns {Boolean} YES if it was successfully released
49
+ */
50
+ releaseEditor:function(editor) {},
23
51
 
24
- @property
25
- @type {SC.View}
26
- @default {SC.InlineTextFieldView}
52
+ /** OPTIONAL FUNCTIONS **/
53
+ /*
54
+ * @method
55
+ *
56
+ * Determines if the view should be allowed to begin editing and returns YES if
57
+ * so. Isn't passed the editor because it hasn't been created yet. If this
58
+ * method is not defined the editor will assume it is always allowed to begin
59
+ * editing.
60
+ *
61
+ * @params {SC.InlineEditable} the view that is attempting to begin editing
62
+ * @params {Object} the current value of the view
63
+ * @returns {Boolean} YES if the view is allowed to edit
27
64
  */
28
- exampleInlineTextFieldView: SC.InlineTextFieldView,
29
-
30
- inlineEditorClassName: null,
65
+ inlineEditorShouldBeginEditing: function(editable, value) {},
31
66
 
32
- /**
33
- If you want the inline editor to be multiline set this property to YES.
34
-
35
- @type {Boolean}
36
- @default {NO}
67
+ /*
68
+ * @method
69
+ *
70
+ * Notifies the delegate that the view was allowed to begin editing and the
71
+ * editor has been acquired, but hasn't actually done any setup. Most views will
72
+ * set their current value as the starting value of the editor here, and
73
+ * depending on the editor other configuration options may be available.
74
+ *
75
+ * Since the editor's value hasn't been configured with, the value passed here will be
76
+ * the default value of the editor.
77
+ *
78
+ * @params {SC.InlineEditable} the view being edited
79
+ * @params {SC.InlineEditor} the editor for the view
80
+ * @params {Object} the value the editor will start with
37
81
  */
38
- isInlineEditorMultiline: NO,
82
+ inlineEditorWillBeginEditing:function(editor, value, editable) {},
39
83
 
40
- /**
41
- Call to tell the delegate to begin editing the given view. Returns YES if it was able to begin editing.
42
-
43
- @param {SC.View} the view the user is trying to edit
44
- @param {Object} the current value of the view
45
- @returns {Boolean} YES if the view began editing
84
+ /*
85
+ * @method
86
+ *
87
+ * Notifies the delegate that the editor has finished setting up itself and is
88
+ * now editing.
89
+ *
90
+ * @params {SC.InlineEditable} the view being edited
91
+ * @params {SC.InlineEditor} the editor for the view
92
+ * @params {Object} the value the editor started with
46
93
  */
47
- beginEditingFor: function(view, startingValue) {
48
- if(!view.get('isEditable')) return NO;
49
- if(view.get('isEditing')) return YES;
50
-
51
- var el = view.$(),
52
- value = view.get('value') || '',
53
- f = SC.viewportOffset(el[0]),
54
- frameTemp = view.convertFrameFromView(view.get('frame'), null),
55
- exampleEditor = this.get('exampleInlineTextFieldView');
56
- f.width=frameTemp.width;
57
- f.height=frameTemp.height;
58
-
59
- view.inlineEditorWillBeginEditing();
60
-
61
- exampleEditor.beginEditing({
62
- pane: view.get('pane'),
63
- frame: f,
64
- layout: view.get('layout'),
65
- exampleInlineTextFieldView: exampleEditor,
66
- delegate: this,
67
- inlineEditorClassName: this.get('inlineEditorClassName'),
68
- exampleElement: el,
69
- value: startingValue,
70
- multiline: this.get('isInlineEditorMultiline'),
71
- isCollection: NO
72
- });
73
-
74
- exampleEditor.editor._target = view;
75
- },
76
-
77
- /**
78
- The view the editor view should attach itself to as child. For example if you are editing a row of a formview inside a scrollview, you should attach to the scrollview's containerview or the formview's div, not the label itself. This way you will scroll with the target view but also be above it so editors can reuse views.
79
-
80
- @param {SC.View} the view attempting to begin editing
81
- @returns {SC.View} the view that the editor should be a child of
94
+ inlineEditorDidBeginEditing:function(editor, value, editable) {},
95
+
96
+ /*
97
+ * @method
98
+ *
99
+ * Determines if the editor is allowed to end editing and store its value back
100
+ * to the view being edited. If this method is not defined the editor will
101
+ * assume it is always allowed to commit.
102
+ *
103
+ * @params {SC.InlineEditable} the view being edited
104
+ * @params {SC.InlineEditor} the editor for the view
105
+ * @params {Object} the value the editor is attempting to commit
82
106
  */
83
- parentViewForEditor: function(view) {
84
- return view.get('parentView');
85
- },
107
+ inlineEditorShouldCommitEditing:function(editor, value, editable) {},
86
108
 
87
- /**
88
- Called to tell the editor associated with the given view that the user wants to end editing and save their changes.
89
-
90
- @param {SC.View} the view whose edit mode is being commited
91
- @param {Object} the current value of the view
92
- @returns {Boolean} YES if the editor was able to end and commit
109
+ /*
110
+ * @method
111
+ *
112
+ * Notifies the delegate that the editor was allowed to commit and is going to
113
+ * commit but hasn't actually performed any cleanup yet.
114
+ *
115
+ * @params {SC.InlineEditable} the view being edited
116
+ * @params {SC.InlineEditor} the editor for the view
117
+ * @params {Object} the value the editor ended with
93
118
  */
94
- commitEditingFor: function(view) {
95
- if(!view.get('isEditing')) return NO;
96
-
97
- // TODO: figure out how a validator works without a form
98
- return SC.InlineTextFieldView.commitEditing();
99
- },
100
-
101
- /**
102
- Called to tell the editor associated with the given view that the user wants to end editing and discard their changes.
103
-
104
- @param {SC.View} the view whose edit mode is ending
105
- @param {Object} the current value of the view
106
- @returns {Boolean} YES if the editor was able to end
119
+ inlineEditorWillCommitEditing:function(editor, value, editable) {},
120
+
121
+ /*
122
+ * @method
123
+ *
124
+ * Notifies the delegate that the editor was allowed to commit and finished
125
+ * performing any cleanup necessary. This is where you should save the final
126
+ * value back to your view after performing any necessary transforms to it.
127
+ *
128
+ * @params {SC.InlineEditable} the view being edited
129
+ * @params {SC.InlineEditor} the editor for the view
130
+ * @params {Object} the value the editor ended with
107
131
  */
108
- discardEditingFor: function(view) {
109
- if(!view.get('isEditing')) return NO;
110
-
111
- return SC.InlineTextFieldView.discardEditing();
112
- },
113
-
114
- /*************
115
- Calls from the editor to the view
116
- These only have did, not will, because the delegate decides what to do with them.
117
- *************/
118
- // notify the view that its editor began editing
119
- inlineEditorDidBeginEditing: function(editor) {
120
- var view = editor._target;
121
-
122
- return view.inlineEditorDidBeginEditing(editor);
123
- },
124
-
125
- // returns true if the finalvalue is valid, false otherwise
126
- // this is seperate function from inlineEditorDidCommitEditing because it could just be validiting without actually commiting, for example if a field validates as you type
127
- inlineEditorShouldCommitEditing: function(editor, finalValue) {
128
- var view = editor._target;
129
-
130
- return view.inlineEditorShouldCommitEditing(editor, finalValue);
131
- },
132
-
133
- // ask the view if finalvalue is valid, and then commit it and cleanup the editor
134
- inlineEditorDidEndEditing: function(editor, finalValue) {
135
- var view = editor._target;
136
-
137
- return view.inlineEditorDidEndEditing(editor, finalValue);
138
- }
132
+ inlineEditorDidCommitEditing:function(editor, value, editable) {},
133
+
134
+ /*
135
+ * @method
136
+ *
137
+ * Determines if the editor is allowed to discard its current value and end
138
+ * editing. If this method is undefined the editor will assume it is always
139
+ * allowed to discard.
140
+ *
141
+ * @params {SC.InlineEditable} the view being edited
142
+ * @params {SC.InlineEditor} the editor for the view
143
+ */
144
+ inlineEditorShouldDiscardEditing:function(editor, editable) {},
145
+
146
+ /*
147
+ * @method
148
+ *
149
+ * Notifies the delegate that the view was allowed to discard editing but
150
+ * hasn't performed any cleanup yet.
151
+ *
152
+ * @params {SC.InlineEditable} the view being edited
153
+ * @params {SC.InlineEditor} the editor for the view
154
+ */
155
+ inlineEditorWillDiscardEditing:function(editor, editable) {},
156
+
157
+ /*
158
+ * @method
159
+ *
160
+ * Notifies the delegate that the editor has finished cleaning up after
161
+ * discarding editing.
162
+ *
163
+ * @params {SC.InlineEditable} the view being edited
164
+ * @params {SC.InlineEditor} the editor for the view
165
+ */
166
+ inlineEditorDidDiscardEditing:function(editor, editable) {},
167
+
168
+ /** BACKWARDS COMPATIBILITY **/
169
+ /*
170
+ * @method
171
+ *
172
+ * Notifies the delegate that the editor will end editing but hasn't cleaned up
173
+ * yet. This can be caused by both commit or discard. If it was a discard, the
174
+ * value will be the same as the current value of the editable view. Otherwise,
175
+ * it was a commit and the value will be the value of the editor.
176
+ *
177
+ * This method is for backwards compatibility and should not be used.
178
+ *
179
+ * @params {SC.InlineEditable} the view being edited
180
+ * @params {SC.InlineEditor} the editor for the view
181
+ * @params {Object} the final value of the edit
182
+ */
183
+ inlineEditorWillEndEditing: function(editor, value, editable) {},
184
+
185
+ /*
186
+ * @method
187
+ *
188
+ * Notifies the delegate that the editor has cleaned up after editing. This can
189
+ * be caused by both commit or discard. If it was a discard, the value will be
190
+ * the same as the current value of the editable view. Otherwise, it was a
191
+ * commit and the value will be the value of the editor.
192
+
193
+ *
194
+ * This method is for backwards compatibility and should not be used.
195
+ *
196
+ * @params {SC.InlineEditable} the view being edited
197
+ * @params {SC.InlineEditor} the editor for the view
198
+ * @params {Object} the final value of the edit
199
+ */
200
+ inlineEditorDidEndEditing: function(editor, value, editable) {}
139
201
  };
202
+
@@ -1,10 +1,13 @@
1
- // ========================================================================
2
- // SproutCore
3
- // copyright 2006-2011 Strobe Inc.
4
- // ========================================================================
1
+ // ==========================================================================
2
+ // Project: SproutCore - JavaScript Application Framework
3
+ // Copyright: ©2006-2011 Strobe Inc. and contributors.
4
+ // ©2008-2011 Apple Inc. All rights reserved.
5
+ // License: Licensed under MIT license (see license.js)
6
+ // ==========================================================================
5
7
 
6
8
  sc_require('views/text_field') ;
7
9
  sc_require('system/utils/misc') ;
10
+ sc_require('delegates/inline_text_field');
8
11
 
9
12
  /**
10
13
  @class
@@ -19,55 +22,63 @@ sc_require('system/utils/misc') ;
19
22
 
20
23
  h2. Using the Inline Editor in Your Own Views
21
24
 
22
- If you need to use the inline editor with custom views you have written,
23
- you will need to work with the class methods to begin, commit, and discard
24
- editing changes.
25
+ To use the inlineEditor on a custom view you should mixin SC.InlineEditable on
26
+ it. SC.InlineTextFieldView is the default editor so you do not need to do any
27
+ other setup. The class methods beginEditing, commitEditing, and discardEditing
28
+ still exist for backwards compatibility but should not be used on new views.
29
+
30
+ {{{
31
+ MyProject.MyView = SC.View.extend(SC.InlineEditable, {
32
+ });
33
+ }}}
25
34
 
26
35
  h3. Starting the Editor
27
36
 
28
37
  The inline editor works by positioning itself over the top of your view
29
- with the same offset, width, and font information. As the user types, the
30
- field will automatically resize vertically to make room for the user's text.
31
-
32
- To activate the inline editor you must call beginEdition() with at least
33
- the target view you want the editor to position itself on top of:
34
-
38
+ with the same offset, width, and font information.
39
+
40
+ To start it simply call beginEditing on your view.
41
+
35
42
  {{{
36
- SC.InlineTextFieldView.beginEditing({
37
- target: view, validator: validator
38
- }) ;
43
+ myView.beginEditing();
39
44
  }}}
45
+
46
+ By default, if the inline editor is currently in use elsewhere, it will automatically
47
+ close itself over there and begin editing for your view instead. This behavior
48
+ is defined by the inlineEditorDelegate of your view, and can be changed by using
49
+ one other than the default.
40
50
 
41
- You can pass a variety of options to this method to configure the inline
42
- editor behavior, including:
51
+ h2. Customizing the editor
43
52
 
44
- - *frame* The editors initial frame in viewport coordinates. (REQ)
45
- - *delegate* Delegate to receive update notices. (REQ)
53
+ The editor has several parameters that can be used to customize it to your
54
+ needs. These options should be set on the editor passed to your delegate's (or
55
+ view's) inlineEditorWillBeginEditing method:
56
+
57
+ - *exampleFrame* The editors initial frame in viewport coordinates.
46
58
  - *value* Initial value of the edit field.
47
59
  - *exampleElement* A DOM element to use when copying styles.
48
60
  - *multiline* If YES then the hitting return will add to the value instead of exiting the inline editor.
49
- - *selectedRange* The range of text that should be selected. If omitted, then the insertion point will be placed at the end of the value.
50
61
  - *commitOnBlur* If YES then blurring will commit the value, otherwise it will discard the current value. Defaults to YES.
51
62
  - *validator* Validator to be attached to the field.
52
-
53
- If the inline editor is currently in use elsewhere, it will automatically
54
- close itself over there and begin editing for your view instead. The
55
- editor expects your source view to implement the InlineTextFieldViewDelegate
56
- protocol.
63
+
64
+ For backwards compatibility, calling the class method beginEditing with an
65
+ options hash will translate the values in the hash to the correct settings on
66
+ the editor.
57
67
 
58
68
  h2. Committing or Discarding Changes
59
69
 
60
70
  Normally the editor will automatically commit or discard its changes
61
- whenever the user exits the edit mode. If you need to force the editor to
62
- end editing, you can do so by calling commitEditing() or discardEditing():
71
+ whenever the user exits the edit mode by pressing enter, escape, or clicking
72
+ elsewhere on the page. If you need to force the editor to end editing, you can
73
+ do so by calling commitEditing() or discardEditing():
63
74
 
64
75
  {{{
65
- SC.InlineTextFieldView.commitEditing();
66
- SC.InlineTextFieldView.discardEditing();
76
+ myView.commitEditing();
77
+ myView.discardEditing();
67
78
  }}}
68
79
 
69
80
  Both methods will try to end the editing context and will call the
70
- relevant delegate methods on the delegate you passed to beginEditing().
81
+ relevant delegate methods on the inlineEditorDelegate set on your view.
71
82
 
72
83
  Note that it is possible an editor may not be able to commit editing
73
84
  changes because either the delegate disallowed it or because its validator
@@ -79,200 +90,260 @@ sc_require('system/utils/misc') ;
79
90
  @extends SC.TextFieldView
80
91
  @since SproutCore 1.0
81
92
  */
82
- SC.InlineTextFieldView = SC.TextFieldView.extend(
93
+ SC.InlineTextFieldView = SC.TextFieldView.extend(SC.InlineEditor,
83
94
  /** @scope SC.InlineTextFieldView.prototype */ {
84
-
95
+ classNames: ['inline-editor'],
85
96
  /**
86
97
  Over-write magic number from SC.TextFieldView
87
98
  */
88
99
  _topOffsetForFirefoxCursorFix: 0,
89
100
 
90
- /**
91
- Invoked by the class method to begin editing on an inline editor.
92
-
93
- You generally should call the class method beginEditing() instead of
94
- this one since it will make sure to create and use the shared editor
95
- instance.
101
+ /*
102
+ * @private
103
+ * @method
104
+ *
105
+ * Scans the given element for presentation styles from css.
106
+ *
107
+ * @params {element} the dom element to scan
108
+ * @returns {String} a style string that was copied from the element
109
+ */
110
+ _updateViewStyle: function(el) {
111
+ var styles = '',
112
+ s=SC.getStyle(el,'font-size');
113
+
114
+ if(s && s.length>0) styles = styles + "font-size: "+ s + " !important; ";
115
+
116
+ s=SC.getStyle(el,'font-family');
117
+ if(s && s.length>0) styles = styles + "font-family: " + s + " !important; ";
118
+
119
+ s=SC.getStyle(el,'font-weight');
120
+ if(s && s.length>0) styles = styles + "font-weight: " + s + " !important; ";
121
+
122
+ s=SC.getStyle(el,'z-index');
123
+ if(s && s.length>0) styles = styles + "z-index: " + s + " !important; ";
96
124
 
97
- @params options {Hash} hash of options for editing
98
- @returns {SC.InlineTextFieldView|Boolean} this if editor began editing,
99
- NO if it failed.
125
+ s=SC.getStyle(el,'line-height');
126
+ if(s && s.length>0) styles = styles + "line-height: " + s + " !important; ";
127
+
128
+ s=SC.getStyle(el,'text-align');
129
+ if(s && s.length>0) styles = styles + "text-align: " + s + " !important; ";
130
+
131
+ s=SC.getStyle(el,'top-margin');
132
+ if(s && s.length>0) styles = styles + "top-margin: " + s + " !important; ";
133
+
134
+ s=SC.getStyle(el,'bottom-margin');
135
+ if(s && s.length>0) styles = styles + "bottom-margin: " + s + " !important; ";
136
+
137
+ s=SC.getStyle(el,'left-margin');
138
+ if(s && s.length>0) styles = styles + "left-margin: " + s + " !important; ";
139
+
140
+ s=SC.getStyle(el,'right-margin');
141
+ if(s && s.length>0) styles = styles + "right-margin: " + s + " !important; ";
142
+
143
+ return styles;
144
+ },
145
+
146
+ /*
147
+ * @private
148
+ * @method
149
+ *
150
+ * Scans the given element for positioning styles from css.
151
+ *
152
+ * @params {element} the dom element to scan
153
+ * @returns {String} a style string copied from the element
100
154
  */
101
- beginEditing: function(options) {
155
+ _updateViewPaddingStyle: function(el) {
156
+ var styles = '',
157
+ s=SC.getStyle(el,'padding-top');
102
158
 
103
- // options are required
104
- //@if(debug)
105
- if (!options) throw "InlineTextField.beginEditing() requires options";
106
- //@end
159
+ if(s && s.length>0) styles = styles + "top: "+ s + " !important; ";
107
160
 
108
- // can't begin editing again if already editing
109
- if (this.get('isEditing')) return NO ;
110
-
111
- var layout={}, pane, tarLayout, paneElem, del;
161
+ s=SC.getStyle(el,'padding-bottom');
162
+ if(s && s.length>0) styles = styles + "bottom: " + s + " !important; ";
112
163
 
113
- del = options.delegate ;
114
- this.set('editorDelegate', del) ;
115
-
116
- this.beginPropertyChanges();
117
-
118
- this.set('isEditing', YES) ;
119
- this.set('escapeHTML', options.escapeHTML) ;
120
-
121
- this._optframe = options.frame ;
122
- this._optIsCollection = options.isCollection;
123
- this._exampleElement = options.exampleElement ;
164
+ s=SC.getStyle(el,'padding-left');
165
+ if(s && s.length>0) styles = styles + "left: " + s + " !important; ";
124
166
 
125
- if (!this._optframe || !del) {
126
- throw "At least frame and delegate options are required for inline editor";
127
- }
167
+ s=SC.getStyle(el,'padding-right');
168
+ if(s && s.length>0) styles = styles + "right: " + s + " !important; ";
128
169
 
129
- this._originalValue = options.value;
170
+ return styles;
171
+ },
172
+
173
+ /*
174
+ * @private
175
+ * @method
176
+ *
177
+ * Scans the given element for styles and copies them into a style element in
178
+ * the head. This allows the styles to be overriden by css matching classNames
179
+ * on the editor.
180
+ *
181
+ * @params {element} the dom element to copy
182
+ */
183
+ updateStyle: function(exampleElement) {
184
+ if(exampleElement.length) exampleElement = exampleElement[0];
130
185
 
131
- if (SC.none(this._originalValue)){
132
- this._originalValue = "";
133
- }
134
- this._multiline = (options.multiline !== undefined) ? options.multiline : NO ;
135
- if (this._multiline) {
136
- this.set('isTextArea', YES);
137
- } else {
138
- this.set('isTextArea', NO);
139
- }
140
- this._commitOnBlur = (options.commitOnBlur !== undefined) ? options.commitOnBlur : YES ;
186
+ // the styles are placed into a style element so that they can be overridden
187
+ // by your css based on the editor className
188
+ var styleElement = document.getElementById('sc-inline-text-field-style'),
189
+ s = this._updateViewStyle(exampleElement),
190
+ p = this._updateViewPaddingStyle(exampleElement),
141
191
 
142
- // set field values
143
- this.set('validator', options.validator) ;
144
- this.set('value', this._originalValue) ;
145
- //this.set('selectedRange', options.selectedRange || { start: this._originalValue.length, length: 0 }) ;
192
+ str = ".inline-editor input{"+s+"}" +
193
+ ".inline-editor textarea{"+s+"}" +
194
+ ".inline-editor .padding{"+p+"}";
146
195
 
147
- // add to window.
196
+ // the style element is lazily created
197
+ if(!styleElement) {
198
+ var head = document.getElementsByTagName('head')[0];
199
+ styleElement = document.createElement('style');
148
200
 
201
+ styleElement.type= 'text/css';
202
+ styleElement.media= 'screen';
203
+ styleElement.id = 'sc-inline-text-field-style';
149
204
 
150
- // First try to find the pane in the options hash.
151
- // If it's not available, ask the delegate for it.
152
- pane = options.pane;
153
- if (!pane) {
154
- pane = del.get('pane');
205
+ head.appendChild(styleElement);
155
206
  }
156
- paneElem = pane.$()[0];
157
207
 
158
- layout.height = this._optframe.height;
159
- layout.width=this._optframe.width;
208
+ // now that we know the element exists, write the styles
209
+
210
+ // IE method
211
+ if(styleElement.styleSheet) styleElement.styleSheet.cssText= str;
212
+ // other browsers
213
+ else styleElement.innerHTML = str;
214
+ },
215
+
216
+ /*
217
+ * @method
218
+ *
219
+ * Positions the editor over the passed view.
220
+ *
221
+ * If you want to tweak the positioning of the editor, you may pass a custom
222
+ * frame for it to position itself on.
223
+ *
224
+ * Additionally, if your view is a member of a collectionView, the isCollection
225
+ * flag should be set to YES.
226
+ *
227
+ * @param {SC.View} the view to be positioned over
228
+ * @param {Hash} optional custom frame
229
+ * @param {Boolean} if the view is a member of a collection
230
+ */
231
+ positionOverTargetView: function(target, isCollection, pane, frame, elem) {
232
+ if(!pane) pane = target.get('pane');
233
+
234
+ if(!elem) elem = target.$()[0];
160
235
 
161
- tarLayout = options.layout;
162
- if (!tarLayout) {
163
- tarLayout = del.get('layout');
236
+ // if we weren't given a frame, build one from the target
237
+ if(!frame) {
238
+ var tempFrame = target.get('frame');
239
+
240
+ frame = SC.offset(elem);
241
+
242
+ frame.height = tempFrame.height;
243
+ frame.width = tempFrame.width;
164
244
  }
165
- if (this._optIsCollection && tarLayout.left) {
166
- layout.left=this._optframe.x-tarLayout.left-paneElem.offsetLeft-1;
245
+
246
+ var layout={},
247
+ paneElem = pane.$()[0],
248
+ tarLayout = target.get('layout');
249
+
250
+ layout.height = frame.height;
251
+ layout.width = frame.width;
252
+
253
+ if (isCollection && tarLayout.left) {
254
+ layout.left=frame.x-tarLayout.left-paneElem.offsetLeft-1;
167
255
  if(SC.browser.msie==7) layout.left--;
168
256
  } else {
169
- layout.left=this._optframe.x-paneElem.offsetLeft-1;
257
+ layout.left=frame.x-paneElem.offsetLeft-1;
170
258
  if(SC.browser.msie==7) layout.left--;
171
259
  }
172
-
173
- if (this._optIsCollection && tarLayout.top) {
174
- layout.top=this._optframe.y-tarLayout.top-paneElem.offsetTop;
260
+
261
+ if (isCollection && tarLayout.top) {
262
+ layout.top=frame.y-tarLayout.top-paneElem.offsetTop;
175
263
  if(SC.browser.msie==7) layout.top=layout.top-2;
176
264
  } else {
177
- layout.top=this._optframe.y-paneElem.offsetTop;
178
- if(SC.browser.msie==7) layout.top=layout.top-2;
265
+ layout.top=frame.y-paneElem.offsetTop;
266
+ if(SC.browser.msie==7) layout.top=layout.top-2;
179
267
  }
180
268
 
181
269
  this.set('layout', layout);
182
-
183
- this.set('parentNode', pane);
184
- // get style for view.
185
-
186
- pane.appendChild(this);
187
-
188
- this._className = options.inlineEditorClassName;
189
- if(this._className && !this.hasClassName(this._className)) {
190
- this.setClassName(this._className,true);
270
+ },
271
+
272
+ /*
273
+ * Flag indicating whether the editor is allowed to use multiple lines.
274
+ * If set to yes it will be rendered using a text area instead of a text input.
275
+ *
276
+ * @type {Boolean}
277
+ */
278
+ multiline: NO,
279
+
280
+ /*
281
+ * Translates the multiline flag into something TextFieldView understands.
282
+ *
283
+ * @type {Boolean}
284
+ */
285
+ isTextArea: function() {
286
+ return this.get('multiline');
287
+ }.property('multiline').cacheable(),
288
+
289
+ /*
290
+ * Begins editing the given view, positions the editor on top of the view, and
291
+ * copies the styling of the view onto the editor.
292
+ *
293
+ * @params {SC.InlineEditable} the view being edited
294
+ *
295
+ * @returns {Boolean} YES on success
296
+ */
297
+ beginEditing: function(original, label) {
298
+ if(!original(label)) return NO;
299
+
300
+ var pane = label.get('pane'), elem = this.get('exampleElement');
301
+
302
+ this.beginPropertyChanges();
303
+
304
+ // if we have an exampleElement we need to make sure it's an actual
305
+ // DOM element not a jquery object
306
+ if(elem) {
307
+ if(elem.length) elem = elem[0];
191
308
  }
192
-
193
- // this.resizeToFit(this.getFieldValue()) ;
309
+
310
+ // if we don't have an element we need to get it from the target
311
+ else {
312
+ elem = label.$()[0];
313
+ }
314
+
315
+ this.updateStyle(elem);
316
+
317
+ this.positionOverTargetView(label, this.get('isCollection'), pane, this.get('exampleFrame'), elem);
194
318
 
195
319
  this._previousFirstResponder = pane ? pane.get('firstResponder') : null;
196
320
  this.becomeFirstResponder();
197
321
  this.endPropertyChanges() ;
198
-
199
- // TODO: remove? if(SC.browser.mozilla)this.invokeOnce(this.becomeFirstResponder) ;
200
-
201
- // Become first responder and notify the delegate after run loop completes
202
- this.invokeLast(function() {
203
- del.inlineEditorDidBeginEditing(this);
204
- });
205
-
322
+
206
323
  return YES;
207
- },
208
-
209
-
210
- /**
211
- Tries to commit the current value of the field and end editing.
212
-
213
- Do not use this method, use the class method instead.
214
-
215
- @param {Event} evt that triggered the commit to happen
216
- @returns {Boolean}
217
- */
218
- commitEditing: function(evt) {
219
- // try to validate field. If it fails, return false.
220
- if (!SC.$ok(this.validateSubmit())) return NO ;
221
- return this._endEditing(this.get('value'), evt) ;
222
- },
223
-
224
- /**
225
- Tries to discard the current value of the field and end editing.
226
-
227
- Do not use this method, use the class method instead.
324
+ }.enhance(),
228
325
 
229
- @returns {Boolean}
230
- */
231
- discardEditing: function() {
232
- return this._endEditing(this._originalValue) ;
233
- },
234
-
235
326
  /**
236
327
  Invoked whenever the editor loses (or should lose) first responder
237
328
  status to commit or discard editing.
238
329
 
239
330
  @returns {Boolean}
240
331
  */
332
+ // TODO: this seems to do almost the same thing as fieldDidBlur
241
333
  blurEditor: function(evt) {
242
334
  if (!this.get('isEditing')) return YES ;
243
- return this._commitOnBlur ? this.commitEditing(evt) : this.discardEditing(evt);
335
+ return this.commitOnBlur ? this.commitEditing() : this.discardEditing();
244
336
  },
245
337
 
246
- /** @private
338
+ /**
339
+ @method
340
+ @private
341
+
247
342
  Called by commitEditing and discardEditing to actually end editing.
248
343
 
249
- @param {String} finalValue that will be set as value
250
- @param {Event} evt that triggered the end editing to occur
251
- @param {Boolean} didDiscard if called from discardEditing
252
- @returns {Boolean} NO if editing did not exit
253
344
  */
254
- _endEditing: function(finalValue, evt, didDiscard) {
255
- // get permission from the delegate.
256
- var del = this.get('editorDelegate') ;
257
-
258
- if (!this.get('isEditing') || !del) return YES ;
259
-
260
- if (!del.inlineEditorShouldCommitEditing(this, finalValue)) {
261
- //@if(debug)
262
- SC.Logger.warn('InlineTextField._endEditing() cannot end without inlineEditorShouldCommitEditing() on the delegate.');
263
- //@end
264
- return NO;
265
- }
266
- // OK, we are allowed to end editing. Notify delegate of final value
267
- // and clean up.
268
- del.inlineEditorDidEndEditing(this, finalValue);
269
-
270
- // If the delegate set a class name, let's clean it up:
271
- if(this._className) this.setClassName(this._className, false);
272
-
273
- // cleanup cached values
274
- this._originalValue = this._delegate = this._exampleElement = this._optframe = this._className = null ;
275
- this.set('isEditing', NO) ;
345
+ _endEditing: function(original) {
346
+ var ret = original();
276
347
 
277
348
  // resign first responder if not done already. This may call us in a
278
349
  // loop but since isEditing is already NO, nothing will happen.
@@ -283,50 +354,12 @@ SC.InlineTextFieldView = SC.TextFieldView.extend(
283
354
  } else this.resignFirstResponder();
284
355
  }
285
356
  this._previousFirstResponder = null ; // clearout no matter what
286
-
287
- if (this.get('parentNode')) this.removeFromParent() ;
288
-
289
- return YES ;
290
- },
291
-
292
- /**
293
- YES if the editor is currently visible and editing.
294
-
295
- @property {Boolean}
296
- */
297
- isEditing: NO,
298
-
299
- // TODO: make this function work for 1.0
300
- // /**
301
- // Resizes the visible textarea to fix the actual text in the text area.
302
- //
303
- // This method works by keeping a div positioned immediately beneath the
304
- // text area with an opacity of 0 that contains the same text as the
305
- // input text field itself. This is then used to calculate the required
306
- // size for the text area.
307
- // */
308
- // resizeToFit: function(newValue)
309
- // {
310
- //
311
- //
312
- //
313
- // var sizer = this.outlet('sizer');
314
- // var field = this.outlet('field');
315
- //
316
- // // XSS attack waiting to happen... escape the form input;
317
- // var text = (newValue || '').escapeHTML();
318
- //
319
- // // convert the textarea's newlines into something comparable for the sizer
320
- // // div appending a space to give a line with no text a visible height.
321
- // text = text.replace((/ {2}/g), "&nbsp; ").replace(/\n/g, "<br />&nbsp;");
322
- //
323
- // // get the text size
324
- // sizer.set('innerHTML', text || "&nbsp;");
325
- // sizer.recacheFrames() ;
326
- // var h = sizer.get('frame').height;
327
- // this.set('frame', { height: h }) ;
328
- // },
329
-
357
+
358
+ return ret;
359
+ }.enhance(),
360
+
361
+ // TODO: make textArea automatically resize to fit content
362
+
330
363
  /** @private */
331
364
  mouseDown: function(e) {
332
365
  arguments.callee.base.call(this, e) ;
@@ -405,7 +438,7 @@ SC.InlineTextFieldView = SC.TextFieldView.extend(
405
438
  // edit.
406
439
  /** @private */
407
440
  insertNewline: function(evt) {
408
- if (this._multiline) {
441
+ if (this.get('isTextArea')) {
409
442
  evt.allowDefault();
410
443
  return arguments.callee.base.call(this, evt) ;
411
444
  } else {
@@ -426,11 +459,11 @@ SC.InlineTextFieldView = SC.TextFieldView.extend(
426
459
  // editable, begins editing.
427
460
  /** @private */
428
461
  insertTab: function(evt) {
429
- var delegate = this._delegate; // removed by commitEditing()
462
+ var target = this.target; // removed by commitEditing()
430
463
  this.resignFirstResponder();
431
464
  this.commitEditing() ;
432
- if(delegate){
433
- var next = delegate.get('nextValidKeyView');
465
+ if(target){
466
+ var next = target.get('nextValidKeyView');
434
467
  if(next && next.beginEditing) next.beginEditing();
435
468
  }
436
469
  return YES ;
@@ -438,11 +471,11 @@ SC.InlineTextFieldView = SC.TextFieldView.extend(
438
471
 
439
472
  /** @private */
440
473
  insertBacktab: function(evt) {
441
- var delegate = this._delegate; // removed by commitEditing()
474
+ var target = this.target; // removed by commitEditing()
442
475
  this.resignFirstResponder();
443
476
  this.commitEditing() ;
444
- if(delegate){
445
- var prev = delegate.get('previousValidKeyView');
477
+ if(target){
478
+ var prev = target.get('previousValidKeyView');
446
479
  if(prev && prev.beginEditing) prev.beginEditing();
447
480
  }
448
481
  return YES ;
@@ -459,131 +492,162 @@ SC.InlineTextFieldView = SC.TextFieldView.extend(
459
492
  evt.allowDefault();
460
493
  return YES ;
461
494
  }
462
-
463
495
  });
464
496
 
465
-
466
- SC.InlineTextFieldView.mixin(
467
- /** @scope SC.InlineTextFieldView */ {
468
-
469
- /** Call this method to make the inline editor begin editing for your view.
470
-
471
- If the inline editor is already being used for another value it will
472
- try to dismiss itself from the other editor and attach itself to the
473
- new view instead. If this process fails for some reason (for example
474
- if the other view did not allow the view to end editing) then this
475
- method will return false.
476
-
477
- You should pass a set of options that at least includes the target
478
- view. See class definition for options.
479
-
480
- @params options {Hash} hash of options for editing
481
- @returns {Boolean} YES if editor began editing, NO if it failed.
497
+ /*
498
+ * These class methods allow you to manage an editor without implementing
499
+ * SC.Editable. They exist for backwards compatibility and should no longer be
500
+ * used.
501
+ */
502
+ SC.mixin(SC.InlineTextFieldView, {
503
+ inlineEditorDelegate: SC.InlineTextFieldDelegate,
504
+
505
+ label: null,
506
+ editor: null,
507
+
508
+ /*
509
+ * @method
510
+ *
511
+ * This method creates a singleton editor editing your view. Delegate methods
512
+ * will be called on your view as normal.
513
+ *
514
+ * To trigger compatibility mode, call this method with a hash of options. The
515
+ * required options are:
516
+ *
517
+ {{{
518
+ SC.InlineTextFieldView.beginEditing({
519
+ delegate: myView,
520
+ frame: myView.get('frame'),
521
+ exampleElement: myView.$()
522
+ }) ;
523
+ }}}
524
+ *
525
+ - *delegate* The view that should be notified of events on the editor.
526
+ - *frame* The frame of the view that you want the editor to position itself over.
527
+ - *exampleElement* A DOM element to use when copying styles.
528
+
529
+ * Other options may be passed to further customize the editor:
530
+ *
531
+ - *multiline* If YES then the hitting return will add to the value instead of exiting the inline editor.
532
+ - *commitOnBlur* If YES then blurring will commit the value, otherwise it will discard the current value. Defaults to YES.
533
+ - *validator* Validator to be attached to the field.
534
+
535
+ The editor expects your source view to implement the InlineTextFieldViewDelegate protocol.
536
+
537
+ @params {Object} a hash of options or the view to edit
538
+ @returns {Boolean} whether editing began successfully
482
539
  */
483
- beginEditing: function(options) {
484
- this._exampleElement = options.exampleElement ;
485
-
486
- // If exampleInlineTextFieldView is set, load this class otherwise use
487
- // the default, this.
488
- var klass = options.exampleInlineTextFieldView
489
- ? options.exampleInlineTextFieldView : this,
490
- layout = options.layout,
491
- s = this.updateViewStyle(),
492
- p = this.updateViewPaddingStyle();
493
-
494
- var str= ".inline-editor input{"+s+"} ";
495
- str= str+".inline-editor textarea{"+s+"} .inline-editor .padding{"+p+"}";
496
- var pa= document.getElementsByTagName('head')[0],
497
- el= document.createElement('style');
498
- el.type= 'text/css';
499
- el.media= 'screen';
500
- if(el.styleSheet) el.styleSheet.cssText= str;// IE method
501
- else el.appendChild(document.createTextNode(str));// others
502
- pa.appendChild(el);
503
-
504
- this.editor = klass.create({ classNames: 'inline-editor', layout: layout}) ;
505
- return this.editor.beginEditing(options) ;
506
-
540
+ beginEditing: function(label) {
541
+ var del, editor, options, value, labelProxy;
542
+
543
+ // for backwards compatibility, we allow you to pass an options hash with options that will be set on the editor
544
+ if(SC.typeOf(label) === SC.T_HASH) {
545
+ options = label;
546
+
547
+ if(!options.delegate || !options.exampleElement || !options.frame) {
548
+ SC.error("Delegate, exampleElement, and frame options are required.");
549
+ return NO;
550
+ }
551
+
552
+ label = options.delegate;
553
+ value = options.value;
554
+ }
555
+
556
+ else {
557
+ value = label.get('value');
558
+ }
559
+
560
+ labelProxy = SC.beget(label);
561
+
562
+ // these functions may have side effects, so they need to have their
563
+ // this reference assigned to the original object before proxying
564
+ labelProxy.mixin({
565
+ inlineEditorWillBeginEditing: function() {
566
+ if(label.inlineEditorWillBeginEditing) label.inlineEditorWillBeginEditing.apply(label, arguments);
567
+ },
568
+
569
+ inlineEditorDidBeginEditing: function() {
570
+ if(label.inlineEditorDidBeginEditing) label.inlineEditorDidBeginEditing.apply(label, arguments);
571
+ },
572
+
573
+ inlineEditorWillCommitEditing: function(editor, value, editable) {
574
+ if(label.inlineEditorWillCommitEditing) label.inlineEditorWillCommitEditing(editor, value, editable);
575
+ if(label.inlineEditorWillEndEditing) label.inlineEditorWillEndEditing(editor, value);
576
+ },
577
+
578
+ inlineEditorDidCommitEditing: function(editor, value, editable) {
579
+ if(label.inlineEditorDidCommitEditing) label.inlineEditorDidCommitEditing(editor, value, editable);
580
+ if(label.inlineEditorDidEndEditing) label.inlineEditorDidEndEditing(editor, value);
581
+
582
+ SC.InlineTextFieldView._endEditing();
583
+ },
584
+
585
+ inlineEditorWillDiscardEditing: function(editor, editable) {
586
+ if(label.inlineEditorWillDiscardEditing) label.inlineEditorWillDiscardEditing(editor, editable);
587
+ if(label.inlineEditorWillEndEditing) label.inlineEditorWillEndEditing(editor, this.get('value'));
588
+ },
589
+
590
+ inlineEditorDidDiscardEditing: function(editor, editable) {
591
+ if(label.inlineEditorDidDiscardEditing) label.inlineEditorDidDiscardEditing(editor, editable);
592
+ if(label.inlineEditorDidEndEditing) label.inlineEditorDidEndEditing(editor, this.get('value'));
593
+
594
+ SC.InlineTextFieldView._endEditing();
595
+ }
596
+ });
597
+
598
+ if(label.inlineEditorShouldBeginEditing && !label.inlineEditorShouldBeginEditing(label, value)) return NO;
599
+
600
+ this.editor = editor = this.inlineEditorDelegate.acquireEditor(label);
601
+
602
+ editor.set('value', value);
603
+
604
+ if(options) {
605
+ editor.set('exampleElement', options.exampleElement);
606
+ editor.set('exampleFrame', options.frame);
607
+ editor.set('multiline', options.multiline);
608
+ editor.set('escapeHTML', options.escapeHTML);
609
+ editor.set('isCollection', options.isCollection);
610
+ editor.set('commitOnBLur', options.commitOnBlur);
611
+ editor.set('validator', options.validator);
612
+ }
613
+
614
+ if(editor) return editor.beginEditing(labelProxy);
615
+ else return NO;
507
616
  },
508
-
509
- /** Save the current value of the inline editor and exit edit mode.
510
-
511
- If the inline editor is being used it will try to end the editing and
512
- close. If the inline editor could not end for some reason (for example
513
- if the delegate did not allow the editing to end) then this method will
514
- return NO.
515
-
516
- @returns {Boolean} YES if the inline editor ended or no edit was in
517
- progress.
617
+
618
+ /*
619
+ * @method
620
+ *
621
+ * Ends editing on the current editor and saves the value back to the
622
+ * view being edited.
623
+ *
624
+ * @returns {Boolean} whether the editor was allowed to commit successfully
518
625
  */
519
626
  commitEditing: function() {
520
- return this.editor ? this.editor.commitEditing() : YES ;
627
+ return this.inlineEditorDelegate.editor ? this.inlineEditorDelegate.editor.commitEditing() : NO;
521
628
  },
522
629
 
523
- /** Discard the current value of the inline editor and exit edit mode.
524
-
525
- If the inline editor is in use, this method will try to end the editing,
526
- restoring the original value of the target view. If the inline editor
527
- could not end for some reason (for example if the delegate did not
528
- allow editing to end) then this method will return NO.
529
-
530
- @returns {Boolean} YES if the inline editor ended or no edit was in progress.
630
+ /*
631
+ * @method
632
+ *
633
+ * Ends editing on the current editor without saving the value.
634
+ *
635
+ * @returns {Boolean} whether the editor was allowed to discard successfully
531
636
  */
532
637
  discardEditing: function() {
533
- return this.editor ? this.editor.discardEditing() : YES ;
534
- },
535
-
536
- /** @private */
537
- updateViewStyle: function() {
538
- var el = this._exampleElement[0],
539
- styles = '',
540
- s=SC.getStyle(el,'font-size');
541
- if(s && s.length>0) styles = styles + "font-size: "+ s + " !important; ";
542
- s=SC.getStyle(el,'font-family');
543
- if(s && s.length>0) styles = styles + "font-family: " + s + " !important; ";
544
- s=SC.getStyle(el,'font-weight');
545
- if(s && s.length>0) styles = styles + "font-weight: " + s + " !important; ";
546
- s=SC.getStyle(el,'z-index');
547
- if(s && s.length>0) styles = styles + "z-index: " + s + " !important; ";
548
- s=SC.getStyle(el,'line-height');
549
- if(s && s.length>0) styles = styles + "line-height: " + s + " !important; ";
550
- s=SC.getStyle(el,'text-align');
551
- if(s && s.length>0) styles = styles + "text-align: " + s + " !important; ";
552
- s=SC.getStyle(el,'top-margin');
553
- if(s && s.length>0) styles = styles + "top-margin: " + s + " !important; ";
554
- s=SC.getStyle(el,'bottom-margin');
555
- if(s && s.length>0) styles = styles + "bottom-margin: " + s + " !important; ";
556
- s=SC.getStyle(el,'left-margin');
557
- if(s && s.length>0) styles = styles + "left-margin: " + s + " !important; ";
558
- s=SC.getStyle(el,'right-margin');
559
- if(s && s.length>0) styles = styles + "right-margin: " + s + " !important; ";
560
-
561
- return styles;
638
+ return this.inlineEditorDelegate.editor ? this.inlineEditorDelegate.editor.discardEditing() : NO;
562
639
  },
563
640
 
564
- /** @private */
565
- updateViewPaddingStyle: function() {
566
- var el = this._exampleElement[0] ;
567
- var styles = '';
568
- var s=SC.getStyle(el,'padding-top');
569
- if(s && s.length>0) styles = styles + "top: "+ s + " !important; ";
570
- s=SC.getStyle(el,'padding-bottom');
571
- if(s && s.length>0) styles = styles + "bottom: " + s + " !important; ";
572
- s=SC.getStyle(el,'padding-left');
573
- if(s && s.length>0) styles = styles + "left: " + s + " !important; ";
574
- s=SC.getStyle(el,'padding-right');
575
- if(s && s.length>0) styles = styles + "right: " + s + " !important; ";
576
-
577
- return styles;
578
- },
579
-
580
-
581
- /**
582
- The current shared inline editor. This property will often remain NULL
583
- until you actually begin editing for the first time.
584
-
585
- @property {SC.InlineTextFieldView}
641
+ /*
642
+ * @private
643
+ * @method
644
+ *
645
+ * Cleans up the current editor and editing context.
586
646
  */
587
- editor: null
588
-
589
- }) ;
647
+ _endEditing: function() {
648
+ this.inlineEditorDelegate.releaseEditor(this.editor);
649
+
650
+ this.editor = null;
651
+ }
652
+ });
653
+