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 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');