sproutcore 1.10.1 → 1.10.2
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.
- checksums.yaml +8 -8
- data/CHANGELOG +13 -0
- data/VERSION.yml +1 -1
- data/lib/frameworks/sproutcore/CHANGELOG.md +69 -31
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/array.js +14 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/controllers/object.js +14 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +7 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/platform.js +13 -9
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +57 -23
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/enabled_states_test.js +24 -6
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/enabled.js +63 -13
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/models/single_attribute.js +7 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/system/many_array.js +28 -5
- data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +15 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +30 -3
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +23 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/many_attribute.js +135 -89
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/single_attribute.js +12 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +18 -6
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/panes/picker/ui.js +58 -20
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/date_field/methods.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/select/methods.js +15 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/popup_button.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/select.js +24 -23
- data/lib/frameworks/sproutcore/frameworks/desktop/views/split.js +4 -0
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/select_view/views/popup_button.js +10 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/delegates/inline_text_field.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/auto_mixin.js +33 -16
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/content_value_support.js +14 -6
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/control.js +23 -18
- data/lib/frameworks/sproutcore/frameworks/foundation/system/user_defaults.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/delegates/inline_text_field/inline_text_field.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/auto_mixin_tests.js +78 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/auto_resize_test.js +45 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/content_value_support/content.js +112 -58
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/image_queue.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/container/transition_test.js +141 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +27 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +631 -593
- data/lib/frameworks/sproutcore/frameworks/foundation/transitions/swap_fade_color_transition.js +5 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/transitions/swap_move_in_transition.js +5 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/transitions/swap_reveal_transition.js +68 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/views/container.js +128 -49
- data/lib/frameworks/sproutcore/frameworks/foundation/views/field.js +33 -8
- data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +209 -187
- data/lib/frameworks/sproutcore/frameworks/runtime/core.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +7 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +34 -4
- data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +0 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/binding.js +68 -9
- data/lib/frameworks/sproutcore/frameworks/testing/system/runner.js +2 -1
- data/lib/sproutcore/rack/builder.rb +45 -25
- data/sproutcore.gemspec +1 -0
- metadata +17 -2
@@ -98,6 +98,11 @@ SC.mixin(SC.ContainerView,
|
|
98
98
|
didBuildOutFromView: function (container, content, options) {
|
99
99
|
// Convert to a flexible layout (in case we never fully entered).
|
100
100
|
content.adjust({ bottom: 0, right: 0, height: null, width: null });
|
101
|
+
},
|
102
|
+
|
103
|
+
/** @private */
|
104
|
+
buildOutFromView: function (statechart, container, content, options) {
|
105
|
+
// Do nothing.
|
101
106
|
}
|
102
107
|
}
|
103
108
|
|
@@ -29,6 +29,45 @@ SC.mixin(SC.ContainerView,
|
|
29
29
|
*/
|
30
30
|
REVEAL: {
|
31
31
|
|
32
|
+
/** @private */
|
33
|
+
buildInToView: function (statechart, container, content, previousStatechart, options) {
|
34
|
+
// This transition is unique in that we have to wait for the previous
|
35
|
+
// content to finish building out entirely, before we can be considered
|
36
|
+
// fully entered.
|
37
|
+
// if (previousStatechart && previousStatechart.get('content')) {
|
38
|
+
// previousStatechart.addObserver('state', this, this.previousStateDidChange, statechart);
|
39
|
+
// }
|
40
|
+
},
|
41
|
+
|
42
|
+
/** @private */
|
43
|
+
// reverseBuildIn: function (statechart, container, content, options) {
|
44
|
+
// var nextStatechart = container._currentStatechart;
|
45
|
+
|
46
|
+
// // We were waiting for another view to remove itself previously, now
|
47
|
+
// // we are going out because someone else is coming in. If that someone
|
48
|
+
// // else was also going out, then we should stay put because they are
|
49
|
+
// // going to reverse.
|
50
|
+
// if (nextStatechart && nextStatechart.get('content')) {
|
51
|
+
// nextStatechart.addObserver('state', this, this.nextStateDidChange, statechart);
|
52
|
+
// }
|
53
|
+
// },
|
54
|
+
|
55
|
+
/** @private */
|
56
|
+
// previousStateDidChange: function (previousStatechart, key, alwaysNull, statechart) {
|
57
|
+
// if (previousStatechart.state === 'exited') {
|
58
|
+
// statechart.entered();
|
59
|
+
|
60
|
+
// // Clean up.
|
61
|
+
// previousStatechart.removeObserver('state', this, this.previousStateDidChange);
|
62
|
+
// }
|
63
|
+
// },
|
64
|
+
|
65
|
+
/** @private */
|
66
|
+
didBuildInToView: function (container, content, options) {
|
67
|
+
// Convert to a flexible layout.
|
68
|
+
content.adjust({ bottom: 0, right: 0, height: null, width: null, zIndex: null });
|
69
|
+
},
|
70
|
+
|
32
71
|
/** @private */
|
33
72
|
willBuildOutFromView: function (container, content, options, exitCount) {
|
34
73
|
var frame = container.get('frame'),
|
@@ -79,10 +118,38 @@ SC.mixin(SC.ContainerView,
|
|
79
118
|
}
|
80
119
|
},
|
81
120
|
|
121
|
+
/** @private */
|
122
|
+
// reverseBuildOut: function (statechart, container, content, options) {
|
123
|
+
// var key, value;
|
124
|
+
|
125
|
+
// // Cancel the animation in place.
|
126
|
+
// content.cancelAnimation(SC.LayoutState.CURRENT);
|
127
|
+
|
128
|
+
// switch (options.direction) {
|
129
|
+
// case 'up':
|
130
|
+
// case 'down':
|
131
|
+
// key = 'top';
|
132
|
+
// value = 0;
|
133
|
+
// break;
|
134
|
+
// default:
|
135
|
+
// key = 'left';
|
136
|
+
// value = 0;
|
137
|
+
// }
|
138
|
+
|
139
|
+
// content.animate(key, value, {
|
140
|
+
// duration: options.duration || 0.2,
|
141
|
+
// timing: options.timing || 'ease'
|
142
|
+
// }, function (data) {
|
143
|
+
// if (!data.isCancelled) {
|
144
|
+
// statechart.entered();
|
145
|
+
// }
|
146
|
+
// });
|
147
|
+
// },
|
148
|
+
|
82
149
|
/** @private */
|
83
150
|
didBuildOutFromView: function (container, content, options) {
|
84
151
|
// Convert to a flexible layout.
|
85
|
-
content.adjust({ bottom: 0, right: 0, height: null, width: null, zIndex: null });
|
152
|
+
content.adjust({ top: 0, left: 0, bottom: 0, right: 0, height: null, width: null, zIndex: null });
|
86
153
|
}
|
87
154
|
|
88
155
|
}
|
@@ -279,6 +279,8 @@ SC.ContainerView = SC.View.extend(
|
|
279
279
|
var contentStatecharts = this._contentStatecharts;
|
280
280
|
|
281
281
|
// Exit all other remaining statecharts immediately. This mutates the array!
|
282
|
+
// This allows transitions where the previous content is left in place to
|
283
|
+
// clean up all previous content once the new content transitions in.
|
282
284
|
for (var i = contentStatecharts.length - 2; i >= 0; i--) {
|
283
285
|
contentStatecharts[i].doExit(true);
|
284
286
|
}
|
@@ -292,6 +294,14 @@ SC.ContainerView = SC.View.extend(
|
|
292
294
|
|
293
295
|
// Remove the statechart.
|
294
296
|
contentStatecharts.removeObject(statechart);
|
297
|
+
|
298
|
+
// Once all the other statecharts have exited. Indicate that the current
|
299
|
+
// statechart is entered. This allows transitions where the new
|
300
|
+
// content is left in place to update state once all previous statecharts
|
301
|
+
// have exited.
|
302
|
+
if (contentStatecharts.length === 1) {
|
303
|
+
contentStatecharts[0].entered();
|
304
|
+
}
|
295
305
|
},
|
296
306
|
|
297
307
|
/** @private
|
@@ -318,16 +328,26 @@ SC.ContainerView = SC.View.extend(
|
|
318
328
|
// Call doExit on all current content statecharts. Any statecharts in the
|
319
329
|
// process of exiting may accelerate their exits.
|
320
330
|
for (var i = contentStatecharts.length - 1; i >= 0; i--) {
|
321
|
-
contentStatecharts[i].doExit();
|
331
|
+
var found = contentStatecharts[i].doExit(false, newContent);
|
332
|
+
|
333
|
+
// If the content already belongs to a content statechart reuse that statechart.
|
334
|
+
if (found) {
|
335
|
+
newStatechart = contentStatecharts[i];
|
336
|
+
newStatechart.set('previousStatechart', currentStatechart);
|
337
|
+
newStatechart.gotoEnteringState();
|
338
|
+
}
|
322
339
|
}
|
323
340
|
|
324
341
|
// Add the new content statechart, which will enter automatically.
|
325
|
-
newStatechart
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
342
|
+
if (!newStatechart) {
|
343
|
+
newStatechart = SC.ContainerContentStatechart.create({
|
344
|
+
container: this,
|
345
|
+
content: newContent,
|
346
|
+
previousStatechart: currentStatechart
|
347
|
+
});
|
348
|
+
|
349
|
+
contentStatecharts.pushObject(newStatechart);
|
350
|
+
}
|
331
351
|
|
332
352
|
// Track the current statechart.
|
333
353
|
this._currentStatechart = newStatechart;
|
@@ -336,6 +356,11 @@ SC.ContainerView = SC.View.extend(
|
|
336
356
|
});
|
337
357
|
|
338
358
|
|
359
|
+
// When in debug mode, core developers can log the container content states.
|
360
|
+
//@if(debug)
|
361
|
+
SC.LOG_CONTAINER_CONTENT_STATES = false;
|
362
|
+
//@endif
|
363
|
+
|
339
364
|
/** @private
|
340
365
|
In order to support transitioning views in and out of the container view,
|
341
366
|
each content view needs its own simple statechart. This is required, because
|
@@ -385,32 +410,49 @@ SC.ContainerContentStatechart = SC.Object.extend({
|
|
385
410
|
//
|
386
411
|
|
387
412
|
entered: function () {
|
388
|
-
if (this.state === 'entering') {
|
389
|
-
this.gotoReadyState();
|
390
413
|
//@if(debug)
|
391
|
-
|
392
|
-
|
414
|
+
if (SC.LOG_CONTAINER_CONTENT_STATES) {
|
415
|
+
var container = this.get('container'),
|
416
|
+
content = this.get('content');
|
417
|
+
|
418
|
+
SC.Logger.log('%@ (%@)(%@, %@) — entered callback'.fmt(this, this.state, container, content));
|
419
|
+
}
|
393
420
|
//@endif
|
421
|
+
|
422
|
+
if (this.state === 'entering') {
|
423
|
+
this.gotoReadyState();
|
394
424
|
}
|
395
425
|
},
|
396
426
|
|
397
|
-
doExit: function (immediately) {
|
427
|
+
doExit: function (immediately, newContent) {
|
398
428
|
if (this.state !== 'exited') {
|
399
|
-
this.gotoExitingState(immediately);
|
429
|
+
this.gotoExitingState(immediately, newContent);
|
400
430
|
//@if(debug)
|
401
431
|
} else {
|
402
|
-
|
432
|
+
throw new Error('Developer Error: SC.ContainerView should not receive an internal doExit event while in exited state.');
|
403
433
|
//@endif
|
404
434
|
}
|
435
|
+
|
436
|
+
// If the new content matches our own content, indicate this to the container.
|
437
|
+
if (this.get('content') === newContent) {
|
438
|
+
return true;
|
439
|
+
} else {
|
440
|
+
return false;
|
441
|
+
}
|
405
442
|
},
|
406
443
|
|
407
444
|
exited: function () {
|
408
|
-
if (this.state === 'exiting') {
|
409
|
-
this.gotoExitedState();
|
410
445
|
//@if(debug)
|
411
|
-
|
412
|
-
|
446
|
+
if (SC.LOG_CONTAINER_CONTENT_STATES) {
|
447
|
+
var container = this.get('container'),
|
448
|
+
content = this.get('content');
|
449
|
+
|
450
|
+
SC.Logger.log('%@ (%@)(%@, %@) — exited callback'.fmt(this, this.state, container, content));
|
451
|
+
}
|
413
452
|
//@endif
|
453
|
+
|
454
|
+
if (this.state === 'exiting') {
|
455
|
+
this.gotoExitedState();
|
414
456
|
}
|
415
457
|
},
|
416
458
|
|
@@ -426,20 +468,38 @@ SC.ContainerContentStatechart = SC.Object.extend({
|
|
426
468
|
options = container.get('transitionSwapOptions') || {},
|
427
469
|
transitionSwap = container.get('transitionSwap');
|
428
470
|
|
429
|
-
|
430
|
-
|
471
|
+
//@if(debug)
|
472
|
+
if (SC.LOG_CONTAINER_CONTENT_STATES) {
|
473
|
+
SC.Logger.log('%@ (%@)(%@, %@) — Entering (Previous: %@)'.fmt(this, this.state, container, content, previousStatechart));
|
474
|
+
}
|
475
|
+
//@endif
|
476
|
+
|
477
|
+
// If currently in the exiting state, reverse to entering.
|
478
|
+
if (this.state === 'exiting' && transitionSwap.reverseBuildOut) {
|
479
|
+
transitionSwap.reverseBuildOut(this, container, content, options);
|
431
480
|
|
432
|
-
|
481
|
+
// Assign the state.
|
482
|
+
this.set('state', 'entering');
|
483
|
+
|
484
|
+
// Fast path!!
|
485
|
+
return;
|
486
|
+
} else if (content) {
|
433
487
|
container.appendChild(content);
|
434
488
|
}
|
435
489
|
|
490
|
+
// Assign the state.
|
491
|
+
this.set('state', 'entering');
|
492
|
+
|
436
493
|
// Don't transition unless there is a previous statechart.
|
437
|
-
if (
|
438
|
-
if (
|
494
|
+
if (previousStatechart && content && transitionSwap) {
|
495
|
+
if (transitionSwap.willBuildInToView) {
|
439
496
|
transitionSwap.willBuildInToView(container, content, previousStatechart, options);
|
440
497
|
}
|
441
|
-
|
498
|
+
|
499
|
+
if (transitionSwap.buildInToView) {
|
442
500
|
transitionSwap.buildInToView(this, container, content, previousStatechart, options);
|
501
|
+
} else {
|
502
|
+
this.entered();
|
443
503
|
}
|
444
504
|
} else {
|
445
505
|
this.entered();
|
@@ -454,31 +514,39 @@ SC.ContainerContentStatechart = SC.Object.extend({
|
|
454
514
|
options = container.get('transitionSwapOptions') || {},
|
455
515
|
transitionSwap = container.get('transitionSwap');
|
456
516
|
|
457
|
-
if
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
517
|
+
//@if(debug)
|
518
|
+
if (SC.LOG_CONTAINER_CONTENT_STATES) {
|
519
|
+
if (!exitCount) { exitCount = this._exitCount = 1; }
|
520
|
+
SC.Logger.log('%@ (%@)(%@, %@) — Exiting (x%@)'.fmt(this, this.state, container, content, this._exitCount));
|
521
|
+
}
|
522
|
+
//@endif
|
523
|
+
|
524
|
+
// If currently in the entering state, reverse to exiting.
|
525
|
+
if (this.state === 'entering' && transitionSwap.reverseBuildIn) {
|
526
|
+
transitionSwap.reverseBuildIn(this, container, content, options);
|
527
|
+
|
528
|
+
// Assign the state.
|
529
|
+
this.set('state', 'exiting');
|
530
|
+
|
531
|
+
// Fast path!!
|
532
|
+
return;
|
467
533
|
}
|
468
534
|
|
469
535
|
// Assign the state.
|
470
|
-
this.state
|
536
|
+
this.set('state', 'exiting');
|
471
537
|
|
472
|
-
if (!immediately &&
|
538
|
+
if (!immediately && content && transitionSwap) {
|
473
539
|
// Re-entering the exiting state may need to accelerate the transition, pass the count to the plugin.
|
474
540
|
if (!exitCount) { exitCount = this._exitCount = 1; }
|
475
541
|
|
476
|
-
if (
|
542
|
+
if (transitionSwap.willBuildOutFromView) {
|
477
543
|
transitionSwap.willBuildOutFromView(container, content, options, exitCount);
|
478
544
|
}
|
479
545
|
|
480
|
-
if (
|
546
|
+
if (transitionSwap.buildOutFromView) {
|
481
547
|
transitionSwap.buildOutFromView(this, container, content, options, exitCount);
|
548
|
+
} else {
|
549
|
+
// this.exited();
|
482
550
|
}
|
483
551
|
|
484
552
|
// Increment the exit count each time doExit is called.
|
@@ -495,11 +563,15 @@ SC.ContainerContentStatechart = SC.Object.extend({
|
|
495
563
|
options = container.get('transitionSwapOptions') || {},
|
496
564
|
transitionSwap = container.get('transitionSwap');
|
497
565
|
|
498
|
-
if
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
566
|
+
//@if(debug)
|
567
|
+
if (SC.LOG_CONTAINER_CONTENT_STATES) {
|
568
|
+
SC.Logger.log('%@ (%@)(%@, %@) — Exited'.fmt(this, this.state, container, content));
|
569
|
+
}
|
570
|
+
//@endif
|
571
|
+
|
572
|
+
if (content) {
|
573
|
+
if (transitionSwap && transitionSwap.didBuildOutFromView) {
|
574
|
+
transitionSwap.didBuildOutFromView(container, content, options);
|
503
575
|
}
|
504
576
|
|
505
577
|
if (content.createdByParent) {
|
@@ -512,8 +584,11 @@ SC.ContainerContentStatechart = SC.Object.extend({
|
|
512
584
|
// Send ended event to container view statechart.
|
513
585
|
container.statechartEnded(this);
|
514
586
|
|
587
|
+
// Reset the exiting count.
|
588
|
+
this._exitCount = 0;
|
589
|
+
|
515
590
|
// Assign the state.
|
516
|
-
this.state
|
591
|
+
this.set('state', 'exited');
|
517
592
|
},
|
518
593
|
|
519
594
|
// Ready
|
@@ -523,17 +598,21 @@ SC.ContainerContentStatechart = SC.Object.extend({
|
|
523
598
|
options = container.get('transitionSwapOptions') || {},
|
524
599
|
transitionSwap = container.get('transitionSwap');
|
525
600
|
|
526
|
-
if
|
527
|
-
|
528
|
-
|
529
|
-
|
601
|
+
//@if(debug)
|
602
|
+
if (SC.LOG_CONTAINER_CONTENT_STATES) {
|
603
|
+
SC.Logger.log('%@ (%@)(%@, %@) — Entered'.fmt(this, this.state, container, content));
|
604
|
+
}
|
605
|
+
//@endif
|
606
|
+
|
607
|
+
if (content && transitionSwap && transitionSwap.didBuildInToView) {
|
608
|
+
transitionSwap.didBuildInToView(container, content, options);
|
530
609
|
}
|
531
610
|
|
532
611
|
// Send ready event to container view statechart.
|
533
612
|
container.statechartReady();
|
534
613
|
|
535
614
|
// Assign the state.
|
536
|
-
this.state
|
615
|
+
this.set('state', 'ready');
|
537
616
|
}
|
538
617
|
|
539
618
|
});
|
@@ -168,14 +168,22 @@ SC.FieldView = SC.View.extend(SC.Control, SC.Validatable,
|
|
168
168
|
this.setFieldValue(this.get('fieldValue'));
|
169
169
|
}.observes('fieldValue'),
|
170
170
|
|
171
|
-
/**
|
172
|
-
|
171
|
+
/**
|
172
|
+
SC.View view state callback.
|
173
|
+
|
174
|
+
After the layer is created, set the field value and begin observing
|
175
|
+
change events on the input field.
|
173
176
|
*/
|
174
177
|
didCreateLayer: function() {
|
175
178
|
this.setFieldValue(this.get('fieldValue'));
|
176
179
|
this._addChangeEvent();
|
177
180
|
},
|
178
181
|
|
182
|
+
/**
|
183
|
+
SC.View state callback.
|
184
|
+
|
185
|
+
Removes the change event from the input field.
|
186
|
+
*/
|
179
187
|
willDestroyLayer: function() {
|
180
188
|
SC.Event.remove(this.$input(), 'change', this, this._field_fieldValueDidChange);
|
181
189
|
},
|
@@ -200,6 +208,8 @@ SC.FieldView = SC.View.extend(SC.Control, SC.Validatable,
|
|
200
208
|
// Override these primitives in your subclass as required.
|
201
209
|
|
202
210
|
/**
|
211
|
+
SC.RootResponder event handler.
|
212
|
+
|
203
213
|
Allow the browser to do its normal event handling for the mouse down
|
204
214
|
event. But first, set isActive to YES.
|
205
215
|
*/
|
@@ -209,7 +219,9 @@ SC.FieldView = SC.View.extend(SC.Control, SC.Validatable,
|
|
209
219
|
return YES;
|
210
220
|
},
|
211
221
|
|
212
|
-
/**
|
222
|
+
/**
|
223
|
+
SC.RootResponder event handler.
|
224
|
+
|
213
225
|
Remove the active class on mouseExited if mouse is down.
|
214
226
|
*/
|
215
227
|
mouseExited: function(evt) {
|
@@ -218,7 +230,9 @@ SC.FieldView = SC.View.extend(SC.Control, SC.Validatable,
|
|
218
230
|
return YES;
|
219
231
|
},
|
220
232
|
|
221
|
-
/**
|
233
|
+
/**
|
234
|
+
SC.RootResponder event handler.
|
235
|
+
|
222
236
|
If mouse was down and we renter the button area, set the active state again.
|
223
237
|
*/
|
224
238
|
mouseEntered: function(evt) {
|
@@ -227,8 +241,10 @@ SC.FieldView = SC.View.extend(SC.Control, SC.Validatable,
|
|
227
241
|
return YES;
|
228
242
|
},
|
229
243
|
|
230
|
-
/**
|
231
|
-
|
244
|
+
/**
|
245
|
+
SC.RootResponder event handler.
|
246
|
+
|
247
|
+
On mouse up, remove the isActive class and then allow the browser to do
|
232
248
|
its normal thing.
|
233
249
|
*/
|
234
250
|
mouseUp: function(evt) {
|
@@ -239,7 +255,9 @@ SC.FieldView = SC.View.extend(SC.Control, SC.Validatable,
|
|
239
255
|
return YES ;
|
240
256
|
},
|
241
257
|
|
242
|
-
/**
|
258
|
+
/**
|
259
|
+
SC.RootResponder event handler.
|
260
|
+
|
243
261
|
Simply allow keyDown & keyUp to pass through to the default web browser
|
244
262
|
implementation.
|
245
263
|
*/
|
@@ -264,16 +282,22 @@ SC.FieldView = SC.View.extend(SC.Control, SC.Validatable,
|
|
264
282
|
return YES;
|
265
283
|
},
|
266
284
|
|
267
|
-
/**
|
285
|
+
/**
|
286
|
+
Override of SC.Responder.prototype.acceptsFirstResponder.
|
287
|
+
|
288
|
+
Tied to the `isEnabledInPane` state.
|
289
|
+
*/
|
268
290
|
acceptsFirstResponder: function() {
|
269
291
|
if (SC.FOCUS_ALL_CONTROLS) { return this.get('isEnabledInPane'); }
|
270
292
|
return NO;
|
271
293
|
}.property('isEnabledInPane'),
|
272
294
|
|
295
|
+
/** @private */
|
273
296
|
_addChangeEvent: function() {
|
274
297
|
SC.Event.add(this.$input(), 'change', this, this._field_fieldValueDidChange);
|
275
298
|
},
|
276
299
|
|
300
|
+
/** @private */
|
277
301
|
// these methods use the validator to convert the raw field value returned
|
278
302
|
// by your subclass into an object and visa versa.
|
279
303
|
_field_setFieldValue: function(newValue) {
|
@@ -286,6 +310,7 @@ SC.FieldView = SC.View.extend(SC.Control, SC.Validatable,
|
|
286
310
|
return ret ;
|
287
311
|
},
|
288
312
|
|
313
|
+
/** @private */
|
289
314
|
_field_getFieldValue: function() {
|
290
315
|
var ret = this.getFieldValue() ;
|
291
316
|
if (this.objectForFieldValue) ret = this.objectForFieldValue(ret);
|