[Code Style] Avoid copying window/scope

Avoids Angular errors; WTD-1482.
This commit is contained in:
Victor Woeltjen 2015-08-11 10:43:03 -07:00
parent de291ad3b1
commit aa08db1050
2 changed files with 29 additions and 11 deletions

View File

@ -47,9 +47,16 @@ define(
* @constructor * @constructor
*/ */
function OverlayService($document, $compile, $rootScope) { function OverlayService($document, $compile, $rootScope) {
this.$document = $document;
this.$compile = $compile; this.$compile = $compile;
this.$rootScope = $rootScope;
// Don't include $document and $rootScope directly;
// avoids https://docs.angularjs.org/error/ng/cpws
this.findBody = function () {
return $document.find('body');
};
this.newScope = function () {
return $rootScope.$new();
};
} }
/** /**
@ -67,7 +74,7 @@ define(
*/ */
OverlayService.prototype.createOverlay = function (key, overlayModel) { OverlayService.prototype.createOverlay = function (key, overlayModel) {
// Create a new scope for this overlay // Create a new scope for this overlay
var scope = this.$rootScope.$new(), var scope = this.newScope(),
element; element;
// Stop showing the overlay; additionally, release the scope // Stop showing the overlay; additionally, release the scope
@ -86,7 +93,7 @@ define(
// Create the overlay element and add it to the document's body // Create the overlay element and add it to the document's body
element = this.$compile(TEMPLATE)(scope); element = this.$compile(TEMPLATE)(scope);
this.$document.find('body').prepend(element); this.findBody().prepend(element);
return { return {
dismiss: dismiss dismiss: dismiss

View File

@ -91,8 +91,22 @@ define(
} }
} }
// Avoid attaching scope to this;
// http://errors.angularjs.org/1.2.26/ng/cpws
this.setSelection = function (s) {
scope.selection = s;
};
this.clearExposedToolbar = function () {
// Clear exposed toolbar state (if any)
if (attrs.toolbar) {
delete scope.$parent[attrs.toolbar];
}
};
this.exposeToolbar = function () {
scope.$parent[self.attrs.toolbar] = self.toolbarObject;
};
this.commit = commit; this.commit = commit;
this.scope = scope;
this.attrs = attrs; this.attrs = attrs;
this.updateSelection = updateSelection; this.updateSelection = updateSelection;
this.toolbar = undefined; this.toolbar = undefined;
@ -127,24 +141,21 @@ define(
// Initialize toolbar object // Initialize toolbar object
self.toolbar = new EditToolbar(definition, self.commit); self.toolbar = new EditToolbar(definition, self.commit);
// Ensure toolbar state is exposed // Ensure toolbar state is exposed
self.scope.$parent[self.attrs.toolbar] = self.toolbarObject; self.exposeToolbar();
} }
} }
// Expose the toolbar object to the parent scope // Expose the toolbar object to the parent scope
initialize(definition); initialize(definition);
// Create a selection scope // Create a selection scope
this.scope.selection = new EditToolbarSelection(); this.setSelection(new EditToolbarSelection());
// Initialize toolbar to an empty selection // Initialize toolbar to an empty selection
this.updateSelection([]); this.updateSelection([]);
}; };
// Destroy; remove toolbar object from parent scope // Destroy; remove toolbar object from parent scope
EditToolbarRepresenter.prototype.destroy = function () { EditToolbarRepresenter.prototype.destroy = function () {
// Clear exposed toolbar state (if any) this.clearExposedToolbar();
if (this.attrs.toolbar) {
delete this.scope.$parent[this.attrs.toolbar];
}
}; };
return EditToolbarRepresenter; return EditToolbarRepresenter;