mirror of
https://github.com/nasa/openmct.git
synced 2025-05-08 11:38:35 +00:00
Merge pull request #1660 from sahajp23/master
Updated Hyperlink Domain Object with suggested changes
This commit is contained in:
commit
e8eb34f5c3
120
platform/features/hyperlink/bundle.js
Normal file
120
platform/features/hyperlink/bundle.js
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2009-2016, 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([
|
||||||
|
'./src/HyperlinkController',
|
||||||
|
'legacyRegistry',
|
||||||
|
'text!./res/templates/hyperlink.html'
|
||||||
|
], function (
|
||||||
|
HyperlinkController,
|
||||||
|
legacyRegistry,
|
||||||
|
hyperlinkTemplate
|
||||||
|
) {
|
||||||
|
legacyRegistry.register("platform/features/hyperlink", {
|
||||||
|
"name": "Hyperlink",
|
||||||
|
"description": "Insert a hyperlink to reference a link",
|
||||||
|
"extensions": {
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"key": "hyperlink",
|
||||||
|
"name": "Hyperlink",
|
||||||
|
"cssClass": "icon-page",
|
||||||
|
"description": "A hyperlink to redirect to a different link",
|
||||||
|
"features": ["creation"],
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"key": "url",
|
||||||
|
"name": "URL",
|
||||||
|
"control": "textfield",
|
||||||
|
"pattern": "^(ftp|https?)\\:\\/\\/",
|
||||||
|
"required": true,
|
||||||
|
"cssClass": "l-input-lg"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"key": "displayText",
|
||||||
|
"name": "Text to Display",
|
||||||
|
"control": "textfield",
|
||||||
|
"required": true,
|
||||||
|
"cssClass": "l-input-lg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "displayFormat",
|
||||||
|
"name": "Display Format",
|
||||||
|
"control": "select",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"name": "Link",
|
||||||
|
"value": "link"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": "button",
|
||||||
|
"name": "Button"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cssClass": "l-inline"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "openNewTab",
|
||||||
|
"name": "Tab to Open Hyperlink",
|
||||||
|
"control": "select",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"name": "Open in this tab",
|
||||||
|
"value": "thisTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": "newTab",
|
||||||
|
"name": "Open in a new tab"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cssClass": "l-inline"
|
||||||
|
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"model": {
|
||||||
|
"displayFormat": "link",
|
||||||
|
"openNewTab": "thisTab",
|
||||||
|
"removeTitle": true
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"views": [
|
||||||
|
{
|
||||||
|
"key": "hyperlink",
|
||||||
|
"type": "hyperlink",
|
||||||
|
"name": "Hyperlink Display",
|
||||||
|
"template": hyperlinkTemplate,
|
||||||
|
"editable": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"controllers": [
|
||||||
|
{
|
||||||
|
"key": "HyperlinkController",
|
||||||
|
"implementation": HyperlinkController,
|
||||||
|
"depends": ["$scope"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
32
platform/features/hyperlink/res/templates/hyperlink.html
Normal file
32
platform/features/hyperlink/res/templates/hyperlink.html
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
<div class="s-hyperlink" ng-controller="HyperlinkController as hyperlink">
|
||||||
|
<div>
|
||||||
|
<a href="{{domainObject.getModel().url}}"
|
||||||
|
ng-attr-target="{{hyperlink.openNewTab() ? '_blank' : undefined}}"
|
||||||
|
ng-class="{
|
||||||
|
's-button': hyperlink.isButton()
|
||||||
|
}">
|
||||||
|
{{domainObject.getModel().displayText}}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
58
platform/features/hyperlink/src/HyperlinkController.js
Normal file
58
platform/features/hyperlink/src/HyperlinkController.js
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2009-2016, 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.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This bundle adds the Hyperlink object type, which can be used to add hyperlinks as a domain Object type
|
||||||
|
and into display Layouts as either a button or link that can be chosen to open in either the same tab or
|
||||||
|
create a new tab to open the link in
|
||||||
|
* @namespace platform/features/hyperlink
|
||||||
|
*/
|
||||||
|
define(
|
||||||
|
[],
|
||||||
|
function () {
|
||||||
|
function HyperlinkController($scope) {
|
||||||
|
this.$scope = $scope;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Function to analyze the location in which to open the hyperlink
|
||||||
|
@returns true if the hyperlink is chosen to open in a different tab, false if the same tab
|
||||||
|
**/
|
||||||
|
HyperlinkController.prototype.openNewTab = function () {
|
||||||
|
if (this.$scope.domainObject.getModel().openNewTab === "thisTab") {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/**Function to specify the format in which the hyperlink should be created
|
||||||
|
@returns true if the hyperlink is chosen to be created as a button, false if a link
|
||||||
|
**/
|
||||||
|
HyperlinkController.prototype.isButton = function () {
|
||||||
|
if (this.$scope.domainObject.getModel().displayFormat === "link") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
return HyperlinkController;
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
89
platform/features/hyperlink/test/HyperlinkControllerSpec.js
Normal file
89
platform/features/hyperlink/test/HyperlinkControllerSpec.js
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2009-2016, 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(
|
||||||
|
["../src/HyperlinkController"],
|
||||||
|
function (HyperlinkController) {
|
||||||
|
|
||||||
|
describe("The controller for hyperlinks", function () {
|
||||||
|
var domainObject,
|
||||||
|
controller,
|
||||||
|
scope;
|
||||||
|
beforeEach(function () {
|
||||||
|
scope = jasmine.createSpyObj(
|
||||||
|
"$scope",
|
||||||
|
["domainObject"]
|
||||||
|
);
|
||||||
|
domainObject = jasmine.createSpyObj(
|
||||||
|
"domainObject",
|
||||||
|
["getModel"]
|
||||||
|
);
|
||||||
|
scope.domainObject = domainObject;
|
||||||
|
controller = new HyperlinkController(scope);
|
||||||
|
});
|
||||||
|
it("knows when it should open a new tab", function () {
|
||||||
|
scope.domainObject.getModel.andReturn({
|
||||||
|
"displayFormat": "link",
|
||||||
|
"openNewTab": "newTab",
|
||||||
|
"showTitle": false
|
||||||
|
}
|
||||||
|
);
|
||||||
|
controller = new HyperlinkController(scope);
|
||||||
|
expect(controller.openNewTab())
|
||||||
|
.toBe(true);
|
||||||
|
});
|
||||||
|
it("knows when it is a button", function () {
|
||||||
|
scope.domainObject.getModel.andReturn({
|
||||||
|
"displayFormat": "button",
|
||||||
|
"openNewTab": "thisTab",
|
||||||
|
"showTitle": false
|
||||||
|
}
|
||||||
|
);
|
||||||
|
controller = new HyperlinkController(scope);
|
||||||
|
expect(controller.isButton())
|
||||||
|
.toEqual(true);
|
||||||
|
});
|
||||||
|
it("knows when it should open in the same tab", function () {
|
||||||
|
scope.domainObject.getModel.andReturn({
|
||||||
|
"displayFormat": "link",
|
||||||
|
"openNewTab": "thisTab",
|
||||||
|
"showTitle": false
|
||||||
|
}
|
||||||
|
);
|
||||||
|
controller = new HyperlinkController(scope);
|
||||||
|
expect(controller.openNewTab())
|
||||||
|
.toBe(false);
|
||||||
|
});
|
||||||
|
it("knows when it is a link", function () {
|
||||||
|
scope.domainObject.getModel.andReturn({
|
||||||
|
"displayFormat": "link",
|
||||||
|
"openNewTab": "thisTab",
|
||||||
|
"showTitle": false
|
||||||
|
}
|
||||||
|
);
|
||||||
|
controller = new HyperlinkController(scope);
|
||||||
|
expect(controller.openNewTab())
|
||||||
|
.toBe(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
@ -22,12 +22,14 @@
|
|||||||
<div class="frame frame-template abs">
|
<div class="frame frame-template abs">
|
||||||
<div class="abs object-browse-bar l-flex-row">
|
<div class="abs object-browse-bar l-flex-row">
|
||||||
<div class="left flex-elem l-flex-row grows">
|
<div class="left flex-elem l-flex-row grows">
|
||||||
|
<div ng-if=!domainObject.getModel().removeTitle>
|
||||||
<mct-representation
|
<mct-representation
|
||||||
key="'object-header'"
|
key="'object-header'"
|
||||||
mct-object="domainObject"
|
mct-object="domainObject"
|
||||||
class="l-flex-row flex-elem object-header grows">
|
class="l-flex-row flex-elem object-header grows">
|
||||||
</mct-representation>
|
</mct-representation>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<div class="btn-bar right l-flex-row flex-elem flex-justify-end flex-fixed">
|
<div class="btn-bar right l-flex-row flex-elem flex-justify-end flex-fixed">
|
||||||
<mct-representation key="'switcher'"
|
<mct-representation key="'switcher'"
|
||||||
ng-model="representation"
|
ng-model="representation"
|
||||||
@ -35,7 +37,12 @@
|
|||||||
</mct-representation>
|
</mct-representation>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="abs object-holder">
|
<div ng-if=domainObject.getModel().removeTitle class="l-flex-row flex-elem object-header grows">
|
||||||
|
<mct-representation key="representation.selected.key"
|
||||||
|
mct-object="representation.selected.key && domainObject">
|
||||||
|
</mct-representation>
|
||||||
|
</div>
|
||||||
|
<div ng-if=!domainObject.getModel().removeTitle class="abs object-holder">
|
||||||
<mct-representation key="representation.selected.key"
|
<mct-representation key="representation.selected.key"
|
||||||
mct-object="representation.selected.key && domainObject">
|
mct-object="representation.selected.key && domainObject">
|
||||||
</mct-representation>
|
</mct-representation>
|
||||||
|
@ -72,6 +72,7 @@ define([
|
|||||||
'../platform/features/listview/bundle',
|
'../platform/features/listview/bundle',
|
||||||
'../platform/features/my-items/bundle',
|
'../platform/features/my-items/bundle',
|
||||||
'../platform/features/pages/bundle',
|
'../platform/features/pages/bundle',
|
||||||
|
'../platform/features/hyperlink/bundle',
|
||||||
'../platform/features/plot/bundle',
|
'../platform/features/plot/bundle',
|
||||||
'../platform/features/static-markup/bundle',
|
'../platform/features/static-markup/bundle',
|
||||||
'../platform/features/table/bundle',
|
'../platform/features/table/bundle',
|
||||||
@ -118,6 +119,7 @@ define([
|
|||||||
'platform/features/layout',
|
'platform/features/layout',
|
||||||
'platform/features/listview',
|
'platform/features/listview',
|
||||||
'platform/features/pages',
|
'platform/features/pages',
|
||||||
|
'platform/features/hyperlink',
|
||||||
'platform/features/plot',
|
'platform/features/plot',
|
||||||
'platform/features/timeline',
|
'platform/features/timeline',
|
||||||
'platform/features/table',
|
'platform/features/table',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user