sproutcore 1.10.0.rc.2 → 1.10.0.rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +8 -8
  2. data/VERSION.yml +1 -1
  3. data/lib/frameworks/sproutcore/CHANGELOG.md +14 -0
  4. data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +9 -1
  5. data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/pane_statechart.js +7 -0
  6. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/controllers/array/array_case.js +14 -0
  7. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layout.js +103 -0
  8. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutChildViews.js +4 -4
  9. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +4 -1
  10. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/viewDidResize.js +5 -5
  11. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +17 -6
  12. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/statechart.js +62 -8
  13. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +14 -2
  14. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +26 -5
  15. data/lib/frameworks/sproutcore/frameworks/datastore/tests/integration/many_array.js +9 -1
  16. data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/nested_records/data_store.js +6 -2
  17. data/lib/frameworks/sproutcore/frameworks/desktop/mixins/split_child.js +1 -1
  18. data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +0 -2
  19. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/list/render.js +56 -54
  20. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +221 -171
  21. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/methods.js +261 -315
  22. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/split/split_child.js +137 -122
  23. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +1 -1
  24. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +10 -7
  25. data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +5 -4
  26. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_display.js +14 -14
  27. data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +123 -98
  28. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/content_display.js +18 -6
  29. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/api.js +9 -11
  30. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/transition_test.js +2 -2
  31. data/lib/frameworks/sproutcore/frameworks/foundation/views/container.js +15 -16
  32. data/lib/frameworks/sproutcore/frameworks/foundation/views/inline_text_field.js +11 -0
  33. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/enumerable.js +1 -1
  34. data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +3 -3
  35. data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +170 -153
  36. data/lib/frameworks/sproutcore/frameworks/table/views/table.js +105 -101
  37. data/lib/frameworks/sproutcore/frameworks/table/views/table_head.js +0 -7
  38. data/lib/frameworks/sproutcore/frameworks/table/views/table_header.js +46 -56
  39. data/lib/frameworks/sproutcore/frameworks/table/views/table_row.js +0 -6
  40. data/lib/frameworks/sproutcore/frameworks/template_view/tests/views/template/collection.js +12 -4
  41. data/lib/frameworks/sproutcore/frameworks/template_view/views/bindable_span.js +3 -2
  42. data/lib/frameworks/sproutcore/frameworks/template_view/views/template_collection.js +11 -8
  43. data/lib/frameworks/sproutcore/tests/phantomjs_runner.phantomjs +0 -1
  44. metadata +3 -3
  45. data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js +0 -235
@@ -7,53 +7,43 @@
7
7
 
8
8
  sc_require('views/table');
9
9
 
10
- /** @class
11
- The views that make up the column header cells in a typical `SC.TableView`.
12
-
13
- In addition, this view is in charge of rendering the _entire_ table column
14
- (both header and body) when the table is in the "drag-reorder" state. This
15
- is the state that occurs when the user clicks and holds on a table header,
16
- then drags that header horizontally.
17
-
18
- @extends SC.View
19
- @since SproutCore 1.1
20
- */
10
+
21
11
  SC.TableHeaderView = SC.View.extend({
22
-
12
+
23
13
  classNames: ['sc-table-header'],
24
-
14
+
25
15
  displayProperties: ['sortState', 'isInDragMode'],
26
-
16
+
27
17
  acceptsFirstResponder: YES,
28
-
18
+
29
19
  isInDragMode: NO,
30
-
20
+
31
21
  hasHorizontalScroller: NO,
32
22
  hasVerticalScroller: NO,
33
-
23
+
34
24
  childViews: ['dragModeView'],
35
-
36
-
25
+
26
+
37
27
  /**
38
28
  The view that is visible when the column is in drag mode.
39
29
  */
40
30
  dragModeView: SC.ListView.extend({
41
31
  isVisible: NO,
42
-
32
+
43
33
  layout: { left: 0, right: 0, bottom: 0 },
44
-
34
+
45
35
  init: function() {
46
36
  sc_super();
47
37
 
48
38
  var tableHeaderView = this.get('parentView');
49
-
39
+
50
40
  if (tableHeaderView) {
51
41
  tableHeaderView.addObserver('isInDragMode', this,
52
42
  '_scthv_dragModeDidChange');
53
43
  }
54
-
44
+
55
45
  },
56
-
46
+
57
47
  _scthv_dragModeDidChange: function() {
58
48
  // var isInDragMode = this.get('tableHeaderView').get('isInDragMode');
59
49
  // this.set('isVisible', isInDragMode);
@@ -64,7 +54,7 @@ SC.TableHeaderView = SC.View.extend({
64
54
  The SC.TableColumn object this header cell is bound to.
65
55
  */
66
56
  column: null,
67
-
57
+
68
58
  render: function(context, firstTime) {
69
59
  var column = this.get('column'), icon = column.get('icon'), html;
70
60
  var span = context.begin('span');
@@ -76,7 +66,7 @@ SC.TableHeaderView = SC.View.extend({
76
66
  }
77
67
  span.end();
78
68
  },
79
-
69
+
80
70
  // ========================================================
81
71
  // = For the column we look after, set up some observers. =
82
72
  // ========================================================
@@ -89,76 +79,76 @@ SC.TableHeaderView = SC.View.extend({
89
79
  column.addObserver('minWidth', this, '_scthv_layoutDidChange');
90
80
  column.addObserver('sortState', this, '_scthv_sortStateDidChange');
91
81
  column.addObserver('tableContent', this, '_scthv_tableContentDidChange');
92
-
82
+
93
83
  // var tableContent = column.get('tableContent');
94
84
  // var columnContent = this._scthv_columnContentFromTableContent(tableContent);
95
85
  // this.set('content', columnContent);
96
86
  },
97
-
87
+
98
88
  /**
99
89
  The sortState of the header view's column.
100
90
  */
101
91
  sortState: function() {
102
92
  return this.get('column').get('sortState');
103
93
  }.property(),
104
-
94
+
105
95
  mouseDown: function(evt) {
106
- var tableView = this.get('tableView');
96
+ var tableView = this.get('tableView');
107
97
  return tableView ? tableView.mouseDownInTableHeaderView(evt, this) :
108
98
  sc_super();
109
99
  },
110
-
100
+
111
101
  mouseUp: function(evt) {
112
102
  var tableView = this.get('tableView');
113
103
  return tableView ? tableView.mouseUpInTableHeaderView(evt, this) :
114
104
  sc_super();
115
105
  },
116
-
106
+
117
107
  mouseDragged: function(evt) {
118
108
  var tableView = this.get('tableView');
119
109
  return tableView ? tableView.mouseDraggedInTableHeaderView(evt, this) :
120
110
  sc_super();
121
111
  },
122
-
112
+
123
113
  _scthv_dragViewForHeader: function() {
124
114
  var dragLayer = this.get('layer').cloneNode(true);
125
115
  var view = SC.View.create({ layer: dragLayer, parentView: this });
126
-
116
+
127
117
  // cleanup weird stuff that might make the drag look out of place
128
118
  SC.$(dragLayer).css('backgroundColor', 'transparent')
129
119
  .css('border', 'none')
130
- .css('top', 0).css('left', 0);
131
-
120
+ .css('top', 0).css('left', 0);
121
+
132
122
  return view;
133
123
  },
134
-
124
+
135
125
  _scthv_enterDragMode: function() {
136
126
  this.set('isInDragMode', YES);
137
127
  },
138
-
128
+
139
129
  _scthv_exitDragMode: function() {
140
130
  this.set('isInDragMode', NO);
141
131
  },
142
-
143
- // _scthv_hideViewInDragMode: function() {
132
+
133
+ // _scthv_hideViewInDragMode: function() {
144
134
  // var shouldBeVisible = !this.get('isInDragMode'), layer = this.get('layer');
145
135
  // console.log('should be visible: %@'.fmt(!this.get('isInDragMode')));
146
136
  // SC.RunLoop.begin();
147
137
  // SC.$(layer).css('display', shouldBeVisible ? 'block' : 'none');
148
138
  // SC.RunLoop.end();
149
139
  // }.observes('isInDragMode'),
150
-
140
+
151
141
  // _scthv_setupDragMode: function() {
152
142
  // var isInDragMode = this.get('isInDragMode');
153
143
  // if (isInDragMode) {
154
- // });
144
+ // });
155
145
  // } else {
156
146
  // //
157
147
  // }
158
- //
159
- //
148
+ //
149
+ //
160
150
  // }.observes('isInDragMode'),
161
-
151
+
162
152
  _scthv_dragModeViewDidChange: function() {
163
153
  var dragModeView = this.get('dragModeView');
164
154
  if (dragModeView && dragModeView.set) {
@@ -166,45 +156,45 @@ SC.TableHeaderView = SC.View.extend({
166
156
  dragModeView.set('tableView', this.get('tableView'));
167
157
  }
168
158
  }.observes('dragModeView'),
169
-
159
+
170
160
  _scthv_layoutDidChange: function(sender, key, value, rev) {
171
161
  var pv = this.get('parentView');
172
162
  pv.invokeOnce(pv.layoutChildViews);
173
-
163
+
174
164
  // Tell the container view how tall the header is so that it can adjust
175
165
  // itself accordingly.
176
- var layout = this.get('layout');
166
+ var layout = this.get('layout');
177
167
  //this.get('dragModeView').adjust('top', layout.height);
178
168
  },
179
-
169
+
180
170
  // When our column's tableContent property changes, we need to go back and get our column content
181
171
  _scthv_tableContentDidChange: function() {
182
- var tableContent = this.get('column').get('tableContent');
172
+ var tableContent = this.get('column').get('tableContent');
183
173
  var columnContent = this.get('parentView')._scthv_columnContentFromTableContent(tableContent, this.get('columnIndex'));
184
174
  this.set('content', columnContent);
185
175
  },
186
-
176
+
187
177
  _scthv_sortStateDidChange: function() {
188
178
  SC.RunLoop.begin();
189
179
  var sortState = this.get('column').get('sortState');
190
180
  var classNames = this.get('classNames');
191
-
181
+
192
182
  classNames.removeObject('sc-table-header-sort-asc');
193
183
  classNames.removeObject('sc-table-header-sort-desc');
194
184
  classNames.removeObject('sc-table-header-sort-active');
195
-
185
+
196
186
  if (sortState !== null) {
197
187
  classNames.push('sc-table-header-sort-active');
198
188
  }
199
-
189
+
200
190
  if (sortState === SC.SORT_ASCENDING) {
201
191
  classNames.push('sc-table-header-sort-asc');
202
192
  }
203
-
193
+
204
194
  if (sortState === SC.SORT_DESCENDING) {
205
195
  classNames.push('sc-table-header-sort-desc');
206
196
  }
207
-
197
+
208
198
  // TODO: Figure out why it's not enough to simply call
209
199
  // `displayDidChange` here.
210
200
  this.displayDidChange();
@@ -5,13 +5,7 @@
5
5
  // License: Licensed under MIT license (see license.js)
6
6
  // ==========================================================================
7
7
 
8
- /** @class
9
8
 
10
- The default example view for a table row. Belongs to a SC.TableView.
11
-
12
- @extends SC.View
13
- @since SproutCore 1.1
14
- */
15
9
 
16
10
  SC.TableRowView = SC.View.extend({
17
11
  /** @scope SC.TableRowView.prototype */
@@ -165,7 +165,9 @@ test("should give its item views the classBinding specified by itemClassBinding"
165
165
  template: SC.Handlebars.compile('{{#collection "TemplateTests.itemClassBindingTestCollectionView" itemClassBinding="content.isBaz"}}foo{{/collection}}')
166
166
  });
167
167
 
168
- view.createLayer();
168
+ SC.run(function () {
169
+ view.createLayer();
170
+ });
169
171
  equals(view.$('ul li.is-baz').length, 2, "adds class on initial rendering");
170
172
 
171
173
  SC.run(function() {
@@ -188,7 +190,9 @@ test("should pass item* property when created with a block", function() {
188
190
  var view = SC.TemplateView.create({
189
191
  template: SC.Handlebars.compile('{{#collection TemplateTests.CollectionTestView itemFoo="bar"}}baz{{/collection}}')
190
192
  });
191
- view.createLayer();
193
+ SC.run(function () {
194
+ view.createLayer();
195
+ });
192
196
 
193
197
  var childViews = view.getPath('childViews.firstObject.childViews');
194
198
  childViews.forEach(function(childView, index) {
@@ -203,7 +207,9 @@ test("should pass item* property when created without a block", function() {
203
207
  var view = SC.TemplateView.create({
204
208
  template: SC.Handlebars.compile('{{collection TemplateTests.CollectionTestView itemFoo="bar"}}')
205
209
  });
206
- view.createLayer();
210
+ SC.run(function () {
211
+ view.createLayer();
212
+ });
207
213
 
208
214
  var childViews = view.getPath('childViews.firstObject.childViews');
209
215
  childViews.forEach(function(childView, index) {
@@ -222,7 +228,9 @@ test("should work inside a bound {{#if}}", function() {
222
228
  shouldDisplay: true
223
229
  });
224
230
 
225
- view.createLayer();
231
+ SC.run(function () {
232
+ view.createLayer();
233
+ });
226
234
  equals(view.$('ul li').length, 3, "renders collection when conditional is true");
227
235
 
228
236
  SC.run(function() { view.set('shouldDisplay', NO); });
@@ -162,8 +162,8 @@ SC._BindableSpan = SC.TemplateView.extend(
162
162
  len = childViews.get('length');
163
163
  for (idx = len-1; idx >= 0; idx--){
164
164
  childView = childViews[idx];
165
- childView.$().remove();
166
- childView.removeFromParent();
165
+ // childView.$().remove();
166
+ // childView.removeFromParent();
167
167
  childView.destroy();
168
168
  }
169
169
 
@@ -175,6 +175,7 @@ SC._BindableSpan = SC.TemplateView.extend(
175
175
  this.$().replaceWith(elem);
176
176
  this.set('layer', elem);
177
177
  this._rendered();
178
+ this._callOnChildViews('_parentDidRender');
178
179
  }
179
180
  });
180
181
 
@@ -46,7 +46,7 @@ SC.TemplateCollectionView = SC.TemplateView.extend(
46
46
  */
47
47
  init: function() {
48
48
  var templateCollectionView = sc_super();
49
-
49
+ this._sctcv_contentDidChange();
50
50
  return templateCollectionView;
51
51
  },
52
52
 
@@ -173,6 +173,7 @@ SC.TemplateCollectionView = SC.TemplateView.extend(
173
173
  needed.
174
174
  */
175
175
  _sctcv_contentDidChange: function() {
176
+
176
177
  var oldContent = this._content, oldLen = 0;
177
178
  var content = this.get('content'), newLen = 0;
178
179
 
@@ -249,7 +250,7 @@ SC.TemplateCollectionView = SC.TemplateView.extend(
249
250
  // each item.
250
251
  itemOptions = this.get('itemViewOptions') || {};
251
252
 
252
- // insertAtElement = elem.find('li')[start-1] || null;
253
+ insertAtElement = elem.find('li')[start-1] || null;
253
254
  len = addedObjects.get('length');
254
255
 
255
256
  // TODO: This logic is duplicated from the view helper. Refactor
@@ -284,8 +285,13 @@ SC.TemplateCollectionView = SC.TemplateView.extend(
284
285
  childView.set('context', childView.get(contextProperty));
285
286
  }
286
287
 
287
- // Have to create child views manually.
288
- childView.createLayer()._doAttach(elem[0]);
288
+ itemElem = childView.createLayer().$();
289
+ if (!insertAtElement) {
290
+ elem.append(itemElem);
291
+ } else {
292
+ itemElem.insertAfter(insertAtElement);
293
+ }
294
+ insertAtElement = itemElem;
289
295
 
290
296
  addedViews.push(childView);
291
297
  }
@@ -300,10 +306,7 @@ SC.TemplateCollectionView = SC.TemplateView.extend(
300
306
  content: this
301
307
  }));
302
308
  this.set('emptyView', childView);
303
-
304
- // Have to create child views manually.
305
- childView.createLayer()._doAttach(elem[0]);
306
-
309
+ childView.createLayer().$().appendTo(elem);
307
310
  this.childViews = [childView];
308
311
  }
309
312
 
@@ -171,7 +171,6 @@ var urls=[
171
171
  {url:'sproutcore/foundation/en/current/tests/mixins/validatable/ui.html'},
172
172
  {url:'sproutcore/foundation/en/current/tests/mixins/content_value_support/content.html'},
173
173
  {url:'sproutcore/foundation/en/current/tests/mixins/inline_text_field/api.html'},
174
- {url:'sproutcore/foundation/en/current/tests/mixins/inline_text_field/beginEditing.html'},
175
174
  {url:'sproutcore/foundation/en/current/tests/mixins/content_display.html'},
176
175
  {url:'sproutcore/foundation/en/current/tests/controllers/tree/selection_support.html'},
177
176
  {url:'sproutcore/foundation/en/current/tests/controllers/tree/outline_case.html'},
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sproutcore
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0.rc.2
4
+ version: 1.10.0.rc.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Strobe, Inc., Apple Inc. and contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-03 00:00:00.000000000 Z
11
+ date: 2013-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -1275,6 +1275,7 @@ files:
1275
1275
  - lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/isVisibleInWindow.js
1276
1276
  - lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/keyboard.js
1277
1277
  - lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layer.js
1278
+ - lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layout.js
1278
1279
  - lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutChildViews.js
1279
1280
  - lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js
1280
1281
  - lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutStyle.js
@@ -1858,7 +1859,6 @@ files:
1858
1859
  - lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/commitEditing.js
1859
1860
  - lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_editor/discardEditing.js
1860
1861
  - lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/api.js
1861
- - lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/inline_text_field/beginEditing.js
1862
1862
  - lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js
1863
1863
  - lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/validatable/ui.js
1864
1864
  - lib/frameworks/sproutcore/frameworks/foundation/tests/private/tree_item_observer/flat_case.js
@@ -1,235 +0,0 @@
1
- // ==========================================================================
2
- // Project: SproutCore - JavaScript Application Framework
3
- // Copyright: ©2006-2011 Strobe Inc. and contributors.
4
- // portions copyright @2011 Apple Inc.
5
- // License: Licensed under MIT license (see license.js)
6
- // ==========================================================================
7
- /*global module test htmlbody ok equals same stop start Q$ */
8
-
9
- var pane, optionsForLabel1, optionsForLabel2, delegate, optionsForLabelFromView;
10
-
11
- pane = SC.ControlTestPane.design().add("label1", SC.LabelView, {
12
- value: 'Some Text',
13
- notifiedWillBegin: NO,
14
- notifiedDidBegin: NO,
15
-
16
- inlineEditorShouldBeginEditing: function(inlineEditor) {
17
- return YES;
18
- },
19
-
20
- inlineEditorWillBeginEditing: function(inlineEditor) {
21
- this.set('notifiedWillBegin', YES);
22
-
23
- // The inline editor is the last view appended to the parent
24
- var parentView = this.get('parentView'),
25
- length = parentView.childViews.length,
26
- editor = parentView.childViews[length - 1];
27
-
28
- ok(!editor.get('isFirstResponder'), "should not be first responder yet");
29
-
30
- sc_super();
31
- },
32
-
33
- inlineEditorDidBeginEditing: function(inlineEditor) {
34
- this.set('notifiedDidBegin', YES);
35
-
36
- // The inline editor is the last view appended to the parent
37
- var parentView = this.get('parentView'),
38
- length = parentView.childViews.length,
39
- editor = parentView.childViews[length - 1];
40
-
41
- ok(editor.get('isFirstResponder'), "should be first responder now");
42
-
43
- sc_super();
44
- }
45
- }).add("label2", SC.LabelView, {
46
- value: 'Can\'t Touch This',
47
-
48
- inlineEditorShouldBeginEditing: function(inlineEditor) {
49
- return NO;
50
- }
51
- });
52
-
53
- pane.resetView = function(view) {
54
- view.set('notifiedWillBegin', NO);
55
- view.set('notifiedDidBegin', NO);
56
- };
57
-
58
-
59
- optionsForLabelFromView = function(view) {
60
- var el = view.$(),
61
- f = SC.offset(el[0]),
62
- frameTemp = view.convertFrameFromView(view.get('frame'), null);
63
-
64
- f.width = frameTemp.width;
65
- f.height = frameTemp.height;
66
-
67
- var optionsForLabel = {
68
- frame: f,
69
- delegate: view,
70
- exampleElement: view.$(),
71
- value: view.get('value'),
72
- multiline: view.get('isInlineEditorMultiline'),
73
- validator: view.get('validator'),
74
- exampleInlineTextFieldView: view.get('exampleInlineTextFieldView')
75
- };
76
-
77
- return optionsForLabel;
78
- };
79
-
80
-
81
- /**
82
-
83
- */
84
- module("Test the beginEditing() function of SC.InlineTextFieldView", {
85
- setup: function() {
86
-
87
- pane.standardSetup().setup();
88
-
89
- var view1 = pane.view('label1'),
90
- view2 = pane.view("label2");
91
-
92
- // Reset view1 delegate functions
93
- pane.resetView(view1);
94
-
95
- optionsForLabel1 = optionsForLabelFromView(view1);
96
- optionsForLabel2 = optionsForLabelFromView(view2);
97
- },
98
-
99
- teardown: function() {
100
- optionsForLabel1 = optionsForLabel2 = null;
101
- SC.InlineTextFieldView.discardEditing();
102
- pane.standardSetup().teardown();
103
-
104
- }
105
- });
106
-
107
- test("fails when required options are missing",
108
- function() {
109
- try {
110
- optionsForLabel1["frame"] = null;
111
- ok(SC.InlineTextFieldView.beginEditing(optionsForLabel1) === NO, "should fail if frame missing");
112
- } catch(e1) {
113
- ok(YES, "should fail if frame missing: %@".fmt(e1));
114
- }
115
-
116
- try {
117
- optionsForLabel1["delegate"] = null;
118
- ok(SC.InlineTextFieldView.beginEditing(optionsForLabel1) === NO, "should fail if delegate missing");
119
- } catch(e2) {
120
- ok(YES, "should fail if delegate missing: %@".fmt(e2));
121
- }
122
-
123
- try {
124
- optionsForLabel1["exampleElement"] = null;
125
- ok(SC.InlineTextFieldView.beginEditing(optionsForLabel1) === NO, "should fail if exampleElement missing");
126
- } catch(e3) {
127
- ok(YES, "should fail if exampleElement missing: %@".fmt(e3));
128
- }
129
- });
130
-
131
- test("value of inline editor same as label",
132
- function() {
133
-
134
- SC.RunLoop.begin();
135
- SC.InlineTextFieldView.beginEditing(optionsForLabel1);
136
- SC.RunLoop.end();
137
-
138
- // The inline editor is the last view appended to the parent
139
- var view = pane.view('label1'),
140
- parentView = view.get('parentView'),
141
- length = parentView.childViews.length,
142
- editor = parentView.childViews[length - 1];
143
-
144
- equals(editor.get('value'), view.get('value'), "editor should have the same initial value as its label");
145
- });
146
-
147
- test("use input element when options.multiline is set to NO",
148
- function() {
149
- SC.RunLoop.begin();
150
- SC.InlineTextFieldView.beginEditing(optionsForLabel1);
151
- SC.RunLoop.end();
152
-
153
- // The inline editor is the last view appended to the parent
154
- var view = pane.view('label1'),
155
- parentView = view.get('parentView'),
156
- length = parentView.childViews.length,
157
- editor = parentView.childViews[length - 1];
158
-
159
- ok(editor.$("input").length > 0, "should be using an input element");
160
- });
161
-
162
- test("use textarea element when options.multiline is set to YES",
163
- function() {
164
- optionsForLabel1["multiline"] = YES;
165
-
166
- SC.RunLoop.begin();
167
- SC.InlineTextFieldView.beginEditing(optionsForLabel1);
168
- SC.RunLoop.end();
169
-
170
- // The inline editor is the last view appended to the parent
171
- var view = pane.view('label1'),
172
- parentView = view.get('parentView'),
173
- length = parentView.childViews.length,
174
- editor = parentView.childViews[length - 1];
175
-
176
- ok(editor.$("textarea").length > 0, "should be using a textarea element");
177
- });
178
- /* TODO: move these to inlineEditorDelegate tests
179
- test("inline editor aborts if delegate returns NO to inlineEditorShouldBeginEditing()",
180
- function() {
181
- SC.InlineTextFieldView.beginEditing(optionsForLabel2);
182
-
183
- // The inline editor is the last view appended to the pane
184
- var length = pane._pane.childViews.length,
185
- editor = pane._pane.childViews[length - 1];
186
-
187
- ok(!editor.get('isEditing'), "editor should have isEditing set to NO");
188
- });
189
-
190
- test("inline editor notifies delegate with inlineEditorWillBeginEditing() before becoming responder",
191
- function() {
192
- var view1 = pane.view('label1');
193
-
194
- SC.RunLoop.begin();
195
- ok(!view1.get('notifiedWillBegin'), "the delegate should not have been notified of begin editing at this point");
196
- SC.InlineTextFieldView.beginEditing(optionsForLabel1);
197
- ok(view1.get('notifiedWillBegin'), "the delegate should have been notified of begin editing at this point");
198
- SC.RunLoop.end();
199
- });
200
- */
201
- test("inline editor notifies delegate with inlineEditorDidBeginEditing() after becoming responder",
202
- function() {
203
- var view1 = pane.view('label1');
204
-
205
- // Start a run loop because the notification isn't invoked until the beginning of the next run loop
206
- SC.RunLoop.begin();
207
-
208
- ok(!view1.get('notifiedDidBegin'), "the delegate should not have been notified of begin editing at this point");
209
- SC.InlineTextFieldView.beginEditing(optionsForLabel1);
210
- SC.RunLoop.end();
211
-
212
- ok(view1.get('notifiedDidBegin'), "the delegate should have been notified of begin editing at this point");
213
- });
214
-
215
- test("inline editor does not display the defaultValue if the label's value is the number 0",
216
- function() {
217
- var view1 = pane.view('label1');
218
- view1.set('value', 0);
219
- optionsForLabel1 = optionsForLabelFromView(view1);
220
-
221
- SC.RunLoop.begin();
222
- SC.InlineTextFieldView.beginEditing(optionsForLabel1);
223
- SC.RunLoop.end();
224
-
225
- // The inline editor is the last view appended to the parent
226
- var view = pane.view('label1'),
227
- parentView = view.get('parentView'),
228
- length = parentView.childViews.length,
229
- editor = parentView.childViews[length - 1];
230
-
231
- same(editor.get('value'), 0, "editor should have number 0 as value");
232
- editor.blurEditor();
233
-
234
- same(view1.get('value'), 0, "view should still have number 0 as value");
235
- });