[ONOS-3526]Web UI - Provide a 'Navigate to help page' link or button
Change-Id: I5260e625bb8890b31606dc31b43d4df84bd7eaf4
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/MainModuleResource.java b/web/gui/src/main/java/org/onosproject/ui/impl/MainModuleResource.java
index 4f54b39..242f7ba 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/MainModuleResource.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/MainModuleResource.java
@@ -41,9 +41,10 @@
private static final String MAIN_JS = "onos.js";
- private static final String INJECT_VIEW_IDS_START = "// {INJECTED-VIEW-IDS-START}";
- private static final String INJECT_VIEW_IDS_END = "// {INJECTED-VIEW-IDS-END}";
+ private static final String INJECT_VIEW_IDS_START = "// {INJECTED-VIEW-DATA-START}";
+ private static final String INJECT_VIEW_IDS_END = "// {INJECTED-VIEW-DATA-END}";
private static final String PREFIX = " '";
+ private static final String MIDFIX = "' : '";
private static final String SUFFIX = String.format("',%n");
@GET
@@ -70,10 +71,19 @@
StringBuilder sb = new StringBuilder("\n");
for (UiExtension extension : service.getExtensions()) {
for (UiView view : extension.views()) {
- sb.append(PREFIX).append(view.id()).append(SUFFIX);
+ sb.append(PREFIX)
+ .append(view.id())
+ .append(MIDFIX)
+ .append(sanitizeUrl(view.helpPageUrl()))
+ .append(SUFFIX);
}
}
return new ByteArrayInputStream(sb.toString().getBytes());
}
+ private String sanitizeUrl(String url) {
+ // TODO: add logic for validating URL
+ return url;
+ }
+
}
diff --git a/web/gui/src/main/webapp/app/fw/mast/mast.css b/web/gui/src/main/webapp/app/fw/mast/mast.css
index 4b8131e..3470f18 100644
--- a/web/gui/src/main/webapp/app/fw/mast/mast.css
+++ b/web/gui/src/main/webapp/app/fw/mast/mast.css
@@ -52,13 +52,18 @@
line-height: 44px;
}
-
/*
MAST HEAD DROPDOWN MENU
*/
+#mast-right div.ctrl-btns {
+ position: relative;
+ float: right;
+}
+
#mast .dropdown-parent {
position: relative;
+ float: right;
}
#mast .dropdown-parent i.dropdown-icon {
diff --git a/web/gui/src/main/webapp/app/fw/mast/mast.html b/web/gui/src/main/webapp/app/fw/mast/mast.html
index ddcc048..592f0c8 100644
--- a/web/gui/src/main/webapp/app/fw/mast/mast.html
+++ b/web/gui/src/main/webapp/app/fw/mast/mast.html
@@ -3,15 +3,19 @@
ng-click="mastCtrl.toggleNav()"></div>
<img class="logo" src="data/img/masthead-logo-mojo.png">
<div id="mast-right">
-
<nav>
<div class="dropdown-parent">
<a class="clickable user-menu__name">{{user}} <i class="dropdown-icon"></i></a>
-
<div class="dropdown">
<a href="rs/logout">logout</a>
</div>
</div>
+ <div class="ctrl-btns">
+ <div class="active clickable"
+ icon icon-size="42" icon-id="query"
+ tooltip tt-msg="helpTip"
+ ng-click="directTo()"></div>
+ </div>
</nav>
</div>
diff --git a/web/gui/src/main/webapp/app/fw/mast/mast.js b/web/gui/src/main/webapp/app/fw/mast/mast.js
index d43987d..4d8b5fa 100644
--- a/web/gui/src/main/webapp/app/fw/mast/mast.js
+++ b/web/gui/src/main/webapp/app/fw/mast/mast.js
@@ -33,10 +33,10 @@
angular.module('onosMast', ['onosNav'])
.controller('MastCtrl',
- ['$log', '$scope', '$window', 'WebSocketService', 'NavService',
+ ['$log', '$scope', '$location', '$window', 'WebSocketService', 'NavService',
'DialogService',
- function ($log, $scope, $window, wss, ns, ds) {
+ function ($log, $scope, $location, $window, wss, ns, ds) {
var self = this;
function triggerRefresh(action) {
@@ -86,6 +86,14 @@
// onosAuth is a global set via the index.html generated source
$scope.user = onosAuth || '(no one)';
+ $scope.helpTip = 'Show help page for current view';
+
+ $scope.directTo = function () {
+ var curId = $location.path().replace('/', ''),
+ viewMap = $scope.onos['viewMap'],
+ helpUrl = viewMap[curId];
+ $window.open(helpUrl);
+ };
$log.log('MastCtrl has been created');
}])
diff --git a/web/gui/src/main/webapp/app/fw/svg/icon.js b/web/gui/src/main/webapp/app/fw/svg/icon.js
index 91b9aee..a24542f 100644
--- a/web/gui/src/main/webapp/app/fw/svg/icon.js
+++ b/web/gui/src/main/webapp/app/fw/svg/icon.js
@@ -42,6 +42,7 @@
topo: 'topo',
refresh: 'refresh',
+ query: 'query',
garbage: 'garbage',
upArrow: 'triangleUp',
diff --git a/web/gui/src/main/webapp/onos.js b/web/gui/src/main/webapp/onos.js
index fc4683d..2e62744 100644
--- a/web/gui/src/main/webapp/onos.js
+++ b/web/gui/src/main/webapp/onos.js
@@ -35,13 +35,12 @@
'onosWidget'
];
- // view IDs.. injected via the servlet
- var viewIds = [
- // {INJECTED-VIEW-IDS-START}
- // {INJECTED-VIEW-IDS-END}
- // dummy entry
- ''
- ];
+ // view ID to help page url map.. injected via the servlet
+ var viewMap = {
+ // {INJECTED-VIEW-DATA-START}
+ // {INJECTED-VIEW-DATA-END}
+ },
+ viewIds = [];
// secret sauce
var sauce = [
@@ -63,6 +62,8 @@
var defaultView = 'topo',
viewDependencies = [];
+ viewIds = d3.map(viewMap).keys();
+
viewIds.forEach(function (id) {
if (id) {
viewDependencies.push('ov' + cap(id));
@@ -102,6 +103,7 @@
// shared object inherited by all views:
$scope.onos = {};
+ $scope.onos['viewMap'] = viewMap;
// initialize services...
ts.init();