sproutcore 1.11.0.rc1 → 1.11.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +8 -8
  2. data/VERSION.yml +1 -1
  3. data/lib/frameworks/sproutcore/CHANGELOG.md +93 -65
  4. data/lib/frameworks/sproutcore/apps/showcase/controllers/source_tree_controller.js +17 -7
  5. data/lib/frameworks/sproutcore/apps/showcase/resources/main_page.js +22 -2
  6. data/lib/frameworks/sproutcore/apps/showcase/resources/stylesheet.css +14 -0
  7. data/lib/frameworks/sproutcore/apps/showcase/resources/views_page.js +2 -2
  8. data/lib/frameworks/sproutcore/frameworks/ajax/system/request.js +20 -8
  9. data/lib/frameworks/sproutcore/frameworks/ajax/system/websocket.js +58 -43
  10. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/action_support.js +192 -35
  11. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/delegate_support.js +7 -3
  12. data/lib/frameworks/sproutcore/frameworks/core_foundation/mixins/responder_context.js +27 -7
  13. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/browser.js +20 -63
  14. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/color.js +16 -7
  15. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +279 -159
  16. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/render_context.js +1 -1
  17. data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +21 -10
  18. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/mixins/action_support.js +32 -28
  19. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/targetForAction.js +107 -90
  20. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/root_responder/touch.js +33 -25
  21. data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/touch.js +23 -15
  22. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +1 -1
  23. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +12 -6
  24. data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +55 -33
  25. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +7 -1
  26. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +228 -72
  27. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/touch.js +54 -100
  28. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/segmented/ui.js +15 -0
  29. data/lib/frameworks/sproutcore/frameworks/desktop/views/button.js +57 -45
  30. data/lib/frameworks/sproutcore/frameworks/desktop/views/collection.js +9 -16
  31. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll_view.js +111 -44
  32. data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +2 -0
  33. data/lib/frameworks/sproutcore/frameworks/foundation/system/module.js +51 -5
  34. data/lib/frameworks/sproutcore/frameworks/runtime/core.js +2 -2
  35. data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +13 -10
  36. data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +2 -1
  37. data/lib/frameworks/sproutcore/frameworks/runtime/system/object.js +28 -9
  38. data/lib/frameworks/sproutcore/frameworks/runtime/system/set.js +7 -5
  39. data/lib/frameworks/sproutcore/frameworks/statechart/ext/function.js +51 -46
  40. data/lib/frameworks/sproutcore/frameworks/statechart/system/state.js +8 -5
  41. data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +12 -3
  42. metadata +2 -2
@@ -56,7 +56,7 @@ SC.DRAG_REORDER = 0x0010;
56
56
  @extends SC.CollectionContent
57
57
  @since SproutCore 0.9
58
58
  */
59
- SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate, SC.CollectionContent,
59
+ SC.CollectionView = SC.View.extend(SC.ActionSupport, SC.CollectionViewDelegate, SC.CollectionContent,
60
60
  /** @scope SC.CollectionView.prototype */ {
61
61
 
62
62
  /** @private */
@@ -472,13 +472,9 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate, SC.CollectionConte
472
472
  If you do not specify an action, then the collection view will also try to
473
473
  invoke the action named on the target item view.
474
474
 
475
- Older versions of SproutCore expected the action property to contain an
476
- actual function that would be run. This format is still supported but is
477
- deprecated for future use. You should generally use the responder chain
478
- to handle your action for you.
479
-
480
475
  @type String
481
476
  @default null
477
+ @see SC.ActionSupport
482
478
  */
483
479
  action: null,
484
480
 
@@ -490,9 +486,6 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate, SC.CollectionConte
490
486
  This can be either an actual object or a property path that will resolve
491
487
  to an object at the time that the action is invoked.
492
488
 
493
- This property is ignored if you use the deprecated approach of making the
494
- action property a function.
495
-
496
489
  @type String|Object
497
490
  @default null
498
491
  */
@@ -3240,17 +3233,17 @@ SC.CollectionView = SC.View.extend(SC.CollectionViewDelegate, SC.CollectionConte
3240
3233
  */
3241
3234
  _cv_action: function(view, evt, context) {
3242
3235
  var action = this.get('action');
3243
- var target = this.get('target') || null;
3244
3236
 
3245
3237
  this._cv_actionTimer = null;
3246
3238
  if (action) {
3247
- // if the action is a function, just call it
3248
- if (SC.typeOf(action) === SC.T_FUNCTION) return this.action(view, evt) ;
3249
3239
 
3250
- // otherwise, use the new sendAction style
3251
- var pane = this.get('pane') ;
3252
- if (pane) {
3253
- pane.rootResponder.sendAction(action, target, this, pane, context);
3240
+ // Legacy support for action functions.
3241
+ if (action && (SC.typeOf(action) === SC.T_FUNCTION)) {
3242
+ return this.action(view, evt);
3243
+
3244
+ // Use SC.ActionSupport.
3245
+ } else {
3246
+ return this.fireAction(context);
3254
3247
  }
3255
3248
 
3256
3249
  // if no action is specified, then trigger the support action,
@@ -187,10 +187,10 @@ SC.ScrollView = SC.View.extend({
187
187
  _sc_scale: null,
188
188
 
189
189
  /** @private Flag used to indicate when we should resize the content width manually. */
190
- _sc_shouldResizeContentWidth: false,
190
+ // _sc_shouldResizeContentWidth: false,
191
191
 
192
192
  /** @private Flag used to indicate when we should resize the content height manually. */
193
- _sc_shouldResizeContentHeight: false,
193
+ // _sc_shouldResizeContentHeight: false,
194
194
 
195
195
  /** @private The offset center x of a multi-touch gesture. */
196
196
  _sc_touchCenterX: null,
@@ -944,27 +944,34 @@ SC.ScrollView = SC.View.extend({
944
944
  _sc_containerViewFrameDidChange: function () {
945
945
  // Run the content view size change code (updates min & max offsets, sets content alignment if necessary, shows scrollers if necessary)
946
946
  var containerFrame = this.getPath('containerView.frame'),
947
- contentView = this.get('contentView');
947
+ contentView = this.get('contentView'),
948
+ lastMaximumHorizontalScrollOffset = this.get('maximumHorizontalScrollOffset'),
949
+ lastMaximumVerticalScrollOffset = this.get('maximumVerticalScrollOffset'),
950
+ lastMinimumHorizontalScrollOffset = this.get('minimumHorizontalScrollOffset'),
951
+ lastMinimumVerticalScrollOffset = this.get('minimumVerticalScrollOffset');
948
952
 
949
953
  // Cache the current height and width of the container view, so we can only watch for size changes.
954
+ // This will update the maximum scroll offsets when they are requested.
950
955
  this.set('_sc_containerHeight', containerFrame.height);
951
956
  this.set('_sc_containerWidth', containerFrame.width);
952
957
 
953
958
  if (contentView) {
954
- var didAdjust = false;
959
+ // var didAdjust = false;
955
960
 
956
- if (this._sc_shouldResizeContentHeight) {
957
- contentView.adjust('height', containerFrame.height);
958
- didAdjust = true;
959
- }
961
+ // if (this._sc_shouldResizeContentHeight) {
962
+ // contentView.adjust('height', containerFrame.height);
963
+ // didAdjust = true;
964
+ // }
960
965
 
961
- if (this._sc_shouldResizeContentWidth) {
962
- contentView.adjust('width', containerFrame.width);
963
- didAdjust = true;
964
- }
966
+ // if (this._sc_shouldResizeContentWidth) {
967
+ // contentView.adjust('width', containerFrame.width);
968
+ // didAdjust = true;
969
+ // }
965
970
 
966
971
  // Update the scrollers regardless.
967
- if (!didAdjust) { this._sc_contentViewSizeDidChange(); }
972
+ // if (!didAdjust) {
973
+ this._sc_contentViewSizeDidChange(lastMinimumHorizontalScrollOffset, lastMaximumHorizontalScrollOffset, lastMinimumVerticalScrollOffset, lastMaximumVerticalScrollOffset);
974
+ // }
968
975
  }
969
976
 
970
977
  },
@@ -979,8 +986,8 @@ SC.ScrollView = SC.View.extend({
979
986
  this._sc_removeContentViewObservers();
980
987
 
981
988
  // Reset caches.
982
- this._sc_shouldResizeContentWidth = false;
983
- this._sc_shouldResizeContentHeight = false;
989
+ // this._sc_shouldResizeContentWidth = false;
990
+ // this._sc_shouldResizeContentHeight = false;
984
991
  this._sc_contentHeight = 0;
985
992
  this._sc_contentWidth = 0;
986
993
  this._sc_contentScale = 1;
@@ -1004,29 +1011,29 @@ SC.ScrollView = SC.View.extend({
1004
1011
 
1005
1012
  // When a view wants an accelerated layer and isn't a fixed size, we convert it to a fixed
1006
1013
  // size and resize it when our container resizes.
1007
- if (!newView.get('isFixedSize')) {
1008
- var contentViewLayout = newView.get('layout');
1009
-
1010
- // Fix the width.
1011
- if (contentViewLayout.width == null) {
1012
- this._sc_shouldResizeContentWidth = true; // Flag to indicate that when the container's width changes, we should update the content's width.
1013
-
1014
- newView.adjust({
1015
- right: null,
1016
- width: this._sc_containerWidth
1017
- });
1018
- }
1019
-
1020
- // Fix the height.
1021
- if (contentViewLayout.height == null) {
1022
- this._sc_shouldResizeContentHeight = true; // Flag to indicate that when the container's height changes, we should update the content's height.
1023
-
1024
- newView.adjust({
1025
- bottom: null,
1026
- height: this._sc_containerHeight
1027
- });
1028
- }
1029
- }
1014
+ // if (newView.get('wantsAcceleratedLayer') && !newView.get('isFixedSize')) {
1015
+ // var contentViewLayout = newView.get('layout');
1016
+
1017
+ // // Fix the width.
1018
+ // if (contentViewLayout.width == null) {
1019
+ // this._sc_shouldResizeContentWidth = true; // Flag to indicate that when the container's width changes, we should update the content's width.
1020
+
1021
+ // newView.adjust({
1022
+ // right: null,
1023
+ // width: this._sc_containerWidth
1024
+ // });
1025
+ // }
1026
+
1027
+ // // Fix the height.
1028
+ // if (contentViewLayout.height == null) {
1029
+ // this._sc_shouldResizeContentHeight = true; // Flag to indicate that when the container's height changes, we should update the content's height.
1030
+
1031
+ // newView.adjust({
1032
+ // bottom: null,
1033
+ // height: this._sc_containerHeight
1034
+ // });
1035
+ // }
1036
+ // }
1030
1037
  }
1031
1038
 
1032
1039
  // TODO: Can we remove this if a calculated property exists?
@@ -1050,7 +1057,11 @@ SC.ScrollView = SC.View.extend({
1050
1057
  var lastHeight = this._sc_contentHeight,
1051
1058
  lastScale = this._sc_contentScale,
1052
1059
  lastWidth = this._sc_contentWidth,
1053
- newFrame = this.getPath('contentView.borderFrame');
1060
+ newFrame = this.getPath('contentView.borderFrame'),
1061
+ lastMaximumHorizontalScrollOffset = this.get('maximumHorizontalScrollOffset'),
1062
+ lastMaximumVerticalScrollOffset = this.get('maximumVerticalScrollOffset'),
1063
+ lastMinimumHorizontalScrollOffset = this.get('minimumHorizontalScrollOffset'),
1064
+ lastMinimumVerticalScrollOffset = this.get('minimumVerticalScrollOffset');
1054
1065
 
1055
1066
  if (newFrame) {
1056
1067
  // Determine whether the scale has changed.
@@ -1071,14 +1082,13 @@ SC.ScrollView = SC.View.extend({
1071
1082
 
1072
1083
  // If any of the size values changed, update.
1073
1084
  if (this._sc_contentScaleDidChange || this._sc_contentWidthDidChange || this._sc_contentHeightDidChange) {
1074
- // Filter the observer input.
1075
- this.invokeOnce(this._sc_contentViewSizeDidChange);
1085
+ this._sc_contentViewSizeDidChange(lastMinimumHorizontalScrollOffset, lastMaximumHorizontalScrollOffset, lastMinimumVerticalScrollOffset, lastMaximumVerticalScrollOffset);
1076
1086
  }
1077
1087
  }
1078
1088
  },
1079
1089
 
1080
1090
  /** @private When the content view's size changes, we need to update our scroll offset properties. */
1081
- _sc_contentViewSizeDidChange: function () {
1091
+ _sc_contentViewSizeDidChange: function (lastMinimumHorizontalScrollOffset, lastMaximumHorizontalScrollOffset, lastMinimumVerticalScrollOffset, lastMaximumVerticalScrollOffset) {
1082
1092
  var maximumHorizontalScrollOffset = this.get('maximumHorizontalScrollOffset'),
1083
1093
  maximumVerticalScrollOffset = this.get('maximumVerticalScrollOffset'),
1084
1094
  containerHeight, containerWidth,
@@ -1116,6 +1126,35 @@ SC.ScrollView = SC.View.extend({
1116
1126
  if (this._sc_gestureAnchorHOffset != null) {
1117
1127
  this._sc_gestureAnchorHOffset = value;
1118
1128
  }
1129
+ } else {
1130
+ // Take alignment into account.
1131
+ var horizontalAlign = this.get('horizontalAlign'),
1132
+ horizontalScrollOffset = this._sc_horizontalScrollOffset,
1133
+ minimumHorizontalScrollOffset = this.get('minimumHorizontalScrollOffset');
1134
+
1135
+ switch (horizontalAlign) {
1136
+ case SC.ALIGN_CENTER:
1137
+ // Switched to scrolling horizontally, stick to center OR was scrolled at center and size changed.
1138
+ if ((lastMinimumHorizontalScrollOffset < 0 && minimumHorizontalScrollOffset === 0) ||
1139
+ (horizontalScrollOffset === lastMaximumHorizontalScrollOffset / 2)) {
1140
+ this.set('horizontalScrollOffset', maximumHorizontalScrollOffset / 2);
1141
+ }
1142
+
1143
+ break;
1144
+ case SC.ALIGN_RIGHT:
1145
+ // Switched to scrolling horizontally, stick to right side OR was scrolled to right and size changed.
1146
+ if ((lastMinimumHorizontalScrollOffset < 0 && minimumHorizontalScrollOffset === 0) ||
1147
+ (horizontalScrollOffset === lastMaximumHorizontalScrollOffset)) {
1148
+ this.set('horizontalScrollOffset', maximumHorizontalScrollOffset);
1149
+ }
1150
+
1151
+ break;
1152
+ }
1153
+
1154
+ // Was at right side and size shrunk.
1155
+ if (horizontalScrollOffset > maximumHorizontalScrollOffset) {
1156
+ this.set('horizontalScrollOffset', maximumHorizontalScrollOffset);
1157
+ }
1119
1158
  }
1120
1159
  }
1121
1160
  }
@@ -1146,6 +1185,34 @@ SC.ScrollView = SC.View.extend({
1146
1185
  if (this._sc_gestureAnchorVOffset != null) {
1147
1186
  this._sc_gestureAnchorVOffset = value;
1148
1187
  }
1188
+ } else {
1189
+ var verticalAlign = this.get('verticalAlign'),
1190
+ verticalScrollOffset = this._sc_verticalScrollOffset,
1191
+ minimumVerticalScrollOffset = this.get('minimumVerticalScrollOffset');
1192
+
1193
+ switch (verticalAlign) {
1194
+ case SC.ALIGN_MIDDLE:
1195
+ // Switched to scrolling vertically, stick to middle OR was scrolled at middle and size changed.
1196
+ if ((lastMinimumVerticalScrollOffset < 0 && minimumVerticalScrollOffset === 0) ||
1197
+ (verticalScrollOffset === lastMaximumVerticalScrollOffset / 2)) {
1198
+ this.set('verticalScrollOffset', maximumVerticalScrollOffset / 2);
1199
+ }
1200
+
1201
+ break;
1202
+ case SC.ALIGN_BOTTOM:
1203
+ // Switched to scrolling vertically, stick to bottom side OR was scrolled to bottom and size changed.
1204
+ if ((lastMinimumVerticalScrollOffset < 0 && minimumVerticalScrollOffset === 0) ||
1205
+ (verticalScrollOffset === lastMaximumVerticalScrollOffset)) {
1206
+ this.set('verticalScrollOffset', maximumVerticalScrollOffset);
1207
+ }
1208
+
1209
+ break;
1210
+ }
1211
+
1212
+ // Was at bottom side and size shrunk.
1213
+ if (verticalScrollOffset > maximumVerticalScrollOffset) {
1214
+ this.set('verticalScrollOffset', maximumVerticalScrollOffset);
1215
+ }
1149
1216
  }
1150
1217
  }
1151
1218
  }
@@ -1502,8 +1569,8 @@ SC.ScrollView = SC.View.extend({
1502
1569
  oldView.removeObserver('frame', this, frameChangeFunc);
1503
1570
  // oldView.removeObserver('layer', this, layerChangeFunc);
1504
1571
 
1505
- this._sc_shouldResizeContentWidth = false;
1506
- this._sc_shouldResizeContentHeight = false;
1572
+ // this._sc_shouldResizeContentWidth = false;
1573
+ // this._sc_shouldResizeContentHeight = false;
1507
1574
  }
1508
1575
  },
1509
1576
 
@@ -535,6 +535,8 @@ SC.SegmentedView = SC.View.extend(SC.Control,
535
535
  Whenever the view resizes, we need to check to see if we're overflowing.
536
536
  */
537
537
  viewDidResize: function () {
538
+ this._viewFrameDidChange();
539
+
538
540
  var isHorizontal = this.get('layoutDirection') === SC.LAYOUT_HORIZONTAL,
539
541
  visibleDim = isHorizontal ? this.$().width() : this.$().height();
540
542
 
@@ -8,7 +8,10 @@
8
8
  /*globals jQuery */
9
9
 
10
10
  sc_require('tasks/task');
11
+
12
+ //@if(debug)
11
13
  SC.LOG_MODULE_LOADING = YES;
14
+ //@endif
12
15
 
13
16
  /**
14
17
  SC.Module is responsible for dynamically loading in JavaScript and other
@@ -51,10 +54,20 @@ SC.Module = SC.Object.create(/** @scope SC.Module */ {
51
54
  @returns {Boolean} YES if already loaded, NO otherwise
52
55
  */
53
56
  loadModule: function (moduleName, target, method) {
54
- var module = SC.MODULE_INFO[moduleName], callbacks, targets,
55
- args = SC.A(arguments).slice(3),
57
+ var module = SC.MODULE_INFO[moduleName],
58
+ //@if(debug)
56
59
  log = SC.LOG_MODULE_LOADING,
57
- idx, len;
60
+ //@endif
61
+ args;
62
+
63
+ if (arguments.length > 3) {
64
+ // Fast arguments access.
65
+ // Accessing `arguments.length` is just a Number and doesn't materialize the `arguments` object, which is costly.
66
+ args = new Array(arguments.length - 3); // SC.A(arguments).slice(3)
67
+ for (var i = 0, len = args.length; i < len; i++) { args[i] = arguments[i + 3]; }
68
+ } else {
69
+ args = [];
70
+ }
58
71
 
59
72
  // Treat the first parameter as the callback if the target is a function and there is
60
73
  // no method supplied.
@@ -63,7 +76,9 @@ SC.Module = SC.Object.create(/** @scope SC.Module */ {
63
76
  target = null;
64
77
  }
65
78
 
79
+ //@if(debug)
66
80
  if (log) SC.debug("SC.Module: Attempting to load '%@'", moduleName);
81
+ //@endif
67
82
 
68
83
  // If we couldn't find anything in the SC.MODULE_INFO hash, we don't have any record of the
69
84
  // requested module.
@@ -78,7 +93,9 @@ SC.Module = SC.Object.create(/** @scope SC.Module */ {
78
93
  // If the module is already loaded, execute the callback immediately if SproutCore is loaded,
79
94
  // or else as soon as SC has finished loading.
80
95
  if (module.isLoaded && !module.isWaitingForRunLoop) {
96
+ //@if(debug)
81
97
  if (log) SC.debug("SC.Module: Module '%@' already loaded.", moduleName);
98
+ //@endif
82
99
 
83
100
  // we can't just eval it if its dependencies have not been met...
84
101
  if (!this._dependenciesMetForModule(moduleName)) {
@@ -94,7 +111,9 @@ SC.Module = SC.Object.create(/** @scope SC.Module */ {
94
111
  // If the module has finished loading and we have the string
95
112
  // representation, try to evaluate it now.
96
113
  if (module.source) {
114
+ //@if(debug)
97
115
  if (log) SC.debug("SC.Module: Evaluating JavaScript for module '%@'.", moduleName);
116
+ //@endif
98
117
  this._evaluateStringLoadedModule(module);
99
118
 
100
119
  // we can't let it return normally here, because we need the module to wait until the end of the run loop.
@@ -131,7 +150,10 @@ SC.Module = SC.Object.create(/** @scope SC.Module */ {
131
150
  // The module is not yet loaded, so register the callback and, if necessary, begin loading
132
151
  // the code.
133
152
  else {
153
+
154
+ //@if(debug)
134
155
  if (log) SC.debug("SC.Module: Module '%@' is not loaded, loading now.", moduleName);
156
+ //@endif
135
157
 
136
158
  // If this method is called more than once for the same module before it is finished
137
159
  // loading, we might have multiple callbacks that need to be executed once it loads.
@@ -392,7 +414,10 @@ SC.Module = SC.Object.create(/** @scope SC.Module */ {
392
414
  _loadDependenciesForModule: function (moduleName) {
393
415
  // Load module's dependencies first.
394
416
  var moduleInfo = SC.MODULE_INFO[moduleName];
417
+
418
+ //@if(debug)
395
419
  var log = SC.LOG_MODULE_LOADING;
420
+ //@endif
396
421
  var dependencies = moduleInfo.dependencies || [];
397
422
  var dependenciesMet = YES;
398
423
  var len = dependencies.length;
@@ -433,7 +458,9 @@ SC.Module = SC.Object.create(/** @scope SC.Module */ {
433
458
 
434
459
  dependents.push(moduleName);
435
460
 
461
+ //@if(debug)
436
462
  if (log) SC.debug("SC.Module: '%@' depends on '%@', loading dependency…", moduleName, requiredModuleName);
463
+ //@endif
437
464
 
438
465
  // Load dependencies
439
466
  SC.Module.loadModule(requiredModuleName);
@@ -492,7 +519,9 @@ SC.Module = SC.Object.create(/** @scope SC.Module */ {
492
519
  var moduleInfo = SC.MODULE_INFO[moduleName], callbacks;
493
520
  if (!moduleInfo) return; // shouldn't happen, but recover anyway
494
521
 
522
+ //@if(debug)
495
523
  if (SC.LOG_MODULE_LOADING) SC.debug("SC.Module: Module '%@' has completed loading, invoking callbacks.", moduleName);
524
+ //@endif
496
525
 
497
526
  callbacks = moduleInfo.callbacks || [];
498
527
 
@@ -504,9 +533,11 @@ SC.Module = SC.Object.create(/** @scope SC.Module */ {
504
533
  _evaluateAndInvokeCallbacks: function (moduleName) {
505
534
  var moduleInfo = SC.MODULE_INFO;
506
535
  var module = moduleInfo[moduleName];
536
+ //@if(debug)
507
537
  var log = SC.LOG_MODULE_LOADING;
508
538
 
509
539
  if (log) SC.debug("SC.Module: Evaluating and invoking callbacks for '%@'.", moduleName);
540
+ //@endif
510
541
 
511
542
  if (module.source) {
512
543
  this._evaluateStringLoadedModule(module);
@@ -526,7 +557,9 @@ SC.Module = SC.Object.create(/** @scope SC.Module */ {
526
557
  _moduleDidBecomeReady: function (moduleName) {
527
558
  var moduleInfo = SC.MODULE_INFO;
528
559
  var module = moduleInfo[moduleName];
560
+ //@if(debug)
529
561
  var log = SC.LOG_MODULE_LOADING;
562
+ //@endif
530
563
 
531
564
  module.isWaitingForRunLoop = NO;
532
565
 
@@ -548,7 +581,9 @@ SC.Module = SC.Object.create(/** @scope SC.Module */ {
548
581
  dependentName = dependents[idx];
549
582
  dependent = moduleInfo[dependentName];
550
583
  if (dependent.isLoaded && this._dependenciesMetForModule(dependentName)) {
584
+ //@if(debug)
551
585
  if (log) SC.debug("SC.Module: Now that %@ has loaded, all dependencies for a dependent %@ are met.", moduleName, dependentName);
586
+ //@endif
552
587
  this._evaluateAndInvokeCallbacks(dependentName);
553
588
  }
554
589
  }
@@ -566,20 +601,27 @@ SC.Module = SC.Object.create(/** @scope SC.Module */ {
566
601
  */
567
602
  _moduleDidLoad: function (moduleName) {
568
603
  var module = SC.MODULE_INFO[moduleName];
604
+ //@if(debug)
569
605
  var log = SC.LOG_MODULE_LOADING;
606
+ //@endif
570
607
  var dependenciesMet;
571
- var callbacks, targets;
572
608
 
609
+ //@if(debug)
573
610
  if (log) SC.debug("SC.Module: Module '%@' finished loading.", moduleName);
611
+ //@endif
574
612
 
575
613
  if (!module) {
614
+ //@if(debug)
576
615
  if (log) SC.debug("SC._moduleDidLoad() called for unknown module '@'.", moduleName);
616
+ //@endif
577
617
  module = SC.MODULE_INFO[moduleName] = { isLoaded: YES, isReady: YES };
578
618
  return;
579
619
  }
580
620
 
581
621
  if (module.isLoaded) {
622
+ //@if(debug)
582
623
  if (log) SC.debug("SC._moduleDidLoad() called more than once for module '%@'. Skipping.", moduleName);
624
+ //@endif
583
625
  return;
584
626
  }
585
627
 
@@ -592,11 +634,15 @@ SC.Module = SC.Object.create(/** @scope SC.Module */ {
592
634
  if (dependenciesMet) {
593
635
  this._evaluateAndInvokeCallbacks(moduleName);
594
636
  } else {
637
+ //@if(debug)
595
638
  if (log) SC.debug("SC.Module: Dependencies for '%@' not met yet, waiting to evaluate.", moduleName);
639
+ //@endif
596
640
  }
597
641
  } else {
598
642
  delete module.isPrefetching;
643
+ //@if(debug)
599
644
  if (log) SC.debug("SC.Module: Module '%@' was prefetched, not evaluating until needed.", moduleName);
645
+ //@endif
600
646
  }
601
647
  },
602
648
 
@@ -698,7 +744,7 @@ SC.Module = SC.Object.create(/** @scope SC.Module */ {
698
744
  //Yummy variables.
699
745
  var methods = this.get('methodsForSuspend'),
700
746
  calls = this._bufferedCalls,
701
- key, i, method, call;
747
+ key, i, call;
702
748
 
703
749
  //Restore the original methods to where they belong for normal functionality.
704
750
  for (i = 0; (key = methods[i]); i++) this[key] = this["__saved_" + key + "__"];