sproutcore 1.0.1003 → 1.0.1008

Sign up to get free protection for your applications and to get access to all the features.
Files changed (276) hide show
  1. data/Buildfile +15 -3
  2. data/Rakefile +3 -7
  3. data/VERSION.yml +2 -2
  4. data/buildtasks/manifest.rake +2 -0
  5. data/frameworks/sproutcore/Buildfile +2 -0
  6. data/frameworks/sproutcore/HISTORY +218 -203
  7. data/frameworks/sproutcore/README +47 -6
  8. data/frameworks/sproutcore/apps/tests/english.lproj/main_page.css +4 -0
  9. data/frameworks/sproutcore/design/Design Charts.graffle +2945 -4332
  10. data/frameworks/sproutcore/frameworks/bootstrap/README +9 -0
  11. data/frameworks/sproutcore/frameworks/bootstrap/core.js +7 -0
  12. data/frameworks/sproutcore/frameworks/bootstrap/setup_body_class_names.js +10 -0
  13. data/frameworks/sproutcore/frameworks/bootstrap/system/browser.js +28 -0
  14. data/frameworks/sproutcore/frameworks/bootstrap/system/loader.js +45 -0
  15. data/frameworks/sproutcore/frameworks/datastore/models/many_attribute.js +9 -8
  16. data/frameworks/sproutcore/frameworks/datastore/models/record.js +49 -9
  17. data/frameworks/sproutcore/frameworks/datastore/models/record_attribute.js +9 -0
  18. data/frameworks/sproutcore/frameworks/datastore/models/single_attribute.js +3 -2
  19. data/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +81 -8
  20. data/frameworks/sproutcore/frameworks/datastore/system/query.js +26 -5
  21. data/frameworks/sproutcore/frameworks/datastore/system/record_array.js +47 -0
  22. data/frameworks/sproutcore/frameworks/datastore/system/store.js +164 -32
  23. data/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +32 -4
  24. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/error_methods.js +56 -0
  25. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/normalize.js +1 -1
  26. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/unknownProperty.js +15 -0
  27. data/frameworks/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +16 -1
  28. data/frameworks/sproutcore/frameworks/datastore/tests/models/record_attribute.js +1 -1
  29. data/frameworks/sproutcore/frameworks/datastore/tests/models/single_attribute.js +22 -1
  30. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/chain.js +32 -1
  31. data/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/core_methods.js +70 -0
  32. data/frameworks/sproutcore/frameworks/datastore/tests/system/query/evaluation.js +12 -0
  33. data/frameworks/sproutcore/frameworks/datastore/tests/system/record_array/error_methods.js +50 -0
  34. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +9 -9
  35. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/core_methods.js +8 -1
  36. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataHashDidChange.js +79 -0
  37. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +24 -0
  38. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/error_methods.js +62 -0
  39. data/frameworks/sproutcore/frameworks/datastore/tests/system/store/init.js +2 -0
  40. data/frameworks/sproutcore/frameworks/debug/core.js +10 -6
  41. data/frameworks/sproutcore/frameworks/designer/controllers/page_design.js +43 -18
  42. data/frameworks/sproutcore/frameworks/designer/core.js +10 -0
  43. data/frameworks/sproutcore/frameworks/designer/english.lproj/selection_handles.css +58 -0
  44. data/frameworks/sproutcore/frameworks/designer/{views/mixins → mixins}/button.js +0 -0
  45. data/frameworks/sproutcore/frameworks/designer/views/{controls/button.js → button.js} +6 -2
  46. data/frameworks/sproutcore/frameworks/designer/views/designer.js +566 -136
  47. data/frameworks/sproutcore/frameworks/designer/views/selection_handles.js +77 -0
  48. data/frameworks/sproutcore/frameworks/desktop/core.js +12 -0
  49. data/frameworks/sproutcore/frameworks/desktop/english.lproj/alert.css +1 -1
  50. data/frameworks/sproutcore/frameworks/desktop/english.lproj/drag.css +3 -2
  51. data/frameworks/sproutcore/frameworks/desktop/english.lproj/list_item.css +0 -36
  52. data/frameworks/sproutcore/frameworks/desktop/english.lproj/menu.css +14 -0
  53. data/frameworks/sproutcore/frameworks/desktop/english.lproj/modal.css +4 -0
  54. data/frameworks/sproutcore/frameworks/desktop/english.lproj/slider.css +2 -0
  55. data/frameworks/sproutcore/frameworks/desktop/english.lproj/tab.css +0 -4
  56. data/frameworks/sproutcore/frameworks/desktop/mixins/collection_view_delegate.js +8 -5
  57. data/frameworks/sproutcore/frameworks/desktop/panes/alert.js +2 -2
  58. data/frameworks/sproutcore/frameworks/desktop/panes/menu.js +100 -111
  59. data/frameworks/sproutcore/frameworks/desktop/panes/panel.js +1 -1
  60. data/frameworks/sproutcore/frameworks/desktop/panes/picker.js +51 -13
  61. data/frameworks/sproutcore/frameworks/desktop/panes/{drop_down.js → select_button.js} +70 -109
  62. data/frameworks/sproutcore/frameworks/desktop/panes/sheet.js +8 -0
  63. data/frameworks/sproutcore/frameworks/desktop/system/root_responder.js +69 -23
  64. data/frameworks/sproutcore/frameworks/desktop/system/undo_manager.js +4 -4
  65. data/frameworks/sproutcore/frameworks/desktop/tests/panes/menu/methods.js +2 -0
  66. data/frameworks/sproutcore/frameworks/desktop/tests/panes/{dropDown → select_button}/methods.js +15 -11
  67. data/frameworks/sproutcore/frameworks/desktop/tests/panes/{dropDown → select_button}/ui.js +22 -22
  68. data/frameworks/sproutcore/frameworks/desktop/tests/views/button/methods.js +1 -1
  69. data/frameworks/sproutcore/frameworks/desktop/tests/views/checkbox/methods.js +0 -1
  70. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deleteSelection.js +1 -1
  71. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/deselect.js +19 -3
  72. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/itemViewForContentIndex.js +1 -1
  73. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/mouse.js +53 -28
  74. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/select.js +6 -6
  75. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectNextItem.js +23 -9
  76. data/frameworks/sproutcore/frameworks/desktop/tests/views/collection/selectPreviousItem.js +24 -10
  77. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/rowHeightForContentIndex.js +1 -1
  78. data/frameworks/sproutcore/frameworks/desktop/tests/views/list/ui_row_heights.js +1 -1
  79. data/frameworks/sproutcore/frameworks/desktop/tests/views/progress/ui.js +10 -3
  80. data/frameworks/sproutcore/frameworks/desktop/tests/views/radio/methods.js +1 -1
  81. data/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/ui.js +50 -28
  82. data/frameworks/sproutcore/frameworks/desktop/tests/views/scroller/methods.js +6 -6
  83. data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/methods.js +3 -3
  84. data/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +8 -8
  85. data/frameworks/sproutcore/frameworks/desktop/tests/views/select_field/methods.js +1 -1
  86. data/frameworks/sproutcore/frameworks/desktop/tests/views/tab/methods.js +1 -1
  87. data/frameworks/sproutcore/frameworks/desktop/views/button.js +5 -3
  88. data/frameworks/sproutcore/frameworks/desktop/views/checkbox.js +4 -3
  89. data/frameworks/sproutcore/frameworks/desktop/views/collection.js +125 -96
  90. data/frameworks/sproutcore/frameworks/desktop/views/grid.js +1 -0
  91. data/frameworks/sproutcore/frameworks/desktop/views/list.js +68 -18
  92. data/frameworks/sproutcore/frameworks/desktop/views/list_item.js +134 -56
  93. data/frameworks/sproutcore/frameworks/desktop/views/menu_item.js +18 -11
  94. data/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +562 -2
  95. data/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +13 -0
  96. data/frameworks/sproutcore/frameworks/desktop/views/progress.js +11 -8
  97. data/frameworks/sproutcore/frameworks/desktop/views/radio.js +7 -7
  98. data/frameworks/sproutcore/frameworks/desktop/views/scroll.js +99 -33
  99. data/frameworks/sproutcore/frameworks/desktop/views/scroller.js +3 -7
  100. data/frameworks/sproutcore/frameworks/desktop/views/segmented.js +0 -7
  101. data/frameworks/sproutcore/frameworks/desktop/views/separator.js +2 -3
  102. data/frameworks/sproutcore/frameworks/desktop/views/slider.js +0 -8
  103. data/frameworks/sproutcore/frameworks/desktop/views/source_list_group.js +1 -1
  104. data/frameworks/sproutcore/frameworks/desktop/views/split.js +27 -7
  105. data/frameworks/sproutcore/frameworks/desktop/views/tab.js +2 -6
  106. data/frameworks/sproutcore/frameworks/foundation/controllers/array.js +15 -10
  107. data/frameworks/sproutcore/frameworks/foundation/controllers/tree.js +20 -1
  108. data/frameworks/sproutcore/frameworks/foundation/debug/control_test_pane.js +1 -1
  109. data/frameworks/sproutcore/frameworks/foundation/english.lproj/bootstrap.rhtml +3 -6
  110. data/frameworks/sproutcore/frameworks/foundation/english.lproj/button_view.css +3 -0
  111. data/frameworks/sproutcore/frameworks/foundation/english.lproj/core.css +8 -0
  112. data/frameworks/sproutcore/frameworks/foundation/english.lproj/inline_editor.css +12 -0
  113. data/frameworks/sproutcore/frameworks/foundation/english.lproj/label.css +11 -0
  114. data/frameworks/sproutcore/frameworks/foundation/english.lproj/text_field.css +13 -0
  115. data/frameworks/sproutcore/frameworks/foundation/mixins/button.js +1 -2
  116. data/frameworks/sproutcore/frameworks/foundation/mixins/inline_text_field.js +70 -21
  117. data/frameworks/sproutcore/frameworks/foundation/mixins/selection_support.js +88 -54
  118. data/frameworks/sproutcore/frameworks/foundation/mixins/static_layout.js +0 -25
  119. data/frameworks/sproutcore/frameworks/foundation/mixins/string.js +23 -2
  120. data/frameworks/sproutcore/frameworks/foundation/panes/pane.js +34 -23
  121. data/frameworks/sproutcore/frameworks/foundation/private/tree_item_observer.js +20 -0
  122. data/frameworks/sproutcore/frameworks/foundation/system/benchmark.js +32 -23
  123. data/frameworks/sproutcore/frameworks/foundation/system/browser.js +2 -2
  124. data/frameworks/sproutcore/frameworks/foundation/system/bundle.js +77 -15
  125. data/frameworks/sproutcore/frameworks/foundation/system/core_query.js +5 -4
  126. data/frameworks/sproutcore/frameworks/foundation/system/cursor.js +1 -1
  127. data/frameworks/sproutcore/frameworks/foundation/system/render_context.js +22 -7
  128. data/frameworks/sproutcore/frameworks/foundation/system/request.js +466 -309
  129. data/frameworks/sproutcore/frameworks/foundation/system/responder.js +2 -1
  130. data/frameworks/sproutcore/frameworks/foundation/system/response.js +457 -0
  131. data/frameworks/sproutcore/frameworks/foundation/system/root_responder.js +66 -15
  132. data/frameworks/sproutcore/frameworks/foundation/system/routes.js +4 -4
  133. data/frameworks/sproutcore/frameworks/foundation/system/timer.js +6 -4
  134. data/frameworks/sproutcore/frameworks/foundation/system/utils.js +46 -8
  135. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/array_case.js +17 -0
  136. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/enum_case.js +18 -5
  137. data/frameworks/sproutcore/frameworks/foundation/tests/controllers/array/null_case.js +1 -1
  138. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +0 -2
  139. data/frameworks/sproutcore/frameworks/foundation/tests/mixins/string.js +11 -0
  140. data/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/group_case.js +14 -14
  141. data/frameworks/sproutcore/frameworks/foundation/tests/system/builder.js +2 -2
  142. data/frameworks/sproutcore/frameworks/foundation/tests/system/core_query/jquery_core.js +15 -3
  143. data/frameworks/sproutcore/frameworks/foundation/tests/system/datetime.js +1 -1
  144. data/frameworks/sproutcore/frameworks/foundation/tests/system/locale.js +8 -7
  145. data/frameworks/sproutcore/frameworks/foundation/tests/system/render_context/tag.js +3 -2
  146. data/frameworks/sproutcore/frameworks/foundation/tests/system/request.js +51 -44
  147. data/frameworks/sproutcore/frameworks/foundation/tests/system/root_responder/targetForAction.js +2 -2
  148. data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/isPaused.js +4 -4
  149. data/frameworks/sproutcore/frameworks/foundation/tests/system/timer/performAction.js +2 -0
  150. data/frameworks/sproutcore/frameworks/foundation/tests/validators/credit_card.js +9 -9
  151. data/frameworks/sproutcore/frameworks/foundation/tests/validators/number.js +2 -2
  152. data/frameworks/sproutcore/frameworks/foundation/tests/views/container/ui.js +3 -3
  153. data/frameworks/sproutcore/frameworks/foundation/tests/views/image/ui.js +10 -3
  154. data/frameworks/sproutcore/frameworks/foundation/tests/views/label/ui.js +2 -2
  155. data/frameworks/sproutcore/frameworks/foundation/tests/views/pane/append_remove.js +14 -0
  156. data/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +5 -5
  157. data/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +1 -11
  158. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/clippingFrame.js +2 -2
  159. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/destroyLayer.js +2 -4
  160. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/findLayerInParentLayer.js +2 -4
  161. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/insertBefore.js +1 -1
  162. data/frameworks/sproutcore/frameworks/foundation/tests/views/view/layoutStyle.js +0 -2
  163. data/frameworks/sproutcore/frameworks/foundation/validators/password.js +5 -5
  164. data/frameworks/sproutcore/frameworks/foundation/validators/validator.js +4 -2
  165. data/frameworks/sproutcore/frameworks/foundation/views/field.js +5 -8
  166. data/frameworks/sproutcore/frameworks/foundation/views/label.js +21 -5
  167. data/frameworks/sproutcore/frameworks/foundation/views/text_field.js +112 -69
  168. data/frameworks/sproutcore/frameworks/foundation/views/view.js +67 -6
  169. data/frameworks/sproutcore/frameworks/runtime/core.js +51 -2
  170. data/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +4 -1
  171. data/frameworks/sproutcore/frameworks/runtime/system/binding.js +2 -1
  172. data/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +5 -4
  173. data/frameworks/sproutcore/frameworks/runtime/system/index_set.js +6 -1
  174. data/frameworks/sproutcore/frameworks/runtime/system/logger.js +408 -0
  175. data/frameworks/sproutcore/frameworks/runtime/system/object.js +15 -4
  176. data/frameworks/sproutcore/frameworks/runtime/system/selection_set.js +30 -2
  177. data/frameworks/sproutcore/frameworks/runtime/tests/core/IsEqual.js +5 -1
  178. data/frameworks/sproutcore/frameworks/runtime/tests/core/beget.js +1 -1
  179. data/frameworks/sproutcore/frameworks/runtime/tests/core/compare.js +3 -3
  180. data/frameworks/sproutcore/frameworks/runtime/tests/core/guidFor.js +2 -0
  181. data/frameworks/sproutcore/frameworks/runtime/tests/core/isArray.js +1 -1
  182. data/frameworks/sproutcore/frameworks/runtime/tests/core/itemType.js +2 -1
  183. data/frameworks/sproutcore/frameworks/runtime/tests/core/tupleForPropertyPath.js +2 -2
  184. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/propertyChanges.js +1 -1
  185. data/frameworks/sproutcore/frameworks/runtime/tests/mixins/propertyChanges.js +1 -0
  186. data/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +11 -7
  187. data/frameworks/sproutcore/frameworks/runtime/tests/system/error.js +3 -2
  188. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/add.js +18 -1
  189. data/frameworks/sproutcore/frameworks/runtime/tests/system/index_set/remove.js +1 -1
  190. data/frameworks/sproutcore/frameworks/runtime/tests/system/logger.js +165 -0
  191. data/frameworks/sproutcore/frameworks/runtime/tests/system/object/bindings.js +3 -0
  192. data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/copy.js +1 -1
  193. data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/indexSetForSource.js +13 -0
  194. data/frameworks/sproutcore/frameworks/runtime/tests/system/selection_set/remove.js +24 -0
  195. data/frameworks/sproutcore/frameworks/runtime/tests/system/sparse_array.js +32 -13
  196. data/frameworks/sproutcore/frameworks/testing/english.lproj/runner.css +2 -2
  197. data/frameworks/sproutcore/frameworks/testing/english.lproj/testsuite.css +7 -2
  198. data/frameworks/sproutcore/lib/index.rhtml +6 -20
  199. data/frameworks/sproutcore/themes/standard_theme/Source/sc-theme-repeat-x.psd +0 -0
  200. data/frameworks/sproutcore/themes/standard_theme/english.lproj/button.css +0 -1
  201. data/frameworks/sproutcore/themes/standard_theme/english.lproj/checkbox.css +5 -4
  202. data/frameworks/sproutcore/themes/standard_theme/english.lproj/collection.css +4 -3
  203. data/frameworks/sproutcore/themes/standard_theme/english.lproj/disclosure.css +7 -7
  204. data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-repeat-x.png +0 -0
  205. data/frameworks/sproutcore/themes/standard_theme/english.lproj/list_item.css +38 -0
  206. data/frameworks/sproutcore/themes/standard_theme/english.lproj/menu.css +20 -0
  207. data/frameworks/sproutcore/themes/standard_theme/english.lproj/progress.css +1 -0
  208. data/frameworks/sproutcore/themes/standard_theme/english.lproj/radio.css +3 -1
  209. data/frameworks/sproutcore/themes/standard_theme/english.lproj/segmented.css +1 -0
  210. data/frameworks/sproutcore/themes/standard_theme/english.lproj/split_view.css +1 -1
  211. data/frameworks/sproutcore/themes/standard_theme/english.lproj/text_field.css +0 -15
  212. data/gen/data-source/Buildfile +18 -0
  213. data/gen/data-source/README +1 -0
  214. data/gen/data-source/USAGE +15 -0
  215. data/gen/data-source/templates/data_sources/@filename@.js +64 -0
  216. data/lib/sproutcore/builders/combine.rb +23 -0
  217. data/lib/sproutcore/builders/javascript.rb +27 -2
  218. data/lib/sproutcore/buildfile/task.rb +1 -1
  219. data/lib/sproutcore/helpers/entry_sorter.rb +2 -2
  220. data/lib/sproutcore/helpers/static_helper.rb +79 -0
  221. data/lib/sproutcore/models/manifest.rb +2 -2
  222. data/lib/sproutcore/models/target.rb +1 -1
  223. data/lib/sproutcore/tools/build.rb +1 -1
  224. data/lib/sproutcore/tools/docs.rb +3 -3
  225. data/lib/sproutcore/tools/gen.rb +17 -15
  226. data/lib/sproutcore/tools/manifest.rb +9 -9
  227. data/lib/sproutcore/tools/server.rb +3 -3
  228. data/lib/sproutcore/tools.rb +259 -250
  229. data/lib/sproutcore.rb +9 -1
  230. data/spec/buildtasks/manifest/prepare_build_tasks/combine_spec.rb +2 -2
  231. data/spec/fixtures/entry_for_project/frameworks/unrelated/PLACEHOLDER +0 -0
  232. data/spec/fixtures/ordered_entries/apps/no_requires/{lproj → english.lproj}/strings.js +0 -0
  233. data/spec/fixtures/ordered_entries/apps/no_requires/main.js +1 -0
  234. data/spec/fixtures/ordered_entries/apps/no_requires/resources/main_page.js +1 -0
  235. data/spec/fixtures/ordered_entries/apps/no_requires/t.js +1 -0
  236. data/spec/lib/models/manifest/find_entry.rb +12 -0
  237. data/spec/lib/tools/gen_spec.rb +1 -0
  238. data/spec/lib/tools/tools_spec.rb +1 -0
  239. data/sproutcore-abbot.gemspec +36 -44
  240. metadata +43 -44
  241. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/indicator.gif +0 -0
  242. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/sc-theme-sprite.png +0 -0
  243. data/frameworks/sproutcore/frameworks/desktop/english.lproj/images/sticky-note.png +0 -0
  244. data/frameworks/sproutcore/frameworks/desktop/views/form.js +0 -594
  245. data/frameworks/sproutcore/themes/standard_theme/english.lproj/images/sc-theme-sprite.png +0 -0
  246. data/lib/thor/CHANGELOG.rdoc +0 -52
  247. data/lib/thor/LICENSE +0 -20
  248. data/lib/thor/README.markdown +0 -76
  249. data/lib/thor/Rakefile +0 -6
  250. data/lib/thor/Thorfile +0 -45
  251. data/lib/thor/bin/rake2thor +0 -83
  252. data/lib/thor/bin/thor +0 -7
  253. data/lib/thor/lib/thor/error.rb +0 -3
  254. data/lib/thor/lib/thor/options.rb +0 -267
  255. data/lib/thor/lib/thor/ordered_hash.rb +0 -64
  256. data/lib/thor/lib/thor/runner.rb +0 -305
  257. data/lib/thor/lib/thor/task.rb +0 -83
  258. data/lib/thor/lib/thor/task_hash.rb +0 -22
  259. data/lib/thor/lib/thor/tasks/package.rb +0 -18
  260. data/lib/thor/lib/thor/tasks.rb +0 -77
  261. data/lib/thor/lib/thor/util.rb +0 -75
  262. data/lib/thor/lib/thor.rb +0 -170
  263. data/lib/thor/script/destroy +0 -14
  264. data/lib/thor/script/generate +0 -14
  265. data/lib/thor/spec/fixtures/task.thor +0 -10
  266. data/lib/thor/spec/options_spec.rb +0 -271
  267. data/lib/thor/spec/ordered_hash_spec.rb +0 -84
  268. data/lib/thor/spec/spec.opts +0 -1
  269. data/lib/thor/spec/spec_helper.rb +0 -30
  270. data/lib/thor/spec/task_spec.rb +0 -11
  271. data/lib/thor/spec/tasks_spec.rb +0 -28
  272. data/lib/thor/spec/thor_runner_spec.rb +0 -194
  273. data/lib/thor/spec/thor_spec.rb +0 -206
  274. data/lib/thor/spec/util_spec.rb +0 -99
  275. data/lib/thor/task.thor +0 -15
  276. data/lib/thor/thor.gemspec +0 -29
@@ -59,6 +59,12 @@ SC.ScrollView = SC.View.extend(SC.Border, {
59
59
  if (!this.get('canScrollHorizontal')) return 0 ;
60
60
  var view = this.get('contentView') ;
61
61
  var contentWidth = view ? view.get('frame').width : 0 ;
62
+
63
+ // The following code checks if there is a calculatedWidth (collections)
64
+ // to avoid looking at the incorrect value calculated by frame.
65
+ if(view.calculatedWidth && view.calculatedWidth!==0){
66
+ contentWidth = view.calculatedWidth;
67
+ }
62
68
  var containerWidth = this.get('containerView').get('frame').width ;
63
69
  return Math.max(0, contentWidth-containerWidth) ;
64
70
  }.property(),
@@ -73,7 +79,13 @@ SC.ScrollView = SC.View.extend(SC.Border, {
73
79
  maximumVerticalScrollOffset: function() {
74
80
  if (!this.get('canScrollVertical')) return 0 ;
75
81
  var view = this.get('contentView') ;
76
- var contentHeight = view ? view.get('frame').height : 0 ;
82
+ var contentHeight = (view && view.get('frame')) ? view.get('frame').height : 0 ;
83
+
84
+ // The following code checks if there is a calculatedWidth (collections)
85
+ // to avoid looking at the incorrect value calculated by frame.
86
+ if(view.calculatedHeight && view.calculatedHeight!==0){
87
+ contentHeight = view.calculatedHeight;
88
+ }
77
89
  var containerHeight = this.get('containerView').get('frame').height ;
78
90
  return Math.max(0, contentHeight-containerHeight) ;
79
91
  }.property(),
@@ -302,28 +314,33 @@ SC.ScrollView = SC.View.extend(SC.Border, {
302
314
  the view should be a subview of the contentView. Otherwise the results
303
315
  will be undefined.
304
316
 
305
- @param {SC.ScrollView} receiver
317
+ @param {SC.View} view view to scroll or null to scroll receiver visible
318
+ @returns {Boolean} YES if scroll position was changed
306
319
  */
307
320
  scrollToVisible: function(view) {
308
- var contentView = this.get('contentView') ;
309
- if (!contentView) return this; // nothing to do if no contentView.
310
321
 
311
- // get the viewportOffset for the view layer the convert that. this will
312
- // work even with views using static layout.
313
- var layer = view.get('layer'), vf ;
314
- if(!layer) return this ; // nothing to do
315
- vf = SC.viewportOffset(layer) ;
316
- vf.width = layer.offsetWidth ;
317
- vf.height = layer.offsetHeight ;
322
+ // if no view is passed, do default
323
+ if (arguments.length === 0) return sc_super();
324
+
325
+ var contentView = this.get('contentView') ;
326
+ if (!contentView) return NO; // nothing to do if no contentView.
327
+
328
+ // get the frame for the view - should work even for views with static
329
+ // layout, assuming it has been added to the screen.
330
+ var vf = view.get('frame');
331
+ if (!vf) return NO; // nothing to do
318
332
 
319
333
  // convert view's frame to an offset from the contentView origin. This
320
334
  // will become the new scroll offset after some adjustment.
321
- vf = contentView.convertFrameFromView(vf, null) ;
335
+ vf = contentView.convertFrameFromView(vf, view.get('parentView')) ;
322
336
 
323
337
  // find current visible frame.
324
338
  var vo = SC.cloneRect(this.get('containerView').get('frame')) ;
339
+
325
340
  vo.x = this.get('horizontalScrollOffset') ;
326
341
  vo.y = this.get('verticalScrollOffset') ;
342
+
343
+ var origX = vo.x, origY = vo.y;
327
344
 
328
345
  // if top edge is not visible, shift origin
329
346
  vo.y -= Math.max(0, SC.minY(vo) - SC.minY(vf)) ;
@@ -334,7 +351,10 @@ SC.ScrollView = SC.View.extend(SC.Border, {
334
351
  vo.x += Math.max(0, SC.maxX(vf) - SC.maxX(vo)) ;
335
352
 
336
353
  // scroll to that origin.
337
- return this.scrollTo(vo.x, vo.y) ;
354
+ if ((origX !== vo.x) || (origY !== vo.y)) {
355
+ this.scrollTo(vo.x, vo.y);
356
+ return YES ;
357
+ } else return NO;
338
358
  },
339
359
 
340
360
  /**
@@ -525,10 +545,8 @@ SC.ScrollView = SC.View.extend(SC.Border, {
525
545
  in the regular properties.
526
546
  */
527
547
  createChildViews: function() {
528
- // debugger ;
529
- var childViews = [] ;
530
- var view ;
531
-
548
+ var childViews = [] , view;
549
+
532
550
  // create the containerView. We must always have a container view.
533
551
  // also, setup the contentView as the child of the containerView...
534
552
  if (SC.none(view = this.containerView)) view = SC.ContainerView;
@@ -544,7 +562,8 @@ SC.ScrollView = SC.View.extend(SC.Border, {
544
562
  if (view=this.horizontalScrollerView) {
545
563
  if (this.get('hasHorizontalScroller')) {
546
564
  view = this.horizontalScrollerView = this.createChildView(view, {
547
- layoutDirection: SC.LAYOUT_HORIZONTAL
565
+ layoutDirection: SC.LAYOUT_HORIZONTAL,
566
+ valueBinding: '*owner.horizontalScrollOffset'
548
567
  }) ;
549
568
  childViews.push(view);
550
569
  } else this.horizontalScrollerView = null ;
@@ -554,7 +573,8 @@ SC.ScrollView = SC.View.extend(SC.Border, {
554
573
  if (view=this.verticalScrollerView) {
555
574
  if (this.get('hasVerticalScroller')) {
556
575
  view = this.verticalScrollerView = this.createChildView(view, {
557
- layoutDirection: SC.LAYOUT_VERTICAL
576
+ layoutDirection: SC.LAYOUT_VERTICAL,
577
+ valueBinding: '*owner.verticalScrollOffset'
558
578
  }) ;
559
579
  childViews.push(view);
560
580
  } else this.verticalScrollerView = null ;
@@ -563,7 +583,7 @@ SC.ScrollView = SC.View.extend(SC.Border, {
563
583
  // set childViews array.
564
584
  this.childViews = childViews ;
565
585
 
566
- this.contentViewFrameDidChange() ; // setup initial display...
586
+ this.contentViewDidChange() ; // setup initial display...
567
587
  this.tile() ; // set up initial tiling
568
588
  },
569
589
 
@@ -606,7 +626,7 @@ SC.ScrollView = SC.View.extend(SC.Border, {
606
626
  if (newView) newView.addObserver('frame', this, f);
607
627
 
608
628
  // replace container
609
- this.containerView.set('content', newView);
629
+ this.containerView.set('contentView', newView);
610
630
 
611
631
  this.contentViewFrameDidChange();
612
632
  }
@@ -618,7 +638,12 @@ SC.ScrollView = SC.View.extend(SC.Border, {
618
638
  size of the contentView changes. We don't care about the origin since
619
639
  that is tracked separately from the offset values.
620
640
  */
641
+
642
+ oldMaxHOffset: 0,
643
+ oldMaxVOffset: 0,
644
+
621
645
  contentViewFrameDidChange: function() {
646
+
622
647
  var view = this.get('contentView'),
623
648
  f = (view) ? view.get('frame') : null,
624
649
  width = (f) ? f.width : 0,
@@ -626,7 +651,7 @@ SC.ScrollView = SC.View.extend(SC.Border, {
626
651
  dim = this.get('frame') ;
627
652
 
628
653
  // cache out scroll settings...
629
- if ((width === this._scroll_contentWidth) && (height === this._scroll_contentHeight)) return ;
654
+ //if ((width === this._scroll_contentWidth) && (height === this._scroll_contentHeight)) return ;
630
655
  this._scroll_contentWidth = width;
631
656
  this._scroll_contentHeight = height ;
632
657
 
@@ -648,6 +673,33 @@ SC.ScrollView = SC.View.extend(SC.Border, {
648
673
  height -= this.get('verticalScrollerBottom') ;
649
674
  view.setIfChanged('maximum', height) ;
650
675
  }
676
+
677
+ // If there is no vertical scroller and auto hiding is on, make
678
+ // sure we are at the top if not already there
679
+ if (!this.get('isVerticalScrollerVisible') && (this.get('verticalScrollOffset') !== 0) &&
680
+ this.get('autohidesVerticalScroller')) {
681
+ this.set('verticalScrollOffset', 0);
682
+ }
683
+
684
+ // Same thing for horizontal scrolling.
685
+ if (!this.get('isHorizontalScrollerVisible') && (this.get('horizontalScrollOffset') !== 0) &&
686
+ this.get('autohidesHorizontalScroller')) {
687
+ this.set('horizontalScrollOffset', 0);
688
+ }
689
+
690
+ // This forces to recalculate the height of the frame when is at the bottom
691
+ // of the scroll and the content dimension are smaller that the previous one
692
+
693
+
694
+ var mxVOffSet = this.get('maximumVerticalScrollOffset'),
695
+ vOffSet = this.get('verticalScrollOffset'),
696
+ mxHOffSet = this.get('maximumHorizontalScrollOffset'),
697
+ hOffSet = this.get('horizontalScrollOffset');
698
+ var forceHeight = mxVOffSet && this.get('hasVerticalScroller') && mxVOffSet<vOffSet;
699
+ var forceWidth = mxHOffSet && this.get('hasHorizontalScroller') && mxHOffSet<hOffSet;
700
+ if(forceHeight || forceWidth){
701
+ this.forceDimensionsRecalculation(forceWidth, forceHeight, vOffSet, hOffSet);
702
+ }
651
703
  },
652
704
 
653
705
  /** @private
@@ -657,15 +709,12 @@ SC.ScrollView = SC.View.extend(SC.Border, {
657
709
  _scroll_horizontalScrollOffsetDidChange: function() {
658
710
  var offset = this.get('horizontalScrollOffset');
659
711
 
712
+ offset = Math.max(0,Math.min(this.get('maximumHorizontalScrollOffset'), offset)) ;
713
+
660
714
  // update the offset for the contentView...
661
715
  var contentView = this.get('contentView');
662
716
  if (contentView) contentView.adjust('left', 0-offset);
663
-
664
- // update the value of the horizontal scroller...
665
- var scroller ;
666
- if (this.get('hasHorizontalScroller') && (scroller=this.get('horizontalScrollerView'))) {
667
- scroller.set('value', offset);
668
- }
717
+
669
718
  }.observes('horizontalScrollOffset'),
670
719
 
671
720
  /** @private
@@ -675,15 +724,32 @@ SC.ScrollView = SC.View.extend(SC.Border, {
675
724
  _scroll_verticalScrollOffsetDidChange: function() {
676
725
  var offset = this.get('verticalScrollOffset') ;
677
726
 
727
+ offset = Math.max(0,Math.min(this.get('maximumVerticalScrollOffset'), offset)) ;
728
+
678
729
  // update the offset for the contentView...
679
730
  var contentView = this.get('contentView');
731
+ var containerView = this.get('containerView');
732
+
733
+ // Optimization when not using collections. We need to reimplement clippingFrame
734
+ // and scrolling to be able to scroll using scrolltop. For now I just
735
+ // detect if the content to scroll is a class of collectionView.
680
736
  if (contentView) contentView.adjust('top', 0-offset) ;
681
737
 
682
- // update the value of the vertical scroller...
683
- var scroller;
684
- if (this.get('hasVerticalScroller') && (scroller=this.get('verticalScrollerView'))) {
685
- scroller.set('value', offset) ;
738
+ }.observes('verticalScrollOffset'),
739
+
740
+ forceDimensionsRecalculation: function (forceWidth, forceHeight, vOffSet, hOffSet) {
741
+ var oldScrollHOffset = hOffSet;
742
+ var oldScrollVOffset = vOffSet;
743
+ this.scrollTo(0,0);
744
+ if(forceWidth && forceHeight){
745
+ this.scrollTo(this.get('maximumHorizontalScrollOffset'), this.get('maximumVerticalScrollOffset'));
746
+ }
747
+ if(forceWidth && !forceHeight){
748
+ this.scrollTo(this.get('maximumHorizontalScrollOffset'), oldScrollVOffset);
749
+ }
750
+ if(!forceWidth && forceHeight){
751
+ this.scrollTo(oldScrollHOffset ,this.get('maximumVerticalScrollOffset'));
686
752
  }
687
- }.observes('verticalScrollOffset')
753
+ }
688
754
 
689
755
  });
@@ -40,7 +40,9 @@ SC.ScrollerView = SC.View.extend({
40
40
  if (val !== undefined) {
41
41
  // Don't enforce the maximum now, because the scroll view could change
42
42
  // height and we want our content to stay put when it does.
43
- this._value = val ;
43
+ if (val >= 0) {
44
+ this._value = val ;
45
+ }
44
46
  } else {
45
47
  var value = this._value || 0 ; // default value is at top/left
46
48
  return Math.min(value, this.get('maximum')) ;
@@ -216,12 +218,6 @@ SC.ScrollerView = SC.View.extend({
216
218
  }
217
219
  }
218
220
  }
219
-
220
- // notify owner if it has a different scroll value
221
- var key = this.get('ownerScrollValueKey') ;
222
- if (key && this.owner && (this.owner[key] !== undefined)) {
223
- this.owner.setIfChanged(key, v) ;
224
- }
225
221
  }.observes('value')
226
222
 
227
223
  });
@@ -430,13 +430,6 @@ SC.SegmentedView = SC.View.extend(SC.Control,
430
430
  this._isMouseDown = YES ;
431
431
  this.set('activeIndex', idx);
432
432
  }
433
- if (!this._isFocused) {
434
- this._isFocused = YES ;
435
- this.becomeFirstResponder();
436
- if (this.get('isVisibleInWindow')) {
437
- this.$()[0].focus();
438
- }
439
- }
440
433
 
441
434
  return YES ;
442
435
  },
@@ -27,9 +27,8 @@ SC.SeparatorView = SC.View.extend(
27
27
  layoutDirection: SC.LAYOUT_HORIZONTAL,
28
28
 
29
29
  render: function(context, firstTime) {
30
-
31
- context.push('<span></span>');
32
- context.addClass(this.get('layoutDirection'));
30
+ if(firstTime) context.push('<span></span>');
31
+ context.addClass(this.get('layoutDirection'));
33
32
  }
34
33
 
35
34
 
@@ -120,16 +120,8 @@ SC.SliderView = SC.View.extend(SC.Control,
120
120
 
121
121
  mouseDown: function(evt) {
122
122
  if (!this.get('isEnabled')) return YES; // nothing to do...
123
-
124
123
  this.set('isActive', YES);
125
124
  this._isMouseDown = YES ;
126
- if (!this._isFocused) {
127
- this._isFocused = YES ;
128
- this.becomeFirstResponder();
129
- if (this.get('isVisibleInWindow')) {
130
- this.$()[0].focus();
131
- }
132
- }
133
125
  return this._triggerHandle(evt);
134
126
  },
135
127
 
@@ -89,7 +89,7 @@ SC.SourceListGroupView = SC.View.extend(SC.Control, SC.CollectionGroup,
89
89
  var labelView = this.outlet('labelView') ;
90
90
 
91
91
  // hide labelView if content is null.
92
- if (content == null) {
92
+ if (content === null) {
93
93
  labelView.setIfChanged('isVisible', NO) ;
94
94
  this.setIfChanged('hasGroupTitle', NO) ;
95
95
  return ;
@@ -65,8 +65,7 @@ SC.RESIZE_BOTTOM_RIGHT = 'resize-bottom-right' ;
65
65
  viewhelper.
66
66
 
67
67
  @property {Boolean} canCollapseViews Set to NO when you don't want any of
68
- the child views to collapse. Defaults to YES. Use the :can_collapse_views
69
- option with the split_view viewhelper.
68
+ the child views to collapse. Defaults to YES.
70
69
 
71
70
  In addition, the top/left and bottom/right child views can have these
72
71
  properties:
@@ -383,24 +382,40 @@ SC.SplitView = SC.View.extend(
383
382
  renderLayout: function(context, firstTime) {
384
383
  // console.log('%@.renderLayout(%@, %@)'.fmt(this, context, firstTime));
385
384
  // console.log('%@.frame = %@'.fmt(this, SC.inspect(this.get('frame'))));
386
- if (firstTime) {
385
+ if (firstTime || this._recalculateDivider) {
387
386
  if (!this.get('thumbViewCursor')) {
388
387
  this.set('thumbViewCursor', SC.Cursor.create()) ;
389
388
  }
390
389
 
391
390
  var layoutDirection = this.get('layoutDirection') ;
392
- var splitViewThickness = (layoutDirection == SC.LAYOUT_HORIZONTAL) ? this.get('frame').width : this.get('frame').height ;
391
+ var fr = this.get('frame');
392
+ var splitViewThickness, elemRendered = this.$();
393
+ var dividerThickness = this.get('dividerThickness') || 7 ;
393
394
  var desiredThickness = this.get('defaultThickness') ;
394
395
  var autoResizeBehavior = this.get('autoresizeBehavior') ;
396
+ // Turn a flag on to recalculate the spliting if the desired thickness
397
+ // is a percentage
398
+ // debugger;
399
+ if(this._recalculateDivider===undefined && desiredThickness<1) {
400
+ this._recalculateDivider=YES;
401
+ }
402
+ else if(this._recalculateDivider) this._recalculateDivider=NO;
403
+
395
404
 
405
+ if(elemRendered[0]) {
406
+ splitViewThickness = (layoutDirection == SC.LAYOUT_HORIZONTAL) ?
407
+ elemRendered[0].offsetWidth : elemRendered[0].offsetHeight ;
408
+ }else{
409
+ splitViewThickness = (layoutDirection == SC.LAYOUT_HORIZONTAL) ?
410
+ fr.width : fr.height ;
411
+ }
396
412
  // if default thickness is < 1, convert from percentage to absolute
397
413
  if (SC.none(desiredThickness) || (desiredThickness > 0 && desiredThickness < 1)) {
398
- desiredThickness = Math.floor(splitViewThickness * (desiredThickness || 0.5)) ;
414
+ desiredThickness = Math.floor((splitViewThickness - (dividerThickness))* (desiredThickness || 0.5)) ;
399
415
  }
400
416
  if (autoResizeBehavior === SC.RESIZE_BOTTOM_RIGHT) {
401
417
  this._desiredTopLeftThickness = desiredThickness ;
402
418
  } else { // (autoResizeBehavior === SC.RESIZE_TOP_LEFT)
403
- var dividerThickness = this.get('dividerThickness') || 7 ;
404
419
  this._desiredTopLeftThickness = splitViewThickness - dividerThickness - desiredThickness ;
405
420
  }
406
421
 
@@ -679,6 +694,11 @@ SC.SplitView = SC.View.extend(
679
694
  splitViewConstrainThickness: function(splitView, view, proposedThickness) {
680
695
  // console.log('%@.splitViewConstrainThickness(%@, %@, %@)'.fmt(this, splitView, view, proposedThickness));
681
696
  return proposedThickness;
682
- }
697
+ },
698
+
699
+ /* Force to rendering once the pane is attached */
700
+ _forceSplitCalculation: function(){
701
+ this.updateLayout();
702
+ }.observes('*pane.isPaneAttached')
683
703
 
684
704
  });
@@ -111,14 +111,10 @@ SC.TabView = SC.View.extend(
111
111
  });
112
112
  }
113
113
 
114
- view = this.containerView = this.createChildView(ContainerView, {
115
- rootElementPath: [0]
116
- }) ;
114
+ view = this.containerView = this.createChildView(ContainerView) ;
117
115
  childViews.push(view);
118
116
 
119
- view = this.segmentedView = this.createChildView(this.segmentedView, {
120
- rootElementPath: [1]
121
- }) ;
117
+ view = this.segmentedView = this.createChildView(this.segmentedView) ;
122
118
  childViews.push(view);
123
119
 
124
120
  this.set('childViews', childViews);
@@ -284,7 +284,7 @@ SC.ArrayController = SC.Controller.extend(SC.Array, SC.SelectionSupport,
284
284
  // if we can do this, then just forward the change. This should fire
285
285
  // updates back up the stack, updating rangeObservers, etc.
286
286
  var content = this.get('content'); // note: use content, not observable
287
- var objsToDestroy = [], i;
287
+ var objsToDestroy = [], i, objsLen;
288
288
  if (this.get('destroyOnRemoval')){
289
289
  for(i=0; i<amt; i++){
290
290
  objsToDestroy.push(content.objectAt(i+start));
@@ -292,7 +292,7 @@ SC.ArrayController = SC.Controller.extend(SC.Array, SC.SelectionSupport,
292
292
  }
293
293
 
294
294
  if (content) content.replace(start, amt, objects);
295
- for(i=0; i<objsToDestroy.length; i++){
295
+ for(i=0, objsLen = objsToDestroy.length; i<objsLen; i++){
296
296
 
297
297
  objsToDestroy[i].destroy();
298
298
  }
@@ -300,7 +300,12 @@ SC.ArrayController = SC.Controller.extend(SC.Array, SC.SelectionSupport,
300
300
 
301
301
  return this;
302
302
  },
303
-
303
+
304
+ indexOf: function(object, startAt) {
305
+ var content = this._scac_observableContent();
306
+ return content ? content.indexOf(object, startAt) : -1;
307
+ },
308
+
304
309
  // ..........................................................
305
310
  // INTERNAL SUPPORT
306
311
  //
@@ -366,11 +371,10 @@ SC.ArrayController = SC.Controller.extend(SC.Array, SC.SelectionSupport,
366
371
  default:
367
372
  throw "%@.orderBy must be Array, String, or Function".fmt(this);
368
373
  }
369
-
370
- len = orderBy.get('length');
371
-
374
+
372
375
  // generate comparison function if needed - use orderBy
373
- if (!func) {
376
+ if (!func) {
377
+ len = orderBy.get('length');
374
378
  func = function(a,b) {
375
379
  var idx=0, status=0, key, aValue, bValue;
376
380
  for(idx=0;(idx<len)&&(status===0);idx++) {
@@ -456,11 +460,12 @@ SC.ArrayController = SC.Controller.extend(SC.Array, SC.SelectionSupport,
456
460
  Whenever enumerable content changes, need to regenerate the
457
461
  observableContent and notify that the range has changed.
458
462
 
459
- IMPORTANT: Assumes content is not null and is enumerable
463
+ This is called whenever the content enumerable changes or whenever orderBy
464
+ changes.
460
465
  */
461
466
  _scac_enumerableDidChange: function() {
462
467
  var content = this.get('content'), // use content directly
463
- newlen = content.get('length'),
468
+ newlen = content ? content.get('length') : 0,
464
469
  oldlen = this._scac_length;
465
470
 
466
471
  this._scac_length = newlen;
@@ -469,7 +474,7 @@ SC.ArrayController = SC.Controller.extend(SC.Array, SC.SelectionSupport,
469
474
  this.enumerableContentDidChange(0, newlen, newlen-oldlen);
470
475
  this.endPropertyChanges();
471
476
  this.updateSelectionAfterContentChange();
472
- },
477
+ }.observes('orderBy'),
473
478
 
474
479
  /** @private
475
480
  Whenever array content changes, need to simply forward notification.
@@ -99,7 +99,26 @@ SC.TreeController = SC.ObjectController.extend(SC.SelectionSupport,
99
99
 
100
100
  _sctc_arrangedObjectsContentDidChange: function() {
101
101
  this.updateSelectionAfterContentChange();
102
- }.observes('*arrangedObjects.[]')
102
+ }.observes('*arrangedObjects.[]'),
103
+
104
+ /**
105
+ @private
106
+
107
+ Returns the first item in arrangeObjects that is not a group. This uses
108
+ a brute force approach right now; we assume you probably don't have a lot
109
+ of groups up front.
110
+ */
111
+ firstSelectableObject: function() {
112
+ var objects = this.get('arrangedObjects'),
113
+ indexes, len, idx = 0;
114
+
115
+ if (!objects) return null; // fast track
116
+
117
+ indexes = objects.contentGroupIndexes(null, objects);
118
+ len = objects.get('length');
119
+ while(indexes.contains(idx) && (idx<len)) idx++;
120
+ return idx>=len ? null : objects.objectAt(idx);
121
+ }.property()
103
122
 
104
123
  });
105
124
 
@@ -43,7 +43,7 @@ SC.ControlTestPane = SC.Pane.extend(
43
43
  /** @scope SC.ControlTestPane.prototype */ {
44
44
 
45
45
  classNames: ['sc-control-test-pane'],
46
- layout: { right: 5, width: 350, top: 75, bottom: 5 },
46
+ layout: { right: 20, width: 350, top: 65, bottom: 5 },
47
47
 
48
48
  /**
49
49
  The starting top location for the first row. This will increment as
@@ -6,15 +6,12 @@
6
6
  # License: Licened under MIT license (see license.js)
7
7
  # ==========================================================================
8
8
  #
9
- # This file contains bootstrap code to be included at the top of standard
10
- # SproutCore apps. This code will autodetect the browser and then adds
11
- # a class name to the 'body' tag. You can use this class name to customize
12
- # the CSS rules to be applied to your page based on browser. The class name
13
- # contains the name webkit|mozilla|ie + the major version number
9
+ # IMPORTANT: This bootstrap code is DEPRECATED. Instead see the bootstrap
10
+ # framework in sproutcore for all new apps.
14
11
  #
15
12
  -%>
16
13
  <% content_for('bootstrap') do %>
17
- var SC = SC || { BUNDLE_INFO: {} };
14
+ var SC = SC || { BUNDLE_INFO: {}, LAZY_INSTANTIATION: {} };
18
15
  SC.browser = (function() {
19
16
  var userAgent = navigator.userAgent.toLowerCase();
20
17
  var version = (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1] ;
@@ -8,6 +8,9 @@
8
8
  display: inline-block ;
9
9
  vertical-align: middle;
10
10
  text-decoration: none ;
11
+ border: 1px #555 solid;
12
+ border-radius: 3px;
13
+ -moz-border-radius: 3px;
11
14
  }
12
15
 
13
16
  .sc-button-view .sc-button-inner {
@@ -382,6 +382,10 @@ input[type="submit"] {
382
382
  top: 25px;
383
383
  background-color: #ccc;
384
384
  opacity: 0.4;
385
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
386
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
387
+ -moz-opacity:0.4;
388
+
385
389
  position: relative;
386
390
  border-top: 1px solid #aaa;
387
391
  border-bottom: 1px solid #aaa;
@@ -431,6 +435,10 @@ input[type="submit"] {
431
435
  .sc-benchmark-row.even
432
436
  {
433
437
  opacity: 0.4;
438
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
439
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
440
+ -moz-opacity:0.4;
441
+
434
442
  background-color: #ddd;
435
443
  }
436
444
 
@@ -0,0 +1,12 @@
1
+ .mozilla .sc-view .sc-text-field-view.inline-editor .border,
2
+ .webkit .sc-view .sc-text-field-view.inline-editor .border,
3
+ .msie .sc-view .sc-text-field-view.inline-editor .border,
4
+ .sc-view .sc-text-field-view.inline-editor .border {
5
+ -webkit-appearance: none;
6
+ -moz-appearance: none;
7
+ border: none;
8
+ }
9
+
10
+ .mozilla .sc-view .sc-text-field-view.inline-editor.focus {
11
+ outline-offset: 0px;
12
+ }
@@ -28,4 +28,15 @@
28
28
  .sc-label-view img.icon {
29
29
  position: relative;
30
30
  vertical-align: middle;
31
+ }
32
+
33
+ .sc-label-view .sc-hint {
34
+ position: absolute;
35
+ top: 3px;
36
+ left: 1px;
37
+ right: 1px;
38
+ bottom: 3px;
39
+ padding: 0px;
40
+ color: #aaa ;
41
+ font-size: 12px;
31
42
  }
@@ -12,6 +12,7 @@
12
12
  outline: auto 7px -webkit-focus-ring-color;
13
13
  outline-offset: -2px;
14
14
  }
15
+
15
16
  .mozilla .sc-view .sc-text-field-view.focus {
16
17
  outline-color:-moz-mac-focusring;
17
18
  outline-offset:-5px;
@@ -86,6 +87,18 @@
86
87
  top: 3px;
87
88
  }
88
89
 
90
+
91
+ .sc-text-field-view input {
92
+ border: none;
93
+ outline: none;
94
+ }
95
+
96
+ .sc-text-field-view textarea {
97
+ border: none;
98
+ outline: none;
99
+ }
100
+
101
+
89
102
  .sc-text-field-view textarea {
90
103
  position: absolute;
91
104
  top: 0px;
@@ -104,8 +104,7 @@ SC.Button = {
104
104
 
105
105
  /**
106
106
  The button icon. Set this to either a URL or a CSS class name (for
107
- spriting). To display an icon, you must set hasIcon to YES when the
108
- button is created. Note that if you pass a URL, it must contain at
107
+ spriting). Note that if you pass a URL, it must contain at
109
108
  least one slash to be detected as such.
110
109
 
111
110
  @property {String}