Merge remote-tracking branch 'origin/master' into open649

This commit is contained in:
Victor Woeltjen 2016-02-08 12:25:25 -08:00
commit b40ac6f44f
60 changed files with 883 additions and 628 deletions

View File

@ -52,5 +52,6 @@
"url": "https://github.com/nasa/openmctweb.git" "url": "https://github.com/nasa/openmctweb.git"
}, },
"author": "", "author": "",
"license": "Apache-2.0" "license": "Apache-2.0",
"private": true
} }

View File

@ -1,5 +0,0 @@
[
"AboutController",
"LicenseController",
"LogoController"
]

View File

@ -34,6 +34,7 @@ define([
"./src/windowing/NewTabAction", "./src/windowing/NewTabAction",
"./src/windowing/FullscreenAction", "./src/windowing/FullscreenAction",
"./src/creation/CreateActionProvider", "./src/creation/CreateActionProvider",
"./src/creation/AddActionProvider",
"./src/creation/CreationService", "./src/creation/CreationService",
"./src/windowing/WindowTitler", "./src/windowing/WindowTitler",
'legacyRegistry' 'legacyRegistry'
@ -50,6 +51,7 @@ define([
NewTabAction, NewTabAction,
FullscreenAction, FullscreenAction,
CreateActionProvider, CreateActionProvider,
AddActionProvider,
CreationService, CreationService,
WindowTitler, WindowTitler,
legacyRegistry legacyRegistry
@ -117,7 +119,8 @@ define([
"implementation": LocatorController, "implementation": LocatorController,
"depends": [ "depends": [
"$scope", "$scope",
"$timeout" "$timeout",
"objectService"
] ]
}, },
{ {
@ -271,6 +274,18 @@ define([
"policyService" "policyService"
] ]
}, },
{
"key": "AddActionProvider",
"provides": "actionService",
"type": "provider",
"implementation": AddActionProvider,
"depends": [
"$q",
"typeService",
"dialogService",
"policyService"
]
},
{ {
"key": "CreationService", "key": "CreationService",
"provides": "creationService", "provides": "creationService",

View File

@ -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;
}
);

View File

@ -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;
}
);

View File

@ -26,18 +26,21 @@ define(
'use strict'; '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 * @param {DomainObject} parent the domain object to serve as
* the initial parent for the created object, in the dialog * the initial parent for the created object, in the dialog
* @memberof platform/commonUI/browse * @memberof platform/commonUI/browse
* @constructor * @constructor
*/ */
function CreateWizard(type, parent, policyService, initialModel) { function CreateWizard(domainObject, parent, policyService) {
this.type = type; this.type = domainObject.getCapability('type');
this.model = initialModel || type.getInitialModel(); this.model = domainObject.getModel();
this.properties = type.getProperties(); this.domainObject = domainObject;
this.properties = this.type.getProperties();
this.parent = parent; this.parent = parent;
this.policyService = policyService; this.policyService = policyService;
} }
@ -46,11 +49,14 @@ define(
* Get the form model for this wizard; this is a description * Get the form model for this wizard; this is a description
* that will be rendered to an HTML form. See the * that will be rendered to an HTML form. See the
* platform/forms bundle * 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 * @return {FormModel} formModel the form model to
* show in the create dialog * show in the create dialog
*/ */
CreateWizard.prototype.getFormStructure = function () { CreateWizard.prototype.getFormStructure = function (includeLocation) {
var sections = [], var sections = [],
type = this.type, type = this.type,
policyService = this.policyService; policyService = this.policyService;
@ -84,12 +90,16 @@ define(
}); });
// Ensure there is always a "save in" section // Ensure there is always a "save in" section
sections.push({ name: 'Location', rows: [{ if (includeLocation) {
name: "Save In", sections.push({
control: "locator", name: 'Location', rows: [{
validate: validateLocation, name: "Save In",
key: "createParent" control: "locator",
}]}); validate: validateLocation,
key: "createParent"
}]
});
}
return { return {
sections: sections, 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. * Get the initial value for the form being described.
* This will include the values for all properties 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 * Based on a populated form, get the domain object which
* should be used as a parent for the newly-created object. * should be used as a parent for the newly-created object.
* @private
* @return {DomainObject} * @return {DomainObject}
*/ */
CreateWizard.prototype.getLocation = function (formValue) { CreateWizard.prototype.getLocation = function (formValue) {
@ -129,6 +157,7 @@ define(
/** /**
* Create the domain object model for a newly-created object, * Create the domain object model for a newly-created object,
* based on user input read from a formModel. * based on user input read from a formModel.
* @private
* @return {object} the domain object model * @return {object} the domain object model
*/ */
CreateWizard.prototype.createModel = function (formValue) { CreateWizard.prototype.createModel = function (formValue) {

View File

@ -33,7 +33,7 @@ define(
* @memberof platform/commonUI/browse * @memberof platform/commonUI/browse
* @constructor * @constructor
*/ */
function LocatorController($scope, $timeout) { function LocatorController($scope, $timeout, objectService) {
// Populate values needed by the locator control. These are: // Populate values needed by the locator control. These are:
// * rootObject: The top-level object, since we want to show // * rootObject: The top-level object, since we want to show
// the full tree // the full tree
@ -52,6 +52,18 @@ define(
$scope.rootObject = $scope.rootObject =
(context && context.getRoot()) || $scope.rootObject; (context && context.getRoot()) || $scope.rootObject;
}, 0); }, 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; $scope.treeModel.selectedObject = domainObject;

View File

@ -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');
});
});
}
);

View File

@ -32,11 +32,12 @@ define(
describe("The create action provider", function () { describe("The create action provider", function () {
var mockTypeService, var mockTypeService,
mockDialogService, mockDialogService,
mockCreationService, mockNavigationService,
mockPolicyService, mockPolicyService,
mockCreationPolicy, mockCreationPolicy,
mockPolicyMap = {}, mockPolicyMap = {},
mockTypes, mockTypes,
mockQ,
provider; provider;
function createMockType(name) { function createMockType(name) {
@ -66,9 +67,9 @@ define(
"dialogService", "dialogService",
[ "getUserInput" ] [ "getUserInput" ]
); );
mockCreationService = jasmine.createSpyObj( mockNavigationService = jasmine.createSpyObj(
"creationService", "navigationService",
[ "createObject" ] [ "setNavigation" ]
); );
mockPolicyService = jasmine.createSpyObj( mockPolicyService = jasmine.createSpyObj(
"policyService", "policyService",
@ -92,15 +93,14 @@ define(
mockTypeService.listTypes.andReturn(mockTypes); mockTypeService.listTypes.andReturn(mockTypes);
provider = new CreateActionProvider( provider = new CreateActionProvider(
mockQ,
mockTypeService, mockTypeService,
mockDialogService, mockNavigationService,
mockCreationService,
mockPolicyService mockPolicyService
); );
}); });
//TODO: Disabled for NEM Beta it("exposes one create action per type", function () {
xit("exposes one create action per type", function () {
expect(provider.getActions({ expect(provider.getActions({
key: "create", key: "create",
domainObject: {} domainObject: {}
@ -114,8 +114,7 @@ define(
}).length).toEqual(0); }).length).toEqual(0);
}); });
//TODO: Disabled for NEM Beta it("does not expose non-creatable types", function () {
xit("does not expose non-creatable types", function () {
// One of the types won't have the creation feature... // One of the types won't have the creation feature...
mockPolicyMap[mockTypes[0].getName()] = false; mockPolicyMap[mockTypes[0].getName()] = false;
// ...so it should have been filtered out. // ...so it should have been filtered out.

View File

@ -35,6 +35,7 @@ define(
mockProperties, mockProperties,
mockPolicyService, mockPolicyService,
testModel, testModel,
mockDomainObject,
wizard; wizard;
function createMockProperty(name) { function createMockProperty(name) {
@ -81,8 +82,18 @@ define(
mockType.getInitialModel.andReturn(testModel); mockType.getInitialModel.andReturn(testModel);
mockType.getProperties.andReturn(mockProperties); 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( wizard = new CreateWizard(
mockType, mockDomainObject,
mockParent, mockParent,
mockPolicyService 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 () { it("validates selection types using policy", function () {
var mockDomainObject = jasmine.createSpyObj( var mockDomainObject = jasmine.createSpyObj(
'domainObject', 'domainObject',
@ -139,7 +162,8 @@ define(
'otherType', 'otherType',
['getKey'] ['getKey']
), ),
structure = wizard.getFormStructure(), //Create a form structure with location
structure = wizard.getFormStructure(true),
sections = structure.sections, sections = structure.sections,
rows = structure.sections[sections.length - 1].rows, rows = structure.sections[sections.length - 1].rows,
locationRow = rows[rows.length - 1]; 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);
});
}); });
} }

View File

@ -35,6 +35,8 @@ define(
mockDomainObject, mockDomainObject,
mockRootObject, mockRootObject,
mockContext, mockContext,
mockObjectService,
getObjectsPromise,
controller; controller;
beforeEach(function () { beforeEach(function () {
@ -55,73 +57,106 @@ define(
"context", "context",
[ "getRoot" ] [ "getRoot" ]
); );
mockObjectService = jasmine.createSpyObj(
"objectService",
["getObjects"]
);
getObjectsPromise = jasmine.createSpyObj(
"promise",
["then"]
);
mockDomainObject.getCapability.andReturn(mockContext); mockDomainObject.getCapability.andReturn(mockContext);
mockContext.getRoot.andReturn(mockRootObject); mockContext.getRoot.andReturn(mockRootObject);
mockObjectService.getObjects.andReturn(getObjectsPromise);
mockScope.ngModel = {}; mockScope.ngModel = {};
mockScope.field = "someField"; 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 () { beforeEach(function () {
expect(mockScope.treeModel).toBeDefined(); mockContext.getRoot.andReturn(mockRootObject);
}); controller = new LocatorController(mockScope, mockTimeout, mockObjectService);
});
it("watches for changes to treeModel", function () { it("adds a treeModel to scope", function () {
// This is what the embedded tree representation expect(mockScope.treeModel).toBeDefined();
// will be modifying. });
expect(mockScope.$watch).toHaveBeenCalledWith(
"treeModel.selectedObject",
jasmine.any(Function)
);
});
it("changes its own model on embedded model updates", function () { it("watches for changes to treeModel", function () {
// Need to pass on selection changes as updates to // This is what the embedded tree representation
// the control's value // will be modifying.
mockScope.$watch.mostRecentCall.args[1](mockDomainObject); expect(mockScope.$watch).toHaveBeenCalledWith(
mockTimeout.mostRecentCall.args[0](); "treeModel.selectedObject",
expect(mockScope.ngModel.someField).toEqual(mockDomainObject); jasmine.any(Function)
expect(mockScope.rootObject).toEqual(mockRootObject); );
});
// Verify that the capability we expect to have been used it("changes its own model on embedded model updates", function () {
// was used. // Need to pass on selection changes as updates to
expect(mockDomainObject.getCapability) // the control's value
.toHaveBeenCalledWith("context"); 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 () { // Verify that the capability we expect to have been used
mockScope.structure = { validate: jasmine.createSpy('validate') }; // was used.
mockScope.structure.validate.andReturn(false); expect(mockDomainObject.getCapability)
.toHaveBeenCalledWith("context");
});
// Pass selection change it("rejects changes which fail validation", function () {
mockScope.$watch.mostRecentCall.args[1](mockDomainObject); mockScope.structure = { validate: jasmine.createSpy('validate') };
mockTimeout.mostRecentCall.args[0](); mockScope.structure.validate.andReturn(false);
expect(mockScope.structure.validate).toHaveBeenCalled(); // Pass selection change
// Change should have been rejected mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
expect(mockScope.ngModel.someField).not.toEqual(mockDomainObject); mockTimeout.mostRecentCall.args[0]();
});
it("treats a lack of a selection as invalid", function () { expect(mockScope.structure.validate).toHaveBeenCalled();
mockScope.ngModelController = jasmine.createSpyObj( // Change should have been rejected
'ngModelController', expect(mockScope.ngModel.someField).not.toEqual(mockDomainObject);
[ '$setValidity' ] });
);
mockScope.$watch.mostRecentCall.args[1](mockDomainObject); it("treats a lack of a selection as invalid", function () {
mockTimeout.mostRecentCall.args[0](); mockScope.ngModelController = jasmine.createSpyObj(
expect(mockScope.ngModelController.$setValidity) 'ngModelController',
.toHaveBeenCalledWith(jasmine.any(String), true); [ '$setValidity' ]
);
mockScope.$watch.mostRecentCall.args[1](undefined); mockScope.$watch.mostRecentCall.args[1](mockDomainObject);
mockTimeout.mostRecentCall.args[0](); mockTimeout.mostRecentCall.args[0]();
expect(mockScope.ngModelController.$setValidity) expect(mockScope.ngModelController.$setValidity)
.toHaveBeenCalledWith(jasmine.any(String), false); .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);
});
});
}); });
} }
); );

View File

@ -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"
]

View File

@ -1,4 +0,0 @@
[
"DialogService",
"OverlayService"
]

View File

@ -79,65 +79,23 @@ define(
function doWizardSave(parent) { function doWizardSave(parent) {
var context = domainObject.getCapability("context"), var context = domainObject.getCapability("context"),
wizard = new CreateWizard(domainObject.useCapability('type'), parent, self.policyService, domainObject.getModel()); wizard = new CreateWizard(domainObject, parent, self.policyService);
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));
}
}
return self.dialogService return self.dialogService
.getUserInput(wizard.getFormStructure(), wizard.getInitialFormValue()) .getUserInput(wizard.getFormStructure(true), wizard.getInitialFormValue())
.then(buildObjectFromInput); .then(function(formValue){
return wizard.populateObjectFromInput(formValue, domainObject);
});
} }
function persistObject(object){ function persistObject(object){
return ((object.hasCapability('editor') && object.getCapability('editor').save(true)) ||
object.getCapability('persistence').persist()) //Persist first to mark dirty
.then(resolveWith(object)); return object.getCapability('persistence').persist().then(function(){
//then save permanently
return object.getCapability('editor').save();
});
} }
function fetchObject(objectId){ function fetchObject(objectId){
@ -152,7 +110,9 @@ define(
function locateObjectInParent(parent){ function locateObjectInParent(parent){
parent.getCapability('composition').add(domainObject.getId()); parent.getCapability('composition').add(domainObject.getId());
return parent; return parent.getCapability('persistence').persist().then(function() {
return parent;
});
} }
function doNothing() { function doNothing() {
@ -174,7 +134,6 @@ define(
.then(getParent)//Parent may have changed based .then(getParent)//Parent may have changed based
// on user selection // on user selection
.then(locateObjectInParent) .then(locateObjectInParent)
.then(persistObject)
.then(function(){ .then(function(){
return fetchObject(domainObject.getId()); return fetchObject(domainObject.getId());
}) })

View File

@ -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
);
};
}
);

View File

@ -45,7 +45,8 @@ define(
cache, cache,
idempotent idempotent
) { ) {
var capability = Object.create(contextCapability); var capability = Object.create(contextCapability),
method;
// Check for domain object interface. If something has these // Check for domain object interface. If something has these
// three methods, we assume it's a domain object. // three methods, we assume it's a domain object.
@ -114,7 +115,9 @@ define(
} }
// Wrap all methods; return only editable domain objects. // Wrap all methods; return only editable domain objects.
Object.keys(contextCapability).forEach(wrapMethod); for (method in contextCapability) {
wrapMethod(method);
}
return capability; return capability;
}; };

View File

@ -81,7 +81,8 @@ define(
var domainObject = this.domainObject, var domainObject = this.domainObject,
editableObject = this.editableObject, editableObject = this.editableObject,
self = this, self = this,
cache = this.cache; cache = this.cache,
returnPromise;
// Update the underlying, "real" domain object's model // Update the underlying, "real" domain object's model
// with changes made to the copy used for editing. // with changes made to the copy used for editing.
@ -99,14 +100,18 @@ define(
editableObject.getCapability("status").set("editing", false); editableObject.getCapability("status").set("editing", false);
if (nonrecursive) { if (nonrecursive) {
return resolvePromise(doMutate()) returnPromise = resolvePromise(doMutate())
.then(doPersist) .then(doPersist)
.then(function(){ .then(function(){
self.cancel(); self.cancel();
}); });
} else { } 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;
});
}; };
/** /**

View File

@ -36,6 +36,7 @@ define(
'../capabilities/EditableContextCapability', '../capabilities/EditableContextCapability',
'../capabilities/EditableCompositionCapability', '../capabilities/EditableCompositionCapability',
'../capabilities/EditableRelationshipCapability', '../capabilities/EditableRelationshipCapability',
'../capabilities/EditableInstantiationCapability',
'../capabilities/EditorCapability', '../capabilities/EditorCapability',
'../capabilities/EditableActionCapability', '../capabilities/EditableActionCapability',
'./EditableDomainObjectCache' './EditableDomainObjectCache'
@ -45,6 +46,7 @@ define(
EditableContextCapability, EditableContextCapability,
EditableCompositionCapability, EditableCompositionCapability,
EditableRelationshipCapability, EditableRelationshipCapability,
EditableInstantiationCapability,
EditorCapability, EditorCapability,
EditableActionCapability, EditableActionCapability,
EditableDomainObjectCache EditableDomainObjectCache
@ -56,6 +58,7 @@ define(
context: EditableContextCapability, context: EditableContextCapability,
composition: EditableCompositionCapability, composition: EditableCompositionCapability,
relationship: EditableRelationshipCapability, relationship: EditableRelationshipCapability,
instantiation: EditableInstantiationCapability,
editor: EditorCapability editor: EditorCapability
}; };

View File

@ -118,6 +118,29 @@ define(
expect(mockContext.getDomainObject.calls.length).toEqual(2); 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.
});
}); });
} }
); );

View File

@ -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"
]

View File

@ -1,4 +0,0 @@
[
"FormatProvider",
"UTCTimeFormat"
]

View File

@ -1,19 +1,43 @@
{ {
"metadata": { "metadata": {
"name": "WTD Symbols", "name": "WTD Symbols",
"lastOpened": 1446670352108, "lastOpened": 1454115620456,
"created": 1446670349721 "created": 1454115616211
}, },
"iconSets": [ "iconSets": [
{ {
"selection": [ "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, "order": 116,
"id": 93, "id": 93,
"prevSize": 32, "prevSize": 32,
"code": 58902, "code": 58902,
"name": "icon-eye-open-no-gleam", "name": "icon-eye-open-no-gleam",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 115, "order": 115,
@ -21,7 +45,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58901, "code": 58901,
"name": "icon-eye-open", "name": "icon-eye-open",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 110, "order": 110,
@ -29,7 +53,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58899, "code": 58899,
"name": "icon-collapse-pane-left", "name": "icon-collapse-pane-left",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 111, "order": 111,
@ -37,7 +61,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58900, "code": 58900,
"name": "icon-collapse-pane-right", "name": "icon-collapse-pane-right",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 109, "order": 109,
@ -45,7 +69,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58898, "code": 58898,
"name": "icon-save", "name": "icon-save",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 108, "order": 108,
@ -53,7 +77,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58897, "code": 58897,
"name": "icon-dataset", "name": "icon-dataset",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 90, "order": 90,
@ -61,7 +85,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58896, "code": 58896,
"name": "icon-bell", "name": "icon-bell",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 91, "order": 91,
@ -69,7 +93,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58889, "code": 58889,
"name": "icon-hourglass", "name": "icon-hourglass",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 92, "order": 92,
@ -82,7 +106,7 @@
58890 58890
], ],
"name": "icon-info-v15", "name": "icon-info-v15",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 93, "order": 93,
@ -90,7 +114,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58887, "code": 58887,
"name": "icon-x-in-circle", "name": "icon-x-in-circle",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 94, "order": 94,
@ -98,7 +122,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58881, "code": 58881,
"name": "icon-datatable", "name": "icon-datatable",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 95, "order": 95,
@ -106,7 +130,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58882, "code": 58882,
"name": "icon-tabular-scrolling", "name": "icon-tabular-scrolling",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 96, "order": 96,
@ -114,7 +138,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58884, "code": 58884,
"name": "icon-tabular", "name": "icon-tabular",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 97, "order": 97,
@ -122,7 +146,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58885, "code": 58885,
"name": "icon-calendar", "name": "icon-calendar",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 98, "order": 98,
@ -130,7 +154,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58886, "code": 58886,
"name": "icon-paint-bucket", "name": "icon-paint-bucket",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 99, "order": 99,
@ -138,7 +162,7 @@
"prevSize": 32, "prevSize": 32,
"code": 123, "code": 123,
"name": "icon-pointer-left", "name": "icon-pointer-left",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 100, "order": 100,
@ -146,7 +170,7 @@
"prevSize": 32, "prevSize": 32,
"code": 125, "code": 125,
"name": "icon-pointer-right", "name": "icon-pointer-right",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 101, "order": 101,
@ -154,7 +178,7 @@
"prevSize": 32, "prevSize": 32,
"code": 80, "code": 80,
"name": "icon-person", "name": "icon-person",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 102, "order": 102,
@ -162,7 +186,7 @@
"prevSize": 32, "prevSize": 32,
"code": 232, "code": 232,
"name": "icon-chain-links", "name": "icon-chain-links",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 103, "order": 103,
@ -170,7 +194,7 @@
"prevSize": 32, "prevSize": 32,
"code": 115, "code": 115,
"name": "icon-database-in-brackets", "name": "icon-database-in-brackets",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 104, "order": 104,
@ -178,7 +202,7 @@
"prevSize": 32, "prevSize": 32,
"code": 114, "code": 114,
"name": "icon-refresh", "name": "icon-refresh",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 105, "order": 105,
@ -186,7 +210,7 @@
"prevSize": 32, "prevSize": 32,
"code": 108, "code": 108,
"name": "icon-lock", "name": "icon-lock",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 106, "order": 106,
@ -194,7 +218,7 @@
"prevSize": 32, "prevSize": 32,
"code": 51, "code": 51,
"name": "icon-box-with-dashed-lines", "name": "icon-box-with-dashed-lines",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 10, "order": 10,
@ -202,7 +226,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58880, "code": 58880,
"name": "icon-box-with-arrow-cursor", "name": "icon-box-with-arrow-cursor",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 11, "order": 11,
@ -210,7 +234,7 @@
"prevSize": 32, "prevSize": 32,
"code": 65, "code": 65,
"name": "icon-activity-mode", "name": "icon-activity-mode",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 12, "order": 12,
@ -218,7 +242,7 @@
"prevSize": 32, "prevSize": 32,
"code": 97, "code": 97,
"name": "icon-activity", "name": "icon-activity",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 87, "order": 87,
@ -226,7 +250,7 @@
"prevSize": 32, "prevSize": 32,
"code": 33, "code": 33,
"name": "icon-alert-rect", "name": "icon-alert-rect",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 14, "order": 14,
@ -234,7 +258,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58883, "code": 58883,
"name": "icon-alert-triangle", "name": "icon-alert-triangle",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 15, "order": 15,
@ -242,7 +266,7 @@
"prevSize": 32, "prevSize": 32,
"code": 238, "code": 238,
"name": "icon-arrow-double-down", "name": "icon-arrow-double-down",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 16, "order": 16,
@ -250,7 +274,7 @@
"prevSize": 32, "prevSize": 32,
"code": 235, "code": 235,
"name": "icon-arrow-double-up", "name": "icon-arrow-double-up",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 2, "order": 2,
@ -258,7 +282,7 @@
"prevSize": 32, "prevSize": 32,
"code": 118, "code": 118,
"name": "icon-arrow-down", "name": "icon-arrow-down",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 19, "order": 19,
@ -266,7 +290,7 @@
"prevSize": 32, "prevSize": 32,
"code": 60, "code": 60,
"name": "icon-arrow-left", "name": "icon-arrow-left",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 20, "order": 20,
@ -274,7 +298,7 @@
"prevSize": 32, "prevSize": 32,
"code": 62, "code": 62,
"name": "icon-arrow-right", "name": "icon-arrow-right",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 21, "order": 21,
@ -282,7 +306,7 @@
"prevSize": 32, "prevSize": 32,
"code": 236, "code": 236,
"name": "icon-arrow-tall-down", "name": "icon-arrow-tall-down",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 22, "order": 22,
@ -290,7 +314,7 @@
"prevSize": 32, "prevSize": 32,
"code": 237, "code": 237,
"name": "icon-arrow-tall-up", "name": "icon-arrow-tall-up",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 23, "order": 23,
@ -298,7 +322,7 @@
"prevSize": 32, "prevSize": 32,
"code": 94, "code": 94,
"name": "icon-arrow-up", "name": "icon-arrow-up",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 24, "order": 24,
@ -306,7 +330,7 @@
"prevSize": 32, "prevSize": 32,
"code": 73, "code": 73,
"name": "icon-arrows-out", "name": "icon-arrows-out",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 25, "order": 25,
@ -314,7 +338,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58893, "code": 58893,
"name": "icon-arrows-right-left", "name": "icon-arrows-right-left",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 33, "order": 33,
@ -322,7 +346,7 @@
"prevSize": 32, "prevSize": 32,
"code": 53, "code": 53,
"name": "icon-arrows-up-down", "name": "icon-arrows-up-down",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 26, "order": 26,
@ -330,7 +354,7 @@
"prevSize": 32, "prevSize": 32,
"code": 42, "code": 42,
"name": "icon-asterisk", "name": "icon-asterisk",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 27, "order": 27,
@ -338,7 +362,7 @@
"prevSize": 32, "prevSize": 32,
"code": 72, "code": 72,
"name": "icon-autoflow-tabular", "name": "icon-autoflow-tabular",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 28, "order": 28,
@ -346,7 +370,7 @@
"prevSize": 32, "prevSize": 32,
"code": 224, "code": 224,
"name": "icon-box", "name": "icon-box",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 29, "order": 29,
@ -354,7 +378,7 @@
"prevSize": 32, "prevSize": 32,
"code": 50, "code": 50,
"name": "icon-check", "name": "icon-check",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 30, "order": 30,
@ -362,7 +386,7 @@
"prevSize": 32, "prevSize": 32,
"code": 67, "code": 67,
"name": "icon-clock", "name": "icon-clock",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 31, "order": 31,
@ -370,7 +394,7 @@
"prevSize": 32, "prevSize": 32,
"code": 46, "code": 46,
"name": "icon-connectivity", "name": "icon-connectivity",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 32, "order": 32,
@ -378,7 +402,7 @@
"prevSize": 32, "prevSize": 32,
"code": 100, "code": 100,
"name": "icon-database-query", "name": "icon-database-query",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 17, "order": 17,
@ -386,7 +410,7 @@
"prevSize": 32, "prevSize": 32,
"code": 68, "code": 68,
"name": "icon-database", "name": "icon-database",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 35, "order": 35,
@ -394,7 +418,7 @@
"prevSize": 32, "prevSize": 32,
"code": 81, "code": 81,
"name": "icon-dictionary", "name": "icon-dictionary",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 36, "order": 36,
@ -402,7 +426,7 @@
"prevSize": 32, "prevSize": 32,
"code": 242, "code": 242,
"name": "icon-duplicate", "name": "icon-duplicate",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 37, "order": 37,
@ -410,7 +434,7 @@
"prevSize": 32, "prevSize": 32,
"code": 102, "code": 102,
"name": "icon-folder-new", "name": "icon-folder-new",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 38, "order": 38,
@ -418,7 +442,7 @@
"prevSize": 32, "prevSize": 32,
"code": 70, "code": 70,
"name": "icon-folder", "name": "icon-folder",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 39, "order": 39,
@ -426,7 +450,7 @@
"prevSize": 32, "prevSize": 32,
"code": 95, "code": 95,
"name": "icon-fullscreen-collapse", "name": "icon-fullscreen-collapse",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 40, "order": 40,
@ -434,7 +458,7 @@
"prevSize": 32, "prevSize": 32,
"code": 122, "code": 122,
"name": "icon-fullscreen-expand", "name": "icon-fullscreen-expand",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 41, "order": 41,
@ -442,7 +466,7 @@
"prevSize": 32, "prevSize": 32,
"code": 71, "code": 71,
"name": "icon-gear", "name": "icon-gear",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 49, "order": 49,
@ -450,7 +474,7 @@
"prevSize": 32, "prevSize": 32,
"code": 227, "code": 227,
"name": "icon-image", "name": "icon-image",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 42, "order": 42,
@ -458,7 +482,7 @@
"prevSize": 32, "prevSize": 32,
"code": 225, "code": 225,
"name": "icon-layers", "name": "icon-layers",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 43, "order": 43,
@ -466,7 +490,7 @@
"prevSize": 32, "prevSize": 32,
"code": 76, "code": 76,
"name": "icon-layout", "name": "icon-layout",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 44, "order": 44,
@ -474,7 +498,7 @@
"prevSize": 32, "prevSize": 32,
"code": 226, "code": 226,
"name": "icon-line-horz", "name": "icon-line-horz",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 75, "order": 75,
@ -482,7 +506,7 @@
"prevSize": 32, "prevSize": 32,
"code": 244, "code": 244,
"name": "icon-link", "name": "icon-link",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 46, "order": 46,
@ -490,7 +514,7 @@
"prevSize": 32, "prevSize": 32,
"code": 88, "code": 88,
"name": "icon-magnify-in", "name": "icon-magnify-in",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 47, "order": 47,
@ -498,7 +522,7 @@
"prevSize": 32, "prevSize": 32,
"code": 89, "code": 89,
"name": "icon-magnify-out", "name": "icon-magnify-out",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 48, "order": 48,
@ -506,7 +530,7 @@
"prevSize": 32, "prevSize": 32,
"code": 77, "code": 77,
"name": "icon-magnify", "name": "icon-magnify",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 34, "order": 34,
@ -514,7 +538,7 @@
"prevSize": 32, "prevSize": 32,
"code": 109, "code": 109,
"name": "icon-menu", "name": "icon-menu",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 50, "order": 50,
@ -522,7 +546,7 @@
"prevSize": 32, "prevSize": 32,
"code": 243, "code": 243,
"name": "icon-move", "name": "icon-move",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 51, "order": 51,
@ -530,7 +554,7 @@
"prevSize": 32, "prevSize": 32,
"code": 121, "code": 121,
"name": "icon-new-window", "name": "icon-new-window",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 52, "order": 52,
@ -538,7 +562,7 @@
"prevSize": 32, "prevSize": 32,
"code": 111, "code": 111,
"name": "icon-object", "name": "icon-object",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 73, "order": 73,
@ -546,7 +570,7 @@
"prevSize": 32, "prevSize": 32,
"code": 63, "code": 63,
"name": "icon-object-unknown", "name": "icon-object-unknown",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 53, "order": 53,
@ -554,7 +578,7 @@
"prevSize": 32, "prevSize": 32,
"code": 86, "code": 86,
"name": "icon-packet", "name": "icon-packet",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 54, "order": 54,
@ -562,7 +586,7 @@
"prevSize": 32, "prevSize": 32,
"code": 234, "code": 234,
"name": "icon-page", "name": "icon-page",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 55, "order": 55,
@ -570,7 +594,7 @@
"prevSize": 32, "prevSize": 32,
"code": 241, "code": 241,
"name": "icon-pause", "name": "icon-pause",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 56, "order": 56,
@ -578,7 +602,7 @@
"prevSize": 32, "prevSize": 32,
"code": 112, "code": 112,
"name": "icon-pencil", "name": "icon-pencil",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 65, "order": 65,
@ -586,7 +610,7 @@
"prevSize": 32, "prevSize": 32,
"code": 79, "code": 79,
"name": "icon-people", "name": "icon-people",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 57, "order": 57,
@ -594,7 +618,7 @@
"prevSize": 32, "prevSize": 32,
"code": 239, "code": 239,
"name": "icon-play", "name": "icon-play",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 58, "order": 58,
@ -602,7 +626,7 @@
"prevSize": 32, "prevSize": 32,
"code": 233, "code": 233,
"name": "icon-plot-resource", "name": "icon-plot-resource",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 59, "order": 59,
@ -610,7 +634,7 @@
"prevSize": 32, "prevSize": 32,
"code": 43, "code": 43,
"name": "icon-plus", "name": "icon-plus",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 60, "order": 60,
@ -618,7 +642,7 @@
"prevSize": 32, "prevSize": 32,
"code": 45, "code": 45,
"name": "icon-minus", "name": "icon-minus",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 61, "order": 61,
@ -626,7 +650,7 @@
"prevSize": 32, "prevSize": 32,
"code": 54, "code": 54,
"name": "icon-sine", "name": "icon-sine",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 62, "order": 62,
@ -634,7 +658,7 @@
"prevSize": 32, "prevSize": 32,
"code": 228, "code": 228,
"name": "icon-T", "name": "icon-T",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 63, "order": 63,
@ -642,7 +666,7 @@
"prevSize": 32, "prevSize": 32,
"code": 116, "code": 116,
"name": "icon-telemetry-panel", "name": "icon-telemetry-panel",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 64, "order": 64,
@ -650,7 +674,7 @@
"prevSize": 32, "prevSize": 32,
"code": 84, "code": 84,
"name": "icon-telemetry", "name": "icon-telemetry",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 18, "order": 18,
@ -658,7 +682,7 @@
"prevSize": 32, "prevSize": 32,
"code": 246, "code": 246,
"name": "icon-thumbs-strip", "name": "icon-thumbs-strip",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 67, "order": 67,
@ -666,7 +690,7 @@
"prevSize": 32, "prevSize": 32,
"code": 83, "code": 83,
"name": "icon-timeline", "name": "icon-timeline",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 68, "order": 68,
@ -674,7 +698,7 @@
"prevSize": 32, "prevSize": 32,
"code": 245, "code": 245,
"name": "icon-timer", "name": "icon-timer",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 69, "order": 69,
@ -682,7 +706,7 @@
"prevSize": 32, "prevSize": 32,
"code": 90, "code": 90,
"name": "icon-trash", "name": "icon-trash",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 70, "order": 70,
@ -690,7 +714,7 @@
"prevSize": 32, "prevSize": 32,
"code": 229, "code": 229,
"name": "icon-two-parts-both", "name": "icon-two-parts-both",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 71, "order": 71,
@ -698,7 +722,7 @@
"prevSize": 32, "prevSize": 32,
"code": 231, "code": 231,
"name": "icon-two-parts-one-only", "name": "icon-two-parts-one-only",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 72, "order": 72,
@ -706,7 +730,7 @@
"prevSize": 32, "prevSize": 32,
"code": 120, "code": 120,
"name": "icon-x-heavy", "name": "icon-x-heavy",
"tempChar": "" "tempChar": ""
}, },
{ {
"order": 66, "order": 66,
@ -714,7 +738,7 @@
"prevSize": 32, "prevSize": 32,
"code": 58946, "code": 58946,
"name": "icon-x", "name": "icon-x",
"tempChar": "" "tempChar": ""
} }
], ],
"id": 2, "id": 2,
@ -729,6 +753,58 @@
"height": 1024, "height": 1024,
"prevSize": 32, "prevSize": 32,
"icons": [ "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, "id": 93,
"paths": [ "paths": [
@ -749,6 +825,10 @@
"icon-eye-open-no-gleam" "icon-eye-open-no-gleam"
], ],
"colorPermutations": { "colorPermutations": {
"16161751": [
1,
1
],
"125525525516161751": [ "125525525516161751": [
1, 1,
1 1
@ -775,6 +855,10 @@
"icon-crosshair" "icon-crosshair"
], ],
"colorPermutations": { "colorPermutations": {
"16161751": [
1,
1
],
"125525525516161751": [ "125525525516161751": [
1, 1,
1 1
@ -801,6 +885,10 @@
"icon-collapse-pane-left" "icon-collapse-pane-left"
], ],
"colorPermutations": { "colorPermutations": {
"16161751": [
0,
0
],
"125525525516161751": [ "125525525516161751": [
0, 0,
0 0
@ -827,6 +915,10 @@
"icon-collapse-pane-right" "icon-collapse-pane-right"
], ],
"colorPermutations": { "colorPermutations": {
"16161751": [
0,
0
],
"125525525516161751": [ "125525525516161751": [
0, 0,
0 0
@ -853,6 +945,10 @@
"icon-save-v2" "icon-save-v2"
], ],
"colorPermutations": { "colorPermutations": {
"16161751": [
0,
0
],
"125525525516161751": [ "125525525516161751": [
0, 0,
0 0
@ -872,6 +968,7 @@
"icon-dataset" "icon-dataset"
], ],
"colorPermutations": { "colorPermutations": {
"16161751": [],
"125525525516161751": [] "125525525516161751": []
} }
}, },
@ -895,6 +992,10 @@
"icon-bell" "icon-bell"
], ],
"colorPermutations": { "colorPermutations": {
"16161751": [
1,
1
],
"125525525516161751": [ "125525525516161751": [
1, 1,
1 1
@ -921,6 +1022,10 @@
"icon-hourglass" "icon-hourglass"
], ],
"colorPermutations": { "colorPermutations": {
"16161751": [
1,
1
],
"125525525516161751": [ "125525525516161751": [
1, 1,
1 1
@ -943,6 +1048,9 @@
"icon-info-v1.5" "icon-info-v1.5"
], ],
"colorPermutations": { "colorPermutations": {
"16161751": [
0
],
"125525525516161751": [ "125525525516161751": [
0 0
] ]
@ -1336,6 +1444,10 @@
"icon-box-with-arrow-cursor" "icon-box-with-arrow-cursor"
], ],
"colorPermutations": { "colorPermutations": {
"16161751": [
0,
0
],
"125525525516161751": [ "125525525516161751": [
0, 0,
0 0
@ -2367,12 +2479,6 @@
161, 161,
75, 75,
1 1
],
[
255,
255,
255,
1
] ]
] ]
], ],

View File

@ -94,5 +94,8 @@
<glyph unicode="&#xe614;" glyph-name="icon-collapse-pane-right" d="M768 960h256v-1024h-256c-105.6 0-192 86.4-192 192v640c0 105.6 86.4 192 192 192zM512 640l-512-320v640z" /> <glyph unicode="&#xe614;" glyph-name="icon-collapse-pane-right" d="M768 960h256v-1024h-256c-105.6 0-192 86.4-192 192v640c0 105.6 86.4 192 192 192zM512 640l-512-320v640z" />
<glyph unicode="&#xe615;" glyph-name="icon-eye-open" d="M512 896c-261 0-480.6-195.4-512-448 31.4-252.6 251-448 512-448s480.6 195.4 512 448c-31.4 252.6-251 448-512 448zM768.2 225.4c-71.4-62.8-162.8-97.4-257.6-97.4s-186.2 34.6-257.6 97.4c-66.6 58.6-110.6 137.2-125 222.6 0 0 0 0.2 0 0.2 76.8 154 220.8 257.6 384 257.6s307.2-103.8 384-257.6c0 0 0-0.2 0-0.2-14.4-85.4-61.2-164-127.8-222.6zM512 672c-123.8 0-224-100.2-224-224s100.2-224 224-224 224 100.2 224 224-100.2 224-224 224z" /> <glyph unicode="&#xe615;" glyph-name="icon-eye-open" d="M512 896c-261 0-480.6-195.4-512-448 31.4-252.6 251-448 512-448s480.6 195.4 512 448c-31.4 252.6-251 448-512 448zM768.2 225.4c-71.4-62.8-162.8-97.4-257.6-97.4s-186.2 34.6-257.6 97.4c-66.6 58.6-110.6 137.2-125 222.6 0 0 0 0.2 0 0.2 76.8 154 220.8 257.6 384 257.6s307.2-103.8 384-257.6c0 0 0-0.2 0-0.2-14.4-85.4-61.2-164-127.8-222.6zM512 672c-123.8 0-224-100.2-224-224s100.2-224 224-224 224 100.2 224 224-100.2 224-224 224z" />
<glyph unicode="&#xe616;" glyph-name="icon-eye-open-no-gleam" d="M512 896c-261 0-480.6-195.4-512-448 31.4-252.6 251-448 512-448s480.6 195.4 512 448c-31.4 252.6-251 448-512 448zM768.2 225.4c-71.4-62.8-162.8-97.4-257.6-97.4s-186.2 34.6-257.6 97.4c-66.6 58.6-110.6 137.2-125 222.6 0 0 0 0.2 0 0.2 76.8 154 220.8 257.6 384 257.6s307.2-103.8 384-257.6c0 0 0-0.2 0-0.2-14.4-85.4-61.2-164-127.8-222.6zM512 672c-123.8 0-224-100.2-224-224s100.2-224 224-224 224 100.2 224 224-100.2 224-224 224zM576 416c-53 0-96 43-96 96s43 96 96 96 96-43 96-96c0-53-43-96-96-96z" /> <glyph unicode="&#xe616;" glyph-name="icon-eye-open-no-gleam" d="M512 896c-261 0-480.6-195.4-512-448 31.4-252.6 251-448 512-448s480.6 195.4 512 448c-31.4 252.6-251 448-512 448zM768.2 225.4c-71.4-62.8-162.8-97.4-257.6-97.4s-186.2 34.6-257.6 97.4c-66.6 58.6-110.6 137.2-125 222.6 0 0 0 0.2 0 0.2 76.8 154 220.8 257.6 384 257.6s307.2-103.8 384-257.6c0 0 0-0.2 0-0.2-14.4-85.4-61.2-164-127.8-222.6zM512 672c-123.8 0-224-100.2-224-224s100.2-224 224-224 224 100.2 224 224-100.2 224-224 224zM576 416c-53 0-96 43-96 96s43 96 96 96 96-43 96-96c0-53-43-96-96-96z" />
<glyph unicode="&#xe617;" glyph-name="icon-topic" d="M832 960h-128v-192h127.6c0.2 0 0.2-0.2 0.4-0.4v-639.4c0-0.2-0.2-0.2-0.4-0.4h-127.6v-192h128c105.6 0 192 86.4 192 192v640.2c0 105.6-86.4 192-192 192zM192 128.4v639.4c0 0.2 0.2 0.2 0.4 0.4h127.6v191.8h-128c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h128v192h-127.6c-0.2 0-0.4 0.2-0.4 0.4zM686 576c7.2 0 21-7.4 38.6-25.8 11.8 24.8 26.4 52.2 43.4 79v50c-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.2zM338 320c-7.2 0-21 7.4-38.6 25.8-11.8-24.8-26.4-52.2-43.4-79v-74.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-30zM768 415.8c-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-27v-196.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 27v196.8z" />
<glyph unicode="&#xe618;" glyph-name="icon-session" d="M101.2 672.4c57.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.8v18.8c0.4 140.8-114.8 256-255.6 256h-512c-140.8 0-256-115.2-256-256v-201c23.4 51.8 57.4 116.4 101.2 169.4zM744 778c54 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.4zM922.8 223.6c-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.8v-18.8c0-140.8 115.2-256 256-256h512c140.8 0 256 115.2 256 256v201c-23.8-51.8-57.8-116.4-101.6-169.4zM280 118c-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" />
<glyph unicode="&#xe619;" glyph-name="icon-bullet" d="M832 208c0-44-36-80-80-80h-480c-44 0-80 36-80 80v480c0 44 36 80 80 80h480c44 0 80-36 80-80v-480z" />
<glyph unicode="&#xe642;" glyph-name="icon-x" d="M384 448l-365.332-365.332c-24.89-24.89-24.89-65.62 0-90.51l37.49-37.49c24.89-24.89 65.62-24.89 90.51 0 0 0 365.332 365.332 365.332 365.332l365.332-365.332c24.89-24.89 65.62-24.89 90.51 0l37.49 37.49c24.89 24.89 24.89 65.62 0 90.51l-365.332 365.332c0 0 365.332 365.332 365.332 365.332 24.89 24.89 24.89 65.62 0 90.51l-37.49 37.49c-24.89 24.89-65.62 24.89-90.51 0 0 0-365.332-365.332-365.332-365.332l-365.332 365.332c-24.89 24.89-65.62 24.89-90.51 0l-37.49-37.49c-24.89-24.89-24.89-65.62 0-90.51 0 0 365.332-365.332 365.332-365.332z" /> <glyph unicode="&#xe642;" glyph-name="icon-x" d="M384 448l-365.332-365.332c-24.89-24.89-24.89-65.62 0-90.51l37.49-37.49c24.89-24.89 65.62-24.89 90.51 0 0 0 365.332 365.332 365.332 365.332l365.332-365.332c24.89-24.89 65.62-24.89 90.51 0l37.49 37.49c24.89 24.89 24.89 65.62 0 90.51l-365.332 365.332c0 0 365.332 365.332 365.332 365.332 24.89 24.89 24.89 65.62 0 90.51l-37.49 37.49c-24.89 24.89-65.62 24.89-90.51 0 0 0-365.332-365.332-365.332-365.332l-365.332 365.332c-24.89 24.89-65.62 24.89-90.51 0l-37.49-37.49c-24.89-24.89-24.89-65.62 0-90.51 0 0 365.332-365.332 365.332-365.332z" />
</font></defs></svg> </font></defs></svg>

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

@ -1,5 +0,0 @@
[
"gestures/InfoGesture",
"gestures/InfoButtonGesture",
"services/InfoService"
]

View File

@ -1,6 +0,0 @@
[
"AgentService",
"DeviceClassifier",
"DeviceMatchers",
"MCTDevice"
]

View File

@ -1,4 +0,0 @@
[
"NotificationService",
"NotificationIndicatorController"
]

View File

@ -1,8 +0,0 @@
[
"CapabilityTable",
"ComposeActionPolicy",
"CompositionModelPolicy",
"CompositionMutabilityPolicy",
"CompositionPolicy",
"ContainmentTable"
]

View File

@ -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"
]

View File

@ -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"
]

View File

@ -1,3 +0,0 @@
[
"WorkerService"
]

View File

@ -1,11 +0,0 @@
[
"actions/AbstractStartTimerAction",
"actions/RestartTimerAction",
"actions/StartTimerAction",
"controllers/ClockController",
"controllers/RefreshingController",
"controllers/TimerController",
"controllers/TimerFormatter",
"indicators/ClockIndicator",
"services/TickerService"
]

View File

@ -1,6 +0,0 @@
[
"ConductorRepresenter",
"ConductorService",
"ConductorTelemetryDecorator",
"TimeConductor"
]

View File

@ -1,7 +0,0 @@
[
"DomainColumn",
"EventListController",
"EventListPopulator",
"policies/MessagesViewPolicy",
"RangeColumn"
]

View File

@ -1,5 +0,0 @@
[
"controllers/ImageryController",
"directives/MCTBackgroundImage",
"policies/ImageryViewPolicy"
]

View File

@ -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"
]

View File

@ -1,3 +0,0 @@
[
"EmbeddedPageController"
]

View File

@ -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"
]

View File

@ -1,6 +0,0 @@
[
"DomainColumn",
"policies/RTMessagesViewPolicy",
"RangeColumn",
"RTEventListController"
]

View File

@ -1,7 +0,0 @@
[
"DomainColumn",
"NameColumn",
"RangeColumn",
"ScrollingListController",
"ScrollingListPopulator"
]

View File

@ -39,7 +39,7 @@ define(
function populateActionMap(domainObject) { function populateActionMap(domainObject) {
var actionCapability = domainObject.getCapability('action'), var actionCapability = domainObject.getCapability('action'),
actions = actionCapability ? actions = actionCapability ?
actionCapability.getActions('create') : []; actionCapability.getActions('add') : [];
actions.forEach(function (action) { actions.forEach(function (action) {
actionMap[action.getMetadata().type] = action; actionMap[action.getMetadata().type] = action;
}); });

View File

@ -74,7 +74,7 @@ define(
expect(mockDomainObject.getCapability) expect(mockDomainObject.getCapability)
.toHaveBeenCalledWith('action'); .toHaveBeenCalledWith('action');
expect(mockActionCapability.getActions) expect(mockActionCapability.getActions)
.toHaveBeenCalledWith('create'); .toHaveBeenCalledWith('add');
}); });
it("invokes the action on the selection, if any", function () { it("invokes the action on the selection, if any", function () {

View File

@ -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"
]

View File

@ -1,9 +0,0 @@
[
"MCTControl",
"MCTForm",
"controllers/ColorController",
"controllers/CompositeController",
"controllers/DateTimeController",
"controllers/DialogButtonController",
"controllers/FormController"
]

View File

@ -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"
]

View File

@ -1,6 +0,0 @@
[
"IdentityAggregator",
"IdentityCreationDecorator",
"IdentityIndicator",
"IdentityProvider"
]

View File

@ -1,3 +0,0 @@
[
"PersistenceAggregator"
]

View File

@ -1,3 +0,0 @@
[
"CachingPersistenceDecorator"
]

View File

@ -1,5 +0,0 @@
[
"CouchDocument",
"CouchIndicator",
"CouchPersistenceProvider"
]

View File

@ -1,5 +0,0 @@
[
"ElasticIndicator",
"ElasticPersistenceProvider",
"ElasticSearchProvider"
]

View File

@ -1,4 +0,0 @@
[
"LocalStorageIndicator",
"LocalStoragePersistenceProvider"
]

View File

@ -1,11 +0,0 @@
[
"PersistenceFailureConstants",
"PersistenceFailureController",
"PersistenceFailureDialog",
"PersistenceFailureHandler",
"PersistenceQueue",
"PersistenceQueueHandler",
"PersistenceQueueImpl",
"QueuingPersistenceCapability",
"QueuingPersistenceCapabilityDecorator"
]

View File

@ -1,5 +0,0 @@
[
"PolicyActionDecorator",
"PolicyViewDecorator",
"PolicyProvider"
]

View File

@ -84,6 +84,8 @@ define(
* templates * templates
* @param element the jqLite-wrapped element into which templates * @param element the jqLite-wrapped element into which templates
* should be inserted * 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 * @returns {Function} a function which can be called with a template's
* extension definition to switch templates, or `undefined` * extension definition to switch templates, or `undefined`
* to remove. * to remove.

View File

@ -1,13 +0,0 @@
[
"actions/ContextMenuAction",
"gestures/ContextMenuGesture",
"gestures/DragGesture",
"gestures/DropGesture",
"gestures/GestureProvider",
"gestures/GestureRepresenter",
"services/DndService",
"MCTInclude",
"MCTRepresentation",
"TemplateLinker",
"TemplatePrefetcher"
]

View File

@ -1,8 +0,0 @@
[
"controllers/SearchController",
"controllers/SearchMenuController",
"controllers/ClickAwayController",
"services/SearchAggregator",
"services/GenericSearchProvider",
"services/GenericSearchWorker"
]

View File

@ -1,5 +0,0 @@
[
"StatusCapability",
"StatusRepresenter",
"StatusService"
]

View File

@ -1,13 +0,0 @@
[
"TelemetryAggregator",
"TelemetryCapability",
"TelemetryController",
"TelemetryDelegator",
"TelemetryFormatter",
"TelemetryHandle",
"TelemetryHandler",
"TelemetryQueue",
"TelemetrySubscriber",
"TelemetrySubscription",
"TelemetryTable"
]