Merge remote-tracking branch 'origin/open716' into open-master

This commit is contained in:
bwyu 2015-02-03 11:11:36 -08:00
commit bc5d657015
4 changed files with 45 additions and 33 deletions

View File

@ -66,9 +66,8 @@ define(
} }
// Compute panel positions based on the layout's object model // Compute panel positions based on the layout's object model
function lookupPanels(model) { function lookupPanels(ids) {
var configuration = $scope.configuration || {}, var configuration = $scope.configuration || {};
ids = (model || {}).composition || [];
// Pull panel positions from configuration // Pull panel positions from configuration
rawPositions = shallowCopy(configuration.panels || {}, ids); rawPositions = shallowCopy(configuration.panels || {}, ids);
@ -77,14 +76,14 @@ define(
positions = {}; positions = {};
// Update width/height that we are tracking // Update width/height that we are tracking
gridSize = (model || {}).layoutGrid || DEFAULT_GRID_SIZE; gridSize = ($scope.model || {}).layoutGrid || DEFAULT_GRID_SIZE;
// Compute positions and add defaults where needed // Compute positions and add defaults where needed
ids.forEach(populatePosition); ids.forEach(populatePosition);
} }
// Position panes when the model field changes // Position panes when the model field changes
$scope.$watch("model", lookupPanels); $scope.$watch("model.composition", lookupPanels);
return { return {
/** /**

View File

@ -38,15 +38,15 @@ define(
// Model changes will indicate that panel positions // Model changes will indicate that panel positions
// may have changed, for instance. // may have changed, for instance.
it("watches for changes to model", function () { it("watches for changes to composition", function () {
expect(mockScope.$watch).toHaveBeenCalledWith( expect(mockScope.$watch).toHaveBeenCalledWith(
"model", "model.composition",
jasmine.any(Function) jasmine.any(Function)
); );
}); });
it("provides styles for frames, from configuration", function () { it("provides styles for frames, from configuration", function () {
mockScope.$watch.mostRecentCall.args[1](testModel); mockScope.$watch.mostRecentCall.args[1](testModel.composition);
expect(controller.getFrameStyle("a")).toEqual({ expect(controller.getFrameStyle("a")).toEqual({
top: "320px", top: "320px",
left: "640px", left: "640px",
@ -59,7 +59,7 @@ define(
var styleB, styleC; var styleB, styleC;
// b and c do not have configured positions // b and c do not have configured positions
mockScope.$watch.mostRecentCall.args[1](testModel); mockScope.$watch.mostRecentCall.args[1](testModel.composition);
styleB = controller.getFrameStyle("b"); styleB = controller.getFrameStyle("b");
styleC = controller.getFrameStyle("c"); styleC = controller.getFrameStyle("c");
@ -76,7 +76,7 @@ define(
it("allows panels to be dragged", function () { it("allows panels to be dragged", function () {
// Populate scope // Populate scope
mockScope.$watch.mostRecentCall.args[1](testModel); mockScope.$watch.mostRecentCall.args[1](testModel.composition);
// Verify precondtion // Verify precondtion
expect(testConfiguration.panels.b).not.toBeDefined(); expect(testConfiguration.panels.b).not.toBeDefined();
@ -95,7 +95,7 @@ define(
it("invokes commit after drag", function () { it("invokes commit after drag", function () {
// Populate scope // Populate scope
mockScope.$watch.mostRecentCall.args[1](testModel); mockScope.$watch.mostRecentCall.args[1](testModel.composition);
// Add a commit method to scope // Add a commit method to scope
mockScope.commit = jasmine.createSpy("commit"); mockScope.commit = jasmine.createSpy("commit");

View File

@ -57,6 +57,34 @@ define(
return new Representer($scope, element, attrs); return new Representer($scope, element, attrs);
}); });
// Populate scope with any capabilities indicated by the
// representation's extension definition
function refreshCapabilities() {
var representation = representationMap[$scope.key],
domainObject = $scope.domainObject,
uses = ((representation || {}).uses || []);
if (domainObject) {
// Update model
$scope.model = domainObject.getModel();
// Provide any of the capabilities requested
uses.forEach(function (used) {
$log.debug([
"Requesting capability ",
used,
" for representation ",
$scope.key
].join(""));
$q.when(
domainObject.useCapability(used)
).then(function (c) {
$scope[used] = c;
});
});
}
}
// General-purpose refresh mechanism; should set up the scope // General-purpose refresh mechanism; should set up the scope
// as appropriate for current representation key and // as appropriate for current representation key and
// domain object. // domain object.
@ -88,29 +116,14 @@ define(
// Populate scope with fields associated with the current // Populate scope with fields associated with the current
// domain object (if one has been passed in) // domain object (if one has been passed in)
if (domainObject) { if (domainObject) {
// Always provide the model, as "model" // Initialize any capabilities
$scope.model = domainObject.getModel(); refreshCapabilities();
// Also provide the view configuration, // Also provide the view configuration,
// for the specific view // for the specific view
$scope.configuration = $scope.configuration =
($scope.model.configuration || {})[$scope.key] || {}; ($scope.model.configuration || {})[$scope.key] || {};
// Also provide any of the capabilities requested
uses.forEach(function (used) {
$log.debug([
"Requesting capability ",
used,
" for representation ",
$scope.key
].join(""));
$q.when(
domainObject.useCapability(used)
).then(function (c) {
$scope[used] = c;
});
});
// Finally, wire up any additional behavior (such as // Finally, wire up any additional behavior (such as
// gestures) associated with this representation. // gestures) associated with this representation.
activeRepresenters.forEach(function (representer) { activeRepresenters.forEach(function (representer) {
@ -130,7 +143,7 @@ define(
// Finally, also update when there is a new version of that // Finally, also update when there is a new version of that
// same domain object; these changes should be tracked in the // same domain object; these changes should be tracked in the
// model's "modified" field, by the mutation capability. // model's "modified" field, by the mutation capability.
$scope.$watch("domainObject.getModel().modified", refresh); $scope.$watch("domainObject.getModel().modified", refreshCapabilities);
// Do one initial refresh, so that we don't need another // Do one initial refresh, so that we don't need another
// digest iteration just to populate the scope. Failure to // digest iteration just to populate the scope. Failure to

View File

@ -115,7 +115,7 @@ define(
mockScope.key = "abc"; mockScope.key = "abc";
// Trigger the watch // Trigger the watch
mockScope.$watch.mostRecentCall.args[1](); mockScope.$watch.calls[0].args[1]();
expect(mockScope.inclusion).toEqual("a/b/c/template.html"); expect(mockScope.inclusion).toEqual("a/b/c/template.html");
}); });
@ -126,7 +126,7 @@ define(
mockScope.key = "xyz"; mockScope.key = "xyz";
// Trigger the watch // Trigger the watch
mockScope.$watch.mostRecentCall.args[1](); mockScope.$watch.calls[0].args[1]();
expect(mockScope.inclusion).toEqual("x/y/z/template.html"); expect(mockScope.inclusion).toEqual("x/y/z/template.html");
}); });
@ -138,7 +138,7 @@ define(
mockScope.domainObject = mockDomainObject; mockScope.domainObject = mockDomainObject;
// Trigger the watch // Trigger the watch
mockScope.$watch.mostRecentCall.args[1](); mockScope.$watch.calls[0].args[1]();
expect(mockDomainObject.useCapability) expect(mockDomainObject.useCapability)
.toHaveBeenCalledWith("testCapability"); .toHaveBeenCalledWith("testCapability");
@ -155,7 +155,7 @@ define(
expect(mockLog.warn).not.toHaveBeenCalled(); expect(mockLog.warn).not.toHaveBeenCalled();
// Trigger the watch // Trigger the watch
mockScope.$watch.mostRecentCall.args[1](); mockScope.$watch.calls[0].args[1]();
// Should have gotten a warning - that's an unknown key // Should have gotten a warning - that's an unknown key
expect(mockLog.warn).toHaveBeenCalled(); expect(mockLog.warn).toHaveBeenCalled();