[Common UI] Encapsulate TreeNodeController

Reduce reliance on  from TreeNodeController,
clean up and better isolate node expansion behavior.
Part of transition of common UI elements, WTD-574.
This commit is contained in:
Victor Woeltjen
2014-11-24 10:30:45 -08:00
parent eff9747198
commit f6850ffc4f
4 changed files with 46 additions and 41 deletions

View File

@ -3,6 +3,7 @@
"platform/core", "platform/core",
"platform/representation", "platform/representation",
"platform/commonUI/browse", "platform/commonUI/browse",
"platform/commonUI/edit",
"platform/commonUI/dialog", "platform/commonUI/dialog",
"platform/commonUI/general", "platform/commonUI/general",

View File

@ -1,3 +0,0 @@
<b>
<div style="width: 400px; border: 4px green solid; text-align:right;">{{model.name}}</div>
</b>

View File

@ -1,7 +1,8 @@
<span ng-controller="ToggleController as toggle"> <span ng-controller="ToggleController as toggle">
<span class="tree-item menus-to-left" ng-controller="TreeNodeController"> <span ng-controller="TreeNodeController as treeNode">
<span class="tree-item menus-to-left">
<span class='ui-symbol view-control' <span class='ui-symbol view-control'
ng-click="toggle.toggle()" ng-click="toggle.toggle(); treeNode.setNodeObject(domainObject)"
ng-if="model.composition !== undefined"> ng-if="model.composition !== undefined">
{{toggle.isActive() ? "v" : ">"}} {{toggle.isActive() ? "v" : ">"}}
</span> </span>
@ -9,15 +10,19 @@
mct-object="domainObject" mct-object="domainObject"
parameters="parameters" parameters="parameters"
ng-click="parameters.callback(domainObject)" ng-click="parameters.callback(domainObject)"
ng-class="{selected: node.isSelected}"> ng-class="{selected: treeNode.isNavigated()}">
</mct-representation> </mct-representation>
</span> </span>
<span class="tree-item-subtree" <span class="tree-item-subtree"
ng-show="toggle.isActive()" ng-show="toggle.isActive()"
ng-if="model.composition !== undefined"> ng-if="model.composition !== undefined">
ID: {{treeNode.getNodeObject().getId()}}?
<mct-representation key="'tree'" <mct-representation key="'tree'"
parameters="parameters" parameters="parameters"
mct-object="node.domainObject"> mct-object="treeNode.getNodeObject()">
</mct-representation> </mct-representation>
</span>
</span>
</span>
</span> </span>

View File

@ -13,7 +13,9 @@ define(
* @constructor * @constructor
*/ */
function TreeNodeController($scope, navigationService) { function TreeNodeController($scope, navigationService) {
var navigatedObject = navigationService.getNavigation(); var navigatedObject = navigationService.getNavigation(),
isNavigated = false,
expandedObject;
function idsEqual(objA, objB) { function idsEqual(objA, objB) {
return objA && objB && (objA.getId() === objB.getId()); return objA && objB && (objA.getId() === objB.getId());
@ -58,14 +60,16 @@ define(
function checkNavigation() { function checkNavigation() {
var nodeObject = $scope.domainObject; var nodeObject = $scope.domainObject;
$scope.node.isSelected = isNavigated =
idsEqual(nodeObject, navigatedObject) && idsEqual(nodeObject, navigatedObject) &&
idsEqual(parentOf(nodeObject), parentOf(navigatedObject)); idsEqual(parentOf(nodeObject), parentOf(navigatedObject));
// Expand if necessary // Expand if necessary
if (!$scope.node.expanded && if (isOnNavigationPath(nodeObject, navigatedObject) &&
isOnNavigationPath(nodeObject, navigatedObject) && $scope.toggle !== undefined &&
$scope.toggle !== undefined) { $scope.toggle.isActive()) {
$scope.toggle.toggle(); $scope.toggle.toggle();
expandedObject = nodeObject;
} }
} }
@ -74,25 +78,23 @@ define(
checkNavigation(); checkNavigation();
} }
// When the node is expanded, set "node.domainObject" in
// the scope; this is used to populate the subtree, which
// should only happen when first expanded (lazy loading)
function doExpand(state) {
if (state) {
$scope.node.domainObject = $scope.domainObject;
}
}
// Set up a little namespace for tree node properties
$scope.node = {};
navigationService.addListener(setNavigation); navigationService.addListener(setNavigation);
$scope.$on("$destroy", function () { $scope.$on("$destroy", function () {
navigationService.removeListener(setNavigation); navigationService.removeListener(setNavigation);
}); });
$scope.$watch("domainObject", checkNavigation); $scope.$watch("domainObject", checkNavigation);
$scope.$watch("toggle.isActive()", doExpand);
return {
setNodeObject: function (domainObject) {
expandedObject = domainObject;
},
getNodeObject: function () {
return expandedObject;
},
isNavigated: function () {
return isNavigated;
}
};
} }
return TreeNodeController; return TreeNodeController;