Compare commits
	
		
			8 Commits
		
	
	
		
			branch-off
			...
			api-gestur
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 37d5b2ec5e | ||
|   | bc69e97720 | ||
|   | 88bed0b718 | ||
|   | 0a4a7ce51e | ||
|   | e77c3ac74d | ||
|   | 7e27434e90 | ||
|   | 0f4451ce12 | ||
|   | b5f170368a | 
| @@ -172,7 +172,7 @@ define([ | ||||
|          * @memberof module:openmct.MCT# | ||||
|          * @name gestures | ||||
|          */ | ||||
|         this.gestures = new api.GestureAPI(); | ||||
|         this.gestures = new api.GestureAPI(this, objectUtils); | ||||
|  | ||||
|         /** | ||||
|          * An interface for interacting with domain objects and the domain | ||||
|   | ||||
| @@ -20,49 +20,118 @@ | ||||
|  * at runtime from the About dialog for additional information. | ||||
|  *****************************************************************************/ | ||||
|  | ||||
| define([], function () { | ||||
|     /** | ||||
|      * Allows support for common user actions to be attached to views. | ||||
|      * @interface GestureAPI | ||||
|      * @memberof module:openmct | ||||
|      */ | ||||
|     function GestureAPI(selectGesture, contextMenuGesture) { | ||||
|         this.selectGesture = selectGesture; | ||||
|         this.contextMenuGesture = contextMenuGesture; | ||||
|     } | ||||
|  define([ | ||||
|      'zepto', | ||||
|      '../../../platform/core/src/capabilities/ContextualDomainObject', | ||||
|      '../../selection/ContextManager', | ||||
|      '../../selection/Selection', | ||||
|      '../../selection/SelectGesture' | ||||
|  ], function ( | ||||
|      $, | ||||
|      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 | ||||
|      * particular object. | ||||
|      * | ||||
|      * @param {HTMLElement} htmlElement the element to make selectable | ||||
|      * @param {*} item the object which should become selected when this | ||||
|      *        element is clicked. | ||||
|      * @returns {Function} a function to remove selectability from this | ||||
|      *          HTML element. | ||||
|      * @method selectable | ||||
|      * @memberof module:openmct.GestureAPI# | ||||
|      */ | ||||
|     GestureAPI.prototype.selectable = function (htmlElement, item) { | ||||
|         return this.selectGesture.apply(htmlElement, item); | ||||
|     }; | ||||
|      /** | ||||
|       * Designate an HTML element as selectable, and associated with a | ||||
|       * particular object. | ||||
|       * | ||||
|       * @param {HTMLElement} htmlElement the element to make selectable | ||||
|       * @param {*} item the object which should become selected when this | ||||
|       *        element is clicked. | ||||
|       * @returns {Function} a function to remove selectability from this | ||||
|       *          HTML element. | ||||
|       * @method selectable | ||||
|       * @memberof module:openmct.GestureAPI# | ||||
|       */ | ||||
|      GestureAPI.prototype.selectable = function (htmlElement, item) { | ||||
|          //TODO: implement selectable | ||||
|      }; | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * Designate an HTML element as having a context menu associated with | ||||
|      * the provided item. | ||||
|      * | ||||
|      * @private | ||||
|      * @param {HTMLElement} htmlElement the element to make selectable | ||||
|      * @param {*} item the object for which a context menu should appear | ||||
|      * @returns {Function} a function to remove this geture from this | ||||
|      *          HTML element. | ||||
|      * @method selectable | ||||
|      * @memberof module:openmct.GestureAPI# | ||||
|      */ | ||||
|     GestureAPI.prototype.contextMenu = function (htmlElement, item) { | ||||
|         return this.contextMenuGesture.apply(htmlElement, item); | ||||
|     }; | ||||
|      /** | ||||
|       * Designate an HTML element as having a context menu associated with | ||||
|       * the provided item. | ||||
|       * | ||||
|       //TODO: should this really be private? | ||||
|       * @private | ||||
|       * @param {HTMLElement} htmlElement the element containing the context menu | ||||
|       * @param {*} childObject the object for which a context menu should appear | ||||
|       * @param {*} parentObject the object which has the context required for | ||||
|       *        showing the context menu | ||||
|       * @returns {Function} a function to remove this gesture from this | ||||
|       *          HTML element. | ||||
|       * @method contextMenu | ||||
|       * @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