mirror of
https://github.com/nasa/openmct.git
synced 2025-06-14 13:18:15 +00:00
[Time Conductor] Show appropriate arrow
...on info bubbles, when using bubbles shown via the popupService.
This commit is contained in:
89
platform/commonUI/general/src/services/Popup.js
Normal file
89
platform/commonUI/general/src/services/Popup.js
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* 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(
|
||||||
|
function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A popup is an element that has been displayed at a particular
|
||||||
|
* location within the page.
|
||||||
|
* @constructor
|
||||||
|
* @memberof platform/commonUI/general
|
||||||
|
* @param element the jqLite-wrapped element
|
||||||
|
* @param {object} styles an object containing key-value pairs
|
||||||
|
* of styles used to position the element.
|
||||||
|
*/
|
||||||
|
function Popup(element, styles) {
|
||||||
|
this.styles = styles;
|
||||||
|
this.element = element;
|
||||||
|
|
||||||
|
element.css(styles);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop showing this popup.
|
||||||
|
*/
|
||||||
|
Popup.prototype.dismiss = function () {
|
||||||
|
this.element.remove();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if this popup is positioned such that it appears to the
|
||||||
|
* left of its original location.
|
||||||
|
* @returns {boolean} true if the popup goes left
|
||||||
|
*/
|
||||||
|
Popup.prototype.goesLeft = function () {
|
||||||
|
return !this.styles.left;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if this popup is positioned such that it appears to the
|
||||||
|
* right of its original location.
|
||||||
|
* @returns {boolean} true if the popup goes right
|
||||||
|
*/
|
||||||
|
Popup.prototype.goesRight = function () {
|
||||||
|
return !this.styles.right;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if this popup is positioned such that it appears above
|
||||||
|
* its original location.
|
||||||
|
* @returns {boolean} true if the popup goes up
|
||||||
|
*/
|
||||||
|
Popup.prototype.goesUp = function () {
|
||||||
|
return !this.styles.top;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if this popup is positioned such that it appears below
|
||||||
|
* its original location.
|
||||||
|
* @returns {boolean} true if the popup goes down
|
||||||
|
*/
|
||||||
|
Popup.prototype.goesDown = function () {
|
||||||
|
return !this.styles.bottom;
|
||||||
|
};
|
||||||
|
|
||||||
|
return Popup;
|
||||||
|
}
|
||||||
|
);
|
@ -22,7 +22,8 @@
|
|||||||
/*global define*/
|
/*global define*/
|
||||||
|
|
||||||
define(
|
define(
|
||||||
function () {
|
['./Popup'],
|
||||||
|
function (Popup) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -73,14 +74,14 @@ define(
|
|||||||
* relative to the right or bottom of the window.
|
* relative to the right or bottom of the window.
|
||||||
* @param {PopupOptions} [options] additional options to control
|
* @param {PopupOptions} [options] additional options to control
|
||||||
* positioning of the popup
|
* positioning of the popup
|
||||||
* @returns {Function} a function that may be invoked to
|
* @returns {platform/commonUI/general.Popup} the popup
|
||||||
* dismiss the info bubble
|
|
||||||
*/
|
*/
|
||||||
PopupService.prototype.display = function (element, position, options) {
|
PopupService.prototype.display = function (element, position, options) {
|
||||||
var $document = this.$document,
|
var $document = this.$document,
|
||||||
$window = this.$window,
|
$window = this.$window,
|
||||||
body = $document.find('body'),
|
body = $document.find('body'),
|
||||||
winDim = [ $window.innerWidth, $window.innerHeight ],
|
winDim = [ $window.innerWidth, $window.innerHeight ],
|
||||||
|
styles = { position: 'absolute' },
|
||||||
margin,
|
margin,
|
||||||
offset,
|
offset,
|
||||||
bubble;
|
bubble;
|
||||||
@ -107,32 +108,23 @@ define(
|
|||||||
|
|
||||||
position = position.map(adjustNegatives);
|
position = position.map(adjustNegatives);
|
||||||
|
|
||||||
// Position the element
|
|
||||||
element.css('position', 'absolute');
|
|
||||||
|
|
||||||
if (position[0] > margin[0]) {
|
if (position[0] > margin[0]) {
|
||||||
element.css('right', (winDim[0] - position[0] + offset[0]) + 'px');
|
styles.right = (winDim[0] - position[0] + offset[0]) + 'px';
|
||||||
applyClassOption('left');
|
|
||||||
} else {
|
} else {
|
||||||
element.css('left', position[0] + offset[0] + 'px');
|
styles.left = (position[0] + offset[0]) + 'px';
|
||||||
applyClassOption('right');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (position[1] > margin[1]) {
|
if (position[1] > margin[1]) {
|
||||||
element.css('bottom', (winDim[1] - position[1] + offset[1]) + 'px');
|
styles.bottom = (winDim[1] - position[1] + offset[1]) + 'px';
|
||||||
applyClassOption('up');
|
|
||||||
} else {
|
} else {
|
||||||
element.css('top', position[1] + offset[1] + 'px');
|
styles.top = (position[1] + offset[1]) + 'px';
|
||||||
applyClassOption('down');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the menu to the body
|
// Add the menu to the body
|
||||||
body.append(element);
|
body.append(element);
|
||||||
|
|
||||||
// Return a function to dismiss the bubble
|
// Return a function to dismiss the bubble
|
||||||
return function () {
|
return new Popup(element, styles);
|
||||||
element.remove();
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return PopupService;
|
return PopupService;
|
||||||
|
@ -32,17 +32,14 @@ define({
|
|||||||
"bubble-title=\"{{bubbleTitle}}\" " +
|
"bubble-title=\"{{bubbleTitle}}\" " +
|
||||||
"bubble-layout=\"{{bubbleLayout}}\" " +
|
"bubble-layout=\"{{bubbleLayout}}\" " +
|
||||||
"class=\"bubble-container\">" +
|
"class=\"bubble-container\">" +
|
||||||
"<mct-include key=\"bubbleTemplate\" ng-model=\"bubbleModel\">" +
|
"<mct-include key=\"bubbleTemplate\" " +
|
||||||
|
"ng-model=\"bubbleModel\">" +
|
||||||
"</mct-include>" +
|
"</mct-include>" +
|
||||||
"</mct-container>",
|
"</mct-container>",
|
||||||
// Options and classes for bubble
|
// Options and classes for bubble
|
||||||
BUBBLE_OPTIONS: {
|
BUBBLE_OPTIONS: {
|
||||||
offsetX: 0,
|
offsetX: 0,
|
||||||
offsetY: -26,
|
offsetY: -26
|
||||||
leftClass: 'arw-left',
|
|
||||||
rightClass: 'arw-right',
|
|
||||||
topClass: 'arw-top',
|
|
||||||
bottomClss: 'arw-btm'
|
|
||||||
},
|
},
|
||||||
BUBBLE_MOBILE_POSITION: [ 0, -25 ],
|
BUBBLE_MOBILE_POSITION: [ 0, -25 ],
|
||||||
// Max width and margins allowed for bubbles; defined in /platform/commonUI/general/res/sass/_constants.scss
|
// Max width and margins allowed for bubbles; defined in /platform/commonUI/general/res/sass/_constants.scss
|
||||||
|
@ -60,7 +60,7 @@ define(
|
|||||||
bubbleSpaceLR = InfoConstants.BUBBLE_MARGIN_LR +
|
bubbleSpaceLR = InfoConstants.BUBBLE_MARGIN_LR +
|
||||||
InfoConstants.BUBBLE_MAX_WIDTH,
|
InfoConstants.BUBBLE_MAX_WIDTH,
|
||||||
options,
|
options,
|
||||||
dismissPopup,
|
popup,
|
||||||
bubble;
|
bubble;
|
||||||
|
|
||||||
// Pass model & container parameters into the scope
|
// Pass model & container parameters into the scope
|
||||||
@ -81,12 +81,18 @@ define(
|
|||||||
options = {};
|
options = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
dismissPopup =
|
popup = this.popupService.display(bubble, position, options);
|
||||||
this.popupService.display(bubble, position, options);
|
|
||||||
|
// Style the bubble according to how it was positioned
|
||||||
|
if (popup.goesLeft()) {
|
||||||
|
scope.bubbleLayout = 'arw-right';
|
||||||
|
} else if (popup.goesRight()) {
|
||||||
|
scope.bubbleLayout = 'arw-left';
|
||||||
|
}
|
||||||
|
|
||||||
// Return a function to dismiss the info bubble
|
// Return a function to dismiss the info bubble
|
||||||
return function dismiss() {
|
return function dismiss() {
|
||||||
dismissPopup();
|
popup.dismiss();
|
||||||
scope.$destroy();
|
scope.$destroy();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user