mirror of
https://github.com/nasa/openmct.git
synced 2025-06-25 18:50:11 +00:00
Compare commits
8 Commits
couchdb-pe
...
api-gestur
Author | SHA1 | Date | |
---|---|---|---|
37d5b2ec5e | |||
bc69e97720 | |||
88bed0b718 | |||
0a4a7ce51e | |||
e77c3ac74d | |||
7e27434e90 | |||
0f4451ce12 | |||
b5f170368a |
@ -172,7 +172,7 @@ define([
|
|||||||
* @memberof module:openmct.MCT#
|
* @memberof module:openmct.MCT#
|
||||||
* @name gestures
|
* @name gestures
|
||||||
*/
|
*/
|
||||||
this.gestures = new api.GestureAPI();
|
this.gestures = new api.GestureAPI(this, objectUtils);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An interface for interacting with domain objects and the domain
|
* An interface for interacting with domain objects and the domain
|
||||||
|
@ -20,49 +20,118 @@
|
|||||||
* at runtime from the About dialog for additional information.
|
* at runtime from the About dialog for additional information.
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
define([], function () {
|
define([
|
||||||
/**
|
'zepto',
|
||||||
* Allows support for common user actions to be attached to views.
|
'../../../platform/core/src/capabilities/ContextualDomainObject',
|
||||||
* @interface GestureAPI
|
'../../selection/ContextManager',
|
||||||
* @memberof module:openmct
|
'../../selection/Selection',
|
||||||
*/
|
'../../selection/SelectGesture'
|
||||||
function GestureAPI(selectGesture, contextMenuGesture) {
|
], function (
|
||||||
this.selectGesture = selectGesture;
|
$,
|
||||||
this.contextMenuGesture = contextMenuGesture;
|
ContextualDomainObject,
|
||||||
}
|
ContextManager,
|
||||||
|
Selection,
|
||||||
|
SelectGesture
|
||||||
|
) {
|
||||||
|
/**
|
||||||
|
* Allows support for common user actions to be attached to views.
|
||||||
|
* @interface GestureAPI
|
||||||
|
* @memberof module:openmct
|
||||||
|
*/
|
||||||
|
function GestureAPI(openmct, objectUtils) {
|
||||||
|
this.openmct = openmct;
|
||||||
|
this.objectUtils = objectUtils;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Designate an HTML element as selectable, and associated with a
|
* Designate an HTML element as selectable, and associated with a
|
||||||
* particular object.
|
* particular object.
|
||||||
*
|
*
|
||||||
* @param {HTMLElement} htmlElement the element to make selectable
|
* @param {HTMLElement} htmlElement the element to make selectable
|
||||||
* @param {*} item the object which should become selected when this
|
* @param {*} item the object which should become selected when this
|
||||||
* element is clicked.
|
* element is clicked.
|
||||||
* @returns {Function} a function to remove selectability from this
|
* @returns {Function} a function to remove selectability from this
|
||||||
* HTML element.
|
* HTML element.
|
||||||
* @method selectable
|
* @method selectable
|
||||||
* @memberof module:openmct.GestureAPI#
|
* @memberof module:openmct.GestureAPI#
|
||||||
*/
|
*/
|
||||||
GestureAPI.prototype.selectable = function (htmlElement, item) {
|
GestureAPI.prototype.selectable = function (htmlElement, item) {
|
||||||
return this.selectGesture.apply(htmlElement, item);
|
//TODO: implement selectable
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Designate an HTML element as having a context menu associated with
|
* Designate an HTML element as having a context menu associated with
|
||||||
* the provided item.
|
* the provided item.
|
||||||
*
|
*
|
||||||
* @private
|
//TODO: should this really be private?
|
||||||
* @param {HTMLElement} htmlElement the element to make selectable
|
* @private
|
||||||
* @param {*} item the object for which a context menu should appear
|
* @param {HTMLElement} htmlElement the element containing the context menu
|
||||||
* @returns {Function} a function to remove this geture from this
|
* @param {*} childObject the object for which a context menu should appear
|
||||||
* HTML element.
|
* @param {*} parentObject the object which has the context required for
|
||||||
* @method selectable
|
* showing the context menu
|
||||||
* @memberof module:openmct.GestureAPI#
|
* @returns {Function} a function to remove this gesture from this
|
||||||
*/
|
* HTML element.
|
||||||
GestureAPI.prototype.contextMenu = function (htmlElement, item) {
|
* @method contextMenu
|
||||||
return this.contextMenuGesture.apply(htmlElement, item);
|
* @memberof module:openmct.GestureAPI#
|
||||||
};
|
*/
|
||||||
|
GestureAPI.prototype.contextMenu = function (htmlElement, childObject, parentObject) {
|
||||||
|
var gestureService = this.openmct.$injector.get('gestureService');
|
||||||
|
if (childObject.hasOwnProperty('identifier')) {
|
||||||
|
childObject = this.convertAndInstantiateDomainObject(childObject);
|
||||||
|
}
|
||||||
|
if (parentObject.hasOwnProperty('identifier')) {
|
||||||
|
parentObject = this.convertAndInstantiateDomainObject(parentObject);
|
||||||
|
}
|
||||||
|
|
||||||
return GestureAPI;
|
var contextObject = new ContextualDomainObject(childObject, parentObject);
|
||||||
});
|
|
||||||
|
return gestureService.attachGestures($(htmlElement), contextObject, ['menu']);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Designate an HTML element as having a info popover associated with
|
||||||
|
* the provided item.
|
||||||
|
*
|
||||||
|
//
|
||||||
|
* @private
|
||||||
|
* @param {HTMLElement} htmlElement the element to make selectable
|
||||||
|
* @param {*} childObject the object for which a info popover should appear
|
||||||
|
* @param {*} parentObject the object which has the context required for
|
||||||
|
* showing the info popover
|
||||||
|
* @returns {Function} a function to remove this gesture from this
|
||||||
|
* HTML element.
|
||||||
|
* @method info
|
||||||
|
* @memberof module:openmct.GestureAPI#
|
||||||
|
*/
|
||||||
|
GestureAPI.prototype.info = function (htmlElement, childObject, parentObject) {
|
||||||
|
var gestureService = this.openmct.$injector.get('gestureService');
|
||||||
|
|
||||||
|
//Check if the objects have an identifier property
|
||||||
|
if (childObject.hasOwnProperty('identifier')) {
|
||||||
|
//If they don't convert them into the old object
|
||||||
|
childObject = this.convertAndInstantiateDomainObject(childObject);
|
||||||
|
}
|
||||||
|
if (parentObject.hasOwnProperty('identifier')) {
|
||||||
|
parentObject = this.convertAndInstantiateDomainObject(parentObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
var contextObject = new ContextualDomainObject(childObject, parentObject);
|
||||||
|
|
||||||
|
|
||||||
|
return gestureService.attachGestures($(htmlElement), contextObject, ['info']);
|
||||||
|
};
|
||||||
|
|
||||||
|
//Converts a new domain object(nDomainObject) to an old domain object(oDomainObject) and instantiates it.
|
||||||
|
GestureAPI.prototype.convertAndInstantiateDomainObject = function (nDomainObject) {
|
||||||
|
var instantiate = this.openmct.$injector.get('instantiate');
|
||||||
|
|
||||||
|
var keystring = this.objectUtils.makeKeyString(nDomainObject.identifier);
|
||||||
|
|
||||||
|
var oDomainObject = this.objectUtils.toOldFormat(nDomainObject);
|
||||||
|
|
||||||
|
return instantiate(oDomainObject, keystring);
|
||||||
|
};
|
||||||
|
|
||||||
|
return GestureAPI;
|
||||||
|
});
|
||||||
|
90
src/api/ui/GestureAPISpec.js
Normal file
90
src/api/ui/GestureAPISpec.js
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2017, United States Government
|
||||||
|
* as represented by the Administrator of the National Aeronautics and Space
|
||||||
|
* Administration. All rights reserved.
|
||||||
|
*
|
||||||
|
* Open MCT 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 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.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
define([
|
||||||
|
'./GestureAPI',
|
||||||
|
'../objects/object-utils'
|
||||||
|
], function (
|
||||||
|
GestureAPI,
|
||||||
|
objectUtils
|
||||||
|
) {
|
||||||
|
describe('The Gesture API', function () {
|
||||||
|
var api, openmct;
|
||||||
|
beforeEach(function () {
|
||||||
|
openmct = jasmine.createSpyObj('openmct', ['$injector']);
|
||||||
|
var gestureService = jasmine.createSpyObj('gestureService', ['attachGestures']);
|
||||||
|
gestureService.attachGestures.andCallFake(function (arg1,arg2,arg3) {
|
||||||
|
var destroyFunction = jasmine.createSpy('destroyFunction');
|
||||||
|
return destroyFunction;
|
||||||
|
});
|
||||||
|
var instantiateFunction = jasmine.createSpy('instantiateFunction');
|
||||||
|
instantiateFunction.andCallFake(function (arg1,arg2) {
|
||||||
|
return arg1;
|
||||||
|
});
|
||||||
|
var $injector = jasmine.createSpyObj('$injector', ['get']);
|
||||||
|
$injector.get.andCallFake(function (arg) {
|
||||||
|
if (arg === "gestureService") {
|
||||||
|
return gestureService;
|
||||||
|
}
|
||||||
|
if (arg === "instantiate") {
|
||||||
|
return instantiateFunction;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
openmct.$injector = $injector;
|
||||||
|
|
||||||
|
api = new GestureAPI(openmct, objectUtils);
|
||||||
|
});
|
||||||
|
it('attaches a contextmenu to an element and returns a destroy function', function () {
|
||||||
|
var htmlElement = document.createElement('div');
|
||||||
|
htmlElement.appendChild(document.createTextNode('test element'));
|
||||||
|
|
||||||
|
var nChildDomainObject = jasmine.createSpyObj('nChildDomainObject', ['identifier']);
|
||||||
|
nChildDomainObject.identifier = '555S';
|
||||||
|
|
||||||
|
var nParentDomainObject = jasmine.createSpyObj('nParentDomainObject', ['identifier']);
|
||||||
|
nParentDomainObject.identifier = '555P';
|
||||||
|
|
||||||
|
var destroyFunc = api.contextMenu(htmlElement, nChildDomainObject, nParentDomainObject);
|
||||||
|
expect(destroyFunc).toBeDefined();
|
||||||
|
});
|
||||||
|
it('attaches a infomenu to an element and returns a destroy function', function () {
|
||||||
|
var htmlElement = document.createElement('div');
|
||||||
|
htmlElement.appendChild(document.createTextNode('test element'));
|
||||||
|
|
||||||
|
var nChildDomainObject = jasmine.createSpyObj('nChildDomainObject', ['identifier']);
|
||||||
|
nChildDomainObject.identifier = '555S';
|
||||||
|
|
||||||
|
var nParentDomainObject = jasmine.createSpyObj('nParentDomainObject', ['identifier']);
|
||||||
|
nParentDomainObject.identifier = '555P';
|
||||||
|
|
||||||
|
var destroyFunc = api.info(htmlElement, nChildDomainObject, nParentDomainObject);
|
||||||
|
expect(destroyFunc).toBeDefined();
|
||||||
|
});
|
||||||
|
it('converts a new domain object to an old one and instantiates it', function () {
|
||||||
|
var nDomainObject = jasmine.createSpyObj('nDomainObject', ['identifier']);
|
||||||
|
var oDomainObject = api.convertAndInstantiateDomainObject(nDomainObject);
|
||||||
|
expect(oDomainObject).toBeDefined();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
Reference in New Issue
Block a user