sproutcore 1.6.0.rc.2-java → 1.6.0.1-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (390) hide show
  1. data/CHANGELOG +12 -0
  2. data/VERSION.yml +1 -1
  3. data/bin/sc-docs +6 -1
  4. data/lib/buildtasks/target.rake +1 -1
  5. data/lib/frameworks/sproutcore/Buildfile +5 -1
  6. data/lib/frameworks/sproutcore/CHANGELOG.md +175 -1
  7. data/lib/frameworks/sproutcore/apps/test_controls/controllers/select.js +12 -0
  8. data/lib/frameworks/sproutcore/apps/test_controls/resources/select_page.js +19 -5
  9. data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +28 -31
  10. data/lib/frameworks/sproutcore/frameworks/ajax/system/response.js +9 -2
  11. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/controller.js +21 -1
  12. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/responder_context.js +1 -1
  13. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/template_helpers/checkbox_support.js +6 -1
  14. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/template_helpers/text_field_support.js +26 -8
  15. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/keyboard.js +2 -0
  16. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane.js +12 -5
  17. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/template.js +25 -9
  18. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +157 -5
  19. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +7 -6
  20. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +9 -3
  21. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/sparse_array.js +8 -8
  22. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/string.js +104 -4
  23. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/theme.js +3 -56
  24. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/utils.js +4 -2
  25. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/object/content_destroyed.js +59 -0
  26. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/string.js +41 -1
  27. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/template_helpers/text_field_support.js +10 -2
  28. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/panes/template.js +16 -1
  29. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/template/handlebars.js +1 -1
  30. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/clippingFrame.js +11 -0
  31. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/didAppendToDocument.js +18 -2
  32. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/insertBefore.js +10 -6
  33. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/keyboard.js +18 -1
  34. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/template_collection.js +9 -1
  35. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +9 -4
  36. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/keyboard.js +15 -3
  37. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/manipulation.js +14 -8
  38. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/theming.js +8 -18
  39. data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +12 -2
  40. data/lib/frameworks/sproutcore/frameworks/datastore/mixins/relationship_support.js +296 -0
  41. data/lib/frameworks/sproutcore/frameworks/datastore/models/child_record.js +1 -1
  42. data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +330 -326
  43. data/lib/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +22 -1
  44. data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +1 -1
  45. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +614 -614
  46. data/lib/frameworks/sproutcore/frameworks/datastore/tests/data_sources/data_source.js +14 -1
  47. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record.js +3 -1
  48. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_array_complex.js +2 -0
  49. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/nested_record_complex.js +2 -0
  50. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/core_methods.js +20 -13
  51. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +61 -46
  52. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/commitChangesFromNestedStore.js +30 -30
  53. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +24 -24
  54. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/connectDataSource.js +31 -0
  55. data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/pushRelationships.js +1177 -0
  56. data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/localized/system/datetime.js +4 -63
  57. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/border.js +1 -1
  58. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/scrollable.js +1 -1
  59. data/lib/frameworks/sproutcore/frameworks/desktop/panes/alert.js +7 -8
  60. data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +18 -1
  61. data/lib/frameworks/sproutcore/frameworks/desktop/panes/panel.js +9 -0
  62. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drag_data_source.js +3 -3
  63. data/lib/frameworks/sproutcore/frameworks/desktop/protocols/drop_target.js +3 -3
  64. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/button.js +1 -1
  65. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/checkbox.js +1 -1
  66. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/collection.js +1 -1
  67. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/disclosure.js +1 -1
  68. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/image_button.js +1 -1
  69. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/master_detail.js +3 -2
  70. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/menu.js +12 -2
  71. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/panel.js +1 -1
  72. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/picker.js +1 -1
  73. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/progress.js +1 -1
  74. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio.js +1 -1
  75. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/radio_group.js +2 -2
  76. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segment.js +1 -1
  77. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/segmented.js +1 -1
  78. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/slider.js +1 -1
  79. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/toolbar.js +1 -1
  80. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/well.js +1 -1
  81. data/lib/frameworks/sproutcore/frameworks/desktop/render_delegates/workspace.js +1 -1
  82. data/lib/frameworks/sproutcore/frameworks/desktop/resources/segmented.css +1 -0
  83. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/alert/ui.js +33 -22
  84. data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/panel/methods.js +20 -1
  85. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +10 -3
  86. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/methods.js +34 -7
  87. data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +14 -15
  88. data/lib/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +40 -14
  89. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +699 -700
  90. data/lib/frameworks/sproutcore/frameworks/desktop/views/list_item.js +2 -2
  91. data/lib/frameworks/sproutcore/frameworks/desktop/views/master_detail.js +11 -1
  92. data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +16 -6
  93. data/lib/frameworks/sproutcore/frameworks/desktop/views/progress.js +0 -1
  94. data/lib/frameworks/sproutcore/frameworks/desktop/views/radio.js +49 -7
  95. data/lib/frameworks/sproutcore/frameworks/desktop/views/select_button.js +9 -0
  96. data/lib/frameworks/sproutcore/frameworks/desktop/views/select_field.js +6 -2
  97. data/lib/frameworks/sproutcore/frameworks/desktop/views/slider.js +4 -26
  98. data/lib/frameworks/sproutcore/frameworks/desktop/views/web.js +20 -19
  99. data/lib/frameworks/sproutcore/frameworks/experimental/Buildfile +2 -0
  100. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/designer/designers/view_designer.js +249 -249
  101. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/mixins/edit_mode.js +13 -5
  102. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/mixins/emptiness.js +53 -37
  103. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/render_delegates/form.js +2 -1
  104. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/render_delegates/form_row.js +3 -11
  105. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/mixins/edit_mode.js +53 -0
  106. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/mixins/emptiness.js +114 -0
  107. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form.js +174 -6
  108. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_row.js +86 -6
  109. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form.js +80 -110
  110. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/views/form_row.js +96 -97
  111. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/README.md +2 -1
  112. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/polymorphism/models/record.js +20 -36
  113. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu.js +121 -0
  114. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/ext/menu_item.js +90 -0
  115. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/mixins/select_view_menu.js +139 -0
  116. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/render_delegates/select_button.js +14 -0
  117. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/ext/menu_resizing.js +25 -0
  118. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/bindings.js +43 -0
  119. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/mixins/select_view_menu/check_selected.js +32 -0
  120. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/popup_button/menu_setup.js +40 -0
  121. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/popup_button/show_menu.js +45 -0
  122. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/select/menu_width.js +49 -0
  123. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/tests/views/select/selected_item.js +191 -0
  124. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/popup_button.js +264 -0
  125. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/select.js +450 -0
  126. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_child.js +14 -6
  127. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/mixins/split_thumb.js +1 -1
  128. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/render_delegates/split.js +1 -1
  129. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/render_delegates/split_divider.js +1 -1
  130. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/split.js +9 -0
  131. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/split_view/views/thumb.js +3 -2
  132. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_resize.js +7 -17
  133. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +1 -1
  134. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/flowed_layout.js +35 -8
  135. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editable.js +1 -1
  136. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor.js +1 -1
  137. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inline_editor_delegate.js +1 -1
  138. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/inner_frame.js +1 -1
  139. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/canvas_image.js +1 -1
  140. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/helpers/sizing.js +2 -0
  141. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/image.js +1 -1
  142. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/label.js +1 -1
  143. data/lib/frameworks/sproutcore/frameworks/foundation/render_delegates/render_delegate.js +6 -6
  144. data/lib/frameworks/sproutcore/frameworks/foundation/resources/images/favicon.ico +0 -0
  145. data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +0 -5
  146. data/lib/frameworks/sproutcore/frameworks/foundation/system/exception_handler.js +4 -2
  147. data/lib/frameworks/sproutcore/frameworks/foundation/system/math.js +2 -1
  148. data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +13 -0
  149. data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_measurement.js +6 -9
  150. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/flowed_layout/tests.js +912 -0
  151. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +36 -7
  152. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +58 -4
  153. data/lib/frameworks/sproutcore/frameworks/foundation/validators/validator.js +1 -3
  154. data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +0 -15
  155. data/lib/frameworks/sproutcore/frameworks/foundation/views/label.js +2 -2
  156. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +25 -14
  157. data/lib/frameworks/sproutcore/frameworks/handlebars/handlebars.js +1 -1
  158. data/lib/frameworks/sproutcore/frameworks/runtime/core.js +15 -9
  159. data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/flatten.js +24 -0
  160. data/lib/frameworks/sproutcore/frameworks/runtime/ext/array.js +2 -1
  161. data/lib/frameworks/sproutcore/frameworks/runtime/ext/function.js +5 -5
  162. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +19 -0
  163. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/copyable.js +3 -2
  164. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +1 -1
  165. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +1 -1
  166. data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +14 -14
  167. data/lib/frameworks/sproutcore/frameworks/runtime/system/error.js +3 -0
  168. data/lib/frameworks/sproutcore/frameworks/runtime/system/logger.js +2 -2
  169. data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +2 -2
  170. data/lib/frameworks/sproutcore/frameworks/runtime/system/range_observer.js +1 -1
  171. data/lib/frameworks/sproutcore/frameworks/runtime/system/run_loop.js +3 -3
  172. data/lib/frameworks/sproutcore/frameworks/runtime/system/set.js +15 -16
  173. data/lib/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +6 -2
  174. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/object/enhance.js +30 -0
  175. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/range_observer/create.js +17 -0
  176. data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +9 -2
  177. data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +3 -1
  178. data/lib/frameworks/sproutcore/frameworks/testing/resources/runner.css +0 -1
  179. data/lib/frameworks/sproutcore/frameworks/yuireset/resources/base.css +80 -0
  180. data/lib/frameworks/sproutcore/frameworks/yuireset/resources/core.css +0 -4
  181. data/lib/frameworks/sproutcore/lib/index.rhtml +2 -1
  182. data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list.css +3 -3
  183. data/lib/frameworks/sproutcore/themes/ace/resources/collection/normal/list_item.css +2 -2
  184. data/lib/frameworks/sproutcore/themes/ace/resources/form/form.css +9 -0
  185. data/lib/frameworks/sproutcore/themes/ace/resources/menu/menu.css +3 -1
  186. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/picker.js +1 -1
  187. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/workspace.js +1 -1
  188. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/button.js +1 -1
  189. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/panel.js +1 -1
  190. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/progress.js +2 -0
  191. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/slider.js +1 -1
  192. data/lib/frameworks/sproutcore/themes/legacy_theme/render_delegates/well.js +1 -1
  193. data/lib/sproutcore/builders/base.rb +5 -1
  194. data/lib/sproutcore/builders/handlebars.rb +12 -1
  195. data/lib/sproutcore/models/target.rb +1 -9
  196. data/lib/sproutcore/rack/proxy.rb +238 -92
  197. data/lib/sproutcore/tools/docs.rb +1 -7
  198. data/spec/fixtures/builder_tests/apps/handlebars_test/Buildfile +1 -0
  199. data/spec/fixtures/builder_tests/apps/handlebars_test/{template.handlebars → templates/template.handlebars} +2 -0
  200. data/spec/lib/builders/handlebars_spec.rb +10 -4
  201. data/sproutcore.gemspec +3 -1
  202. metadata +74 -274
  203. data/design/Technical Notes.graffle/QuickLook/Preview.pdf +0 -0
  204. data/design/Technical Notes.graffle/QuickLook/Thumbnail.tiff +0 -0
  205. data/design/Technical Notes.graffle/data.plist +0 -5534
  206. data/design/Technical Notes.graffle/image8.png +0 -0
  207. data/lib/frameworks/sproutcore/design/CollectionView State Charts.graffle +0 -4848
  208. data/lib/frameworks/sproutcore/design/Design Charts.graffle +0 -16845
  209. data/lib/frameworks/sproutcore/design/Sproutcore_DatastoreDesign.graffle/QuickLook/Preview.pdf +0 -0
  210. data/lib/frameworks/sproutcore/design/Sproutcore_DatastoreDesign.graffle/QuickLook/Thumbnail.tiff +0 -0
  211. data/lib/frameworks/sproutcore/design/Sproutcore_DatastoreDesign.graffle/data.plist +0 -19588
  212. data/lib/frameworks/sproutcore/design/Sproutcore_DatastoreDesign.graffle/image8.png +0 -0
  213. data/lib/frameworks/sproutcore/design/Sproutcore_Design_Template.graffle/QuickLook/Preview.pdf +0 -0
  214. data/lib/frameworks/sproutcore/design/Sproutcore_Design_Template.graffle/QuickLook/Thumbnail.tiff +0 -0
  215. data/lib/frameworks/sproutcore/design/Sproutcore_Design_Template.graffle/data.plist +0 -1452
  216. data/lib/frameworks/sproutcore/design/Sproutcore_Design_Template.graffle/image8.png +0 -0
  217. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/QuickLook/Preview.pdf +0 -0
  218. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/QuickLook/Thumbnail.tiff +0 -0
  219. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/data.plist +0 -24187
  220. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image10.png +0 -0
  221. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image11.png +0 -0
  222. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image13.png +0 -0
  223. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image15.png +0 -0
  224. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image16.png +0 -0
  225. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image17.png +0 -0
  226. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image18.png +0 -0
  227. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image19.png +0 -0
  228. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image22.tiff +0 -0
  229. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image23.png +0 -0
  230. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image24.png +0 -0
  231. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image25.png +0 -0
  232. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image30.png +0 -0
  233. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image31.png +0 -0
  234. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image8.png +0 -0
  235. data/lib/frameworks/sproutcore/design/TestRunner_Design.graffle/image9.png +0 -0
  236. data/lib/frameworks/sproutcore/design/greenhouse-statechart.graffle +0 -9025
  237. data/lib/frameworks/sproutcore/design/iphone-webapp-loading.psd +0 -0
  238. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/english.lproj/default_styles.css +0 -5
  239. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/english.lproj/strings.js +0 -15
  240. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_checkbox_field.js +0 -17
  241. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_field.js +0 -17
  242. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_label.js +0 -17
  243. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_radio_field.js +0 -17
  244. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_text_field.js +0 -17
  245. data/lib/frameworks/sproutcore/themes/ace/designs/dark.psd +0 -0
  246. data/lib/frameworks/sproutcore/themes/ace/designs/light.psd +0 -0
  247. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/18px/active_button.psd +0 -0
  248. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/18px/normal_button.psd +0 -0
  249. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/18px/selected_active_button.psd +0 -0
  250. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/18px/selected_button.psd +0 -0
  251. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/active_button.psd +0 -0
  252. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/active_button_capsule.psd +0 -0
  253. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/active_button_pointer.psd +0 -0
  254. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/normal_button.psd +0 -0
  255. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/normal_button_capsule.psd +0 -0
  256. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/normal_button_pointer.psd +0 -0
  257. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_active_button.psd +0 -0
  258. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_active_button_capsule.psd +0 -0
  259. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_active_button_pointer.psd +0 -0
  260. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_button.psd +0 -0
  261. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_button_capsule.psd +0 -0
  262. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/24px/selected_button_pointer.psd +0 -0
  263. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/active_button.psd +0 -0
  264. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/active_button_pointer.psd +0 -0
  265. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/normal_button.psd +0 -0
  266. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/normal_button_pointer.psd +0 -0
  267. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_active_button.psd +0 -0
  268. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_active_button_pointer.psd +0 -0
  269. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_button.psd +0 -0
  270. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/30px/selected_button_pointer.psd +0 -0
  271. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/44px/active_button.psd +0 -0
  272. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/44px/normal_button.psd +0 -0
  273. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/44px/selected_active_button.psd +0 -0
  274. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/ace/44px/selected_button.psd +0 -0
  275. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/active_button.psd +0 -0
  276. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/active_button_capsule.psd +0 -0
  277. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/active_button_pointer.psd +0 -0
  278. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/normal_button.psd +0 -0
  279. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/normal_button_capsule.psd +0 -0
  280. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/normal_button_pointer.psd +0 -0
  281. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_active_button.psd +0 -0
  282. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_active_button_capsule.psd +0 -0
  283. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_active_button_pointer.psd +0 -0
  284. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_button.psd +0 -0
  285. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_button_capsule.psd +0 -0
  286. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/24px/selected_button_pointer.psd +0 -0
  287. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/active_button.psd +0 -0
  288. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/active_button_pointer.psd +0 -0
  289. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/normal_button.psd +0 -0
  290. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/normal_button_pointer.psd +0 -0
  291. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_active_button.psd +0 -0
  292. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_active_button_pointer.psd +0 -0
  293. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_button.psd +0 -0
  294. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/dark/30px/selected_button_pointer.psd +0 -0
  295. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/popup/active_select.psd +0 -0
  296. data/lib/frameworks/sproutcore/themes/ace/designs/psds/button/popup/normal_select.psd +0 -0
  297. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_checked.psd +0 -0
  298. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_checked_active.psd +0 -0
  299. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_mixed.psd +0 -0
  300. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_mixed_active.psd +0 -0
  301. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_unchecked.psd +0 -0
  302. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/14px/checkbox_unchecked_active.psd +0 -0
  303. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_checked.psd +0 -0
  304. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_checked_active.psd +0 -0
  305. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_mixed.psd +0 -0
  306. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_mixed_active.psd +0 -0
  307. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_unchecked.psd +0 -0
  308. data/lib/frameworks/sproutcore/themes/ace/designs/psds/checkbox/ace/16px/checkbox_unchecked_active.psd +0 -0
  309. data/lib/frameworks/sproutcore/themes/ace/designs/psds/collection/source-list/selection.psd +0 -0
  310. data/lib/frameworks/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_closed.psd +0 -0
  311. data/lib/frameworks/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_closed_active.psd +0 -0
  312. data/lib/frameworks/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_open.psd +0 -0
  313. data/lib/frameworks/sproutcore/themes/ace/designs/psds/disclosure/ace/disclosure_open_active.psd +0 -0
  314. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/checkmark.psd +0 -0
  315. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/checkmark_active.psd +0 -0
  316. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/down.psd +0 -0
  317. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/menu.psd +0 -0
  318. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/menu_item.psd +0 -0
  319. data/lib/frameworks/sproutcore/themes/ace/designs/psds/menu/up.psd +0 -0
  320. data/lib/frameworks/sproutcore/themes/ace/designs/psds/panel/panel.psd +0 -0
  321. data/lib/frameworks/sproutcore/themes/ace/designs/psds/panel/pointers.psd +0 -0
  322. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover.psd +0 -0
  323. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover_empty.psd +0 -0
  324. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover_notoolbar.psd +0 -0
  325. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover_pointers.psd +0 -0
  326. data/lib/frameworks/sproutcore/themes/ace/designs/psds/picker/popover/popover_pointers_notoolbar.psd +0 -0
  327. data/lib/frameworks/sproutcore/themes/ace/designs/psds/progress/ace/progress_view_content.psd +0 -0
  328. data/lib/frameworks/sproutcore/themes/ace/designs/psds/progress/ace/progress_view_indeterminate_content.psd +0 -0
  329. data/lib/frameworks/sproutcore/themes/ace/designs/psds/progress/ace/progress_view_track.psd +0 -0
  330. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_active.psd +0 -0
  331. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_mixed.psd +0 -0
  332. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_mixed_active.psd +0 -0
  333. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_selected.psd +0 -0
  334. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_selected_active.psd +0 -0
  335. data/lib/frameworks/sproutcore/themes/ace/designs/psds/radio/radio_unselected.psd +0 -0
  336. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/horizontal/thumb.psd +0 -0
  337. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/horizontal/track_and_arrows.psd +0 -0
  338. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/horizontal/track_and_arrows_active.psd +0 -0
  339. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/vertical/thumb.psd +0 -0
  340. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/vertical/track_and_arrows.psd +0 -0
  341. data/lib/frameworks/sproutcore/themes/ace/designs/psds/scroller/vertical/track_and_arrows_active.psd +0 -0
  342. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_active.psd +0 -0
  343. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_normal.psd +0 -0
  344. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_selected.psd +0 -0
  345. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/18px/segmented_selected_active.psd +0 -0
  346. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_active.psd +0 -0
  347. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_normal.psd +0 -0
  348. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_selected.psd +0 -0
  349. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/24px/segmented_selected_active.psd +0 -0
  350. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_active.psd +0 -0
  351. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_normal.psd +0 -0
  352. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_selected.psd +0 -0
  353. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/30px/segmented_selected_active.psd +0 -0
  354. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_active.psd +0 -0
  355. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_normal.psd +0 -0
  356. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_selected.psd +0 -0
  357. data/lib/frameworks/sproutcore/themes/ace/designs/psds/segmented/44px/segmented_selected_active.psd +0 -0
  358. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/14px/knob.psd +0 -0
  359. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/14px/knob_active.psd +0 -0
  360. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/16px/knob.psd +0 -0
  361. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/16px/knob_active.psd +0 -0
  362. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/22px/knob.psd +0 -0
  363. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/22px/knob_active.psd +0 -0
  364. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/22px/track.psd +0 -0
  365. data/lib/frameworks/sproutcore/themes/ace/designs/psds/slider/ace/track.psd +0 -0
  366. data/lib/frameworks/sproutcore/themes/ace/designs/psds/toolbar/toolbar.psd +0 -0
  367. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch.psd +0 -0
  368. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_handle.psd +0 -0
  369. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_off.psd +0 -0
  370. data/lib/frameworks/sproutcore/themes/ace/designs/switch/switch_on.psd +0 -0
  371. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/Panel.drawit/Data +0 -0
  372. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/Panel.drawit/QuickLook/Preview.jpg +0 -0
  373. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/Panel.drawit/QuickLook/Thumbnail.jpg +0 -0
  374. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/SproutCore Theme Buttons.psd +0 -0
  375. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/ToolbarView Pattern.drawit/Data +0 -0
  376. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/ToolbarView Pattern.drawit/QuickLook/Preview.jpg +0 -0
  377. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/ToolbarView Pattern.drawit/QuickLook/Thumbnail.jpg +0 -0
  378. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/panel-sprite-x.drawit/Data +0 -0
  379. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/panel-sprite-x.drawit/QuickLook/Preview.jpg +0 -0
  380. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/panel-sprite-x.drawit/QuickLook/Thumbnail.jpg +0 -0
  381. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/panel-sprite-y.drawit/Data +0 -0
  382. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/panel-sprite-y.drawit/QuickLook/Preview.jpg +0 -0
  383. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/panel-sprite-y.drawit/QuickLook/Thumbnail.jpg +0 -0
  384. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/sc-theme-repeat-x-2.psd +0 -0
  385. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/sc-theme-repeat-x.psd +0 -0
  386. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/sc-theme-sprite.psd +0 -0
  387. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/sc-theme-ysprite.psd +0 -0
  388. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/shared-icons.psd +0 -0
  389. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/sproutcore-logo.psd +0 -0
  390. data/lib/frameworks/sproutcore/themes/legacy_theme/Source/sticky-note.psd +0 -0
@@ -4,7 +4,7 @@
4
4
  // License: Licensed under MIT license (see license.js)
5
5
  // ==========================================================================
6
6
  /**
7
- Handles propagation of a property inEditMode to all child views.
7
+ Handles propagation of a property isEditing to all child views.
8
8
  */
9
9
  SC.FormsEditMode = {
10
10
 
@@ -37,12 +37,20 @@ SC.FormsEditMode = {
37
37
  */
38
38
  _propagateEditMode: function() {
39
39
  var isEditing = this.get("isEditing");
40
- var cv = this.get("childViews"), idx, len = cv.length, v;
40
+ var cv = this.get("childViews");
41
+ if (!cv) { return; }
42
+
43
+ var idx, len = cv.length, v;
41
44
  for (idx = 0; idx < len; idx++) {
42
45
  v = cv[idx];
43
- if (SC.typeOf(v) === SC.T_STRING || v.isClass) return;
44
- if (v.get("hasEditMode")) v.set("isEditing", isEditing);
46
+
47
+ if (SC.typeOf(v) === SC.T_STRING || v.isClass) {
48
+ return;
49
+ }
50
+ if (v.get("hasEditMode")) {
51
+ v.set("isEditing", isEditing);
52
+ }
45
53
  }
46
54
  }
47
55
 
48
- };
56
+ };
@@ -6,89 +6,105 @@
6
6
 
7
7
  /**
8
8
  @namespace
9
- A view is empty if all of its children are empty. A view is automatically counted as empty if it is not visible and not empty if it is being edited.
10
- All fields must mix this in for it to work properly.
9
+ A view is empty if all of its children are empty. A view is automatically
10
+ counted as empty if it is not visible, and not empty if it is being edited.
11
+
12
+ Any field that does not mix in CalculatesEmptiness will be considered empty.
11
13
  */
12
14
  SC.CalculatesEmptiness = {
13
15
 
14
16
  hasCalculatesEmptiness: YES,
15
17
 
16
- /**
17
- Whether this view should be considered a value. If it is not it will be ignored for calculating emptiness.
18
- */
19
- isValue: YES,
20
-
21
18
  /**
22
19
  YES if the value of the field is empty. Defaults to yes so if you don't override this, it will only consider child fields in emptiness calculation (this is the desired behavior for forms).
23
20
  */
24
21
  isValueEmpty: YES,
25
22
 
26
23
  /**
27
- Defaults to YES so that a field with no children will act properly.
28
- */
29
- _SCCE_childrenAreEmpty: YES,
24
+ Defaults to YES so that a field with no children will act properly.
25
+ */
26
+ _scce_childrenAreEmpty: YES,
30
27
 
28
+ /**
29
+ If YES, all visible fields are considered non-empty when editing.
30
+ @type Boolean
31
+ @default YES
32
+ */
31
33
  isEditingAffectsIsEmpty: YES,
32
-
33
- _SCCE_isEditingDidChange: function() {
34
- if(this.get('isEditingAffectsIsEmpty')) this.propertyDidChange('isEmpty');
34
+
35
+
36
+ _scce_isEditingDidChange: function() {
37
+ if(this.get('isEditingAffectsIsEmpty')) {
38
+ this.notifyPropertyChange('isEmpty');
39
+ }
35
40
  }.observes('isEditing'),
36
41
 
37
42
  /**
38
- YES if the field itself is empty. Even if the value is non-empty, the field can be empty due to isVisible.
39
- */
43
+ YES if the field itself is empty. Even if the value is non-empty, the field can be empty due to isVisible.
44
+ */
40
45
  isEmpty: function() {
41
- // if it's not visible, it counts as empty
42
- // if it's editing, it can't be empty
43
- return !this.get('isValue') || !this.get('isVisible') || ((!this.get('isEditingAffectsIsEmpty') || !this.get('isEditing')) && this.get('isValueEmpty') && this.get('_SCCE_childrenAreEmpty'));
44
- }.property('isValueEmpty', 'isVisible', '_SCCE_childrenAreEmpty').cacheable(),
45
-
46
+ // When not visible, it is empty. Period.
47
+ if (!this.get('isVisible')) {
48
+ return YES;
49
+ }
50
+
51
+ // if it is editing and edit mode affects emptiness, it is NOT empty.
52
+ if (this.get('isEditingAffectsIsEmpty') && this.get('isEditing')) {
53
+ return NO;
54
+ }
55
+
56
+ // otherwise, it is empty if its value AND all children are empty.
57
+ return this.get('isValueEmpty') && this.get('_scce_childrenAreEmpty');
58
+ }.property('isValueEmpty', 'isVisible', '_scce_childrenAreEmpty', 'isEditingAffectsIsEmpty').cacheable(),
59
+
46
60
  /**
47
- When emptiness changes tell the parent to re-check its emptiness.
61
+ When emptiness changes tell the parent to re-check its own emptiness.
48
62
  */
49
- _SCCE_isEmptyDidChange: function() {
63
+ _scce_isEmptyDidChange: function() {
50
64
  var parentView = this.get('parentView');
51
-
52
- if (parentView && parentView._SCCE_emptinessDidChangeFor) parentView._SCCE_emptinessDidChangeFor(this);
65
+
66
+ if (parentView && parentView._scce_emptinessDidChangeFor) {
67
+ parentView._scce_emptinessDidChangeFor(this);
68
+ }
53
69
  }.observes('isEmpty'),
54
-
70
+
55
71
  initMixin: function() {
56
- this._SCCE_emptinessDidChangeFor();
72
+ this._scce_emptinessDidChangeFor();
57
73
  },
58
-
74
+
59
75
  /**
60
76
  Called by fields when their emptiness changes.
61
77
 
62
78
  Always triggers (at end of run loop) a relayout of fields.
63
79
  */
64
- _SCCE_emptinessDidChangeFor: function(child)
65
- {
66
- this.invokeOnce('_SCCE_recalculateChildrensEmptiness');
80
+ _scce_emptinessDidChangeFor: function(child) {
81
+ this.invokeOnce('_scce_recalculateChildrensEmptiness');
67
82
  },
68
83
 
69
84
  /**
70
85
  By default, a view will check all of its fields to determine if it is empty. It is only empty if all of its value fields are.
71
86
  */
72
- _SCCE_recalculateChildrensEmptiness: function()
87
+ _scce_recalculateChildrensEmptiness: function()
73
88
  {
74
- // in short, we get the value fields, if we come across one that is visible and not empty
89
+ // in short, we get the value fields, if we come across one that is not empty
75
90
  // we cannot be empty.
76
91
  var views = this.get('childViews');
77
-
92
+
78
93
  var empty = YES,
79
94
  len = views.length,
80
95
  field;
81
-
96
+
82
97
  for (var i = 0; i < len; i++)
83
98
  {
84
99
  field = views[i];
85
-
86
- if (!field.get('isEmpty')) {
100
+
101
+ if (!field.get('isEmpty') && field.hasCalculatesEmptiness) {
87
102
  empty = NO;
88
103
  break;
89
104
  }
90
105
  }
91
106
 
92
- this.setIfChanged('_SCCE_childrenAreEmpty', empty);
107
+ this.setIfChanged('_scce_childrenAreEmpty', empty);
93
108
  }
94
109
  };
110
+
@@ -6,7 +6,8 @@
6
6
 
7
7
 
8
8
  SC.BaseTheme.formRenderDelegate = SC.RenderDelegate.create({
9
- name: 'form',
9
+ className: 'form',
10
+ flowSpacing: { left: 5, top: 5, bottom: 5, right: 5 },
10
11
 
11
12
  render: function() {
12
13
  },
@@ -5,16 +5,8 @@
5
5
  // ==========================================================================
6
6
 
7
7
  SC.BaseTheme.formRowRenderDelegate = SC.RenderDelegate.create({
8
- name: 'form-row',
9
-
10
- render: function(context) {
11
-
12
- },
13
-
14
- update: function() {
15
-
16
- }
8
+ className: 'form-row',
9
+ flowSpacing: { right: 15, left: 0, top: 0, bottom: 0 },
10
+ flowPadding: 0
17
11
  });
18
12
 
19
- SC.BaseTheme.FORM_ROW_FLOW_SPACING = { right: 15, left: 0, top: 0, bottom: 0 };
20
- SC.BaseTheme.FORM_ROW_FLOW_PADDING = { left: 0, right: 0, bottom: 0, top: 0 };
@@ -0,0 +1,53 @@
1
+ // ==========================================================================
2
+ // Project: SproutCore - JavaScript Application Framework
3
+ // Copyright: ©2008-2011 Apple Inc. All rights reserved.
4
+ // License: Licensed under MIT license (see license.js)
5
+ // ==========================================================================
6
+
7
+ // FormsEditMode propagates the 'isEditing' property to its child view.
8
+ // It is simple enough that we can test it super-cleanly: mix it into
9
+ // an object, provide an array 'childViews' containing other objects,
10
+ // and match.
11
+ //
12
+ // Things to test:
13
+ //
14
+ // - Basic: isEditing defaults to NO, hasEditMode is YES; these are sanity checks.
15
+ // - Changing isEditing propagates to children.
16
+ //
17
+ module("Forms - FormsEditMode mixin");
18
+
19
+ test("Basics", function() {
20
+ var view = SC.Object.create(SC.FormsEditMode, { childViews: [] });
21
+
22
+ // flags like this are often matched without .get, so test that way
23
+ equals(view.hasEditMode, YES, "Has Edit Mode");
24
+
25
+ // this default is good to check, as it is just the kind of thing
26
+ // someone would change when trying to fix a different bug--for instance,
27
+ // if FormView stopped properly initializing in edit mode.
28
+ equals(view.get('isEditing'), NO, "isEditing defaults to NO");
29
+ });
30
+
31
+ test("Changing isEditing propagates to children", function() {
32
+ var view = SC.Object.create(SC.FormsEditMode, {
33
+ childViews: [SC.Object.create(SC.FormsEditMode), SC.Object.create()]
34
+ });
35
+
36
+ equals(view.childViews[0].get('isEditing'), NO, "Child view that hasEditing is in edit mode");
37
+ equals(view.childViews[1].get('isEditing'), undefined, "Child view without hasEditing has not changed");
38
+
39
+ view.set('isEditing', YES);
40
+
41
+ equals(view.childViews[0].get('isEditing'), YES, "Child view that hasEditing is in edit mode");
42
+ equals(view.childViews[1].get('isEditing'), undefined, "Child view without hasEditing has not changed");
43
+ });
44
+
45
+ test("Changing isEditing on something with no children doesn't crash", function() {
46
+ var view = SC.Object.create(SC.FormsEditMode, {
47
+ childViews: null
48
+ });
49
+
50
+ view.set('isEditing', YES);
51
+
52
+ equals(view.childViews, null, "Look ma, no childViews!");
53
+ });
@@ -0,0 +1,114 @@
1
+ // ==========================================================================
2
+ // Project: SproutCore - JavaScript Application Framework
3
+ // Copyright: ©2008-2011 Apple Inc. All rights reserved.
4
+ // License: Licensed under MIT license (see license.js)
5
+ // ==========================================================================
6
+
7
+ module("Forms - CalculatesEmptiness");
8
+
9
+ test("Basics - Walks like a duck and all that", function() {
10
+ var calculatesEmptiness = SC.Object.create(SC.CalculatesEmptiness, { childViews: [] });
11
+
12
+ equals(calculatesEmptiness.hasCalculatesEmptiness, YES, "hasCalculatesEmptiness gets set");
13
+ });
14
+
15
+ test("Is not empty when isValueEmpty is NO", function() {
16
+ SC.RunLoop.begin();
17
+ var o = SC.Object.create(SC.CalculatesEmptiness, {
18
+ isVisible: YES, childViews: []
19
+ });
20
+ SC.RunLoop.end();
21
+
22
+ equals(o.get('isEmpty'), YES, "Starts out as empty because isValueEmpty is YES");
23
+
24
+ SC.RunLoop.begin();
25
+ o.set('isValueEmpty', NO);
26
+ SC.RunLoop.end();
27
+
28
+ equals(o.get('isEmpty'), NO, "No longer empty after changing isValueEmpty");
29
+ });
30
+
31
+ test("Is empty when isVisible is NO", function() {
32
+ SC.RunLoop.begin();
33
+ var o = SC.Object.create(SC.CalculatesEmptiness, {
34
+ isVisible: YES, childViews: [], isValueEmpty: NO
35
+ });
36
+ SC.RunLoop.end();
37
+
38
+ equals(o.get('isEmpty'), NO, "Starts out as empty because isValueEmpty is NO");
39
+
40
+ SC.RunLoop.begin();
41
+ o.set('isVisible', NO);
42
+ SC.RunLoop.end();
43
+
44
+ equals(o.get('isEmpty'), YES, "Now empty after changing isVisible");
45
+ });
46
+
47
+ test("isEditing makes it not empty", function() {
48
+ SC.RunLoop.begin();
49
+ var o = SC.Object.create(SC.CalculatesEmptiness, {
50
+ isVisible: YES, childViews: []
51
+ });
52
+ SC.RunLoop.end();
53
+
54
+ equals(o.get('isEmpty'), YES, "Starts out as empty because isValueEmpty is YES");
55
+
56
+ SC.RunLoop.begin();
57
+ o.set('isEditing', YES);
58
+ SC.RunLoop.end();
59
+
60
+ equals(o.get('isEmpty'), NO, "No longer empty after changing isEditing");
61
+ });
62
+
63
+ test("isEditing does not change emptiness if isEditingAffectsIsEmpty is NO", function() {
64
+ SC.RunLoop.begin();
65
+ var o = SC.Object.create(SC.CalculatesEmptiness, {
66
+ isVisible: YES, childViews: [], isEditing: YES
67
+ });
68
+ SC.RunLoop.end();
69
+
70
+ equals(o.get('isEmpty'), NO, "Starts out as non-empty because isEditing is YES");
71
+
72
+ SC.RunLoop.begin();
73
+ o.set('isEditingAffectsIsEmpty', NO);
74
+ SC.RunLoop.end();
75
+
76
+ equals(o.get('isEmpty'), YES, "Empty after changing isEditingAffectsIsEmpty");
77
+
78
+ });
79
+
80
+ test("Is empty if no children provide hasCalculatesEmptiness", function() {
81
+ SC.RunLoop.begin();
82
+ var o = SC.Object.create(SC.CalculatesEmptiness, {
83
+ isVisible: YES,
84
+ childViews: [
85
+ SC.Object.create(), SC.Object.create()
86
+ ]
87
+ });
88
+ SC.RunLoop.end();
89
+
90
+ equals(o.get('isEmpty'), YES, "Is empty because it has no value and all children don't use emptiness");
91
+ });
92
+
93
+ test("Is empty depends on emptiness of children with hasCalculatesEmptiness", function() {
94
+ SC.RunLoop.begin();
95
+ var o = SC.Object.create(SC.CalculatesEmptiness, {
96
+ isVisible: YES,
97
+ childViews: [
98
+ SC.Object.create(SC.CalculatesEmptiness, { childViews: [], isVisible: YES }), SC.Object.create()
99
+ ]
100
+ });
101
+ SC.RunLoop.end();
102
+
103
+ // needed so that the child view can notify the parent of changes to emptiness
104
+ o.childViews[0].parentView = o;
105
+
106
+ equals(o.get('isEmpty'), YES, "Is empty because the child that hasCalculatesEmptiness is empty");
107
+
108
+ SC.RunLoop.begin();
109
+ o.childViews[0].set('isValueEmpty', NO);
110
+ SC.RunLoop.end();
111
+
112
+ equals(o.childViews[0].get('isEmpty'), NO, "Child view is not empty.");
113
+ equals(o.get('isEmpty'), NO, "Is no longer empty because the child is not empty");
114
+ });
@@ -6,12 +6,180 @@
6
6
 
7
7
  /*globals Forms module test ok equals same stop start */
8
8
 
9
- module("Forms.FormView");
9
+ var Form, FormWithChildren, FormWithLabelWidths;
10
10
 
11
- // TODO: Replace with real unit test for Forms.FormView
12
- test("test description", function() {
13
- var expected = "test";
14
- var result = "test";
15
- equals(result, expected, "test should equal test");
11
+ module("Forms - FormView", {
12
+ setup: function() {
13
+ // a basic form view, no children
14
+ Form = SC.FormView.extend({
15
+
16
+ });
17
+
18
+ // a form with some children
19
+ FormWithChildren = SC.FormView.extend({
20
+ childViews: ('row rowWithLabel rowTestingHumanization rowWithContent ' +
21
+ 'rowWithContentValueKey viewWithContentValueSupport ' +
22
+ 'viewWithContent viewWithContentValueKey plainView').w(),
23
+
24
+ // keep things clean: don't use real form rows. Simulate to test
25
+ // interface between FormRow and Form
26
+ row: SC.View.extend({
27
+ isFormRow: YES
28
+ }),
29
+
30
+ rowWithLabel: SC.View.extend({
31
+ isFormRow: YES,
32
+ label: "Hi"
33
+ }),
34
+
35
+ rowTestingHumanization: SC.View.extend({
36
+ isFormRow: YES
37
+ }),
38
+
39
+ rowWithContent: SC.View.extend({
40
+ isFormRow: YES,
41
+ hasContentValueSupport: YES,
42
+ content: SC.Object.create({ original: YES })
43
+ }),
44
+
45
+ rowWithContentValueKey: SC.View.extend({
46
+ isFormRow: YES,
47
+ hasContentValueSupport: YES,
48
+ contentValueKey: 'hello'
49
+ }),
50
+
51
+ viewWithContentValueSupport: SC.View.extend({
52
+ hasContentValueSupport: YES
53
+ }),
54
+
55
+ viewWithContent: SC.View.extend({
56
+ hasContentValueSupport: YES,
57
+ content: SC.Object.create({ original: YES })
58
+ }),
59
+
60
+ viewWithContentValueKey: SC.View.extend({
61
+ hasContentValueSupport: YES,
62
+ contentValueKey: 'hello'
63
+ }),
64
+
65
+ plainView: SC.View.extend({
66
+ })
67
+
68
+ });
69
+
70
+ FormWithLabelWidths = SC.FormView.extend({
71
+ childViews: 'view1 view2'.w(),
72
+ view1: SC.View.extend({
73
+ isFormRow: YES,
74
+ hasRowLabel: YES,
75
+ rowLabelMeasuredSize: 50
76
+ }),
77
+
78
+ view2: SC.View.extend({
79
+ isFormRow: YES,
80
+ hasRowLabel: YES,
81
+ rowLabelMeasuredSize: 70
82
+ })
83
+ });
84
+ }
85
+
86
+ });
87
+
88
+ test("FormView defaults", function() {
89
+ var form = Form.create();
90
+
91
+ // just sanity-checking
92
+ equals(form.get('layoutDirection'), SC.LAYOUT_VERTICAL, "Default layout direction");
93
+ equals(form.get('canWrap'), NO, "canWrap should default to NO");
94
+ equals(form.get('editsByDefault'), YES, "Forms should edit by default");
95
+
96
+ });
97
+
98
+ test("FormView - editsB'))fault sets isEditing appropriately", function() {
99
+ var formEditsByDefault = Form.create(), formNoEdit = Form.create({ editsByDefault: NO });
100
+
101
+ equals(formEditsByDefault.get('isEditing'), YES, "Form with editsByDefault is editing");
102
+ equals(formNoEdit.get('isEditing'), NO, "Form without editsByDefault is not editing");
16
103
  });
17
104
 
105
+ test("FormView - labels set on rows correctly", function() {
106
+ var form = FormWithChildren.create();
107
+ equals(form.childViews[0].get('label'), "Row", "Label set automatically");
108
+ equals(form.childViews[1].get('label'), "Hi", "Label not set automatically if set directly");
109
+ equals(form.childViews[2].get('label'), "Row Testing Humanization", "Humanization is applied");
110
+ });
111
+
112
+ test("FormView - content set on rows correctly", function() {
113
+ var content = SC.Object.create({
114
+ row: "Hi",
115
+ rowWithContent: "Yeah, this is ignored",
116
+ specialKey: "Some Value",
117
+ plainView: "Yo"
118
+ });
119
+
120
+ SC.RunLoop.begin();
121
+ var form = FormWithChildren.create({ content: content });
122
+ SC.RunLoop.end();
123
+
124
+ equals(form.row.get('content'), content, "Content gets set for normal row");
125
+ equals(form.rowWithContent.getPath('content.original'), YES, "Row with content has original content");
126
+ equals(form.viewWithContentValueSupport.get('content'), content, "Content gets set on view with content value support");
127
+ equals(form.viewWithContent.getPath('content.original'), YES, "Content stays original on row that already has content");
128
+ equals(form.plainView.get('content'), content, "Plain views get content as well");
129
+ });
130
+
131
+ test("FormView - contentValueKey", function() {
132
+ var content = SC.Object.create({
133
+ row: "Hi",
134
+ rowWithContent: "Yeah, this is ignored",
135
+ specialKey: "Some Value",
136
+ plainView: "Yo"
137
+ });
138
+
139
+ SC.RunLoop.begin();
140
+ var form = FormWithChildren.create({ content: content });
141
+ SC.RunLoop.end();
142
+
143
+ // Form rows don't have contentValue support.
144
+ equals(form.row.get('formKey'), 'row', "Row's formKey is set automatically.");
145
+
146
+ // implicit setting of contentValueKey on just any view is a bad idea... so we check that
147
+ // it is NOT set implicitly.
148
+ equals(form.rowWithContent.get('contentValueKey'), undefined, "Row with content value support does not get 'contentValueKey' set");
149
+
150
+ // but if it is set directly, that should still work
151
+ equals(form.rowWithContentValueKey.get('contentValueKey'), 'hello', "Row with existing contentValueKey keeps its original one");
152
+
153
+ // views with content value support likewise should not get the key set directly;
154
+ // so many views can have contentValueSupport, and that behavior may not be what we want
155
+ equals(form.viewWithContentValueSupport.get('contentValueKey'), undefined, "View with content value support gets left alone");
156
+ equals(form.viewWithContentValueKey.get('contentValueKey'), 'hello', "View with existing contentValueKey keeps original");
157
+ equals(form.plainView.get('contentValueKey'), undefined, "contentValueKey not set on plain view");
158
+ equals(form.plainView.get('formKey'), 'plainView', "formKey is set on plain view");
159
+ });
160
+
161
+ test("FormView - Row label width management", function() {
162
+ SC.RunLoop.begin();
163
+ var form = FormWithLabelWidths.create();
164
+ SC.RunLoop.end();
165
+
166
+ equals(form.view1.get('rowLabelSize'), 70, "First row's rowLabelSize is correct");
167
+ equals(form.view2.get('rowLabelSize'), 70, "Second row's rowLabelSize is correct");
168
+
169
+ SC.RunLoop.begin();
170
+ form.view2.set('rowLabelMeasuredSize', 30);
171
+
172
+ // row view will have to tell parent, but since these are not real row views:
173
+ form.rowLabelMeasuredSizeDidChange(form.view2, 30);
174
+
175
+ SC.RunLoop.end();
176
+
177
+
178
+ equals(form.view1.get('rowLabelSize'), 50, "First row's rowLabelSize is correct");
179
+ equals(form.view2.get('rowLabelSize'), 50, "Second row's rowLabelSize is correct");
180
+
181
+ // setting labelWidth directly should make FormView always use that
182
+ form.set('labelWidth', 500);
183
+ equals(form.view1.get('rowLabelSize'), 500, "First row's rowLabelSize is correct");
184
+ equals(form.view2.get('rowLabelSize'), 500, "Second row's rowLabelSize is correct");
185
+ });