diff --git a/package.json b/package.json
index b00bb180af..80d9790ba7 100644
--- a/package.json
+++ b/package.json
@@ -52,5 +52,6 @@
"url": "https://github.com/nasa/openmctweb.git"
},
"author": "",
- "license": "Apache-2.0"
+ "license": "Apache-2.0",
+ "private": true
}
diff --git a/platform/commonUI/about/test/suite.json b/platform/commonUI/about/test/suite.json
deleted file mode 100644
index 7b3b90142a..0000000000
--- a/platform/commonUI/about/test/suite.json
+++ /dev/null
@@ -1,5 +0,0 @@
-[
- "AboutController",
- "LicenseController",
- "LogoController"
-]
\ No newline at end of file
diff --git a/platform/commonUI/browse/bundle.js b/platform/commonUI/browse/bundle.js
index 21aba14b91..10eb6c7004 100644
--- a/platform/commonUI/browse/bundle.js
+++ b/platform/commonUI/browse/bundle.js
@@ -34,6 +34,7 @@ define([
"./src/windowing/NewTabAction",
"./src/windowing/FullscreenAction",
"./src/creation/CreateActionProvider",
+ "./src/creation/AddActionProvider",
"./src/creation/CreationService",
"./src/windowing/WindowTitler",
'legacyRegistry'
@@ -50,6 +51,7 @@ define([
NewTabAction,
FullscreenAction,
CreateActionProvider,
+ AddActionProvider,
CreationService,
WindowTitler,
legacyRegistry
@@ -117,7 +119,8 @@ define([
"implementation": LocatorController,
"depends": [
"$scope",
- "$timeout"
+ "$timeout",
+ "objectService"
]
},
{
@@ -271,6 +274,18 @@ define([
"policyService"
]
},
+ {
+ "key": "AddActionProvider",
+ "provides": "actionService",
+ "type": "provider",
+ "implementation": AddActionProvider,
+ "depends": [
+ "$q",
+ "typeService",
+ "dialogService",
+ "policyService"
+ ]
+ },
{
"key": "CreationService",
"provides": "creationService",
diff --git a/platform/commonUI/browse/src/creation/AddAction.js b/platform/commonUI/browse/src/creation/AddAction.js
new file mode 100644
index 0000000000..3832280130
--- /dev/null
+++ b/platform/commonUI/browse/src/creation/AddAction.js
@@ -0,0 +1,139 @@
+/*****************************************************************************
+ * 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,Promise*/
+
+/**
+ * Module defining AddAction. Created by ahenry on 01/21/16.
+ */
+define(
+ [
+ './CreateWizard'
+ ],
+ function (CreateWizard) {
+ "use strict";
+
+ /**
+ * The Add Action is performed to create new instances of
+ * domain objects of a specific type that are subobjects of an
+ * object being edited. This is the action that is performed when a
+ * user uses the Add menu option.
+ *
+ * @memberof platform/commonUI/browse
+ * @implements {Action}
+ * @constructor
+ *
+ * @param {Type} type the type of domain object to create
+ * @param {DomainObject} parent the domain object that should
+ * act as a container for the newly-created object
+ * (note that the user will have an opportunity to
+ * override this)
+ * @param {ActionContext} context the context in which the
+ * action is being performed
+ * @param {DialogService} dialogService
+ */
+ function AddAction(type, parent, context, $q, dialogService, policyService) {
+ this.metadata = {
+ key: 'add',
+ glyph: type.getGlyph(),
+ name: type.getName(),
+ type: type.getKey(),
+ description: type.getDescription(),
+ context: context
+ };
+
+ this.type = type;
+ this.parent = parent;
+ this.$q = $q;
+ this.dialogService = dialogService;
+ this.policyService = policyService;
+ }
+
+ /**
+ *
+ * Create a new object of the given type.
+ * This will prompt for user input first.
+ *
+ * @returns {Promise} that will be resolved with the object that the
+ * action was originally invoked on (ie. the 'parent')
+ */
+ AddAction.prototype.perform = function () {
+ var newModel = this.type.getInitialModel(),
+ newObject,
+ parentObject = this.parent,
+ wizard;
+
+ newModel.type = this.type.getKey();
+ newObject = parentObject.getCapability('instantiation').instantiate(newModel);
+ newObject.useCapability('mutation', function(model){
+ model.location = parentObject.getId();
+ });
+
+ wizard = new CreateWizard(newObject, this.parent, this.policyService);
+
+ function populateObjectFromInput (formValue) {
+ return wizard.populateObjectFromInput(formValue, newObject);
+ }
+
+ function addToParent (populatedObject) {
+ parentObject.getCapability('composition').add(populatedObject);
+ return parentObject.getCapability('persistence').persist().then(function(){
+ return parentObject;
+ });
+ }
+
+ function save(object) {
+ /*
+ It's necessary to persist the new sub-object in order
+ that it can be retrieved for composition in the parent.
+ Future refactoring that allows temporary objects to be
+ retrieved from object services will make this unnecessary.
+ */
+ return object.getCapability('editor').save(true);
+ }
+
+ return this.dialogService
+ .getUserInput(wizard.getFormStructure(false), wizard.getInitialFormValue())
+ .then(populateObjectFromInput)
+ .then(save)
+ .then(addToParent);
+
+ };
+
+
+ /**
+ * Metadata associated with a Add action.
+ * @typedef {ActionMetadata} AddActionMetadata
+ * @property {string} type the key for the type of domain object
+ * to be created
+ */
+
+ /**
+ * Get metadata about this action.
+ * @returns {AddActionMetadata} metadata about this action
+ */
+ AddAction.prototype.getMetadata = function () {
+ return this.metadata;
+ };
+
+ return AddAction;
+ }
+);
diff --git a/platform/commonUI/browse/src/creation/AddActionProvider.js b/platform/commonUI/browse/src/creation/AddActionProvider.js
new file mode 100644
index 0000000000..0ac97c0013
--- /dev/null
+++ b/platform/commonUI/browse/src/creation/AddActionProvider.js
@@ -0,0 +1,87 @@
+/*****************************************************************************
+ * 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,Promise*/
+
+/**
+ * Module defining AddActionProvider.js. Created by ahenry on 01/21/16.
+ */
+define(
+ ["./AddAction"],
+ function (AddAction) {
+ "use strict";
+
+ /**
+ * The AddActionProvider is an ActionProvider which introduces
+ * an Add action for creating sub objects.
+ *
+ * @memberof platform/commonUI/browse
+ * @constructor
+ * @implements {ActionService}
+ *
+ * @param {TypeService} typeService the type service, used to discover
+ * available types
+ * @param {DialogService} dialogService the dialog service, used by
+ * specific Create actions to get user input to populate the
+ * model of the newly-created domain object.
+ * @param {CreationService} creationService the creation service (also
+ * introduced in this bundle), responsible for handling actual
+ * object creation.
+ */
+ function AddActionProvider($q, typeService, dialogService, policyService) {
+ this.typeService = typeService;
+ this.dialogService = dialogService;
+ this.$q = $q;
+ this.policyService = policyService;
+ }
+
+ AddActionProvider.prototype.getActions = function (actionContext) {
+ var context = actionContext || {},
+ key = context.key,
+ destination = context.domainObject,
+ self = this;
+
+ // We only provide Add actions, and we need a
+ // domain object to serve as the container for the
+ // newly-created object (although the user may later
+ // make a different selection)
+ if (key !== 'add' || !destination) {
+ return [];
+ }
+
+ // Introduce one create action per type
+ return this.typeService.listTypes().filter(function (type) {
+ return self.policyService.allow("creation", type) && self.policyService.allow("composition", destination.getCapability('type'), type);
+ }).map(function (type) {
+ return new AddAction(
+ type,
+ destination,
+ context,
+ self.$q,
+ self.dialogService,
+ self.policyService
+ );
+ });
+ };
+
+ return AddActionProvider;
+ }
+);
diff --git a/platform/commonUI/browse/src/creation/CreateWizard.js b/platform/commonUI/browse/src/creation/CreateWizard.js
index caa60c6150..f4a29d42ac 100644
--- a/platform/commonUI/browse/src/creation/CreateWizard.js
+++ b/platform/commonUI/browse/src/creation/CreateWizard.js
@@ -26,18 +26,21 @@ define(
'use strict';
/**
- * Construct a new CreateWizard.
+ * A class for capturing user input data from an object creation
+ * dialog, and populating a domain object with that data.
*
- * @param {TypeImpl} type the type of domain object to be created
+ * @param {DomainObject} domainObject the newly created object to
+ * populate with user input
* @param {DomainObject} parent the domain object to serve as
* the initial parent for the created object, in the dialog
* @memberof platform/commonUI/browse
* @constructor
*/
- function CreateWizard(type, parent, policyService, initialModel) {
- this.type = type;
- this.model = initialModel || type.getInitialModel();
- this.properties = type.getProperties();
+ function CreateWizard(domainObject, parent, policyService) {
+ this.type = domainObject.getCapability('type');
+ this.model = domainObject.getModel();
+ this.domainObject = domainObject;
+ this.properties = this.type.getProperties();
this.parent = parent;
this.policyService = policyService;
}
@@ -46,11 +49,14 @@ define(
* Get the form model for this wizard; this is a description
* that will be rendered to an HTML form. See the
* platform/forms bundle
- *
+ * @param {boolean} includeLocation if true, a 'location' section
+ * will be included that will allow the user to select the location
+ * of the newly created object, otherwise the .location property of
+ * the model will be used.
* @return {FormModel} formModel the form model to
* show in the create dialog
*/
- CreateWizard.prototype.getFormStructure = function () {
+ CreateWizard.prototype.getFormStructure = function (includeLocation) {
var sections = [],
type = this.type,
policyService = this.policyService;
@@ -84,12 +90,16 @@ define(
});
// Ensure there is always a "save in" section
- sections.push({ name: 'Location', rows: [{
- name: "Save In",
- control: "locator",
- validate: validateLocation,
- key: "createParent"
- }]});
+ if (includeLocation) {
+ sections.push({
+ name: 'Location', rows: [{
+ name: "Save In",
+ control: "locator",
+ validate: validateLocation,
+ key: "createParent"
+ }]
+ });
+ }
return {
sections: sections,
@@ -97,6 +107,23 @@ define(
};
};
+ /**
+ * Given some form input values and a domain object, populate the
+ * domain object used to create this wizard from the given form values.
+ * @param formValue
+ * @returns {DomainObject}
+ */
+ CreateWizard.prototype.populateObjectFromInput = function(formValue) {
+ var parent = this.getLocation(formValue),
+ formModel = this.createModel(formValue);
+
+ formModel.location = parent.getId();
+ this.domainObject.useCapability("mutation", function(){
+ return formModel;
+ });
+ return this.domainObject;
+ };
+
/**
* Get the initial value for the form being described.
* This will include the values for all properties described
@@ -120,6 +147,7 @@ define(
/**
* Based on a populated form, get the domain object which
* should be used as a parent for the newly-created object.
+ * @private
* @return {DomainObject}
*/
CreateWizard.prototype.getLocation = function (formValue) {
@@ -129,6 +157,7 @@ define(
/**
* Create the domain object model for a newly-created object,
* based on user input read from a formModel.
+ * @private
* @return {object} the domain object model
*/
CreateWizard.prototype.createModel = function (formValue) {
diff --git a/platform/commonUI/browse/src/creation/LocatorController.js b/platform/commonUI/browse/src/creation/LocatorController.js
index 5e9dea8ed2..3d8c6cfc7f 100644
--- a/platform/commonUI/browse/src/creation/LocatorController.js
+++ b/platform/commonUI/browse/src/creation/LocatorController.js
@@ -33,7 +33,7 @@ define(
* @memberof platform/commonUI/browse
* @constructor
*/
- function LocatorController($scope, $timeout) {
+ function LocatorController($scope, $timeout, objectService) {
// Populate values needed by the locator control. These are:
// * rootObject: The top-level object, since we want to show
// the full tree
@@ -52,6 +52,18 @@ define(
$scope.rootObject =
(context && context.getRoot()) || $scope.rootObject;
}, 0);
+ } else if (!contextRoot){
+ //If no context root is available, default to the root
+ // object
+ $scope.rootObject = undefined;
+ // Update the displayed tree on a timeout to avoid
+ // an infinite digest exception.
+ objectService.getObjects(['ROOT'])
+ .then(function(objects){
+ $timeout(function () {
+ $scope.rootObject = objects.ROOT;
+ }, 0);
+ });
}
$scope.treeModel.selectedObject = domainObject;
diff --git a/platform/commonUI/browse/test/creation/AddActionProviderSpec.js b/platform/commonUI/browse/test/creation/AddActionProviderSpec.js
new file mode 100644
index 0000000000..aaa83af8e9
--- /dev/null
+++ b/platform/commonUI/browse/test/creation/AddActionProviderSpec.js
@@ -0,0 +1,137 @@
+/*****************************************************************************
+ * 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,Promise,describe,it,expect,beforeEach,waitsFor,jasmine,xit,xdescribe*/
+
+/**
+ * MCTRepresentationSpec. Created by ahenry on 01/21/14.
+ */
+define(
+ ["../../src/creation/AddActionProvider"],
+ function (AddActionProvider) {
+ "use strict";
+
+ describe("The add action provider", function () {
+ var mockTypeService,
+ mockDialogService,
+ mockPolicyService,
+ mockCreationPolicy,
+ mockCompositionPolicy,
+ mockPolicyMap = {},
+ mockTypes,
+ mockDomainObject,
+ mockQ,
+ provider;
+
+ function createMockType(name) {
+ var mockType = jasmine.createSpyObj(
+ "type" + name,
+ [
+ "getKey",
+ "getGlyph",
+ "getName",
+ "getDescription",
+ "getProperties",
+ "getInitialModel",
+ "hasFeature"
+ ]
+ );
+ mockType.hasFeature.andReturn(true);
+ mockType.getName.andReturn(name);
+ return mockType;
+ }
+
+ beforeEach(function () {
+ mockTypeService = jasmine.createSpyObj(
+ "typeService",
+ [ "listTypes" ]
+ );
+ mockDialogService = jasmine.createSpyObj(
+ "dialogService",
+ [ "getUserInput" ]
+ );
+ mockPolicyService = jasmine.createSpyObj(
+ "policyService",
+ [ "allow" ]
+ );
+
+ mockDomainObject = jasmine.createSpyObj(
+ "domainObject",
+ [ "getCapability" ]
+ );
+
+ //Mocking getCapability because AddActionProvider uses the
+ // type capability of the destination object.
+ mockDomainObject.getCapability.andReturn({});
+
+ mockTypes = [ "A", "B", "C" ].map(createMockType);
+
+ mockTypes.forEach(function(type){
+ mockPolicyMap[type.getName()] = true;
+ });
+
+ mockCreationPolicy = function(type){
+ return mockPolicyMap[type.getName()];
+ };
+
+ mockCompositionPolicy = function(){
+ return true;
+ };
+
+ mockPolicyService.allow.andReturn(true);
+
+ mockTypeService.listTypes.andReturn(mockTypes);
+
+ provider = new AddActionProvider(
+ mockQ,
+ mockTypeService,
+ mockDialogService,
+ mockPolicyService
+ );
+ });
+
+ it("checks for creatability", function () {
+ provider.getActions({
+ key: "add",
+ domainObject: mockDomainObject
+ });
+ // Make sure it was creation which was used to check
+ expect(mockPolicyService.allow)
+ .toHaveBeenCalledWith("creation", mockTypes[0]);
+ });
+
+ it("checks for composability of type", function () {
+ provider.getActions({
+ key: "add",
+ domainObject: mockDomainObject
+ });
+
+ expect(mockPolicyService.allow).toHaveBeenCalledWith(
+ "composition",
+ jasmine.any(Object),
+ jasmine.any(Object)
+ );
+
+ expect(mockDomainObject.getCapability).toHaveBeenCalledWith('type');
+ });
+ });
+ }
+);
\ No newline at end of file
diff --git a/platform/commonUI/browse/test/creation/CreateActionProviderSpec.js b/platform/commonUI/browse/test/creation/CreateActionProviderSpec.js
index f49c394dc9..857b29fe4e 100644
--- a/platform/commonUI/browse/test/creation/CreateActionProviderSpec.js
+++ b/platform/commonUI/browse/test/creation/CreateActionProviderSpec.js
@@ -32,11 +32,12 @@ define(
describe("The create action provider", function () {
var mockTypeService,
mockDialogService,
- mockCreationService,
+ mockNavigationService,
mockPolicyService,
mockCreationPolicy,
mockPolicyMap = {},
mockTypes,
+ mockQ,
provider;
function createMockType(name) {
@@ -66,9 +67,9 @@ define(
"dialogService",
[ "getUserInput" ]
);
- mockCreationService = jasmine.createSpyObj(
- "creationService",
- [ "createObject" ]
+ mockNavigationService = jasmine.createSpyObj(
+ "navigationService",
+ [ "setNavigation" ]
);
mockPolicyService = jasmine.createSpyObj(
"policyService",
@@ -92,15 +93,14 @@ define(
mockTypeService.listTypes.andReturn(mockTypes);
provider = new CreateActionProvider(
+ mockQ,
mockTypeService,
- mockDialogService,
- mockCreationService,
+ mockNavigationService,
mockPolicyService
);
});
- //TODO: Disabled for NEM Beta
- xit("exposes one create action per type", function () {
+ it("exposes one create action per type", function () {
expect(provider.getActions({
key: "create",
domainObject: {}
@@ -114,8 +114,7 @@ define(
}).length).toEqual(0);
});
- //TODO: Disabled for NEM Beta
- xit("does not expose non-creatable types", function () {
+ it("does not expose non-creatable types", function () {
// One of the types won't have the creation feature...
mockPolicyMap[mockTypes[0].getName()] = false;
// ...so it should have been filtered out.
diff --git a/platform/commonUI/browse/test/creation/CreateWizardSpec.js b/platform/commonUI/browse/test/creation/CreateWizardSpec.js
index c4453e7432..fbb2a735e6 100644
--- a/platform/commonUI/browse/test/creation/CreateWizardSpec.js
+++ b/platform/commonUI/browse/test/creation/CreateWizardSpec.js
@@ -35,6 +35,7 @@ define(
mockProperties,
mockPolicyService,
testModel,
+ mockDomainObject,
wizard;
function createMockProperty(name) {
@@ -81,8 +82,18 @@ define(
mockType.getInitialModel.andReturn(testModel);
mockType.getProperties.andReturn(mockProperties);
+ mockDomainObject = jasmine.createSpyObj(
+ 'domainObject',
+ ['getCapability', 'useCapability', 'getModel']
+ );
+
+ //Mocking the getCapability('type') call
+ mockDomainObject.getCapability.andReturn(mockType);
+ mockDomainObject.useCapability.andReturn();
+ mockDomainObject.getModel.andReturn(testModel);
+
wizard = new CreateWizard(
- mockType,
+ mockDomainObject,
mockParent,
mockPolicyService
);
@@ -130,6 +141,18 @@ define(
});
});
+ it("populates the model on the associated object", function () {
+ var formValue = {
+ "A": "ValueA",
+ "B": "ValueB",
+ "C": "ValueC"
+ },
+ compareModel = wizard.createModel(formValue);
+ wizard.populateObjectFromInput(formValue);
+ expect(mockDomainObject.useCapability).toHaveBeenCalledWith('mutation', jasmine.any(Function));
+ expect(mockDomainObject.useCapability.mostRecentCall.args[1]()).toEqual(compareModel);
+ });
+
it("validates selection types using policy", function () {
var mockDomainObject = jasmine.createSpyObj(
'domainObject',
@@ -139,7 +162,8 @@ define(
'otherType',
['getKey']
),
- structure = wizard.getFormStructure(),
+ //Create a form structure with location
+ structure = wizard.getFormStructure(true),
sections = structure.sections,
rows = structure.sections[sections.length - 1].rows,
locationRow = rows[rows.length - 1];
@@ -156,6 +180,12 @@ define(
);
});
+ it("creates a form model without a location if not requested", function () {
+ expect(wizard.getFormStructure(false).sections.some(function(section){
+ return section.name === 'Location';
+ })).toEqual(false);
+ });
+
});
}
diff --git a/platform/commonUI/browse/test/creation/LocatorControllerSpec.js b/platform/commonUI/browse/test/creation/LocatorControllerSpec.js
index e380b56732..381aecf0ab 100644
--- a/platform/commonUI/browse/test/creation/LocatorControllerSpec.js
+++ b/platform/commonUI/browse/test/creation/LocatorControllerSpec.js
@@ -35,6 +35,8 @@ define(
mockDomainObject,
mockRootObject,
mockContext,
+ mockObjectService,
+ getObjectsPromise,
controller;
beforeEach(function () {
@@ -55,73 +57,106 @@ define(
"context",
[ "getRoot" ]
);
+ mockObjectService = jasmine.createSpyObj(
+ "objectService",
+ ["getObjects"]
+ );
+ getObjectsPromise = jasmine.createSpyObj(
+ "promise",
+ ["then"]
+ );
mockDomainObject.getCapability.andReturn(mockContext);
mockContext.getRoot.andReturn(mockRootObject);
+ mockObjectService.getObjects.andReturn(getObjectsPromise);
mockScope.ngModel = {};
mockScope.field = "someField";
- controller = new LocatorController(mockScope, mockTimeout);
+ controller = new LocatorController(mockScope, mockTimeout, mockObjectService);
});
+ describe("when context is available", function () {
- it("adds a treeModel to scope", function () {
- expect(mockScope.treeModel).toBeDefined();
- });
+ beforeEach(function () {
+ mockContext.getRoot.andReturn(mockRootObject);
+ controller = new LocatorController(mockScope, mockTimeout, mockObjectService);
+ });
- it("watches for changes to treeModel", function () {
- // This is what the embedded tree representation
- // will be modifying.
- expect(mockScope.$watch).toHaveBeenCalledWith(
- "treeModel.selectedObject",
- jasmine.any(Function)
- );
- });
+ it("adds a treeModel to scope", function () {
+ expect(mockScope.treeModel).toBeDefined();
+ });
- it("changes its own model on embedded model updates", function () {
- // Need to pass on selection changes as updates to
- // the control's value
- mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
- mockTimeout.mostRecentCall.args[0]();
- expect(mockScope.ngModel.someField).toEqual(mockDomainObject);
- expect(mockScope.rootObject).toEqual(mockRootObject);
+ it("watches for changes to treeModel", function () {
+ // This is what the embedded tree representation
+ // will be modifying.
+ expect(mockScope.$watch).toHaveBeenCalledWith(
+ "treeModel.selectedObject",
+ jasmine.any(Function)
+ );
+ });
- // Verify that the capability we expect to have been used
- // was used.
- expect(mockDomainObject.getCapability)
- .toHaveBeenCalledWith("context");
- });
+ it("changes its own model on embedded model updates", function () {
+ // Need to pass on selection changes as updates to
+ // the control's value
+ mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
+ mockTimeout.mostRecentCall.args[0]();
+ expect(mockScope.ngModel.someField).toEqual(mockDomainObject);
+ expect(mockScope.rootObject).toEqual(mockRootObject);
- it("rejects changes which fail validation", function () {
- mockScope.structure = { validate: jasmine.createSpy('validate') };
- mockScope.structure.validate.andReturn(false);
+ // Verify that the capability we expect to have been used
+ // was used.
+ expect(mockDomainObject.getCapability)
+ .toHaveBeenCalledWith("context");
+ });
- // Pass selection change
- mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
- mockTimeout.mostRecentCall.args[0]();
+ it("rejects changes which fail validation", function () {
+ mockScope.structure = { validate: jasmine.createSpy('validate') };
+ mockScope.structure.validate.andReturn(false);
- expect(mockScope.structure.validate).toHaveBeenCalled();
- // Change should have been rejected
- expect(mockScope.ngModel.someField).not.toEqual(mockDomainObject);
- });
+ // Pass selection change
+ mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
+ mockTimeout.mostRecentCall.args[0]();
- it("treats a lack of a selection as invalid", function () {
- mockScope.ngModelController = jasmine.createSpyObj(
- 'ngModelController',
- [ '$setValidity' ]
- );
+ expect(mockScope.structure.validate).toHaveBeenCalled();
+ // Change should have been rejected
+ expect(mockScope.ngModel.someField).not.toEqual(mockDomainObject);
+ });
- mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
- mockTimeout.mostRecentCall.args[0]();
- expect(mockScope.ngModelController.$setValidity)
- .toHaveBeenCalledWith(jasmine.any(String), true);
+ it("treats a lack of a selection as invalid", function () {
+ mockScope.ngModelController = jasmine.createSpyObj(
+ 'ngModelController',
+ [ '$setValidity' ]
+ );
- mockScope.$watch.mostRecentCall.args[1](undefined);
- mockTimeout.mostRecentCall.args[0]();
- expect(mockScope.ngModelController.$setValidity)
- .toHaveBeenCalledWith(jasmine.any(String), false);
- });
+ mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
+ mockTimeout.mostRecentCall.args[0]();
+ expect(mockScope.ngModelController.$setValidity)
+ .toHaveBeenCalledWith(jasmine.any(String), true);
+ mockScope.$watch.mostRecentCall.args[1](undefined);
+ mockTimeout.mostRecentCall.args[0]();
+ expect(mockScope.ngModelController.$setValidity)
+ .toHaveBeenCalledWith(jasmine.any(String), false);
+ });
+ });
+ describe("when no context is available", function () {
+ var defaultRoot = "DEFAULT_ROOT";
+
+ beforeEach(function () {
+ mockContext.getRoot.andReturn(undefined);
+ getObjectsPromise.then.andCallFake(function(callback){
+ callback({'ROOT':defaultRoot});
+ });
+ controller = new LocatorController(mockScope, mockTimeout, mockObjectService);
+ });
+
+ it("provides a default context where none is available", function () {
+ mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
+ mockTimeout.mostRecentCall.args[0]();
+ expect(mockScope.rootObject).toBe(defaultRoot);
+
+ });
+ });
});
}
);
diff --git a/platform/commonUI/browse/test/suite.json b/platform/commonUI/browse/test/suite.json
deleted file mode 100644
index 70e62bcfa6..0000000000
--- a/platform/commonUI/browse/test/suite.json
+++ /dev/null
@@ -1,18 +0,0 @@
-[
- "BrowseController",
- "BrowseObjectController",
- "PaneController",
- "MenuArrowController",
- "creation/CreateAction",
- "creation/CreateActionProvider",
- "creation/CreateMenuController",
- "creation/CreateWizard",
- "creation/CreationService",
- "creation/CreationPolicy",
- "creation/LocatorController",
- "navigation/NavigateAction",
- "navigation/NavigationService",
- "windowing/FullscreenAction",
- "windowing/NewTabAction",
- "windowing/WindowTitler"
-]
diff --git a/platform/commonUI/dialog/test/suite.json b/platform/commonUI/dialog/test/suite.json
deleted file mode 100644
index 4cf37af9ae..0000000000
--- a/platform/commonUI/dialog/test/suite.json
+++ /dev/null
@@ -1,4 +0,0 @@
-[
- "DialogService",
- "OverlayService"
-]
\ No newline at end of file
diff --git a/platform/commonUI/edit/src/actions/SaveAction.js b/platform/commonUI/edit/src/actions/SaveAction.js
index 13fde582d7..073beeb4df 100644
--- a/platform/commonUI/edit/src/actions/SaveAction.js
+++ b/platform/commonUI/edit/src/actions/SaveAction.js
@@ -79,65 +79,23 @@ define(
function doWizardSave(parent) {
var context = domainObject.getCapability("context"),
- wizard = new CreateWizard(domainObject.useCapability('type'), parent, self.policyService, domainObject.getModel());
-
- function mergeObjects(fromObject, toObject){
- Object.keys(fromObject).forEach(function(key) {
- toObject[key] = fromObject[key];
- });
- }
-
- // Create and persist the new object, based on user
- // input.
- function buildObjectFromInput(formValue) {
- var parent = wizard.getLocation(formValue),
- formModel = wizard.createModel(formValue);
-
- formModel.location = parent.getId();
- //Replace domain object model with model collected
- // from user form.
- domainObject.useCapability("mutation", function(){
- //Replace object model with the model from the form
- return formModel;
- });
- return domainObject;
- }
-
- function getAllComposees(domainObject){
- return domainObject.useCapability('composition');
- }
-
- function addComposeesToObject(object){
- return function(composees){
- return self.$q.all(composees.map(function (composee) {
- return object.getCapability('composition').add(composee);
- })).then(resolveWith(object));
- };
- }
-
- /**
- * Add the composees of the 'virtual' object to the
- * persisted object
- * @param object
- * @returns {*}
- */
- function composeNewObject(object){
- if (self.$q.when(object.hasCapability('composition') && domainObject.hasCapability('composition'))) {
- return getAllComposees(domainObject)
- .then(addComposeesToObject(object));
- }
- }
+ wizard = new CreateWizard(domainObject, parent, self.policyService);
return self.dialogService
- .getUserInput(wizard.getFormStructure(), wizard.getInitialFormValue())
- .then(buildObjectFromInput);
+ .getUserInput(wizard.getFormStructure(true), wizard.getInitialFormValue())
+ .then(function(formValue){
+ return wizard.populateObjectFromInput(formValue, domainObject);
+ });
}
function persistObject(object){
- return ((object.hasCapability('editor') && object.getCapability('editor').save(true)) ||
- object.getCapability('persistence').persist())
- .then(resolveWith(object));
+
+ //Persist first to mark dirty
+ return object.getCapability('persistence').persist().then(function(){
+ //then save permanently
+ return object.getCapability('editor').save();
+ });
}
function fetchObject(objectId){
@@ -152,7 +110,9 @@ define(
function locateObjectInParent(parent){
parent.getCapability('composition').add(domainObject.getId());
- return parent;
+ return parent.getCapability('persistence').persist().then(function() {
+ return parent;
+ });
}
function doNothing() {
@@ -174,7 +134,6 @@ define(
.then(getParent)//Parent may have changed based
// on user selection
.then(locateObjectInParent)
- .then(persistObject)
.then(function(){
return fetchObject(domainObject.getId());
})
diff --git a/platform/commonUI/edit/src/capabilities/EditableInstantiationCapability.js b/platform/commonUI/edit/src/capabilities/EditableInstantiationCapability.js
new file mode 100644
index 0000000000..6a0392476b
--- /dev/null
+++ b/platform/commonUI/edit/src/capabilities/EditableInstantiationCapability.js
@@ -0,0 +1,60 @@
+/*****************************************************************************
+ * 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(
+ ['./EditableLookupCapability'],
+ function (EditableLookupCapability) {
+ 'use strict';
+
+ /**
+ * Wrapper for the "instantiation" capability;
+ * ensures that any domain objects instantiated in Edit mode
+ * are also wrapped as EditableDomainObjects.
+ *
+ * Meant specifically for use by EditableDomainObject and the
+ * associated cache; the constructor signature is particular
+ * to a pattern used there and may contain unused arguments.
+ * @constructor
+ * @memberof platform/commonUI/edit
+ * @implements {CompositionCapability}
+ */
+ return function EditableInstantiationCapability(
+ contextCapability,
+ editableObject,
+ domainObject,
+ cache
+ ) {
+ // This is a "lookup" style capability (it looks up other
+ // domain objects), but we do not want to return the same
+ // specific value every time (composition may change)
+ return new EditableLookupCapability(
+ contextCapability,
+ editableObject,
+ domainObject,
+ cache,
+ false // Not idempotent
+ );
+ };
+ }
+);
diff --git a/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js b/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js
index c92495dc3f..dae2df3d83 100644
--- a/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js
+++ b/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js
@@ -45,7 +45,8 @@ define(
cache,
idempotent
) {
- var capability = Object.create(contextCapability);
+ var capability = Object.create(contextCapability),
+ method;
// Check for domain object interface. If something has these
// three methods, we assume it's a domain object.
@@ -114,7 +115,9 @@ define(
}
// Wrap all methods; return only editable domain objects.
- Object.keys(contextCapability).forEach(wrapMethod);
+ for (method in contextCapability) {
+ wrapMethod(method);
+ }
return capability;
};
diff --git a/platform/commonUI/edit/src/capabilities/EditorCapability.js b/platform/commonUI/edit/src/capabilities/EditorCapability.js
index ec43bf298a..0818eebf6d 100644
--- a/platform/commonUI/edit/src/capabilities/EditorCapability.js
+++ b/platform/commonUI/edit/src/capabilities/EditorCapability.js
@@ -81,7 +81,8 @@ define(
var domainObject = this.domainObject,
editableObject = this.editableObject,
self = this,
- cache = this.cache;
+ cache = this.cache,
+ returnPromise;
// Update the underlying, "real" domain object's model
// with changes made to the copy used for editing.
@@ -99,14 +100,18 @@ define(
editableObject.getCapability("status").set("editing", false);
if (nonrecursive) {
- return resolvePromise(doMutate())
+ returnPromise = resolvePromise(doMutate())
.then(doPersist)
.then(function(){
self.cancel();
});
} else {
- return resolvePromise(cache.saveAll());
+ returnPromise = resolvePromise(cache.saveAll());
}
+ //Return the original (non-editable) object
+ return returnPromise.then(function() {
+ return domainObject.getOriginalObject ? domainObject.getOriginalObject() : domainObject;
+ });
};
/**
diff --git a/platform/commonUI/edit/src/objects/EditableDomainObject.js b/platform/commonUI/edit/src/objects/EditableDomainObject.js
index 2b764f7de7..253947181d 100644
--- a/platform/commonUI/edit/src/objects/EditableDomainObject.js
+++ b/platform/commonUI/edit/src/objects/EditableDomainObject.js
@@ -36,6 +36,7 @@ define(
'../capabilities/EditableContextCapability',
'../capabilities/EditableCompositionCapability',
'../capabilities/EditableRelationshipCapability',
+ '../capabilities/EditableInstantiationCapability',
'../capabilities/EditorCapability',
'../capabilities/EditableActionCapability',
'./EditableDomainObjectCache'
@@ -45,6 +46,7 @@ define(
EditableContextCapability,
EditableCompositionCapability,
EditableRelationshipCapability,
+ EditableInstantiationCapability,
EditorCapability,
EditableActionCapability,
EditableDomainObjectCache
@@ -56,6 +58,7 @@ define(
context: EditableContextCapability,
composition: EditableCompositionCapability,
relationship: EditableRelationshipCapability,
+ instantiation: EditableInstantiationCapability,
editor: EditorCapability
};
diff --git a/platform/commonUI/edit/test/capabilities/EditableLookupCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditableLookupCapabilitySpec.js
index 24b68b6fd9..16bcee88b1 100644
--- a/platform/commonUI/edit/test/capabilities/EditableLookupCapabilitySpec.js
+++ b/platform/commonUI/edit/test/capabilities/EditableLookupCapabilitySpec.js
@@ -118,6 +118,29 @@ define(
expect(mockContext.getDomainObject.calls.length).toEqual(2);
});
+ it("wraps inherited methods", function () {
+ var CapabilityClass = function(){
+ };
+ CapabilityClass.prototype.inheritedMethod=function () {
+ return "an inherited method";
+ };
+
+ mockContext = new CapabilityClass();
+
+ capability = new EditableLookupCapability(
+ mockContext,
+ mockEditableObject,
+ mockDomainObject,
+ factory,
+ false
+ );
+ expect(capability.inheritedMethod()).toEqual("an inherited method");
+ expect(capability.hasOwnProperty('inheritedMethod')).toBe(true);
+ // The presence of an own property indicates that the method
+ // has been wrapped on the object itself and this is a valid
+ // test that the inherited method has been wrapped.
+ });
+
});
}
);
\ No newline at end of file
diff --git a/platform/commonUI/edit/test/suite.json b/platform/commonUI/edit/test/suite.json
deleted file mode 100644
index 5e3a909c25..0000000000
--- a/platform/commonUI/edit/test/suite.json
+++ /dev/null
@@ -1,28 +0,0 @@
-[
- "actions/CancelAction",
- "actions/EditAction",
- "actions/LinkAction",
- "actions/PropertiesAction",
- "actions/PropertiesDialog",
- "actions/RemoveAction",
- "actions/SaveAction",
- "capabilities/EditableCompositionCapability",
- "capabilities/EditableContextCapability",
- "capabilities/EditableLookupCapability",
- "capabilities/EditablePersistenceCapability",
- "capabilities/EditableRelationshipCapability",
- "capabilities/EditorCapability",
- "controllers/EditActionController",
- "controllers/EditController",
- "controllers/EditPanesController",
- "directives/MCTBeforeUnload",
- "objects/EditableDomainObject",
- "objects/EditableDomainObjectCache",
- "objects/EditableModelCache",
- "policies/EditableViewPolicy",
- "policies/EditActionPolicy",
- "representers/EditRepresenter",
- "representers/EditToolbar",
- "representers/EditToolbarRepresenter",
- "representers/EditToolbarSelection"
-]
\ No newline at end of file
diff --git a/platform/commonUI/formats/test/suite.json b/platform/commonUI/formats/test/suite.json
deleted file mode 100644
index 06c88fac8b..0000000000
--- a/platform/commonUI/formats/test/suite.json
+++ /dev/null
@@ -1,4 +0,0 @@
-[
- "FormatProvider",
- "UTCTimeFormat"
-]
diff --git a/platform/commonUI/general/res/fonts/symbols/icomoon.io-WTD-symbols-project.json b/platform/commonUI/general/res/fonts/symbols/icomoon.io-WTD-symbols-project.json
index fee491e4b3..1b3c319b4c 100644
--- a/platform/commonUI/general/res/fonts/symbols/icomoon.io-WTD-symbols-project.json
+++ b/platform/commonUI/general/res/fonts/symbols/icomoon.io-WTD-symbols-project.json
@@ -1,19 +1,43 @@
{
"metadata": {
"name": "WTD Symbols",
- "lastOpened": 1446670352108,
- "created": 1446670349721
+ "lastOpened": 1454115620456,
+ "created": 1454115616211
},
"iconSets": [
{
"selection": [
+ {
+ "order": 119,
+ "id": 96,
+ "prevSize": 32,
+ "code": 58905,
+ "name": "icon-bullet",
+ "tempChar": ""
+ },
+ {
+ "order": 117,
+ "id": 95,
+ "prevSize": 32,
+ "code": 58904,
+ "name": "icon-session",
+ "tempChar": ""
+ },
+ {
+ "order": 118,
+ "id": 94,
+ "prevSize": 32,
+ "code": 58903,
+ "name": "icon-topic",
+ "tempChar": ""
+ },
{
"order": 116,
"id": 93,
"prevSize": 32,
"code": 58902,
"name": "icon-eye-open-no-gleam",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 115,
@@ -21,7 +45,7 @@
"prevSize": 32,
"code": 58901,
"name": "icon-eye-open",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 110,
@@ -29,7 +53,7 @@
"prevSize": 32,
"code": 58899,
"name": "icon-collapse-pane-left",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 111,
@@ -37,7 +61,7 @@
"prevSize": 32,
"code": 58900,
"name": "icon-collapse-pane-right",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 109,
@@ -45,7 +69,7 @@
"prevSize": 32,
"code": 58898,
"name": "icon-save",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 108,
@@ -53,7 +77,7 @@
"prevSize": 32,
"code": 58897,
"name": "icon-dataset",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 90,
@@ -61,7 +85,7 @@
"prevSize": 32,
"code": 58896,
"name": "icon-bell",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 91,
@@ -69,7 +93,7 @@
"prevSize": 32,
"code": 58889,
"name": "icon-hourglass",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 92,
@@ -82,7 +106,7 @@
58890
],
"name": "icon-info-v15",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 93,
@@ -90,7 +114,7 @@
"prevSize": 32,
"code": 58887,
"name": "icon-x-in-circle",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 94,
@@ -98,7 +122,7 @@
"prevSize": 32,
"code": 58881,
"name": "icon-datatable",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 95,
@@ -106,7 +130,7 @@
"prevSize": 32,
"code": 58882,
"name": "icon-tabular-scrolling",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 96,
@@ -114,7 +138,7 @@
"prevSize": 32,
"code": 58884,
"name": "icon-tabular",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 97,
@@ -122,7 +146,7 @@
"prevSize": 32,
"code": 58885,
"name": "icon-calendar",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 98,
@@ -130,7 +154,7 @@
"prevSize": 32,
"code": 58886,
"name": "icon-paint-bucket",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 99,
@@ -138,7 +162,7 @@
"prevSize": 32,
"code": 123,
"name": "icon-pointer-left",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 100,
@@ -146,7 +170,7 @@
"prevSize": 32,
"code": 125,
"name": "icon-pointer-right",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 101,
@@ -154,7 +178,7 @@
"prevSize": 32,
"code": 80,
"name": "icon-person",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 102,
@@ -162,7 +186,7 @@
"prevSize": 32,
"code": 232,
"name": "icon-chain-links",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 103,
@@ -170,7 +194,7 @@
"prevSize": 32,
"code": 115,
"name": "icon-database-in-brackets",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 104,
@@ -178,7 +202,7 @@
"prevSize": 32,
"code": 114,
"name": "icon-refresh",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 105,
@@ -186,7 +210,7 @@
"prevSize": 32,
"code": 108,
"name": "icon-lock",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 106,
@@ -194,7 +218,7 @@
"prevSize": 32,
"code": 51,
"name": "icon-box-with-dashed-lines",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 10,
@@ -202,7 +226,7 @@
"prevSize": 32,
"code": 58880,
"name": "icon-box-with-arrow-cursor",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 11,
@@ -210,7 +234,7 @@
"prevSize": 32,
"code": 65,
"name": "icon-activity-mode",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 12,
@@ -218,7 +242,7 @@
"prevSize": 32,
"code": 97,
"name": "icon-activity",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 87,
@@ -226,7 +250,7 @@
"prevSize": 32,
"code": 33,
"name": "icon-alert-rect",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 14,
@@ -234,7 +258,7 @@
"prevSize": 32,
"code": 58883,
"name": "icon-alert-triangle",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 15,
@@ -242,7 +266,7 @@
"prevSize": 32,
"code": 238,
"name": "icon-arrow-double-down",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 16,
@@ -250,7 +274,7 @@
"prevSize": 32,
"code": 235,
"name": "icon-arrow-double-up",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 2,
@@ -258,7 +282,7 @@
"prevSize": 32,
"code": 118,
"name": "icon-arrow-down",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 19,
@@ -266,7 +290,7 @@
"prevSize": 32,
"code": 60,
"name": "icon-arrow-left",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 20,
@@ -274,7 +298,7 @@
"prevSize": 32,
"code": 62,
"name": "icon-arrow-right",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 21,
@@ -282,7 +306,7 @@
"prevSize": 32,
"code": 236,
"name": "icon-arrow-tall-down",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 22,
@@ -290,7 +314,7 @@
"prevSize": 32,
"code": 237,
"name": "icon-arrow-tall-up",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 23,
@@ -298,7 +322,7 @@
"prevSize": 32,
"code": 94,
"name": "icon-arrow-up",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 24,
@@ -306,7 +330,7 @@
"prevSize": 32,
"code": 73,
"name": "icon-arrows-out",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 25,
@@ -314,7 +338,7 @@
"prevSize": 32,
"code": 58893,
"name": "icon-arrows-right-left",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 33,
@@ -322,7 +346,7 @@
"prevSize": 32,
"code": 53,
"name": "icon-arrows-up-down",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 26,
@@ -330,7 +354,7 @@
"prevSize": 32,
"code": 42,
"name": "icon-asterisk",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 27,
@@ -338,7 +362,7 @@
"prevSize": 32,
"code": 72,
"name": "icon-autoflow-tabular",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 28,
@@ -346,7 +370,7 @@
"prevSize": 32,
"code": 224,
"name": "icon-box",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 29,
@@ -354,7 +378,7 @@
"prevSize": 32,
"code": 50,
"name": "icon-check",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 30,
@@ -362,7 +386,7 @@
"prevSize": 32,
"code": 67,
"name": "icon-clock",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 31,
@@ -370,7 +394,7 @@
"prevSize": 32,
"code": 46,
"name": "icon-connectivity",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 32,
@@ -378,7 +402,7 @@
"prevSize": 32,
"code": 100,
"name": "icon-database-query",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 17,
@@ -386,7 +410,7 @@
"prevSize": 32,
"code": 68,
"name": "icon-database",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 35,
@@ -394,7 +418,7 @@
"prevSize": 32,
"code": 81,
"name": "icon-dictionary",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 36,
@@ -402,7 +426,7 @@
"prevSize": 32,
"code": 242,
"name": "icon-duplicate",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 37,
@@ -410,7 +434,7 @@
"prevSize": 32,
"code": 102,
"name": "icon-folder-new",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 38,
@@ -418,7 +442,7 @@
"prevSize": 32,
"code": 70,
"name": "icon-folder",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 39,
@@ -426,7 +450,7 @@
"prevSize": 32,
"code": 95,
"name": "icon-fullscreen-collapse",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 40,
@@ -434,7 +458,7 @@
"prevSize": 32,
"code": 122,
"name": "icon-fullscreen-expand",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 41,
@@ -442,7 +466,7 @@
"prevSize": 32,
"code": 71,
"name": "icon-gear",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 49,
@@ -450,7 +474,7 @@
"prevSize": 32,
"code": 227,
"name": "icon-image",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 42,
@@ -458,7 +482,7 @@
"prevSize": 32,
"code": 225,
"name": "icon-layers",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 43,
@@ -466,7 +490,7 @@
"prevSize": 32,
"code": 76,
"name": "icon-layout",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 44,
@@ -474,7 +498,7 @@
"prevSize": 32,
"code": 226,
"name": "icon-line-horz",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 75,
@@ -482,7 +506,7 @@
"prevSize": 32,
"code": 244,
"name": "icon-link",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 46,
@@ -490,7 +514,7 @@
"prevSize": 32,
"code": 88,
"name": "icon-magnify-in",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 47,
@@ -498,7 +522,7 @@
"prevSize": 32,
"code": 89,
"name": "icon-magnify-out",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 48,
@@ -506,7 +530,7 @@
"prevSize": 32,
"code": 77,
"name": "icon-magnify",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 34,
@@ -514,7 +538,7 @@
"prevSize": 32,
"code": 109,
"name": "icon-menu",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 50,
@@ -522,7 +546,7 @@
"prevSize": 32,
"code": 243,
"name": "icon-move",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 51,
@@ -530,7 +554,7 @@
"prevSize": 32,
"code": 121,
"name": "icon-new-window",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 52,
@@ -538,7 +562,7 @@
"prevSize": 32,
"code": 111,
"name": "icon-object",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 73,
@@ -546,7 +570,7 @@
"prevSize": 32,
"code": 63,
"name": "icon-object-unknown",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 53,
@@ -554,7 +578,7 @@
"prevSize": 32,
"code": 86,
"name": "icon-packet",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 54,
@@ -562,7 +586,7 @@
"prevSize": 32,
"code": 234,
"name": "icon-page",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 55,
@@ -570,7 +594,7 @@
"prevSize": 32,
"code": 241,
"name": "icon-pause",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 56,
@@ -578,7 +602,7 @@
"prevSize": 32,
"code": 112,
"name": "icon-pencil",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 65,
@@ -586,7 +610,7 @@
"prevSize": 32,
"code": 79,
"name": "icon-people",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 57,
@@ -594,7 +618,7 @@
"prevSize": 32,
"code": 239,
"name": "icon-play",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 58,
@@ -602,7 +626,7 @@
"prevSize": 32,
"code": 233,
"name": "icon-plot-resource",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 59,
@@ -610,7 +634,7 @@
"prevSize": 32,
"code": 43,
"name": "icon-plus",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 60,
@@ -618,7 +642,7 @@
"prevSize": 32,
"code": 45,
"name": "icon-minus",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 61,
@@ -626,7 +650,7 @@
"prevSize": 32,
"code": 54,
"name": "icon-sine",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 62,
@@ -634,7 +658,7 @@
"prevSize": 32,
"code": 228,
"name": "icon-T",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 63,
@@ -642,7 +666,7 @@
"prevSize": 32,
"code": 116,
"name": "icon-telemetry-panel",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 64,
@@ -650,7 +674,7 @@
"prevSize": 32,
"code": 84,
"name": "icon-telemetry",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 18,
@@ -658,7 +682,7 @@
"prevSize": 32,
"code": 246,
"name": "icon-thumbs-strip",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 67,
@@ -666,7 +690,7 @@
"prevSize": 32,
"code": 83,
"name": "icon-timeline",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 68,
@@ -674,7 +698,7 @@
"prevSize": 32,
"code": 245,
"name": "icon-timer",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 69,
@@ -682,7 +706,7 @@
"prevSize": 32,
"code": 90,
"name": "icon-trash",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 70,
@@ -690,7 +714,7 @@
"prevSize": 32,
"code": 229,
"name": "icon-two-parts-both",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 71,
@@ -698,7 +722,7 @@
"prevSize": 32,
"code": 231,
"name": "icon-two-parts-one-only",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 72,
@@ -706,7 +730,7 @@
"prevSize": 32,
"code": 120,
"name": "icon-x-heavy",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 66,
@@ -714,7 +738,7 @@
"prevSize": 32,
"code": 58946,
"name": "icon-x",
- "tempChar": ""
+ "tempChar": ""
}
],
"id": 2,
@@ -729,6 +753,58 @@
"height": 1024,
"prevSize": 32,
"icons": [
+ {
+ "id": 96,
+ "paths": [
+ "M832 752c0 44-36 80-80 80h-480c-44 0-80-36-80-80v-480c0-44 36-80 80-80h480c44 0 80 36 80 80v480z"
+ ],
+ "attrs": [],
+ "isMulticolor": false,
+ "grid": 0,
+ "tags": [
+ "icon-bullet"
+ ],
+ "colorPermutations": {
+ "16161751": []
+ }
+ },
+ {
+ "id": 95,
+ "paths": [
+ "M101.2 287.6c57.2-69.6 118.6-104.8 182.8-104.8s125.6 35.2 182.8 104.8c51.4 62.6 89.8 141.2 112.6 196.2 27.6 65.8 58.8 121 90.6 159.6 10 12 44.2 51.4 69.8 51.4 6.4 0 30.4-3.8 69.8-51.4 31.8-38.6 63.2-93.8 90.6-159.6 23-55 61.2-133.6 112.6-196.2 3.6-4.4 7.2-8.6 10.8-12.8v-18.8c0.4-140.8-114.8-256-255.6-256h-512c-140.8 0-256 115.2-256 256v201c23.4-51.8 57.4-116.4 101.2-169.4zM744 182c54 0 106.4 24.4 156 72.8-31.6 44.6-57.4 92.2-77.6 134.2-33.4-42-61.8-59.4-78.4-59.4-17.4 0-47.8 19.2-83.2 65.8-27-57.6-54-102.4-77.4-136 51-51.2 104.8-77.4 160.6-77.4z",
+ "M922.8 736.4c-57.2 69.6-118.8 104.8-182.8 104.8s-125.6-35.2-182.8-104.8c-51.4-62.6-89.8-141.2-112.6-196.2-27.6-65.8-58.8-121-90.6-159.6-10-12-44.2-51.4-69.8-51.4-6.4 0-30.4 3.8-69.8 51.4-31.8 38.6-63.2 93.8-90.6 159.6-23 55-61.2 133.6-112.6 196.2-3.6 4.4-7.2 8.6-10.8 12.8v18.8c0 140.8 115.2 256 256 256h512c140.8 0 256-115.2 256-256v-201c-23.8 51.8-57.8 116.4-101.6 169.4zM280 842c-54 0-106.4-24.4-156-72.8 31.6-44.6 57.4-92.2 77.6-134.2 33.4 42 61.8 59.4 78.4 59.4 17.4 0 47.8-19.2 83.2-65.8 27 57.6 54 102.4 77.4 136-51 51.2-104.8 77.4-160.6 77.4z"
+ ],
+ "attrs": [],
+ "isMulticolor": false,
+ "grid": 0,
+ "tags": [
+ "icon-session"
+ ],
+ "colorPermutations": {
+ "16161751": [],
+ "125525525516161751": []
+ }
+ },
+ {
+ "id": 94,
+ "paths": [
+ "M832 0h-128v192h127.6c0.2 0 0.2 0.2 0.4 0.4v639.4c0 0.2-0.2 0.2-0.4 0.4h-127.6v192h128c105.6 0 192-86.4 192-192v-640.2c0-105.6-86.4-192-192-192z",
+ "M192 831.6v-639.4c0-0.2 0.2-0.2 0.4-0.4h127.6v-191.8h-128c-105.6 0-192 86.4-192 192v640c0 105.6 86.4 192 192 192h128v-192h-127.6c-0.2 0-0.4-0.2-0.4-0.4z",
+ "M686 384c7.2 0 21 7.4 38.6 25.8 11.8-24.8 26.4-52.2 43.4-79v-50c-26.4-16.4-53.8-24.6-82-24.6-37.6 0-74.2 14.8-108.8 44.2 27.4 37.8 49.6 78.6 66.2 113.8 19.4-21.6 34.8-30.2 42.6-30.2z",
+ "M338 640c-7.2 0-21-7.4-38.6-25.8-11.8 24.8-26.4 52.2-43.4 79v74.8h82c37.6 0 74.2-14.8 108.8-44.2-27.4-37.8-49.6-78.6-66.2-113.8-19.4 21.4-34.8 30-42.6 30z",
+ "M768 544.2c-38.2 70.6-72.8 95.8-85 95.8-15 0-64.2-38.4-112-152.8-17.4-41.8-46.6-101.6-85.8-149.4-44.8-54.4-93.2-82-144.2-82-29.2 0-57.6 9-85 27v196.8c38.2-70.6 72.8-95.8 85-95.8 15 0 64.2 38.4 112 152.8 17.4 41.8 46.6 101.6 85.8 149.4 44.8 54.4 93.2 82 144.2 82 29.2 0 57.6-9 85-27v-196.8z"
+ ],
+ "attrs": [],
+ "isMulticolor": false,
+ "grid": 0,
+ "tags": [
+ "icon-topic"
+ ],
+ "colorPermutations": {
+ "16161751": [],
+ "125525525516161751": []
+ }
+ },
{
"id": 93,
"paths": [
@@ -749,6 +825,10 @@
"icon-eye-open-no-gleam"
],
"colorPermutations": {
+ "16161751": [
+ 1,
+ 1
+ ],
"125525525516161751": [
1,
1
@@ -775,6 +855,10 @@
"icon-crosshair"
],
"colorPermutations": {
+ "16161751": [
+ 1,
+ 1
+ ],
"125525525516161751": [
1,
1
@@ -801,6 +885,10 @@
"icon-collapse-pane-left"
],
"colorPermutations": {
+ "16161751": [
+ 0,
+ 0
+ ],
"125525525516161751": [
0,
0
@@ -827,6 +915,10 @@
"icon-collapse-pane-right"
],
"colorPermutations": {
+ "16161751": [
+ 0,
+ 0
+ ],
"125525525516161751": [
0,
0
@@ -853,6 +945,10 @@
"icon-save-v2"
],
"colorPermutations": {
+ "16161751": [
+ 0,
+ 0
+ ],
"125525525516161751": [
0,
0
@@ -872,6 +968,7 @@
"icon-dataset"
],
"colorPermutations": {
+ "16161751": [],
"125525525516161751": []
}
},
@@ -895,6 +992,10 @@
"icon-bell"
],
"colorPermutations": {
+ "16161751": [
+ 1,
+ 1
+ ],
"125525525516161751": [
1,
1
@@ -921,6 +1022,10 @@
"icon-hourglass"
],
"colorPermutations": {
+ "16161751": [
+ 1,
+ 1
+ ],
"125525525516161751": [
1,
1
@@ -943,6 +1048,9 @@
"icon-info-v1.5"
],
"colorPermutations": {
+ "16161751": [
+ 0
+ ],
"125525525516161751": [
0
]
@@ -1336,6 +1444,10 @@
"icon-box-with-arrow-cursor"
],
"colorPermutations": {
+ "16161751": [
+ 0,
+ 0
+ ],
"125525525516161751": [
0,
0
@@ -2367,12 +2479,6 @@
161,
75,
1
- ],
- [
- 255,
- 255,
- 255,
- 1
]
]
],
diff --git a/platform/commonUI/general/res/fonts/symbols/wtdsymbols.eot b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.eot
index 6e1b7e80f7..1c9d602aa1 100755
Binary files a/platform/commonUI/general/res/fonts/symbols/wtdsymbols.eot and b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.eot differ
diff --git a/platform/commonUI/general/res/fonts/symbols/wtdsymbols.svg b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.svg
index 7636991183..f6e92e601f 100755
--- a/platform/commonUI/general/res/fonts/symbols/wtdsymbols.svg
+++ b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.svg
@@ -94,5 +94,8 @@
+
+
+
\ No newline at end of file
diff --git a/platform/commonUI/general/res/fonts/symbols/wtdsymbols.ttf b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.ttf
index a514b65eb1..ace067aaf0 100755
Binary files a/platform/commonUI/general/res/fonts/symbols/wtdsymbols.ttf and b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.ttf differ
diff --git a/platform/commonUI/general/res/fonts/symbols/wtdsymbols.woff b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.woff
index eb524a6291..37ffb935d9 100755
Binary files a/platform/commonUI/general/res/fonts/symbols/wtdsymbols.woff and b/platform/commonUI/general/res/fonts/symbols/wtdsymbols.woff differ
diff --git a/platform/commonUI/inspect/test/suite.json b/platform/commonUI/inspect/test/suite.json
deleted file mode 100644
index ca006fdaa7..0000000000
--- a/platform/commonUI/inspect/test/suite.json
+++ /dev/null
@@ -1,5 +0,0 @@
-[
- "gestures/InfoGesture",
- "gestures/InfoButtonGesture",
- "services/InfoService"
-]
diff --git a/platform/commonUI/mobile/test/suite.json b/platform/commonUI/mobile/test/suite.json
deleted file mode 100644
index e72079e835..0000000000
--- a/platform/commonUI/mobile/test/suite.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- "AgentService",
- "DeviceClassifier",
- "DeviceMatchers",
- "MCTDevice"
-]
diff --git a/platform/commonUI/notification/test/suite.json b/platform/commonUI/notification/test/suite.json
deleted file mode 100644
index 75e88599fd..0000000000
--- a/platform/commonUI/notification/test/suite.json
+++ /dev/null
@@ -1,4 +0,0 @@
-[
- "NotificationService",
- "NotificationIndicatorController"
-]
diff --git a/platform/containment/test/suite.json b/platform/containment/test/suite.json
deleted file mode 100644
index 81218a969e..0000000000
--- a/platform/containment/test/suite.json
+++ /dev/null
@@ -1,8 +0,0 @@
-[
- "CapabilityTable",
- "ComposeActionPolicy",
- "CompositionModelPolicy",
- "CompositionMutabilityPolicy",
- "CompositionPolicy",
- "ContainmentTable"
-]
\ No newline at end of file
diff --git a/platform/core/test/suite.json b/platform/core/test/suite.json
deleted file mode 100644
index b428fa5945..0000000000
--- a/platform/core/test/suite.json
+++ /dev/null
@@ -1,46 +0,0 @@
-[
- "actions/ActionAggregator",
- "actions/ActionCapability",
- "actions/ActionProvider",
- "actions/LoggingActionDecorator",
-
- "capabilities/CompositionCapability",
- "capabilities/ContextCapability",
- "capabilities/ContextualDomainObject",
- "capabilities/CoreCapabilityProvider",
- "capabilities/DelegationCapability",
- "capabilities/InstantiationCapability",
- "capabilities/MetadataCapability",
- "capabilities/MutationCapability",
- "capabilities/PersistenceCapability",
- "capabilities/RelationshipCapability",
-
- "identifiers/Identifier",
- "identifiers/IdentifierProvider",
-
- "models/ModelAggregator",
- "models/MissingModelDecorator",
- "models/PersistedModelProvider",
- "models/RootModelProvider",
- "models/StaticModelProvider",
- "models/CachingModelDecorator",
-
- "objects/DomainObject",
- "objects/DomainObjectProvider",
-
- "services/Contextualize",
- "services/Instantiate",
- "services/Now",
- "services/Throttle",
- "services/Topic",
-
- "types/MergeModels",
- "types/TypeCapability",
- "types/TypeImpl",
- "types/TypeProperty",
- "types/TypePropertyConversion",
- "types/TypeProvider",
-
- "views/ViewCapability",
- "views/ViewProvider"
-]
diff --git a/platform/entanglement/test/suite.json b/platform/entanglement/test/suite.json
deleted file mode 100644
index 223e473629..0000000000
--- a/platform/entanglement/test/suite.json
+++ /dev/null
@@ -1,17 +0,0 @@
-[
- "actions/AbstractComposeAction",
- "actions/CopyAction",
- "actions/GoToOriginalAction",
- "actions/LinkAction",
- "actions/MoveAction",
- "actions/SetPrimaryLocationAction",
- "policies/CrossSpacePolicy",
- "services/CopyService",
- "services/CopyTask",
- "services/LinkService",
- "services/MoveService",
- "services/LocationService",
- "services/LocatingCreationDecorator",
- "services/LocatingObjectDecorator",
- "capabilities/LocationCapability"
-]
diff --git a/platform/execution/test/suite.json b/platform/execution/test/suite.json
deleted file mode 100644
index d14a0714c5..0000000000
--- a/platform/execution/test/suite.json
+++ /dev/null
@@ -1,3 +0,0 @@
-[
- "WorkerService"
-]
diff --git a/platform/features/clock/test/suite.json b/platform/features/clock/test/suite.json
deleted file mode 100644
index be10ff57f8..0000000000
--- a/platform/features/clock/test/suite.json
+++ /dev/null
@@ -1,11 +0,0 @@
-[
- "actions/AbstractStartTimerAction",
- "actions/RestartTimerAction",
- "actions/StartTimerAction",
- "controllers/ClockController",
- "controllers/RefreshingController",
- "controllers/TimerController",
- "controllers/TimerFormatter",
- "indicators/ClockIndicator",
- "services/TickerService"
-]
diff --git a/platform/features/conductor/test/suite.json b/platform/features/conductor/test/suite.json
deleted file mode 100644
index 9343b8e422..0000000000
--- a/platform/features/conductor/test/suite.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- "ConductorRepresenter",
- "ConductorService",
- "ConductorTelemetryDecorator",
- "TimeConductor"
-]
diff --git a/platform/features/events/test/suite.json b/platform/features/events/test/suite.json
deleted file mode 100644
index 44c96e9fa6..0000000000
--- a/platform/features/events/test/suite.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "DomainColumn",
- "EventListController",
- "EventListPopulator",
- "policies/MessagesViewPolicy",
- "RangeColumn"
-]
\ No newline at end of file
diff --git a/platform/features/imagery/test/suite.json b/platform/features/imagery/test/suite.json
deleted file mode 100644
index 4ea822e7a2..0000000000
--- a/platform/features/imagery/test/suite.json
+++ /dev/null
@@ -1,5 +0,0 @@
-[
- "controllers/ImageryController",
- "directives/MCTBackgroundImage",
- "policies/ImageryViewPolicy"
-]
diff --git a/platform/features/layout/test/suite.json b/platform/features/layout/test/suite.json
deleted file mode 100644
index 43b066d13e..0000000000
--- a/platform/features/layout/test/suite.json
+++ /dev/null
@@ -1,17 +0,0 @@
-[
- "FixedController",
- "FixedDragHandle",
- "FixedProxy",
- "LayoutCompositionPolicy",
- "LayoutController",
- "LayoutDrag",
- "elements/AccessorMutator",
- "elements/BoxProxy",
- "elements/ElementFactory",
- "elements/ElementProxies",
- "elements/ElementProxy",
- "elements/LineProxy",
- "elements/ResizeHandle",
- "elements/TelemetryProxy",
- "elements/TextProxy"
-]
diff --git a/platform/features/pages/test/suite.json b/platform/features/pages/test/suite.json
deleted file mode 100644
index 0d0efc8302..0000000000
--- a/platform/features/pages/test/suite.json
+++ /dev/null
@@ -1,3 +0,0 @@
-[
- "EmbeddedPageController"
-]
\ No newline at end of file
diff --git a/platform/features/plot/test/suite.json b/platform/features/plot/test/suite.json
deleted file mode 100644
index cec8798d77..0000000000
--- a/platform/features/plot/test/suite.json
+++ /dev/null
@@ -1,26 +0,0 @@
-[
- "Canvas2DChart",
- "GLChart",
- "MCTChart",
- "PlotController",
- "SubPlot",
- "SubPlotFactory",
- "elements/PlotAxis",
- "elements/PlotLimitTracker",
- "elements/PlotLine",
- "elements/PlotLineBuffer",
- "elements/PlotPalette",
- "elements/PlotPanZoomStack",
- "elements/PlotPanZoomStackGroup",
- "elements/PlotPosition",
- "elements/PlotPreparer",
- "elements/PlotSeriesWindow",
- "elements/PlotTelemetryFormatter",
- "elements/PlotTickGenerator",
- "elements/PlotUpdater",
- "modes/PlotModeOptions",
- "modes/PlotOverlayMode",
- "modes/PlotStackMode",
- "policies/PlotViewPolicy"
-]
-
diff --git a/platform/features/rtevents/test/suite.json b/platform/features/rtevents/test/suite.json
deleted file mode 100644
index 996a8ce906..0000000000
--- a/platform/features/rtevents/test/suite.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- "DomainColumn",
- "policies/RTMessagesViewPolicy",
- "RangeColumn",
- "RTEventListController"
-]
\ No newline at end of file
diff --git a/platform/features/scrolling/test/suite.json b/platform/features/scrolling/test/suite.json
deleted file mode 100644
index b36b9c8668..0000000000
--- a/platform/features/scrolling/test/suite.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "DomainColumn",
- "NameColumn",
- "RangeColumn",
- "ScrollingListController",
- "ScrollingListPopulator"
-]
\ No newline at end of file
diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineProxy.js b/platform/features/timeline/src/controllers/swimlane/TimelineProxy.js
index 3174659a63..7f74f59de0 100644
--- a/platform/features/timeline/src/controllers/swimlane/TimelineProxy.js
+++ b/platform/features/timeline/src/controllers/swimlane/TimelineProxy.js
@@ -39,7 +39,7 @@ define(
function populateActionMap(domainObject) {
var actionCapability = domainObject.getCapability('action'),
actions = actionCapability ?
- actionCapability.getActions('create') : [];
+ actionCapability.getActions('add') : [];
actions.forEach(function (action) {
actionMap[action.getMetadata().type] = action;
});
diff --git a/platform/features/timeline/test/controllers/swimlane/TimelineProxySpec.js b/platform/features/timeline/test/controllers/swimlane/TimelineProxySpec.js
index 0ecd073219..7d137fa6e4 100644
--- a/platform/features/timeline/test/controllers/swimlane/TimelineProxySpec.js
+++ b/platform/features/timeline/test/controllers/swimlane/TimelineProxySpec.js
@@ -74,7 +74,7 @@ define(
expect(mockDomainObject.getCapability)
.toHaveBeenCalledWith('action');
expect(mockActionCapability.getActions)
- .toHaveBeenCalledWith('create');
+ .toHaveBeenCalledWith('add');
});
it("invokes the action on the selection, if any", function () {
diff --git a/platform/features/timeline/test/suite.json b/platform/features/timeline/test/suite.json
deleted file mode 100644
index e5028ef25d..0000000000
--- a/platform/features/timeline/test/suite.json
+++ /dev/null
@@ -1,50 +0,0 @@
-[
- "TimelineConstants",
- "TimelineFormatter",
-
- "capabilities/ActivityTimespan",
- "capabilities/ActivityTimespanCapability",
- "capabilities/ActivityUtilization",
- "capabilities/CostCapability",
- "capabilities/GraphCapability",
- "capabilities/CumulativeGraph",
- "capabilities/ResourceGraph",
- "capabilities/TimelineTimespan",
- "capabilities/TimelineTimespanCapability",
- "capabilities/TimelineUtilization",
- "capabilities/UtilizationCapability",
-
- "controllers/ActivityModeValuesController",
- "controllers/TimelineController",
- "controllers/TimelineGanttController",
- "controllers/TimelineGraphController",
- "controllers/TimelineTableController",
- "controllers/TimelineTickController",
- "controllers/TimelineZoomController",
- "controllers/TimelineDateTimeController",
-
- "controllers/drag/TimelineDragHandler",
- "controllers/drag/TimelineDragHandleFactory",
- "controllers/drag/TimelineDragPopulator",
- "controllers/drag/TimelineSnapHandler",
- "controllers/drag/TimelineStartHandle",
- "controllers/drag/TimelineMoveHandle",
- "controllers/drag/TimelineEndHandle",
-
- "controllers/graph/TimelineGraph",
- "controllers/graph/TimelineGraphPopulator",
- "controllers/graph/TimelineGraphRenderer",
-
- "controllers/swimlane/TimelineColorAssigner",
- "controllers/swimlane/TimelineProxy",
- "controllers/swimlane/TimelineSwimlane",
- "controllers/swimlane/TimelineSwimlaneDecorator",
- "controllers/swimlane/TimelineSwimlaneDropHandler",
- "controllers/swimlane/TimelineSwimlanePopulator",
-
- "directives/SwimlaneDragConstants",
- "directives/MCTSwimlaneDrag",
- "directives/MCTSwimlaneDrop",
-
- "services/ObjectLoader"
-]
diff --git a/platform/forms/test/suite.json b/platform/forms/test/suite.json
deleted file mode 100644
index be4d6151db..0000000000
--- a/platform/forms/test/suite.json
+++ /dev/null
@@ -1,9 +0,0 @@
-[
- "MCTControl",
- "MCTForm",
- "controllers/ColorController",
- "controllers/CompositeController",
- "controllers/DateTimeController",
- "controllers/DialogButtonController",
- "controllers/FormController"
-]
\ No newline at end of file
diff --git a/platform/framework/test/suite.json b/platform/framework/test/suite.json
deleted file mode 100644
index eda75ec012..0000000000
--- a/platform/framework/test/suite.json
+++ /dev/null
@@ -1,17 +0,0 @@
-[
- "FrameworkInitializer",
- "LogLevel",
- "bootstrap/ApplicationBootstrapper",
- "load/Bundle",
- "load/BundleLoader",
- "load/Extension",
- "register/CustomRegistrars",
- "register/ExtensionRegistrar",
- "register/ExtensionSorter",
- "register/PartialConstructor",
- "register/ServiceCompositor",
- "resolve/BundleResolver",
- "resolve/ExtensionResolver",
- "resolve/ImplementationLoader",
- "resolve/RequireConfigurator"
-]
diff --git a/platform/identity/test/suite.json b/platform/identity/test/suite.json
deleted file mode 100644
index 15fe7e4caa..0000000000
--- a/platform/identity/test/suite.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- "IdentityAggregator",
- "IdentityCreationDecorator",
- "IdentityIndicator",
- "IdentityProvider"
-]
diff --git a/platform/persistence/aggregator/test/suite.json b/platform/persistence/aggregator/test/suite.json
deleted file mode 100644
index 7585e88ee9..0000000000
--- a/platform/persistence/aggregator/test/suite.json
+++ /dev/null
@@ -1,3 +0,0 @@
-[
- "PersistenceAggregator"
-]
diff --git a/platform/persistence/cache/test/suite.json b/platform/persistence/cache/test/suite.json
deleted file mode 100644
index 0e8b777ca1..0000000000
--- a/platform/persistence/cache/test/suite.json
+++ /dev/null
@@ -1,3 +0,0 @@
-[
- "CachingPersistenceDecorator"
-]
diff --git a/platform/persistence/couch/test/suite.json b/platform/persistence/couch/test/suite.json
deleted file mode 100644
index f61febc916..0000000000
--- a/platform/persistence/couch/test/suite.json
+++ /dev/null
@@ -1,5 +0,0 @@
-[
- "CouchDocument",
- "CouchIndicator",
- "CouchPersistenceProvider"
-]
diff --git a/platform/persistence/elastic/test/suite.json b/platform/persistence/elastic/test/suite.json
deleted file mode 100644
index 85b407eb73..0000000000
--- a/platform/persistence/elastic/test/suite.json
+++ /dev/null
@@ -1,5 +0,0 @@
-[
- "ElasticIndicator",
- "ElasticPersistenceProvider",
- "ElasticSearchProvider"
-]
diff --git a/platform/persistence/local/test/suite.json b/platform/persistence/local/test/suite.json
deleted file mode 100644
index 057958d7a4..0000000000
--- a/platform/persistence/local/test/suite.json
+++ /dev/null
@@ -1,4 +0,0 @@
-[
- "LocalStorageIndicator",
- "LocalStoragePersistenceProvider"
-]
diff --git a/platform/persistence/queue/test/suite.json b/platform/persistence/queue/test/suite.json
deleted file mode 100644
index 3c32be4155..0000000000
--- a/platform/persistence/queue/test/suite.json
+++ /dev/null
@@ -1,11 +0,0 @@
-[
- "PersistenceFailureConstants",
- "PersistenceFailureController",
- "PersistenceFailureDialog",
- "PersistenceFailureHandler",
- "PersistenceQueue",
- "PersistenceQueueHandler",
- "PersistenceQueueImpl",
- "QueuingPersistenceCapability",
- "QueuingPersistenceCapabilityDecorator"
-]
\ No newline at end of file
diff --git a/platform/policy/test/suite.json b/platform/policy/test/suite.json
deleted file mode 100644
index c695797527..0000000000
--- a/platform/policy/test/suite.json
+++ /dev/null
@@ -1,5 +0,0 @@
-[
- "PolicyActionDecorator",
- "PolicyViewDecorator",
- "PolicyProvider"
-]
\ No newline at end of file
diff --git a/platform/representation/src/TemplateLinker.js b/platform/representation/src/TemplateLinker.js
index ba948c477c..27bf317afb 100644
--- a/platform/representation/src/TemplateLinker.js
+++ b/platform/representation/src/TemplateLinker.js
@@ -84,6 +84,8 @@ define(
* templates
* @param element the jqLite-wrapped element into which templates
* should be inserted
+ * @param {TemplateDefinition} extensionDefinition the definition
+ * of the template/representation/view to display initially
* @returns {Function} a function which can be called with a template's
* extension definition to switch templates, or `undefined`
* to remove.
diff --git a/platform/representation/test/suite.json b/platform/representation/test/suite.json
deleted file mode 100644
index 54f7907da3..0000000000
--- a/platform/representation/test/suite.json
+++ /dev/null
@@ -1,13 +0,0 @@
-[
- "actions/ContextMenuAction",
- "gestures/ContextMenuGesture",
- "gestures/DragGesture",
- "gestures/DropGesture",
- "gestures/GestureProvider",
- "gestures/GestureRepresenter",
- "services/DndService",
- "MCTInclude",
- "MCTRepresentation",
- "TemplateLinker",
- "TemplatePrefetcher"
-]
diff --git a/platform/search/test/suite.json b/platform/search/test/suite.json
deleted file mode 100644
index 803949fb6f..0000000000
--- a/platform/search/test/suite.json
+++ /dev/null
@@ -1,8 +0,0 @@
-[
- "controllers/SearchController",
- "controllers/SearchMenuController",
- "controllers/ClickAwayController",
- "services/SearchAggregator",
- "services/GenericSearchProvider",
- "services/GenericSearchWorker"
-]
diff --git a/platform/status/test/suite.json b/platform/status/test/suite.json
deleted file mode 100644
index 8b0cf2fd26..0000000000
--- a/platform/status/test/suite.json
+++ /dev/null
@@ -1,5 +0,0 @@
-[
- "StatusCapability",
- "StatusRepresenter",
- "StatusService"
-]
diff --git a/platform/telemetry/test/suite.json b/platform/telemetry/test/suite.json
deleted file mode 100644
index 8881466572..0000000000
--- a/platform/telemetry/test/suite.json
+++ /dev/null
@@ -1,13 +0,0 @@
-[
- "TelemetryAggregator",
- "TelemetryCapability",
- "TelemetryController",
- "TelemetryDelegator",
- "TelemetryFormatter",
- "TelemetryHandle",
- "TelemetryHandler",
- "TelemetryQueue",
- "TelemetrySubscriber",
- "TelemetrySubscription",
- "TelemetryTable"
-]
\ No newline at end of file