sproutcore 1.6.0.rc.2-x86-mingw32 → 1.6.0.1-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (209) 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 +73 -44
  203. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/english.lproj/default_styles.css +0 -5
  204. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/english.lproj/strings.js +0 -15
  205. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_checkbox_field.js +0 -17
  206. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_field.js +0 -17
  207. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_label.js +0 -17
  208. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_radio_field.js +0 -17
  209. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/forms/tests/views/form_text_field.js +0 -17
@@ -39,6 +39,26 @@ SC.Controller = SC.Object.extend(
39
39
 
40
40
  @property {Boolean}
41
41
  */
42
- isEditable: YES
42
+ isEditable: YES,
43
+
44
+ /**
45
+ * Set this to YES if you are setting the controller content to a recordArray
46
+ * or other content that needs to be cleaned up (with `.destroy()`) when
47
+ * new content is set.
48
+ */
49
+ destroyContentOnReplace: NO,
50
+
51
+ contentObjectDidChanged: function() {
52
+ var oldContent, newContent;
53
+
54
+ if (!this.get('destroyContentOnReplace')) return;
55
+
56
+ oldContent = this._oldContent,
57
+ newContent = this.get('content');
58
+ if (oldContent && newContent !== oldContent && oldContent.destroy) {
59
+ oldContent.destroy();
60
+ }
61
+ this._oldContent = newContent;
62
+ }.observes('content')
43
63
 
44
64
  });
@@ -167,7 +167,7 @@ SC.ResponderContext = {
167
167
  if (responder) responder.set('isFirstResponder', YES);
168
168
 
169
169
  this._notifyDidBecomeFirstResponder(responder, responder, common);
170
-
170
+
171
171
  // now, tell everyone the good news!
172
172
  this.endPropertyChanges();
173
173
 
@@ -15,8 +15,13 @@ SC.Checkbox = SC.TemplateView.extend(
15
15
  title: null,
16
16
  value: null,
17
17
 
18
+ displayTitle: function() {
19
+ var title = this.get('title');
20
+ return title ? SC.String.loc(title) : null;
21
+ }.property('title').cacheable(),
22
+
18
23
  classNames: ['sc-checkbox'],
19
- template: SC.Handlebars.compile('<label><input type="checkbox">{{title}}</label>'),
24
+ template: SC.Handlebars.compile('<label><input type="checkbox">{{displayTitle}}</label>'),
20
25
 
21
26
  didCreateLayer: function() {
22
27
  var self = this;
@@ -49,8 +49,13 @@ SC.TextField = SC.TemplateView.extend(
49
49
  var input = this.$input();
50
50
  input.val(this._value);
51
51
 
52
- SC.Event.add(input, 'focus', this, this.focusIn);
53
- SC.Event.add(input, 'blur', this, this.focusOut);
52
+ if (SC.browser.msie) {
53
+ SC.Event.add(input, 'focusin', this, this.focusIn);
54
+ SC.Event.add(input, 'focusout', this, this.focusOut);
55
+ } else {
56
+ SC.Event.add(input, 'focus', this, this.focusIn);
57
+ SC.Event.add(input, 'blur', this, this.focusOut);
58
+ }
54
59
 
55
60
  input.bind('change', function() {
56
61
  self.domValueDidChange(SC.$(this));
@@ -77,8 +82,12 @@ SC.TextField = SC.TemplateView.extend(
77
82
  var input = this.$input();
78
83
 
79
84
  if (value !== undefined) {
80
- this._value = value;
81
- input.val(value);
85
+ // We don't want to unnecessarily set the value.
86
+ // Doing that could cause the selection to be lost.
87
+ if (this._value !== value || input.val() !== value) {
88
+ this._value = value;
89
+ input.val(value);
90
+ }
82
91
  } else if (input.length) {
83
92
  this._value = value = input.val();
84
93
  } else {
@@ -135,8 +144,12 @@ SC.TextFieldSupport = /** @scope SC.TextFieldSupport */{
135
144
  var input = this.$('input');
136
145
 
137
146
  if (value !== undefined) {
138
- this._value = value;
139
- input.val(value);
147
+ // We don't want to unnecessarily set the value.
148
+ // Doing that could cause the selection to be lost.
149
+ if (this._value !== value || input.val() !== value) {
150
+ this._value = value;
151
+ input.val(value);
152
+ }
140
153
  } else {
141
154
  if (input.length > 0) {
142
155
  value = this._value = input.val();
@@ -153,8 +166,13 @@ SC.TextFieldSupport = /** @scope SC.TextFieldSupport */{
153
166
 
154
167
  input.val(this._value);
155
168
 
156
- SC.Event.add(input, 'focus', this, this.focusIn);
157
- SC.Event.add(input, 'blur', this, this.focusOut);
169
+ if (SC.browser.msie) {
170
+ SC.Event.add(input, 'focusin', this, this.focusIn);
171
+ SC.Event.add(input, 'focusout', this, this.focusOut);
172
+ } else {
173
+ SC.Event.add(input, 'focus', this, this.focusIn);
174
+ SC.Event.add(input, 'blur', this, this.focusOut);
175
+ }
158
176
  },
159
177
 
160
178
  focusIn: function(event) {
@@ -52,6 +52,8 @@ SC.Pane.reopen(
52
52
  if (nextValidKeyView) {
53
53
  this.makeFirstResponder(nextValidKeyView);
54
54
  return YES;
55
+ }else if(!SC.TABBING_ONLY_INSIDE_DOCUMENT){
56
+ evt.allowDefault();
55
57
  }
56
58
  }
57
59
 
@@ -260,7 +260,9 @@ SC.Pane = SC.View.extend(SC.ResponderContext,
260
260
  // if we are currently key pane, then notify key views of change also
261
261
  if (isKeyPane) {
262
262
  if (current) { current.tryToPerform('willLoseKeyResponderTo', view); }
263
- if (view) { view.tryToPerform('willBecomeKeyResponderFrom', current); }
263
+ if (view) {
264
+ view.tryToPerform('willBecomeKeyResponderFrom', current);
265
+ }
264
266
  }
265
267
 
266
268
  if (current) {
@@ -280,8 +282,11 @@ SC.Pane = SC.View.extend(SC.ResponderContext,
280
282
 
281
283
  // and notify again if needed.
282
284
  if (isKeyPane) {
283
- if (view) { view.tryToPerform('didBecomeKeyResponderFrom', current); }
284
- if (current) { current.tryToPerform('didLoseKeyResponderTo', view); }
285
+ if (view) {
286
+ view.tryToPerform('didBecomeKeyResponderFrom', current); }
287
+ if (current) {
288
+ current.tryToPerform('didLoseKeyResponderTo', view);
289
+ }
285
290
  }
286
291
 
287
292
  return this ;
@@ -293,7 +298,7 @@ SC.Pane = SC.View.extend(SC.ResponderContext,
293
298
  giving it one last opportunity to save its state.
294
299
 
295
300
  @param {SC.Pane} pane
296
- @returns {SC.Pane} reciever
301
+ @returns {SC.Pane} receiver
297
302
  */
298
303
  willLoseKeyPaneTo: function(pane) {
299
304
  this._forwardKeyChange(this.get('isKeyPane'), 'willLoseKeyResponderTo', pane, NO);
@@ -315,13 +320,15 @@ SC.Pane = SC.View.extend(SC.ResponderContext,
315
320
  },
316
321
 
317
322
 
323
+ didBecomeKeyResponderFrom: function(responder) {},
324
+
318
325
  /**
319
326
  Called just after the pane has lost its keyPane status. Notifies the
320
327
  current keyView of the change. The keyView can use this method to do any
321
328
  final cleanup and changes its own display value if needed.
322
329
 
323
330
  @param {SC.Pane} pane
324
- @returns {SC.Pane} reciever
331
+ @returns {SC.Pane} receiver
325
332
  */
326
333
  didLoseKeyPaneTo: function(pane) {
327
334
  var isKeyPane = this.get('isKeyPane');
@@ -5,20 +5,31 @@
5
5
  // License: Licensed under MIT license (see license.js)
6
6
  // ==========================================================================
7
7
 
8
- /**
8
+ /** @class
9
+
9
10
  SC.TemplatePane is a helper that will create a new pane based on
10
11
  a single root TemplateView.
11
12
 
12
- function main() {
13
- MyApp.mainPane = SC.TemplatePane.append({
14
- layerId: 'my-root-id',
15
- templateName: 'app'
16
- })
17
- }
13
+ function main() {
14
+ MyApp.mainPane = SC.TemplatePane.append({
15
+ layerId: 'my-root-id',
16
+ templateName: 'app'
17
+ })
18
+ }
19
+
20
+ @extends SC.Object
21
+ @since SproutCore 1.5
18
22
  */
19
23
  SC.TemplatePane = SC.Object.extend({});
20
24
 
21
- SC.mixin(SC.TemplatePane, {
25
+ SC.TemplatePane.mixin( /** @scope SC.TemplatePane */ {
26
+
27
+ /**
28
+ Creates a new pane with a single TemplateView.
29
+
30
+ @param {Object} attrs describes the pane to create
31
+ @returns {SC.MainPane} the created pane
32
+ */
22
33
  append: function(attrs) {
23
34
  var pane = SC.MainPane.extend({
24
35
  childViews: ['contentView'],
@@ -38,6 +49,11 @@ SC.mixin(SC.TemplatePane, {
38
49
  }
39
50
  });
40
51
 
41
- return pane.create().append();
52
+ pane = pane.create().append();
53
+
54
+ // Normally the awake process is started in the Page, but we don't have a Page
55
+ pane.awake();
56
+
57
+ return pane;
42
58
  }
43
59
  });
@@ -66,6 +66,12 @@ SC.Locale = SC.Object.extend({
66
66
  /** The strings hash for this locale. */
67
67
  strings: {},
68
68
 
69
+ /**
70
+ The metrics for this locale. A metric is a singular value that is usually
71
+ used in a user interface layout, such as "width of the OK button".
72
+ */
73
+ metrics: {},
74
+
69
75
  toString: function() {
70
76
  if (!this.language) SC.Locale._assignLocales() ;
71
77
  return "SC.Locale["+this.language+"]"+SC.guidFor(this) ;
@@ -86,9 +92,107 @@ SC.Locale = SC.Object.extend({
86
92
  if (SC.typeOf(ret) === SC.T_STRING) return ret;
87
93
  else if (SC.typeOf(def) === SC.T_STRING) return def;
88
94
  return string;
95
+ },
96
+
97
+ /**
98
+ Returns the localized value of the metric for the specified key, or
99
+ undefined if no match is found.
100
+
101
+ @param {String} key
102
+ @returns {Number} ret
103
+ */
104
+ locMetric: function(key) {
105
+ var ret = this.metrics[key];
106
+ if (SC.typeOf(ret) === SC.T_NUMBER) {
107
+ return ret;
108
+ }
109
+ else if (ret === undefined) {
110
+ SC.warn("No localized metric found for key \"" + key + "\"");
111
+ return undefined;
112
+ }
113
+ else {
114
+ SC.warn("Unexpected metric type for key \"" + key + "\"");
115
+ return undefined;
116
+ }
117
+ },
118
+
119
+ /**
120
+ Creates and returns a new hash suitable for use as an SC.View’s 'layout'
121
+ hash. This hash will be created by looking for localized metrics following
122
+ a pattern based on the “base key” you specify.
123
+
124
+ For example, if you specify "Button.Confirm", the following metrics will be
125
+ used if they are defined:
126
+
127
+ Button.Confirm.left
128
+ Button.Confirm.top
129
+ Button.Confirm.right
130
+ Button.Confirm.bottom
131
+ Button.Confirm.width
132
+ Button.Confirm.height
133
+ Button.Confirm.midWidth
134
+ Button.Confirm.minHeight
135
+ Button.Confirm.centerX
136
+ Button.Confirm.centerY
137
+
138
+ Additionally, you can optionally specify a hash which will be merged on top
139
+ of the returned hash. For example, if you wish to allow a button’s width
140
+ to be configurable per-locale, but always wish for it to be centered
141
+ vertically and horizontally, you can call:
142
+
143
+ locLayout("Button.Confirm", {centerX:0, centerY:0})
144
+
145
+ …so that you can combine both localized and non-localized elements in the
146
+ returned hash. (An exception will be thrown if there is a locale-specific
147
+ key that matches a key specific in this hash.)
148
+
149
+ @param {String} baseKey
150
+ @param {String} (optional) additionalHash
151
+ @returns {Hash}
152
+ */
153
+ locLayout: function(baseKey, additionalHash) {
154
+ // Note: In this method we'll directly access this.metrics rather than
155
+ // going through locMetric() for performance and to avoid
156
+ // locMetric()'s sanity checks.
157
+
158
+ var i, len, layoutKey, key, value,
159
+ layoutKeys = SC.Locale.layoutKeys,
160
+ metrics = this.metrics,
161
+
162
+ // Cache, to avoid repeated lookups
163
+ typeOfFunc = SC.typeOf,
164
+ numberType = SC.T_NUMBER,
165
+
166
+ ret = {};
167
+
168
+
169
+ // Start off by mixing in the additionalHash; we'll look for collisions with
170
+ // the localized values in the loop below.
171
+ if (additionalHash) SC.mixin(ret, additionalHash);
172
+
173
+
174
+ // For each possible key that can be included in a layout hash, see whether
175
+ // we have a localized value.
176
+ for (i = 0, len = layoutKeys.length; i < len; ++i) {
177
+ layoutKey = layoutKeys[i];
178
+ key = baseKey + "." + layoutKey;
179
+ value = metrics[key];
180
+
181
+ if (typeOfFunc(value) === numberType) {
182
+ // We have a localized value! As a sanity check, if the caller
183
+ // specified an additional hash and it has the same key, we'll throw an
184
+ // error.
185
+ if (additionalHash && additionalHash[layoutKey]) {
186
+ throw "locLayout(): There is a localized value for the key '" + key + "' but a value for '" + layoutKey + "' was also specified in the non-localized hash";
187
+ }
188
+
189
+ ret[layoutKey] = value;
190
+ }
191
+ }
192
+
193
+ return ret;
89
194
  }
90
-
91
-
195
+
92
196
  }) ;
93
197
 
94
198
  SC.Locale.mixin(/** @scope SC.Locale */ {
@@ -98,12 +202,19 @@ SC.Locale.mixin(/** @scope SC.Locale */ {
98
202
  preferred one.
99
203
  */
100
204
  useAutodetectedLanguage: NO,
101
-
205
+
102
206
  /**
103
207
  This property is set by the build tools to the current build language.
104
208
  */
105
209
  preferredLanguage: null,
106
-
210
+
211
+ /**
212
+ This property holds all attributes name which can be used for a layout hash
213
+ (for an SC.View). These are what we support inside the layoutFor() method.
214
+ */
215
+ layoutKeys: ['left', 'top', 'right', 'bottom', 'width', 'height',
216
+ 'minWidth', 'minHeight', 'centerX', 'centerY'],
217
+
107
218
  /**
108
219
  Invoked at the start of SproutCore's document onready handler to setup
109
220
  the currentLocale. This will use the language properties you have set on
@@ -211,7 +322,37 @@ SC.Locale.mixin(/** @scope SC.Locale */ {
211
322
  this.prototype.hasStrings = YES ;
212
323
  return this;
213
324
  },
214
-
325
+
326
+ /**
327
+ Adds the passed hash of metrics to the locale's metrics table, much as
328
+ addStrings() is used to add in strings. Note that if the receiver locale
329
+ inherits its metrics from its parent, then the metrics table will be cloned
330
+ first.
331
+
332
+ @returns {Object} receiver
333
+ */
334
+ addMetrics: function(metricsHash) {
335
+ // make sure the target metrics hash exists and belongs to the locale
336
+ var metrics = this.prototype.metrics;
337
+ if (metrics) {
338
+ if (!this.prototype.hasOwnProperty(metrics)) {
339
+ this.prototype.metrics = SC.clone(metrics) ;
340
+ }
341
+ }
342
+ else {
343
+ metrics = this.prototype.metrics = {} ;
344
+ }
345
+
346
+ // add metrics hash
347
+ if (metricsHash) this.prototype.metrics = SC.mixin(metrics, metricsHash);
348
+
349
+ // Note: We don't need the equivalent of this.hasStrings here, because we
350
+ // are not burdened by an older API to look for like the strings
351
+ // support is.
352
+
353
+ return this;
354
+ },
355
+
215
356
  _map: { english: 'en', french: 'fr', german: 'de', japanese: 'ja', jp: 'ja', spanish: 'es' },
216
357
 
217
358
  /**
@@ -286,4 +427,15 @@ SC.stringsFor = function(languageCode, strings) {
286
427
  return this ;
287
428
  } ;
288
429
 
430
+ /**
431
+ Just like SC.stringsFor, but for metrics.
289
432
 
433
+ @param {String} languageCode
434
+ @param {Hash} metrics
435
+ @returns {Object} receiver
436
+ */
437
+ SC.metricsFor = function(languageCode, metrics) {
438
+ var locale = SC.Locale.localeClassFor(languageCode);
439
+ locale.addMetrics(metrics);
440
+ return this;
441
+ };
@@ -50,7 +50,8 @@ SC.COMBO_STYLES = {
50
50
  context.begin() <-- begins a new tag context
51
51
  context.end() <-- ends the tag context...
52
52
  */
53
- SC.RenderContext = SC.Builder.create(/** SC.RenderContext.fn */ {
53
+ SC.RenderContext = SC.Builder.create(
54
+ /** @lends SC.RenderContext */ {
54
55
 
55
56
  SELF_CLOSING: SC.CoreSet.create().addEach(['area', 'base', 'basefront', 'br', 'hr', 'input', 'img', 'link', 'meta']),
56
57
 
@@ -259,7 +260,7 @@ SC.RenderContext = SC.Builder.create(/** SC.RenderContext.fn */ {
259
260
  @returns {DOMElement} the element
260
261
  */
261
262
  element: function() {
262
- return this._elem ? this._elem : SC.$(this.join())[0]
263
+ return this._elem ? this._elem : SC.$(this.join())[0];
263
264
  },
264
265
 
265
266
  /**
@@ -295,7 +296,7 @@ SC.RenderContext = SC.Builder.create(/** SC.RenderContext.fn */ {
295
296
  update: function() {
296
297
  var elem = this._elem,
297
298
  mode = this.updateMode,
298
- cq, key, value, attr, styles, factory, cur, next, before;
299
+ cq, value, factory, cur, next;
299
300
 
300
301
  this._innerHTMLReplaced = NO;
301
302
 
@@ -318,14 +319,13 @@ SC.RenderContext = SC.Builder.create(/** SC.RenderContext.fn */ {
318
319
  } else {
319
320
  factory = elem.cloneNode(false);
320
321
  factory.innerHTML = this.join() ;
321
- before = (mode === SC.MODE_APPEND) ? null : elem.firstChild;
322
322
  cur = factory.firstChild ;
323
323
  while(cur) {
324
324
  next = cur.nextSibling ;
325
325
  elem.insertBefore(cur, next);
326
326
  cur = next ;
327
327
  }
328
- cur = next = factory = before = null ; // cleanup
328
+ cur = next = factory = null ; // cleanup
329
329
  }
330
330
  }
331
331
 
@@ -595,8 +595,9 @@ SC.RenderContext = SC.Builder.create(/** SC.RenderContext.fn */ {
595
595
  this._classNamesDidChange = YES ;
596
596
  }
597
597
  } else {
598
+ var cl;
598
599
  for(var i = 0, iLen= nameOrClasses.length; i<iLen; i++){
599
- var cl = nameOrClasses[i];
600
+ cl = nameOrClasses[i];
600
601
  if (classNames.indexOf(cl)<0) {
601
602
  classNames.push(cl);
602
603
  this._classNamesDidChange = YES ;