diff --git a/platform/commonUI/general/res/templates/tree/node.html b/platform/commonUI/general/res/templates/tree/node.html
index ea5e2b3786..2041a39cca 100644
--- a/platform/commonUI/general/res/templates/tree/node.html
+++ b/platform/commonUI/general/res/templates/tree/node.html
@@ -1,32 +1,8 @@
-
-
\ No newline at end of file
+
+
+
diff --git a/platform/commonUI/general/res/templates/tree/toggle.html b/platform/commonUI/general/res/templates/tree/toggle.html
new file mode 100644
index 0000000000..289f781f95
--- /dev/null
+++ b/platform/commonUI/general/res/templates/tree/toggle.html
@@ -0,0 +1,2 @@
+
+
diff --git a/platform/commonUI/general/src/ui/ToggleView.js b/platform/commonUI/general/src/ui/ToggleView.js
new file mode 100644
index 0000000000..26e0980944
--- /dev/null
+++ b/platform/commonUI/general/src/ui/ToggleView.js
@@ -0,0 +1,61 @@
+/*****************************************************************************
+ * Open MCT Web, Copyright (c) 2014-2015, United States Government
+ * as represented by the Administrator of the National Aeronautics and Space
+ * Administration. All rights reserved.
+ *
+ * Open MCT Web is licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ * Open MCT Web includes source code licensed under additional open source
+ * licenses. See the Open Source Licenses file (LICENSES.md) included with
+ * this source code distribution or the Licensing information page available
+ * at runtime from the About dialog for additional information.
+ *****************************************************************************/
+/*global define*/
+
+define([
+ 'angular',
+ 'text!../../res/templates/ui/toggle.html'
+], function (angular, toggleTemplate) {
+ function ToggleView(state) {
+ this.expanded = !!state;
+ this.callbacks = [];
+ this.el = angular.element(toggleTemplate);
+ this.el.on('click', function () {
+ this.model(!this.expanded);
+ }.bind(this));
+ }
+
+ ToggleView.prototype.model = function (state) {
+ this.expanded = state;
+
+ if (state) {
+ this.el.addClass('expanded');
+ } else {
+ this.el.removeClass('expanded');
+ }
+
+ this.callbacks.forEach(function (callback) {
+ callback(state);
+ });
+ };
+
+ ToggleView.prototype.observe = function (callback) {
+ this.callbacks.push(callback);
+ return function () {
+ this.callbacks = this.callbacks.filter(function (c) {
+ return c !== callback;
+ });
+ }.bind(this);
+ };
+
+ return ToggleView;
+});
diff --git a/platform/commonUI/general/src/ui/TreeNodeView.js b/platform/commonUI/general/src/ui/TreeNodeView.js
index e69de29bb2..5fe7eab514 100644
--- a/platform/commonUI/general/src/ui/TreeNodeView.js
+++ b/platform/commonUI/general/src/ui/TreeNodeView.js
@@ -0,0 +1,70 @@
+/*****************************************************************************
+ * Open MCT Web, Copyright (c) 2014-2015, United States Government
+ * as represented by the Administrator of the National Aeronautics and Space
+ * Administration. All rights reserved.
+ *
+ * Open MCT Web is licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ * Open MCT Web includes source code licensed under additional open source
+ * licenses. See the Open Source Licenses file (LICENSES.md) included with
+ * this source code distribution or the Licensing information page available
+ * at runtime from the About dialog for additional information.
+ *****************************************************************************/
+/*global define*/
+
+define([
+ 'angular',
+ 'text!../../res/templates/ui/node.html'
+], function (angular, nodeTemplate) {
+ 'use strict';
+
+ var $ = angular.element.bind(angular);
+
+ function TreeNodeView(subtreeFactory) {
+ this.factory = subtreeFactory;
+ this.li = $('');
+ this.expanded = false;
+ }
+
+ TreeNodeView.prototype.populateContents = function (domainObject) {
+ if (this.li.children().length === 0) {
+ this.li.append($(nodeTemplate));
+ }
+
+
+ };
+
+ TreeNodeView.prototype.model = function (domainObject) {
+ if (this.unlisten) {
+ this.unlisten();
+ }
+
+ if (domainObject) {
+ this.unlisten = domainObject.getCapability('mutation')
+ .listen(this.populateContents.bind(this));
+ this.populateContents(domainObject);
+ } else {
+ this.li.empty();
+ }
+ };
+
+ /**
+ *
+ * @returns {HTMLElement[]}
+ */
+ TreeNodeView.prototype.elements = function () {
+ return this.li;
+ };
+
+
+ return TreeNodeView;
+});
\ No newline at end of file
diff --git a/platform/commonUI/general/src/ui/TreeView.js b/platform/commonUI/general/src/ui/TreeView.js
index 4032711321..5e2f0b0877 100644
--- a/platform/commonUI/general/src/ui/TreeView.js
+++ b/platform/commonUI/general/src/ui/TreeView.js
@@ -22,7 +22,8 @@
/*global define*/
define([
- 'angular'
+ 'angular',
+ './TreeNodeView'
], function (angular, TreeNodeView) {
'use strict';
@@ -34,11 +35,15 @@ define([
this.nodeViews = [];
}
+ function newTreeView() {
+ return new TreeView();
+ }
+
TreeView.prototype.setSize = function (sz) {
var nodeView;
while (this.nodeViews.length < sz) {
- nodeView = new TreeNodeView();
+ nodeView = new TreeNodeView(newTreeView);
this.nodeViews.push(nodeView);
this.ul.append($(nodeView.elements()));
}