diff --git a/src/plugins/kibana/public/settings/app.html b/src/plugins/kibana/public/settings/app.html
index 6e13f42adb41..0d86dff90fd9 100644
--- a/src/plugins/kibana/public/settings/app.html
+++ b/src/plugins/kibana/public/settings/app.html
@@ -3,7 +3,7 @@
diff --git a/src/plugins/kibana/public/settings/sections/about/index.html b/src/plugins/kibana/public/settings/sections/about/index.html
index 393aa8429d06..537d98269abd 100644
--- a/src/plugins/kibana/public/settings/sections/about/index.html
+++ b/src/plugins/kibana/public/settings/sections/about/index.html
@@ -2,7 +2,7 @@
- 
+ ![Kibana Barcode Logo]()
Kibana
diff --git a/src/plugins/kibana/public/settings/sections/status/index.js b/src/plugins/kibana/public/settings/sections/status/index.js
index 9a82bc85fb75..4887afcacf4c 100644
--- a/src/plugins/kibana/public/settings/sections/status/index.js
+++ b/src/plugins/kibana/public/settings/sections/status/index.js
@@ -5,6 +5,6 @@ define(function (require) {
order: 3,
name: 'status',
display: 'Status',
- url: '../status'
+ url: '/status'
};
});
diff --git a/src/plugins/statusPage/public/statusPage.js b/src/plugins/statusPage/public/statusPage.js
index 4daceba0d7c7..6189ec083258 100644
--- a/src/plugins/statusPage/public/statusPage.js
+++ b/src/plugins/statusPage/public/statusPage.js
@@ -5,7 +5,7 @@ var notify = require('ui/notify');
require('plugins/statusPage/statusPageMetric');
require('plugins/statusPage/statusPage.less');
-require('ui/chrome')
+var chrome = require('ui/chrome')
.setTabs([
{
id: '',
@@ -23,7 +23,7 @@ require('ui/chrome')
// go ahead and get the info you want
return $http
- .get('./api/status')
+ .get(chrome.addBasePath('/api/status'))
.then(function (resp) {
if (ui.fetchError) {
diff --git a/src/ui/public/chrome/api/angular.js b/src/ui/public/chrome/api/angular.js
index 88af1b856b40..7ffae552c28c 100644
--- a/src/ui/public/chrome/api/angular.js
+++ b/src/ui/public/chrome/api/angular.js
@@ -21,7 +21,7 @@ module.exports = function (chrome, internals) {
.value('sessionId', Date.now())
.value('esUrl', (function () {
var a = document.createElement('a');
- a.href = '../elasticsearch';
+ a.href = chrome.addBasePath('/elasticsearch');
return a.href;
}()))
.directive('kbnChrome', function ($rootScope) {
diff --git a/src/ui/public/chrome/api/nav.js b/src/ui/public/chrome/api/nav.js
index d82522662458..329001091151 100644
--- a/src/ui/public/chrome/api/nav.js
+++ b/src/ui/public/chrome/api/nav.js
@@ -1,6 +1,7 @@
-module.exports = function (chrome, internals) {
- const { startsWith } = require('lodash');
+const { startsWith, isString } = require('lodash');
+import { parse, format } from 'url';
+export default function (chrome, internals) {
chrome.getNavLinks = function () {
return internals.nav;
};
@@ -9,6 +10,30 @@ module.exports = function (chrome, internals) {
return internals.appUrlStore.getItem(`lastSubUrl:${url}`);
};
+ chrome.getBasePath = function () {
+ return internals.basePath || '';
+ };
+
+ chrome.addBasePath = function (url) {
+ var isUrl = url && isString(url);
+ if (!isUrl) return url;
+
+ var parsed = parse(url);
+ if (!parsed.host && parsed.pathname) {
+ if (parsed.pathname[0] === '/') {
+ parsed.pathname = chrome.getBasePath() + parsed.pathname;
+ }
+ }
+
+ return format({
+ protocol: parsed.protocol,
+ host: parsed.host,
+ pathname: parsed.pathname,
+ query: parsed.query,
+ hash: parsed.hash,
+ });
+ };
+
internals.trackPossibleSubUrl = function (url) {
for (const link of internals.nav) {
if (startsWith(url, link.url)) {
diff --git a/src/ui/public/chrome/chrome.js b/src/ui/public/chrome/chrome.js
index e331e477ef15..eeed8a62ac73 100644
--- a/src/ui/public/chrome/chrome.js
+++ b/src/ui/public/chrome/chrome.js
@@ -14,6 +14,7 @@ var chrome = {};
var internals = _.defaults(
_.cloneDeep(metadata),
{
+ basePath: '',
rootController: null,
rootTemplate: null,
showAppsLink: null,
diff --git a/src/ui/public/directives/kbnHref.js b/src/ui/public/directives/kbnHref.js
new file mode 100644
index 000000000000..26b0b4252df7
--- /dev/null
+++ b/src/ui/public/directives/kbnHref.js
@@ -0,0 +1,23 @@
+import UiModules from 'ui/modules';
+import chrome from 'ui/chrome';
+import { words, camelCase, kebabCase } from 'lodash';
+
+export function kbnUrlDirective(name) {
+ const srcAttr = kebabCase(name);
+ const attr = kebabCase(words(name).slice(1));
+
+ UiModules
+ .get('kibana')
+ .directive(name, function (Private) {
+ return {
+ restrict: 'A',
+ link: function ($scope, $el, $attr) {
+ $attr.$observe(name, function (val) {
+ $attr.$set(attr, chrome.addBasePath(val));
+ });
+ }
+ };
+ });
+}
+
+kbnUrlDirective('kbnHref');
diff --git a/src/ui/public/directives/kbnSrc.js b/src/ui/public/directives/kbnSrc.js
new file mode 100644
index 000000000000..93bbe6f776a0
--- /dev/null
+++ b/src/ui/public/directives/kbnSrc.js
@@ -0,0 +1,3 @@
+import { kbnUrlDirective } from './kbnHref';
+
+kbnUrlDirective('kbnSrc');