]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7494 Web: Reintroduce the web app context
authorStas Vilchik <vilchiks@gmail.com>
Tue, 29 Mar 2016 11:41:47 +0000 (13:41 +0200)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Thu, 31 Mar 2016 11:09:07 +0000 (13:09 +0200)
215 files changed:
server/sonar-web/src/main/js/api/ce.js
server/sonar-web/src/main/js/api/components.js
server/sonar-web/src/main/js/api/events.js
server/sonar-web/src/main/js/api/issue-filters.js
server/sonar-web/src/main/js/api/issues.js
server/sonar-web/src/main/js/api/languages.js
server/sonar-web/src/main/js/api/measure-filters.js
server/sonar-web/src/main/js/api/measures.js
server/sonar-web/src/main/js/api/metrics.js
server/sonar-web/src/main/js/api/nav.js
server/sonar-web/src/main/js/api/permissions.js
server/sonar-web/src/main/js/api/quality-gates.js
server/sonar-web/src/main/js/api/quality-profiles.js
server/sonar-web/src/main/js/api/system.js
server/sonar-web/src/main/js/api/time-machine.js
server/sonar-web/src/main/js/api/user-tokens.js
server/sonar-web/src/main/js/api/users.js
server/sonar-web/src/main/js/api/web-api.js
server/sonar-web/src/main/js/apps/account/app.js
server/sonar-web/src/main/js/apps/account/components/FavoriteIssueFilters.js
server/sonar-web/src/main/js/apps/account/components/FavoriteMeasureFilters.js
server/sonar-web/src/main/js/apps/account/components/IssueWidgets.js
server/sonar-web/src/main/js/apps/account/components/Nav.js
server/sonar-web/src/main/js/apps/account/components/Notifications.js
server/sonar-web/src/main/js/apps/background-tasks/components/TaskLogsLink.js
server/sonar-web/src/main/js/apps/coding-rules/app.js
server/sonar-web/src/main/js/apps/coding-rules/bulk-change-modal-view.js
server/sonar-web/src/main/js/apps/coding-rules/controller.js
server/sonar-web/src/main/js/apps/coding-rules/facets/custom-values-facet.js
server/sonar-web/src/main/js/apps/coding-rules/facets/language-facet.js
server/sonar-web/src/main/js/apps/coding-rules/facets/repository-facet.js
server/sonar-web/src/main/js/apps/coding-rules/facets/tag-facet.js
server/sonar-web/src/main/js/apps/coding-rules/rule-details-view.js
server/sonar-web/src/main/js/apps/coding-rules/rule/custom-rule-creation-view.js
server/sonar-web/src/main/js/apps/coding-rules/rule/custom-rule-view.js
server/sonar-web/src/main/js/apps/coding-rules/rule/delete-rule-view.js
server/sonar-web/src/main/js/apps/coding-rules/rule/profile-activation-view.js
server/sonar-web/src/main/js/apps/coding-rules/rule/rule-description-view.js
server/sonar-web/src/main/js/apps/coding-rules/rule/rule-issues-view.js
server/sonar-web/src/main/js/apps/coding-rules/rule/rule-meta-view.js
server/sonar-web/src/main/js/apps/coding-rules/rule/rule-profile-view.js
server/sonar-web/src/main/js/apps/coding-rules/workspace-list-item-view.js
server/sonar-web/src/main/js/apps/custom-measures/custom-measure.js
server/sonar-web/src/main/js/apps/custom-measures/custom-measures.js
server/sonar-web/src/main/js/apps/global-permissions/groups-view.js
server/sonar-web/src/main/js/apps/global-permissions/main.js
server/sonar-web/src/main/js/apps/global-permissions/permission.js
server/sonar-web/src/main/js/apps/global-permissions/users-view.js
server/sonar-web/src/main/js/apps/groups/group.js
server/sonar-web/src/main/js/apps/groups/groups.js
server/sonar-web/src/main/js/apps/groups/users-view.js
server/sonar-web/src/main/js/apps/issues/controller.js
server/sonar-web/src/main/js/apps/issues/facets/assignee-facet.js
server/sonar-web/src/main/js/apps/issues/facets/author-facet.js
server/sonar-web/src/main/js/apps/issues/facets/language-facet.js
server/sonar-web/src/main/js/apps/issues/facets/project-facet.js
server/sonar-web/src/main/js/apps/issues/facets/reporter-facet.js
server/sonar-web/src/main/js/apps/issues/facets/rule-facet.js
server/sonar-web/src/main/js/apps/issues/facets/tag-facet.js
server/sonar-web/src/main/js/apps/issues/filters-view.js
server/sonar-web/src/main/js/apps/issues/models/filter.js
server/sonar-web/src/main/js/apps/issues/models/filters.js
server/sonar-web/src/main/js/apps/issues/models/issues.js
server/sonar-web/src/main/js/apps/issues/workspace-header-view.js
server/sonar-web/src/main/js/apps/maintenance/main-view.js
server/sonar-web/src/main/js/apps/metrics/app.js
server/sonar-web/src/main/js/apps/metrics/metric.js
server/sonar-web/src/main/js/apps/metrics/metrics.js
server/sonar-web/src/main/js/apps/overview/gate/gate-empty.js
server/sonar-web/src/main/js/apps/permission-templates/groups-view.js
server/sonar-web/src/main/js/apps/permission-templates/users-view.js
server/sonar-web/src/main/js/apps/project-permissions/app.js
server/sonar-web/src/main/js/apps/project-permissions/groups-view.js
server/sonar-web/src/main/js/apps/project-permissions/main.js
server/sonar-web/src/main/js/apps/project-permissions/users-view.js
server/sonar-web/src/main/js/apps/quality-gates/app.js
server/sonar-web/src/main/js/apps/quality-gates/views/gate-projects-view.js
server/sonar-web/src/main/js/apps/quality-profiles/actions-view.js
server/sonar-web/src/main/js/apps/quality-profiles/app.js
server/sonar-web/src/main/js/apps/quality-profiles/change-profile-parent-view.js
server/sonar-web/src/main/js/apps/quality-profiles/controller.js
server/sonar-web/src/main/js/apps/quality-profiles/copy-profile-view.js
server/sonar-web/src/main/js/apps/quality-profiles/delete-profile-view.js
server/sonar-web/src/main/js/apps/quality-profiles/profile-details-view.js
server/sonar-web/src/main/js/apps/quality-profiles/profile.js
server/sonar-web/src/main/js/apps/quality-profiles/profiles.js
server/sonar-web/src/main/js/apps/quality-profiles/rename-profile-view.js
server/sonar-web/src/main/js/apps/quality-profiles/restore-built-in-profiles-view.js
server/sonar-web/src/main/js/apps/system/main.js
server/sonar-web/src/main/js/apps/update-center/plugin.js
server/sonar-web/src/main/js/apps/update-center/plugins.js
server/sonar-web/src/main/js/apps/users/groups-view.js
server/sonar-web/src/main/js/apps/users/user.js
server/sonar-web/src/main/js/apps/users/users.js
server/sonar-web/src/main/js/components/common/templates/_markdown-tips.hbs
server/sonar-web/src/main/js/components/issue/collections/issues.js
server/sonar-web/src/main/js/components/issue/issue-view.js
server/sonar-web/src/main/js/components/issue/models/changelog.js
server/sonar-web/src/main/js/components/issue/models/issue.js
server/sonar-web/src/main/js/components/issue/views/assign-form-view.js
server/sonar-web/src/main/js/components/issue/views/comment-form-view.js
server/sonar-web/src/main/js/components/issue/views/tags-form-view.js
server/sonar-web/src/main/js/components/navigator/filters/ajax-select-filters.js
server/sonar-web/src/main/js/components/navigator/filters/favorite-filters.js
server/sonar-web/src/main/js/components/shared/favorite.js
server/sonar-web/src/main/js/components/shared/quality-gate-link.js
server/sonar-web/src/main/js/components/shared/quality-profile-link.js
server/sonar-web/src/main/js/components/source-viewer/header.js
server/sonar-web/src/main/js/components/source-viewer/main.js
server/sonar-web/src/main/js/components/source-viewer/measures-overlay.js
server/sonar-web/src/main/js/components/source-viewer/popups/line-actions-popup.js
server/sonar-web/src/main/js/components/workspace/main.js
server/sonar-web/src/main/js/helpers/handlebars/componentBrowsePermalink.js
server/sonar-web/src/main/js/helpers/handlebars/componentDashboardPermalink.js
server/sonar-web/src/main/js/helpers/handlebars/componentIssuesPermalink.js
server/sonar-web/src/main/js/helpers/handlebars/componentPermalink.js
server/sonar-web/src/main/js/helpers/handlebars/dashboardUrl.js
server/sonar-web/src/main/js/helpers/handlebars/exporterUrl.js
server/sonar-web/src/main/js/helpers/handlebars/isActiveLink.js
server/sonar-web/src/main/js/helpers/handlebars/issueFilterHomeLink.js
server/sonar-web/src/main/js/helpers/handlebars/issueFilterItemLink.js
server/sonar-web/src/main/js/helpers/handlebars/issueFilterTotalLink.js
server/sonar-web/src/main/js/helpers/handlebars/link.js
server/sonar-web/src/main/js/helpers/handlebars/profileUrl.js
server/sonar-web/src/main/js/helpers/handlebars/rulePermalink.js
server/sonar-web/src/main/js/helpers/l10n.js
server/sonar-web/src/main/js/helpers/urls.js
server/sonar-web/src/main/js/libs/application.js
server/sonar-web/src/main/js/main/nav/component/component-nav-breadcrumbs.js
server/sonar-web/src/main/js/main/nav/component/component-nav-menu.js
server/sonar-web/src/main/js/main/nav/component/component-nav-meta.js
server/sonar-web/src/main/js/main/nav/global/global-nav-branding.js
server/sonar-web/src/main/js/main/nav/global/global-nav-menu.js
server/sonar-web/src/main/js/main/nav/global/global-nav-user.js
server/sonar-web/src/main/js/main/nav/global/search-view.js
server/sonar-web/src/main/js/main/nav/links-mixin.js
server/sonar-web/src/main/js/widgets/issue-filter/widget.js
server/sonar-web/src/main/js/widgets/old/treemap.js
server/sonar-web/src/main/webapp/WEB-INF/app/controllers/account_controller.rb
server/sonar-web/src/main/webapp/WEB-INF/app/controllers/application_controller.rb
server/sonar-web/src/main/webapp/WEB-INF/app/helpers/application_helper.rb
server/sonar-web/src/main/webapp/WEB-INF/app/views/account/_change_password_form.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/account/_favorites.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/account/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/account/notifications.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/api_documentation/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/background_tasks/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/code/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/coding_rules/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/comparison/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/component/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/component_issues/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/component_measures/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/confirm/_confirm.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/custom_measures/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/dashboard/_widget_properties.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/dashboard/configure.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/dashboard/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/dashboard/no_dashboard.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/dashboards/_create_form.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/dashboards/_delete_form.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/dashboards/_edit_form.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/drilldown/issues.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/email_configuration/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/encryption_configuration/generate_secret_form.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/encryption_configuration/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/groups/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/_bulk_change_form.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/_filter_copy_form.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/_filter_edit_form.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/_filter_save_as_form.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/manage.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/search.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/_footer.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/_head.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/nonav.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/maintenance/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/markdown/help.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/measures/_copy_form.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/measures/_display_list.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/measures/_edit_form.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/measures/_favourites.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/measures/_save_as_form.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/measures/_search_header.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/measures/manage.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/measures/search.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/metrics/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/overview/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/permission_templates/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/profiles/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/project/_delete_form.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/project/background_tasks.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/project/deletion.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/project/profile.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/project/qualitygate.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/project/widgets/issues/_issues_list.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/project_roles/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/projects/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/quality_gates/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/roles/global.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/roles/projects.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/server_id_configuration/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/settings/_properties.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/setup/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/system/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/updatecenter/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/users/_edit_form.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/users/_select_group.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/users/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/view_projects/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/web_api/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/widget/index.html.erb
server/sonar-web/tests/helpers/urls-test.js
server/sonar-web/tests/jsdom-setup.js

index 3209ac3d0d768470959471f3098371154e6a8c24..e46eb236026668c1279a9fbec7cc0c2c309534d5 100644 (file)
@@ -21,22 +21,22 @@ import $ from 'jquery';
 import { getJSON, post } from '../helpers/request.js';
 
 export function getQueue (data) {
-  const url = '/api/ce/queue';
+  const url = window.baseUrl + '/api/ce/queue';
   return $.get(url, data);
 }
 
 export function getActivity (data) {
-  const url = '/api/ce/activity';
+  const url = window.baseUrl + '/api/ce/activity';
   return $.get(url, data);
 }
 
 export function getTask (id) {
-  const url = '/api/ce/task';
+  const url = window.baseUrl + '/api/ce/task';
   return getJSON(url, { id }).then(r => r.task);
 }
 
 export function cancelTask (id) {
-  const url = '/api/ce/cancel';
+  const url = window.baseUrl + '/api/ce/cancel';
   return post(url, { id }).then(
       getTask.bind(null, id),
       getTask.bind(null, id)
@@ -44,17 +44,17 @@ export function cancelTask (id) {
 }
 
 export function cancelAllTasks () {
-  const url = '/api/ce/cancel_all';
+  const url = window.baseUrl + '/api/ce/cancel_all';
   return post(url);
 }
 
 export function getTasksForComponent (componentId) {
-  const url = '/api/ce/component';
+  const url = window.baseUrl + '/api/ce/component';
   const data = { componentId };
   return new Promise(resolve => $.get(url, data).done(resolve));
 }
 
 export function getTypes () {
-  const url = '/api/ce/task_types';
+  const url = window.baseUrl + '/api/ce/task_types';
   return getJSON(url).then(r => r.taskTypes);
 }
index b77f6a684cecad365f1b83dd311dc13cff7d3d43..a4ce0bcaf55aa48bb45af93a4d47840ddff14a3c 100644 (file)
@@ -21,32 +21,32 @@ import { getJSON, postJSON, post } from '../helpers/request.js';
 
 
 export function getComponents (data) {
-  const url = '/api/components/search';
+  const url = window.baseUrl + '/api/components/search';
   return getJSON(url, data);
 }
 
 export function getProvisioned (data) {
-  const url = '/api/projects/provisioned';
+  const url = window.baseUrl + '/api/projects/provisioned';
   return getJSON(url, data);
 }
 
 export function getGhosts (data) {
-  const url = '/api/projects/ghosts';
+  const url = window.baseUrl + '/api/projects/ghosts';
   return getJSON(url, data);
 }
 
 export function deleteComponents (data) {
-  const url = '/api/projects/bulk_delete';
+  const url = window.baseUrl + '/api/projects/bulk_delete';
   return post(url, data);
 }
 
 export function createProject (data) {
-  const url = '/api/projects/create';
+  const url = window.baseUrl + '/api/projects/create';
   return postJSON(url, data);
 }
 
 export function getComponentTree (strategy, componentKey, metrics = [], additional = {}) {
-  const url = '/api/measures/component_tree';
+  const url = window.baseUrl + '/api/measures/component_tree';
   const data = Object.assign({}, additional, {
     baseComponentKey: componentKey,
     metricKeys: metrics.join(','),
@@ -64,25 +64,25 @@ export function getComponentLeaves (componentKey, metrics, additional) {
 }
 
 export function getComponent (componentKey, metrics = []) {
-  const url = '/api/measures/component';
+  const url = window.baseUrl + '/api/measures/component';
   const data = { componentKey, metricKeys: metrics.join(',') };
   return getJSON(url, data).then(r => r.component);
 }
 
 export function getTree (baseComponentKey, options = {}) {
-  const url = '/api/components/tree';
+  const url = window.baseUrl + '/api/components/tree';
   const data = Object.assign({}, options, { baseComponentKey });
   return getJSON(url, data);
 }
 
 export function getParents ({ id, key }) {
-  const url = '/api/components/show';
+  const url = window.baseUrl + '/api/components/show';
   const data = id ? { id } : { key };
   return getJSON(url, data).then(r => r.ancestors);
 }
 
 export function getBreadcrumbs ({ id, key }) {
-  const url = '/api/components/show';
+  const url = window.baseUrl + '/api/components/show';
   const data = id ? { id } : { key };
   return getJSON(url, data).then(r => {
     const reversedAncestors = [...r.ancestors].reverse();
@@ -91,7 +91,7 @@ export function getBreadcrumbs ({ id, key }) {
 }
 
 export function getProjectsWithInternalId (query) {
-  const url = '/api/resources/search';
+  const url = window.baseUrl + '/api/resources/search';
   const data = {
     f: 's2',
     q: 'TRK',
index 8922faa2021b2276b4842153704859ab83e2de6e..1a4b0bdb473013e99425474c1d6de92ed7898402 100644 (file)
@@ -27,7 +27,7 @@ import { getJSON } from '../helpers/request.js';
  * @returns {Promise}
  */
 export function getEvents (componentKey, categories) {
-  const url = '/api/events';
+  const url = window.baseUrl + '/api/events';
   const data = { resource: componentKey };
   if (categories) {
     data.categories = categories;
index f2bd4226eab5f470a27da64153d1e913034e3093..1e8c872dc7d8897f61d5e2dbec40398c4fd455eb 100644 (file)
@@ -20,7 +20,7 @@
 import { post } from '../helpers/request.js';
 
 export function toggleIssueFilter (id) {
-  const url = '/issues/toggle_fav';
+  const url = window.baseUrl + '/issues/toggle_fav';
   const data = { id };
   return post(url, data);
 }
index 89486fcd1b425530fabf94cc0e6c5289f69ffdc5..7e2a70ad4407f76d9c872c0ee562c794c7fd7f78 100644 (file)
@@ -23,7 +23,7 @@ import { getJSON } from '../helpers/request.js';
 
 
 export function getFacets (query, facets) {
-  const url = '/api/issues/search';
+  const url = window.baseUrl + '/api/issues/search';
   const data = _.extend({}, query, { facets: facets.join(), ps: 1, additionalFields: '_all' });
   return getJSON(url, data).then(r => {
     return { facets: r.facets, response: r };
@@ -62,7 +62,7 @@ export function getAssignees (query) {
 
 
 export function getIssuesCount (query) {
-  const url = '/api/issues/search';
+  const url = window.baseUrl + '/api/issues/search';
   const data = _.extend({}, query, { ps: 1, facetMode: 'debt' });
   return getJSON(url, data).then(r => {
     return { issues: r.total, debt: r.debtTotal };
@@ -70,6 +70,6 @@ export function getIssuesCount (query) {
 }
 
 export function getIssueFilters () {
-  const url = '/api/issue_filters/search';
+  const url = window.baseUrl + '/api/issue_filters/search';
   return getJSON(url).then(r => r.issueFilters);
 }
index 4b3a00b764d9e9d9745a2ef6d3179c1726cc1dad..e1176b8527bf89b36e6f8dcd87dde4439d672e7b 100644 (file)
@@ -20,6 +20,6 @@
 import { getJSON } from '../helpers/request.js';
 
 export function getLanguages () {
-  const url = '/api/languages/list';
+  const url = window.baseUrl + '/api/languages/list';
   return getJSON(url).then(r => r.languages);
 }
index ed64ba09db766d04c41e8af26c57bea336614ad6..67699863d9addf81e93a141efd2891e06e2600ff 100644 (file)
@@ -20,7 +20,7 @@
 import { post } from '../helpers/request.js';
 
 export function toggleMeasureFilter (id) {
-  const url = '/measures/toggle_fav';
+  const url = window.baseUrl + '/measures/toggle_fav';
   const data = { id };
   return post(url, data);
 }
index 4676b338b53789dc441b4e4989e2d3168785dd6a..1ebc1e3e22528e629e3aa1bb5f5da49feb862993 100644 (file)
@@ -21,13 +21,13 @@ import { getJSON } from '../helpers/request.js';
 
 
 export function getMeasures (componentKey, metrics) {
-  const url = '/api/measures/component';
+  const url = window.baseUrl + '/api/measures/component';
   const data = { componentKey, metricKeys: metrics.join(',') };
   return getJSON(url, data).then(r => r.component.measures);
 }
 
 export function getMeasuresAndMeta (componentKey, metrics, additional = {}) {
-  const url = '/api/measures/component';
+  const url = window.baseUrl + '/api/measures/component';
   const data = Object.assign({}, additional, {
     componentKey,
     metricKeys: metrics.join(',')
index 45f2500288c61b780401d3d10cc8a2d2760a4345..51118918c0032d0d483d85eb2df3618c052f8326 100644 (file)
@@ -20,7 +20,7 @@
 import { getJSON } from '../helpers/request.js';
 
 export function getMetrics () {
-  const url = '/api/metrics/search';
+  const url = window.baseUrl + '/api/metrics/search';
   const data = { ps: 9999 };
   return getJSON(url, data).then(r => r.metrics);
 }
index 424c0a6853661ba6197d9ac3e7b1d577931aa29f..1aeafc17a6f388a50b67d8a115862ce0d775ee5e 100644 (file)
 import { getJSON } from '../helpers/request.js';
 
 export function getGlobalNavigation () {
-  const url = '/api/navigation/global';
+  const url = window.baseUrl + '/api/navigation/global';
   return getJSON(url);
 }
 
 export function getComponentNavigation (componentKey) {
-  const url = '/api/navigation/component';
+  const url = window.baseUrl + '/api/navigation/component';
   const data = { componentKey };
   return getJSON(url, data);
 }
 
 export function getSettingsNavigation () {
-  const url = '/api/navigation/settings';
+  const url = window.baseUrl + '/api/navigation/settings';
   return getJSON(url);
 }
index 4eed0a0deea67c71c722801b4673fae7964e859f..533120e4df8b518f7823591944990451e463a903 100644 (file)
@@ -30,7 +30,7 @@ function typeError (method, message) {
 
 
 export function getUsers (data) {
-  const url = '/api/permissions/users';
+  const url = window.baseUrl + '/api/permissions/users';
   return request({ type: 'GET', url, data });
 }
 
@@ -43,7 +43,7 @@ export function grantToUser (permission, user, project) {
     return typeError('grantToUser', 'please provide user login');
   }
 
-  const url = '/api/permissions/add_user';
+  const url = window.baseUrl + '/api/permissions/add_user';
   const data = { permission, login: user };
   if (project) {
     data.projectId = project;
@@ -60,7 +60,7 @@ export function revokeFromUser (permission, user, project) {
     return typeError('revokeFromUser', 'please provide user login');
   }
 
-  const url = '/api/permissions/remove_user';
+  const url = window.baseUrl + '/api/permissions/remove_user';
   const data = { permission, login: user };
   if (project) {
     data.projectId = project;
@@ -70,7 +70,7 @@ export function revokeFromUser (permission, user, project) {
 
 
 export function getGroups (data) {
-  const url = '/api/permissions/groups';
+  const url = window.baseUrl + '/api/permissions/groups';
   return request({ type: 'GET', url, data });
 }
 
@@ -83,7 +83,7 @@ export function grantToGroup (permission, group, project) {
     return typeError('grantToGroup', 'please provide group name');
   }
 
-  const url = '/api/permissions/add_group';
+  const url = window.baseUrl + '/api/permissions/add_group';
   const data = { permission, groupName: group };
   if (project) {
     data.projectId = project;
@@ -100,7 +100,7 @@ export function revokeFromGroup (permission, group, project) {
     return typeError('revokeFromGroup', 'please provide group name');
   }
 
-  const url = '/api/permissions/remove_group';
+  const url = window.baseUrl + '/api/permissions/remove_group';
   const data = { permission, groupName: group };
   if (project) {
     data.projectId = project;
@@ -110,7 +110,7 @@ export function revokeFromGroup (permission, group, project) {
 
 
 export function getPermissionTemplates (query) {
-  const url = '/api/permissions/search_templates';
+  const url = window.baseUrl + '/api/permissions/search_templates';
   const data = { };
   if (query) {
     data.q = query;
@@ -120,18 +120,18 @@ export function getPermissionTemplates (query) {
 
 
 export function createPermissionTemplate (options) {
-  const url = '/api/permissions/create_template';
+  const url = window.baseUrl + '/api/permissions/create_template';
   return request(_.extend({ type: 'POST', url }, options));
 }
 
 export function updatePermissionTemplate (options) {
-  const url = '/api/permissions/update_template';
+  const url = window.baseUrl + '/api/permissions/update_template';
   return request(_.extend({ type: 'POST', url }, options));
 }
 
 
 export function deletePermissionTemplate (options) {
-  const url = '/api/permissions/delete_template';
+  const url = window.baseUrl + '/api/permissions/delete_template';
   return request(_.extend({ type: 'POST', url }, options));
 }
 
@@ -141,13 +141,13 @@ export function setDefaultPermissionTemplate (template, qualifier) {
     return typeError('setDefaultPermissionTemplate', 'please provide permission template ID');
   }
 
-  const url = '/api/permissions/set_default_template';
+  const url = window.baseUrl + '/api/permissions/set_default_template';
   const data = { templateId: template, qualifier };
   return request({ type: 'POST', url, data });
 }
 
 
 export function applyTemplateToProject(options) {
-  const url = '/api/permissions/apply_template';
+  const url = window.baseUrl + '/api/permissions/apply_template';
   return request(_.extend({ type: 'POST', url }, options));
 }
index a32b0295d1dbde84eec9a65ab770db3e0d2eb944..e6567a918c128af1139a0569a1cf6e531a1515cc 100644 (file)
 import { getJSON, post, postJSON } from '../helpers/request';
 
 export function fetchQualityGatesAppDetails () {
-  const url = '/api/qualitygates/app';
+  const url = window.baseUrl + '/api/qualitygates/app';
 
   return getJSON(url);
 }
 
 export function fetchQualityGates () {
-  const url = '/api/qualitygates/list';
+  const url = window.baseUrl + '/api/qualitygates/list';
 
   return getJSON(url).then(r => r.qualitygates.map(qualityGate => {
     return {
@@ -37,51 +37,51 @@ export function fetchQualityGates () {
 }
 
 export function fetchQualityGate (id) {
-  const url = '/api/qualitygates/show';
+  const url = window.baseUrl + '/api/qualitygates/show';
   return getJSON(url, { id });
 }
 
 export function createQualityGate (name) {
-  const url = '/api/qualitygates/create';
+  const url = window.baseUrl + '/api/qualitygates/create';
   return postJSON(url, { name });
 }
 
 export function deleteQualityGate (id) {
-  const url = '/api/qualitygates/destroy';
+  const url = window.baseUrl + '/api/qualitygates/destroy';
   return post(url, { id });
 }
 
 export function renameQualityGate (id, name) {
-  const url = '/api/qualitygates/rename';
+  const url = window.baseUrl + '/api/qualitygates/rename';
   return post(url, { id, name });
 }
 
 export function copyQualityGate (id, name) {
-  const url = '/api/qualitygates/copy';
+  const url = window.baseUrl + '/api/qualitygates/copy';
   return postJSON(url, { id, name });
 }
 
 export function setQualityGateAsDefault (id) {
-  const url = '/api/qualitygates/set_as_default';
+  const url = window.baseUrl + '/api/qualitygates/set_as_default';
   return post(url, { id });
 }
 
 export function unsetQualityGateAsDefault (id) {
-  const url = '/api/qualitygates/unset_default';
+  const url = window.baseUrl + '/api/qualitygates/unset_default';
   return post(url, { id });
 }
 
 export function createCondition (gateId, condition) {
-  const url = '/api/qualitygates/create_condition';
+  const url = window.baseUrl + '/api/qualitygates/create_condition';
   return postJSON(url, { ...condition, gateId });
 }
 
 export function updateCondition (condition) {
-  const url = '/api/qualitygates/update_condition';
+  const url = window.baseUrl + '/api/qualitygates/update_condition';
   return postJSON(url, { ...condition });
 }
 
 export function deleteCondition (id) {
-  const url = '/api/qualitygates/delete_condition';
+  const url = window.baseUrl + '/api/qualitygates/delete_condition';
   return post(url, { id });
 }
index 3daf1e6f8f4af59dd2612fa281f00deaf11a2061..69ceca5bb50ee67b2fb1abc6a9746b315bbce454 100644 (file)
@@ -20,7 +20,7 @@
 import { checkStatus, parseJSON } from '../helpers/request';
 
 export function createQualityProfile (data) {
-  const url = '/api/qualityprofiles/create';
+  const url = window.baseUrl + '/api/qualityprofiles/create';
   const options = {
     method: 'post',
     credentials: 'same-origin',
index 13efcd502ccd11c3582a5fa0035ffe85e86c6212..25b52880f9beedbb1fe06db4fe0698efa0492a9d 100644 (file)
 import { getJSON, post } from '../helpers/request';
 
 export function setLogLevel (level) {
-  const url = '/api/system/change_log_level';
+  const url = window.baseUrl + '/api/system/change_log_level';
   const data = { level };
   return post(url, data);
 }
 
 export function getSystemInfo () {
-  const url = '/api/system/info';
+  const url = window.baseUrl + '/api/system/info';
   return getJSON(url);
 }
 
 export function getStatus () {
-  const url = '/api/system/status';
+  const url = window.baseUrl + '/api/system/status';
   return getJSON(url);
 }
 
 export function restart () {
-  const url = '/api/system/restart';
+  const url = window.baseUrl + '/api/system/restart';
   return post(url);
 }
 
index adf44fdbcac1e278f96151e5093f1e8303b3718f..76af59dfb84d21f5ca0e88707f841463773da6ed 100644 (file)
@@ -20,7 +20,7 @@
 import { getJSON } from '../helpers/request.js';
 
 export function getTimeMachineData (componentKey, metrics) {
-  const url = '/api/timemachine/index';
+  const url = window.baseUrl + '/api/timemachine/index';
   const data = { resource: componentKey, metrics };
   return getJSON(url, data);
 }
index e0d46231eaeb46196008ea7e8002e2567af17299..218da22f2fe2f99ea885e20b395ee6873a2f2d9e 100644 (file)
@@ -26,7 +26,7 @@ import { getJSON, postJSON, post } from '../helpers/request.js';
  * @returns {Promise}
  */
 export function getTokens (login) {
-  const url = '/api/user_tokens/search';
+  const url = window.baseUrl + '/api/user_tokens/search';
   const data = { login };
   return getJSON(url, data).then(r => r.userTokens);
 }
@@ -39,7 +39,7 @@ export function getTokens (login) {
  * @returns {Promise}
  */
 export function generateToken(userLogin, tokenName) {
-  const url = '/api/user_tokens/generate';
+  const url = window.baseUrl + '/api/user_tokens/generate';
   const data = { login: userLogin, name: tokenName };
   return postJSON(url, data);
 }
@@ -52,7 +52,7 @@ export function generateToken(userLogin, tokenName) {
  * @returns {Promise}
  */
 export function revokeToken(userLogin, tokenName) {
-  const url = '/api/user_tokens/revoke';
+  const url = window.baseUrl + '/api/user_tokens/revoke';
   const data = { login: userLogin, name: tokenName };
   return post(url, data);
 }
index 6c00ea849455905098ce1e47db65b572ac240a24..0be56fada046d734519b8cea513415e09d35cd32 100644 (file)
 import { getJSON, post } from '../helpers/request.js';
 
 export function getCurrentUser () {
-  const url = '/api/users/current';
+  const url = window.baseUrl + '/api/users/current';
   return getJSON(url);
 }
 
 export function changePassword (login, password, previousPassword) {
-  const url = '/api/users/change_password';
+  const url = window.baseUrl + '/api/users/change_password';
   const data = { login, password };
 
   if (previousPassword != null) {
index d7c2c734df34ce3fe1fe7f17cd43d268b9cb328d..a790121e2d8da0af9da46f4f082049121124a799 100644 (file)
@@ -20,7 +20,7 @@
 import { getJSON } from '../helpers/request';
 
 export function fetchWebApi (showInternal = true) {
-  const url = '/api/webservices/list';
+  const url = window.baseUrl + '/api/webservices/list';
   const data = { 'include_internals': showInternal };
 
   return getJSON(url, data).then(r => r.webServices.map(domain => {
@@ -31,7 +31,7 @@ export function fetchWebApi (showInternal = true) {
 }
 
 export function fetchResponseExample (domain, action) {
-  const url = '/api/webservices/response_example';
+  const url = window.baseUrl + '/api/webservices/response_example';
   const data = { controller: domain, action };
 
   return getJSON(url, data);
index 4494c4d3d65f17c04e55e2acb5f947e132a71f88..e4643b9349cba834a271d4770d4fbbbf6e6e02b1 100644 (file)
@@ -36,7 +36,7 @@ window.sonarqube.appStarted.then(options => {
   const el = document.querySelector(options.el);
 
   const history = useRouterHistory(createHistory)({
-    basename: '/account'
+    basename: window.baseUrl + '/account'
   });
 
   const store = configureStore();
index af3baa5d0ddb4d2b6dd3e7fbd72df0b647a680fb..3eb59fcc0761a037b561e52827103cfdee78c44d 100644 (file)
@@ -42,7 +42,7 @@ const FavoriteIssueFilters = ({ issueFilters }) => (
                   <FavoriteIssueFilter filter={f} favorite={true}/>
                 </td>
                 <td>
-                  <a href={`/issues/search#id=${f.id}`}>
+                  <a href={`${window.baseUrl}/issues/search#id=${f.id}`}>
                     {f.name}
                   </a>
                 </td>
@@ -52,7 +52,7 @@ const FavoriteIssueFilters = ({ issueFilters }) => (
       </table>
 
       <div className="spacer-top small">
-        <a href="/issues/manage">{translate('see_all')}</a>
+        <a href={`${window.baseUrl}/issues/manage`}>{translate('see_all')}</a>
       </div>
 
     </section>
index 4bf9b26e79ab2bbe45783daf666c5e7cd583d0da..c9998d0eaca4837e863371e2c1aaac40d0e9b33b 100644 (file)
@@ -42,7 +42,7 @@ const FavoriteMeasureFilters = ({ measureFilters }) => (
                   <FavoriteMeasureFilter filter={f} favorite={true}/>
                 </td>
                 <td>
-                  <a href={`/measures/filter/${f.id}`}>
+                  <a href={`${window.baseUrl}/measures/filter/${f.id}`}>
                     {f.name}
                   </a>
                 </td>
@@ -52,7 +52,7 @@ const FavoriteMeasureFilters = ({ measureFilters }) => (
       </table>
 
       <div className="spacer-top small">
-        <a href="/measures/manage">{translate('see_all')}</a>
+        <a href={`${window.baseUrl}/measures/manage`}>{translate('see_all')}</a>
       </div>
 
     </section>
index a59d59a5585410ae3c59eebffffb5c4a8cec99e7..673089bab6a183acfe5629b2b6eab88a8ce2628d 100644 (file)
@@ -32,27 +32,27 @@ const BASE_QUERY = { resolved: false, assignees: '__me__' };
 
 
 function getTotalUrl () {
-  return '/account/issues#resolved=false';
+  return window.baseUrl + '/account/issues#resolved=false';
 }
 
 function getToFixUrl () {
-  return '/account/issues#resolved=false|statuses=CONFIRMED';
+  return window.baseUrl + '/account/issues#resolved=false|statuses=CONFIRMED';
 }
 
 function getToReviewUrl () {
-  return '/account/issues#resolved=false|statuses=' + encodeURIComponent('OPEN,REOPENED');
+  return window.baseUrl + '/account/issues#resolved=false|statuses=' + encodeURIComponent('OPEN,REOPENED');
 }
 
 function getSeverityUrl (severity) {
-  return '/account/issues#resolved=false|severities=' + severity;
+  return window.baseUrl + '/account/issues#resolved=false|severities=' + severity;
 }
 
 function getProjectUrl (project) {
-  return '/account/issues#resolved=false|projectUuids=' + project;
+  return window.baseUrl + '/account/issues#resolved=false|projectUuids=' + project;
 }
 
 function getPeriodUrl (createdAfter, createdBefore) {
-  return `/account/issues#resolved=false|createdAfter=${createdAfter}|createdBefore=${createdBefore}`;
+  return window.baseUrl + `/account/issues#resolved=false|createdAfter=${createdAfter}|createdBefore=${createdBefore}`;
 }
 
 
index de266f2b5da19fd3be52ccf052b821b8a6cf7ef4..a1fe74bfc0dcb89236ee309268ed59c19c2fb23c 100644 (file)
@@ -36,8 +36,8 @@ const Nav = ({ user }) => (
           </li>
           <li>
             <a
-                className={window.location.pathname === '/account/issues' && 'active'}
-                href="/account/issues">
+                className={window.location.pathname === `${window.baseUrl}/account/issues` && 'active'}
+                href={`${window.baseUrl}/account/issues`}>
               {translate('issues.page')}
             </a>
           </li>
index 5c1e5d020f66269aee3e111fa12adc2cc4d45641..8eb4e437afbd484174ca8ee3ec79871816f39fe6 100644 (file)
@@ -31,7 +31,7 @@ export default function Notifications ({ globalNotifications, projectNotificatio
         <p className="big-spacer-bottom">
           {translate('notification.dispatcher.information')}
         </p>
-        <form id="notif_form" method="post" action="/account/update_notifications">
+        <form id="notif_form" method="post" action={`${window.baseUrl}/account/update_notifications`}>
           <div className="columns columns-overflow-visible">
             <div className="column-half">
               <GlobalNotifications
index 1954e26d52fc70cf9f946bc5492d7929647fd6ae..2f5893e8bedab182b52eb3d7d1dde1abcc1377f5 100644 (file)
@@ -21,7 +21,7 @@ import React from 'react';
 import { translate } from '../../../helpers/l10n';
 
 export default function TaskLogsLink ({ task }) {
-  const url = `/api/ce/logs?taskId=${task.id}`;
+  const url = `${window.baseUrl}/api/ce/logs?taskId=${task.id}`;
 
   return (
       <a
index 813d04b1af66c8a138936de4c28a4bcba7d10b69..ea4adc1cf3f0f0bd751d8956425a83319ca36319 100644 (file)
@@ -77,7 +77,7 @@ const init = function () {
   Backbone.history.start();
 };
 
-const appXHR = $.get('/api/rules/app').done(function (r) {
+const appXHR = $.get(window.baseUrl + '/api/rules/app').done(function (r) {
   App.canWrite = r.canWrite;
   App.qualityProfiles = _.sortBy(r.qualityprofiles, ['name', 'lang']);
   App.languages = _.extend(r.languages, {
index f998e58012f00fa7c3b3ce34efdd81ef7410ba14..196b11e8d102506f27df928d5180a6c6f99f97a4 100644 (file)
@@ -59,7 +59,7 @@ export default ModalFormView.extend({
 
   onFormSubmit () {
     ModalFormView.prototype.onFormSubmit.apply(this, arguments);
-    const url = `/api/qualityprofiles/${this.options.action}_rules`;
+    const url = `${window.baseUrl}/api/qualityprofiles/${this.options.action}_rules`;
     const options = _.extend({}, this.options.app.state.get('query'), { wsAction: this.options.action });
     const profiles = this.$('#coding-rules-bulk-change-profile').val() || [this.options.param];
     this.ui.messagesContainer.empty();
index 3cfad3f2f3c9f37dd3f66de342df9f40d9204475..c872a21227d214a383a057220e52432ecde36003 100644 (file)
@@ -60,7 +60,7 @@ export default Controller.extend({
     this.hideDetails(firstPage);
 
     const that = this;
-    const url = '/api/rules/search';
+    const url = window.baseUrl + '/api/rules/search';
     const options = _.extend(this._searchParameters(), this.app.state.get('query'));
     return $.get(url, options).done(function (r) {
       const rules = that.app.list.parseRules(r);
@@ -92,7 +92,7 @@ export default Controller.extend({
   },
 
   requestFacet (id) {
-    const url = '/api/rules/search';
+    const url = window.baseUrl + '/api/rules/search';
     const facet = this.app.facets.get(id);
     const options = _.extend({ facets: id, ps: 1 }, this.app.state.get('query'));
     return $.get(url, options).done(function (r) {
@@ -112,7 +112,7 @@ export default Controller.extend({
 
   getRuleDetails (rule) {
     const that = this;
-    const url = '/api/rules/show';
+    const url = window.baseUrl + '/api/rules/show';
     const options = {
       key: rule.id,
       actives: true
index 5902c89ee78d747c9dc5c5b2c1c649563ef21126..881625aa5b0030ebcfa09592ce2d249b3cff44c4 100644 (file)
@@ -32,7 +32,7 @@ export default BaseFacet.extend({
   },
 
   getUrl () {
-    return '';
+    return window.baseUrl;
   },
 
   onRender () {
index 05c268aeb0907168d40fa19fec0ace323ed66625..9af9562fff778919b574b9f87aa4a8afafc83978 100644 (file)
@@ -23,7 +23,7 @@ import CustomValuesFacet from './custom-values-facet';
 export default CustomValuesFacet.extend({
 
   getUrl () {
-    return '/api/languages/list';
+    return window.baseUrl + '/api/languages/list';
   },
 
   prepareAjaxSearch () {
index 3c5fea1b300baacb305e5d297267655a04b5297c..76067f5b24ca2ef48a465a058adf0d8e3b3c1442 100644 (file)
@@ -23,7 +23,7 @@ import CustomValuesFacet from './custom-values-facet';
 export default CustomValuesFacet.extend({
 
   getUrl () {
-    return '/api/rules/repositories';
+    return window.baseUrl + '/api/rules/repositories';
   },
 
   prepareAjaxSearch () {
index 210a73a94342d7e2b85c38c3a9e72df1042859c5..b672b3af9ba7b2dbb3176c1e3895b4d43e2131e4 100644 (file)
@@ -22,7 +22,7 @@ import CustomValuesFacet from './custom-values-facet';
 export default CustomValuesFacet.extend({
 
   getUrl () {
-    return '/api/rules/tags';
+    return window.baseUrl + '/api/rules/tags';
   },
 
   prepareAjaxSearch () {
index dc4665ee3a5f0a1ffa04fbf554faab2fe48d5e30..5566f70945d8d396cc5707d4b2fcb3a6e465e2be 100644 (file)
@@ -95,7 +95,7 @@ export default Marionette.LayoutView.extend({
 
   fetchCustomRules () {
     const that = this;
-    const url = '/api/rules/search';
+    const url = window.baseUrl + '/api/rules/search';
     const options = {
       template_key: this.model.get('key'),
       f: 'name,severity,params'
index 853082f32343f11c35df57c48fc731a2d5b538dd..b9ebae4d1a29f9ada47ea28999fb76bad0cb190a 100644 (file)
@@ -154,7 +154,7 @@ export default ModalFormView.extend({
   sendRequest (action, options) {
     this.$('.alert').addClass('hidden');
     const that = this;
-    const url = '/api/rules/' + action;
+    const url = window.baseUrl + '/api/rules/' + action;
     return $.ajax({
       url,
       type: 'POST',
index 24a4854e98ff2366d966afb493537f07a9eef255..6e2907598f6960beeee860d84123713aa986d577 100644 (file)
@@ -49,7 +49,7 @@ export default Marionette.ItemView.extend({
     return _.extend(Marionette.ItemView.prototype.serializeData.apply(this, arguments), {
       canWrite: this.options.app.canWrite,
       templateRule: this.options.templateRule,
-      permalink: '/coding_rules/#rule_key=' + encodeURIComponent(this.model.id)
+      permalink: window.baseUrl + '/coding_rules/#rule_key=' + encodeURIComponent(this.model.id)
     });
   }
 });
index bfeff19b91f87380989e794b1808c140e9e50d4e..b0d344118f087ceeeeeeb95ab8b5099515a5e4c3 100644 (file)
@@ -28,7 +28,7 @@ export default ModalFormView.extend({
   onFormSubmit() {
     ModalFormView.prototype.onFormSubmit.apply(this, arguments);
 
-    const url = '/api/rules/delete';
+    const url = window.baseUrl + '/api/rules/delete';
     const options = { key: this.model.id };
     $.post(url, options).done(() => {
       this.destroy();
index 311fa010f5f585f458fc829d6b6b19169c0d4328..dce27670e4d4b4f46c83a81f39d4410498315e5d 100644 (file)
@@ -99,7 +99,7 @@ export default ModalForm.extend({
 
     return $.ajax({
       type: 'POST',
-      url: '/api/qualityprofiles/activate_rule',
+      url: window.baseUrl + '/api/qualityprofiles/activate_rule',
       data: {
         severity,
         profile_key: profileKey,
index 9c5c5df3bf86ed0ab40b8bc69964279d8d4418f8..49486712db81d28e8a4c159fe62ad3e51a3b0a37 100644 (file)
@@ -64,7 +64,7 @@ export default Marionette.ItemView.extend({
     this.ui.extendDescriptionForm.addClass('hidden');
     return $.ajax({
       type: 'POST',
-      url: '/api/rules/update',
+      url: window.baseUrl + '/api/rules/update',
       dataType: 'json',
       data: {
         key: this.model.get('key'),
index afd73aa695739840dc4cd0a16ab92745da153b88..db19ac674c0071c384394174d6f521641db63c6d 100644 (file)
@@ -36,7 +36,7 @@ export default Marionette.ItemView.extend({
 
   requestIssues () {
     const that = this;
-    const url = '/api/issues/search';
+    const url = window.baseUrl + '/api/issues/search';
     const options = {
       rules: this.model.id,
       resolved: false,
@@ -61,7 +61,7 @@ export default Marionette.ItemView.extend({
     return _.extend(Marionette.ItemView.prototype.serializeData.apply(this, arguments), {
       total: this.total,
       projects: this.projects,
-      baseSearchUrl: '/issues/search#resolved=false|rules=' + encodeURIComponent(this.model.id)
+      baseSearchUrl: window.baseUrl + '/issues/search#resolved=false|rules=' + encodeURIComponent(this.model.id)
     });
   }
 });
index a11699b561e3a51650dc2e10a653293e5b93d981..1a5e0507fe0550a71096d8ce3796f8a7162d1c4f 100644 (file)
@@ -57,7 +57,7 @@ export default Marionette.ItemView.extend(RuleFilterMixin).extend({
   },
 
   requestTags () {
-    const url = '/api/rules/tags';
+    const url = window.baseUrl + '/api/rules/tags';
     return $.get(url);
   },
 
@@ -90,7 +90,7 @@ export default Marionette.ItemView.extend(RuleFilterMixin).extend({
     const tags = this.ui.tagInput.val();
     return $.ajax({
       type: 'POST',
-      url: '/api/rules/update',
+      url: window.baseUrl + '/api/rules/update',
       data: {
         key: this.model.get('key'),
         tags
@@ -107,7 +107,7 @@ export default Marionette.ItemView.extend(RuleFilterMixin).extend({
     return _.extend(Marionette.ItemView.prototype.serializeData.apply(this, arguments), {
       canWrite: this.options.app.canWrite,
       allTags: _.union(this.model.get('sysTags'), this.model.get('tags')),
-      permalink: '/coding_rules#rule_key=' + encodeURIComponent(this.model.id)
+      permalink: window.baseUrl + '/coding_rules#rule_key=' + encodeURIComponent(this.model.id)
     });
   }
 });
index e30ed43fd773bd5ae431dd3286005dbde002dc87..a2dcd97965504ac503702da0c9d8b479bb9b557d 100644 (file)
@@ -75,7 +75,7 @@ export default Marionette.ItemView.extend({
       yesHandler () {
         return $.ajax({
           type: 'POST',
-          url: '/api/qualityprofiles/activate_rule',
+          url: window.baseUrl + '/api/qualityprofiles/activate_rule',
           data: {
             profile_key: that.model.get('qProfile'),
             rule_key: ruleKey,
@@ -97,7 +97,7 @@ export default Marionette.ItemView.extend({
       yesHandler () {
         return $.ajax({
           type: 'POST',
-          url: '/api/qualityprofiles/deactivate_rule',
+          url: window.baseUrl + '/api/qualityprofiles/deactivate_rule',
           data: {
             profile_key: that.model.get('qProfile'),
             rule_key: ruleKey
index 37bda32771b64905ac31f166f28e07877bbdc062..a965be731e39fa7eb070a5d07513a5033649ef51 100644 (file)
@@ -99,7 +99,7 @@ export default WorkspaceListItemView.extend(RuleFilterMixin).extend({
       yesHandler () {
         return $.ajax({
           type: 'POST',
-          url: '/api/qualityprofiles/deactivate_rule',
+          url: window.baseUrl + '/api/qualityprofiles/deactivate_rule',
           data: {
             profile_key: activation.qProfile,
             rule_key: ruleKey
index 64524614f642eefdfeef5522b958ab3b933f8fab..239b93c1ac8d1c32dc673f6ea47be405d9caceed 100644 (file)
@@ -24,7 +24,7 @@ export default Backbone.Model.extend({
   idAttribute: 'id',
 
   urlRoot () {
-    return '/api/custom_measures';
+    return window.baseUrl + '/api/custom_measures';
   },
 
   sync (method, model, options) {
index 7367c7fe437d0b9edf3820e741d7ef661e1cbc57..fe06cc39c2262ebb1e382e5664166aeb8479b8ce 100644 (file)
@@ -29,7 +29,7 @@ export default Backbone.Collection.extend({
   },
 
   url () {
-    return '/api/custom_measures/search';
+    return window.baseUrl + '/api/custom_measures/search';
   },
 
   parse (r) {
index eebc1249772b1ff36d412582f5a4b0120cffa786..f74b578f7722a9904c323f79d3630c4d01aa88f4 100644 (file)
@@ -22,7 +22,7 @@ import Template from './templates/global-permissions-groups.hbs';
 import '../../components/SelectList';
 
 function getSearchUrl (permission, project) {
-  let url = '/api/permissions/groups?ps=100&permission=' + permission;
+  let url = window.baseUrl + '/api/permissions/groups?ps=100&permission=' + permission;
   if (project) {
     url = url + '&projectId=' + project;
   }
@@ -52,8 +52,8 @@ export default Modal.extend({
       },
       queryParam: 'q',
       searchUrl: getSearchUrl(this.options.permission, this.options.project),
-      selectUrl: '/api/permissions/add_group',
-      deselectUrl: '/api/permissions/remove_group',
+      selectUrl: window.baseUrl + '/api/permissions/add_group',
+      deselectUrl: window.baseUrl + '/api/permissions/remove_group',
       extra: getExtra(this.options.permission, this.options.project),
       selectParameter: 'groupName',
       selectParameterValue: 'name',
index 3a468aef67da3c87fdc349892de01883712631b7..85571020b10be762fc6d80d4e3abc58b894473e6 100644 (file)
@@ -32,7 +32,7 @@ export default React.createClass({
   },
 
   requestPermissions() {
-    const url = '/api/permissions/search_global_permissions';
+    const url = window.baseUrl + '/api/permissions/search_global_permissions';
     $.get(url).done(r => {
       this.setState({ ready: true, permissions: r.permissions });
     });
index 7b6be54f3535c9f9b3f9f5fcba88f7a2d37686d6..456aa69befb03b6788642c929c8c30838c23999b 100644 (file)
@@ -40,7 +40,7 @@ export default React.createClass({
   },
 
   requestUsers() {
-    const url = '/api/permissions/users';
+    const url = window.baseUrl + '/api/permissions/users';
     let data = { permission: this.props.permission.key, ps: MAX_ITEMS };
     if (this.props.project) {
       data.projectId = this.props.project;
@@ -49,7 +49,7 @@ export default React.createClass({
   },
 
   requestGroups() {
-    const url = '/api/permissions/groups';
+    const url = window.baseUrl + '/api/permissions/groups';
     let data = { permission: this.props.permission.key, ps: MAX_ITEMS };
     if (this.props.project) {
       data.projectId = this.props.project;
index 10d152599c2c576af6393ca1b2c0ada6197bea2a..ba4789f1bcdd5ca8b88f234516cc14520a2862ca 100644 (file)
@@ -22,7 +22,7 @@ import Template from './templates/global-permissions-users.hbs';
 import '../../components/SelectList';
 
 function getSearchUrl (permission, project) {
-  let url = '/api/permissions/users?ps=100&permission=' + permission;
+  let url = window.baseUrl + '/api/permissions/users?ps=100&permission=' + permission;
   if (project) {
     url = url + '&projectId=' + project;
   }
@@ -52,8 +52,8 @@ export default Modal.extend({
       },
       queryParam: 'q',
       searchUrl: getSearchUrl(this.options.permission, this.options.project),
-      selectUrl: '/api/permissions/add_user',
-      deselectUrl: '/api/permissions/remove_user',
+      selectUrl: window.baseUrl + '/api/permissions/add_user',
+      deselectUrl: window.baseUrl + '/api/permissions/remove_user',
       extra: getExtra(this.options.permission, this.options.project),
       selectParameter: 'login',
       selectParameterValue: 'login',
index 9c80986eaa1a54bea6401c5cbc627331510d4f43..f1e9ff54f8884442afd1e09f8df93cb5d28dc414 100644 (file)
@@ -22,7 +22,7 @@ import Backbone from 'backbone';
 
 export default Backbone.Model.extend({
   urlRoot () {
-    return '/api/user_groups';
+    return window.baseUrl + '/api/user_groups';
   },
 
   sync (method, model, options) {
index e3e18d3bf487cab92f3a1f1af5e42d29febb8a9b..73c1886f081d9faf6e4a47d0acff9a69907c8950 100644 (file)
@@ -24,7 +24,7 @@ export default Backbone.Collection.extend({
   model: Group,
 
   url () {
-    return '/api/user_groups/search';
+    return window.baseUrl + '/api/user_groups/search';
   },
 
   parse (r) {
index 894b7f9a2068d366593cbf6d31f31404a847fc52..63615a330b3ffd5722c1c32a6f30d14db2761b6d 100644 (file)
@@ -35,9 +35,9 @@ export default Modal.extend({
         return `${item.name}<br><span class="note">${item.login}</span>`;
       },
       queryParam: 'q',
-      searchUrl: '/api/user_groups/users?ps=100&id=' + this.model.id,
-      selectUrl: '/api/user_groups/add_user',
-      deselectUrl: '/api/user_groups/remove_user',
+      searchUrl: window.baseUrl + '/api/user_groups/users?ps=100&id=' + this.model.id,
+      selectUrl: window.baseUrl + '/api/user_groups/add_user',
+      deselectUrl: window.baseUrl + '/api/user_groups/remove_user',
       extra: {
         id: this.model.id
       },
index bbca2009db9ee13c33c9451236cca7787029725c..d7326d71009739fa4a7673ebd1ad746ddaf34408 100644 (file)
@@ -70,7 +70,7 @@ export default Controller.extend({
     if (this.options.app.state.get('isContext')) {
       _.extend(data, this.options.app.state.get('contextQuery'));
     }
-    return $.get('/api/issues/search', data).done(function (r) {
+    return $.get(window.baseUrl + '/api/issues/search', data).done(function (r) {
       const issues = that.options.app.list.parseIssues(r);
       if (firstPage) {
         that.options.app.list.reset(issues);
@@ -108,7 +108,7 @@ export default Controller.extend({
     const that = this;
     return $.when(
         that.options.app.filters.fetch({ reset: true }),
-        $.get('/api/issue_filters/app', function (r) {
+        $.get(window.baseUrl + '/api/issue_filters/app', function (r) {
           that.options.app.state.set({
             canBulkChange: r.canBulkChange,
             canManageFilters: r.canManageFilters
@@ -132,7 +132,7 @@ export default Controller.extend({
     if (this.options.app.state.get('isContext')) {
       _.extend(data, this.options.app.state.get('contextQuery'));
     }
-    return $.get('/api/issues/search', data, function (r) {
+    return $.get(window.baseUrl + '/api/issues/search', data, function (r) {
       FACET_DATA_FIELDS.forEach(function (field) {
         that.options.app.facets[field] = that._mergeCollections(that.options.app.facets[field], r[field]);
       });
@@ -151,7 +151,7 @@ export default Controller.extend({
     if (this.options.app.state.get('isContext')) {
       _.extend(data, this.options.app.state.get('contextQuery'));
     }
-    return $.get('/api/issues/search', data, function (r) {
+    return $.get(window.baseUrl + '/api/issues/search', data, function (r) {
       FACET_DATA_FIELDS.forEach(function (field) {
         that.options.app.facets[field] = that._mergeCollections(that.options.app.facets[field], r[field]);
       });
index 0cfe969d2f496ca11624dfab4ce3594887c444dc..d1d2a27b5e3cb9e2d80f307f55ff4c58b4c1cf41 100644 (file)
@@ -26,7 +26,7 @@ export default CustomValuesFacet.extend({
   template: Template,
 
   getUrl () {
-    return '/api/users/search';
+    return window.baseUrl + '/api/users/search';
   },
 
   prepareAjaxSearch () {
index aec9e84f270cd79d979ba3cdd90e8dc80cab9370..448922fa23dcbc883c4214cd980852a04e29e8ee 100644 (file)
@@ -22,7 +22,7 @@ import { translate, translateWithParameters } from '../../../helpers/l10n';
 
 export default CustomValuesFacet.extend({
   getUrl () {
-    return '/api/issues/authors';
+    return window.baseUrl + '/api/issues/authors';
   },
 
   prepareSearch () {
index 2c1d2e0ba8fa9c800a8878b14488114f759eb393..38164faed8faa852da5461e9dabc8a6c9dfdacb5 100644 (file)
@@ -23,7 +23,7 @@ import { translate, translateWithParameters } from '../../../helpers/l10n';
 
 export default CustomValuesFacet.extend({
   getUrl () {
-    return '/api/languages/list';
+    return window.baseUrl + '/api/languages/list';
   },
 
   prepareSearch () {
index 50cc3e3531abf7845395cf3ae2cf9c24b690b5a1..5b1eaf2bfd0468bf1290ad17a59040651851c42b 100644 (file)
@@ -26,9 +26,9 @@ export default CustomValuesFacet.extend({
   getUrl () {
     const q = this.options.app.state.get('contextComponentQualifier');
     if (q === 'VW' || q === 'SVW') {
-      return '/api/components/search_view_components';
+      return window.baseUrl + '/api/components/search_view_components';
     } else {
-      return '/api/resources/search?f=s2&q=TRK&display_uuid=true';
+      return window.baseUrl + '/api/resources/search?f=s2&q=TRK&display_uuid=true';
     }
   },
 
index d043039b66ce960091eddc42290d97c87b48a0b9..d2f36ace1239e120f509e0b8673d686d94616941 100644 (file)
@@ -22,7 +22,7 @@ import CustomValuesFacet from './custom-values-facet';
 
 export default CustomValuesFacet.extend({
   getUrl () {
-    return '/api/users/search';
+    return window.baseUrl + '/api/users/search';
   },
 
   prepareAjaxSearch () {
index b0dd063d6ae83bf50cc38cbd18497c6bd993bb77..9cd5a7023855879648a377ed61402df7fa18e9a7 100644 (file)
@@ -23,7 +23,7 @@ import { translate, translateWithParameters } from '../../../helpers/l10n';
 
 export default CustomValuesFacet.extend({
   prepareSearch () {
-    let url = '/api/rules/search?f=name,langName';
+    let url = window.baseUrl + '/api/rules/search?f=name,langName';
     const languages = this.options.app.state.get('query').languages;
     if (languages != null) {
       url += '&languages=' + languages;
index e537955cebcc72feaa336b9b7f9a4eaf61cf25ce..1e41af86e4e65f74c8d19f3795357df6f97d97bb 100644 (file)
@@ -23,7 +23,7 @@ import { translate } from '../../../helpers/l10n';
 
 export default CustomValuesFacet.extend({
   prepareSearch () {
-    let url = '/api/issues/tags?ps=10';
+    let url = window.baseUrl + '/api/issues/tags?ps=10';
     const tags = this.options.app.state.get('query').tags;
     if (tags != null) {
       url += '&tags=' + tags;
index 303c567fe5a8efb90ef15f6407ed3420570979d0..810a060944d9ca8ed25fc87026e2ddbde3512e69 100644 (file)
@@ -75,26 +75,26 @@ export default Marionette.ItemView.extend({
 
   saveAs () {
     const query = this.options.app.controller.getQuery('&');
-    const url = '/issues/save_as_form?' + query;
+    const url = window.baseUrl + '/issues/save_as_form?' + query;
     window.openModalWindow(url, {});
   },
 
   save () {
     const that = this;
     const query = this.options.app.controller.getQuery('&');
-    const url = '/issues/save/' + (this.options.app.state.get('filter').id) + '?' + query;
+    const url = window.baseUrl + '/issues/save/' + (this.options.app.state.get('filter').id) + '?' + query;
     return $.post(url).done(function () {
       return that.options.app.state.set({ changed: false });
     });
   },
 
   copy () {
-    const url = '/issues/copy_form/' + (this.options.app.state.get('filter').id);
+    const url = window.baseUrl + '/issues/copy_form/' + (this.options.app.state.get('filter').id);
     window.openModalWindow(url, {});
   },
 
   edit () {
-    const url = '/issues/edit_form/' + (this.options.app.state.get('filter').id);
+    const url = window.baseUrl + '/issues/edit_form/' + (this.options.app.state.get('filter').id);
     window.openModalWindow(url, {});
   },
 
index 2110e307d4521b1a8a242f826fd9f05584135c35..23e1060a37aec5d8227d649d0afd136535ef212d 100644 (file)
@@ -21,7 +21,7 @@ import Backbone from 'backbone';
 
 export default Backbone.Model.extend({
   url () {
-    return '/api/issue_filters/show/' + this.id;
+    return window.baseUrl + '/api/issue_filters/show/' + this.id;
   },
 
   parse (r) {
index 479817bddfbcface3e2f81bc4224820fad9314d3..0aeff2969a5cdc415a2adf4f0fb318a2f9925776 100644 (file)
@@ -24,7 +24,7 @@ export default Backbone.Collection.extend({
   model: Filter,
 
   url () {
-    return '/api/issue_filters/search';
+    return window.baseUrl + '/api/issue_filters/search';
   },
 
   parse (r) {
index cf88e28729dd6510523fd714b9bee4ad870175d0..c8b94fca35d93c83c86df9890fe2d3cb38c5b8d4 100644 (file)
@@ -25,7 +25,7 @@ export default Backbone.Collection.extend({
   model: Issue,
 
   url () {
-    return '/api/issues/search';
+    return window.baseUrl + '/api/issues/search';
   },
 
   _injectRelational (issue, source, baseField, lookupField) {
index d6ba4728cb2c465f003e14c2a7745eaf54ca8d60..89ed4d1975faaa602cb0b85d3a132e98899f4c05 100644 (file)
@@ -105,7 +105,7 @@ export default WorkspaceHeaderView.extend({
 
   bulkChange () {
     const query = this.options.app.controller.getQuery('&', true);
-    const url = '/issues/bulk_change_form?' + query;
+    const url = window.baseUrl + '/issues/bulk_change_form?' + query;
     window.openModalWindow(url, {});
   },
 
@@ -113,7 +113,7 @@ export default WorkspaceHeaderView.extend({
     const selected = this.options.app.list.where({ selected: true });
     const selectedKeys = _.first(_.pluck(selected, 'id'), 200);
     const query = 'issues=' + selectedKeys.join();
-    const url = '/issues/bulk_change_form?' + query;
+    const url = window.baseUrl + '/issues/bulk_change_form?' + query;
     window.openModalWindow(url, {});
   },
 
index d083fdb7be49e4bbc04061c0942e6a49ce19c468..dd79b1fd73a641836528169f2d7ae1a2af38448f 100644 (file)
@@ -34,7 +34,7 @@ export default Marionette.ItemView.extend({
     const that = this;
     this.requestOptions = {
       type: 'GET',
-      url: '/api/system/' + (this.options.setup ? 'db_migration_status' : 'status')
+      url: window.baseUrl + '/api/system/' + (this.options.setup ? 'db_migration_status' : 'status')
     };
     this.pollingInternal = setInterval(function () {
       that.refresh();
@@ -62,7 +62,7 @@ export default Marionette.ItemView.extend({
   startMigration () {
     const that = this;
     Backbone.ajax({
-      url: '/api/system/migrate_db',
+      url: window.baseUrl + '/api/system/migrate_db',
       type: 'POST'
     }).done(function (r) {
       that.model.set(r);
@@ -76,7 +76,7 @@ export default Marionette.ItemView.extend({
 
   goHome () {
     setInterval(function () {
-      window.location = '/';
+      window.location = window.baseUrl + '/';
     }, 2500);
   },
 
index 6a569e9fd53cb44ae7db7ae4ad18a9e761c10b61..02222b06fe7abd48ea933db0a9a5a82188985935 100644 (file)
@@ -63,12 +63,12 @@ const init = function () {
 
 
 App.requestDomains = function () {
-  return $.get('/api/metrics/domains').done(function (r) {
+  return $.get(window.baseUrl + '/api/metrics/domains').done(function (r) {
     App.domains = r.domains;
   });
 };
 App.requestTypes = function () {
-  return $.get('/api/metrics/types').done(function (r) {
+  return $.get(window.baseUrl + '/api/metrics/types').done(function (r) {
     App.types = r.types;
   });
 };
index ee8bc9b473e430721339307a3d0135907452fb39..300f159680077b22009912db63fabe20994b77b5 100644 (file)
@@ -24,7 +24,7 @@ export default Backbone.Model.extend({
   idAttribute: 'id',
 
   urlRoot () {
-    return '/api/metrics';
+    return window.baseUrl + '/api/metrics';
   },
 
   sync (method, model, options) {
index 51e041ad120f3ef6f7bddb21dcbe3b66003d860a..59bff3f0b017de01cdfe1624274bfa5731c459cb 100644 (file)
@@ -25,7 +25,7 @@ export default Backbone.Collection.extend({
   model: Metric,
 
   url () {
-    return '/api/metrics/search';
+    return window.baseUrl + '/api/metrics/search';
   },
 
   parse (r) {
index fa339aca23c9e0adde3845ba2be140deae32383b..75aee6e61445df152093e64220da3166ae440e57 100644 (file)
@@ -22,7 +22,7 @@ import { translate } from '../../../helpers/l10n';
 
 export default React.createClass({
   render() {
-    const qualityGatesUrl = '/quality_gates';
+    const qualityGatesUrl = window.baseUrl + '/quality_gates';
 
     return (
         <div className="overview-gate">
index 3f05ffdc8eb6bb4898385679e142cc1fe1860ac9..9c8f359aedc49e2e872429b083b3971c263d9939 100644 (file)
@@ -23,7 +23,8 @@ import '../../components/SelectList';
 import Template from './templates/permission-templates-groups.hbs';
 
 function getSearchUrl (permission, permissionTemplate) {
-  return `/api/permissions/template_groups?ps=100&permission=${permission.key}&templateId=${permissionTemplate.id}`;
+  return window.baseUrl +
+      `/api/permissions/template_groups?ps=100&permission=${permission.key}&templateId=${permissionTemplate.id}`;
 }
 
 export default Modal.extend({
@@ -41,8 +42,8 @@ export default Modal.extend({
       },
       queryParam: 'q',
       searchUrl: getSearchUrl(this.options.permission, this.options.permissionTemplate),
-      selectUrl: '/api/permissions/add_group_to_template',
-      deselectUrl: '/api/permissions/remove_group_from_template',
+      selectUrl: window.baseUrl + '/api/permissions/add_group_to_template',
+      deselectUrl: window.baseUrl + '/api/permissions/remove_group_from_template',
       extra: {
         permission: this.options.permission.key,
         templateId: this.options.permissionTemplate.id
index 3e91656400aa5cc9747cd04dd14a7c04c40d7a2a..b14fbdef4647ec7331259b8500847db76c3c5a05 100644 (file)
@@ -27,8 +27,8 @@ export default Modal.extend({
 
   onRender () {
     Modal.prototype.onRender.apply(this, arguments);
-    const searchUrl = '/api/permissions/template_users?ps=100&permission=' + this.options.permission.key +
-        '&templateId=' + this.options.permissionTemplate.id;
+    const searchUrl = window.baseUrl + '/api/permissions/template_users?ps=100&permission=' +
+        this.options.permission.key + '&templateId=' + this.options.permissionTemplate.id;
     new window.SelectList({
       searchUrl,
       el: this.$('#permission-templates-users'),
@@ -39,8 +39,8 @@ export default Modal.extend({
         return `${item.name}<br><span class="note">${item.login}</span>`;
       },
       queryParam: 'q',
-      selectUrl: '/api/permissions/add_user_to_template',
-      deselectUrl: '/api/permissions/remove_user_from_template',
+      selectUrl: window.baseUrl + '/api/permissions/add_user_to_template',
+      deselectUrl: window.baseUrl + '/api/permissions/remove_user_from_template',
       extra: {
         permission: this.options.permission.key,
         templateId: this.options.permissionTemplate.id
index c4630bdd7444a103f5c2d089297abf48821f7b16..c90cd10cec15da71733e832027705b491e9f5686 100644 (file)
@@ -23,7 +23,7 @@ import ReactDOM from 'react-dom';
 import Main from './main';
 
 function requestPermissionTemplates () {
-  return $.get('/api/permissions/search_templates');
+  return $.get(window.baseUrl + '/api/permissions/search_templates');
 }
 
 window.sonarqube.appStarted.then(options => {
index a75fa8a8db23c12d77d2bffd4a9e5be44214257d..20fcec63f979c930629d6587c9ac3356bd14584e 100644 (file)
@@ -23,7 +23,7 @@ import '../../components/SelectList';
 import Template from './templates/project-permissions-groups.hbs';
 
 function getSearchUrl (permission, project) {
-  return `/api/permissions/groups?ps=100&permission=${permission}&projectId=${project}`;
+  return `${window.baseUrl}/api/permissions/groups?ps=100&permission=${permission}&projectId=${project}`;
 }
 
 export default Modal.extend({
@@ -41,8 +41,8 @@ export default Modal.extend({
       },
       queryParam: 'q',
       searchUrl: getSearchUrl(this.options.permission, this.options.project),
-      selectUrl: '/api/permissions/add_group',
-      deselectUrl: '/api/permissions/remove_group',
+      selectUrl: window.baseUrl + '/api/permissions/add_group',
+      deselectUrl: window.baseUrl + '/api/permissions/remove_group',
       extra: {
         permission: this.options.permission,
         projectId: this.options.project
index b3545d43eb8f7b7dab7040fe2d9df34e2c2a40ed..3b70c09939eb573f3e9ab7345ee194c8b56af9d6 100644 (file)
@@ -60,7 +60,7 @@ export default React.createClass({
   },
 
   requestPermissions(page = 1, query = '', filter = this.state.filter) {
-    let url = '/api/permissions/search_project_permissions';
+    let url = window.baseUrl + '/api/permissions/search_project_permissions';
     let data = { p: page, q: query };
     if (filter !== '__ALL__') {
       data.qualifier = filter;
index 217988359b51dec46e22ea160febf92488417f67..ff641cbc272d6906d920285c1b9bb61dfdc8c393 100644 (file)
@@ -27,7 +27,7 @@ export default Modal.extend({
 
   onRender () {
     Modal.prototype.onRender.apply(this, arguments);
-    const searchUrl = '/api/permissions/users?ps=100&permission=' + this.options.permission +
+    const searchUrl = window.baseUrl + '/api/permissions/users?ps=100&permission=' + this.options.permission +
         '&projectId=' + this.options.project;
     new window.SelectList({
       searchUrl,
@@ -39,8 +39,8 @@ export default Modal.extend({
         return `${item.name}<br><span class="note">${item.login}</span>`;
       },
       queryParam: 'q',
-      selectUrl: '/api/permissions/add_user',
-      deselectUrl: '/api/permissions/remove_user',
+      selectUrl: window.baseUrl + '/api/permissions/add_user',
+      deselectUrl: window.baseUrl + '/api/permissions/remove_user',
       extra: {
         permission: this.options.permission,
         projectId: this.options.project
index b34f8d97fd55bdef26bfe8da05f5d4faf775289a..ded4a821315021e04454de5ab163fe7e3b926648 100644 (file)
@@ -35,7 +35,7 @@ window.sonarqube.appStarted.then(options => {
   const el = document.querySelector(options.el);
 
   const history = useRouterHistory(createHistory)({
-    basename: '/quality_gates'
+    basename: window.baseUrl + '/quality_gates'
   });
 
   const finalReducer = combineReducers({
index 41d12eee7f7672325afeda144e258b86df154ba5..8c4cd9406a30dd089d03caede138a45a6c59b4c9 100644 (file)
@@ -38,9 +38,9 @@ export default Marionette.ItemView.extend({
       format (item) {
         return item.name;
       },
-      searchUrl: '/api/qualitygates/search?gateId=' + qualityGate.id,
-      selectUrl: '/api/qualitygates/select',
-      deselectUrl: '/api/qualitygates/deselect',
+      searchUrl: window.baseUrl + '/api/qualitygates/search?gateId=' + qualityGate.id,
+      selectUrl: window.baseUrl + '/api/qualitygates/select',
+      deselectUrl: window.baseUrl + '/api/qualitygates/deselect',
       extra: {
         gateId: qualityGate.id
       },
index 11d014ae1c1d3fbb063cc28d52fc751745d0291b..7cec542e58ae0d3fee37ce65576ac965bd3e6841 100644 (file)
@@ -83,7 +83,7 @@ export default Marionette.ItemView.extend({
 
   requestLanguages () {
     const that = this;
-    const url = '/api/languages/list';
+    const url = window.baseUrl + '/api/languages/list';
     return $.get(url).done(function (r) {
       that.languages = r.languages;
     });
@@ -91,7 +91,7 @@ export default Marionette.ItemView.extend({
 
   requestImporters () {
     const that = this;
-    const url = '/api/qualityprofiles/importers';
+    const url = window.baseUrl + '/api/qualityprofiles/importers';
     return $.get(url).done(function (r) {
       that.importers = r.importers;
     });
index db98ec75561627bf08efbd900aff7f69c1f90277..24881c7b7ef3495f1a2ea9a363bf33cac14bd2ec 100644 (file)
@@ -28,10 +28,10 @@ import ActionsView from './actions-view';
 import ProfilesView from './profiles-view';
 
 const App = new Marionette.Application();
-const requestUser = $.get('/api/users/current').done(function (r) {
+const requestUser = $.get(window.baseUrl + '/api/users/current').done(function (r) {
   App.canWrite = r.permissions.global.indexOf('profileadmin') !== -1;
 });
-const requestExporters = $.get('/api/qualityprofiles/exporters').done(function (r) {
+const requestExporters = $.get(window.baseUrl + '/api/qualityprofiles/exporters').done(function (r) {
   App.exporters = r.exporters;
 });
 const init = function () {
index 7dab90e61aefc5163f718934f14d4b628e307a95..246a9315334fe52362b7da2a8dbd11b2290a1da6 100644 (file)
@@ -42,7 +42,7 @@ export default ModalFormView.extend({
 
   sendRequest () {
     const that = this;
-    const url = '/api/qualityprofiles/change_parent';
+    const url = window.baseUrl + '/api/qualityprofiles/change_parent';
     const parent = this.$('#change-profile-parent').val();
     const options = {
       profileKey: this.model.get('key'),
index 5bd378dee83c28621c01172f2106a9ebaa9fa11e..e2076ea8fbc236718082d0582c84f48e9a313840 100644 (file)
@@ -99,7 +99,7 @@ export default Marionette.Controller.extend({
 
   onProfileSetAsDefault (profile) {
     const that = this;
-    const url = '/api/qualityprofiles/set_default';
+    const url = window.baseUrl + '/api/qualityprofiles/set_default';
     const key = profile.get('key');
     const options = { profileKey: key };
     return $.post(url, options).done(function () {
index 1ecb6c92aeaf3f4879ab444e4863fc909c503062..f9d2852d095ade9e3a1fed38f8b5c4fd466fc2ef 100644 (file)
@@ -33,7 +33,7 @@ export default ModalFormView.extend({
 
   sendRequest () {
     const that = this;
-    const url = '/api/qualityprofiles/copy';
+    const url = window.baseUrl + '/api/qualityprofiles/copy';
     const name = this.$('#copy-profile-name').val();
     const options = {
       fromKey: this.model.get('key'),
index bc255295038fff48ebced7fe3f8494966f638c51..551348ee26a5b468deeec1028c8a9556af93db82 100644 (file)
@@ -36,7 +36,7 @@ export default ModalFormView.extend({
 
   sendRequest () {
     const that = this;
-    const url = '/api/qualityprofiles/delete';
+    const url = window.baseUrl + '/api/qualityprofiles/delete';
     const options = { profileKey: this.model.get('key') };
     return $.ajax({
       url,
index da366eac71fbd52764c9e4c70ce3106e8ed1cd66..26748b8e3bee235d9587520bef3b5abd8d4f5112 100644 (file)
@@ -84,9 +84,9 @@ export default Marionette.LayoutView.extend({
       format (item) {
         return item.name;
       },
-      searchUrl: '/api/qualityprofiles/projects?key=' + encodeURIComponent(key),
-      selectUrl: '/api/qualityprofiles/add_project',
-      deselectUrl: '/api/qualityprofiles/remove_project',
+      searchUrl: window.baseUrl + '/api/qualityprofiles/projects?key=' + encodeURIComponent(key),
+      selectUrl: window.baseUrl + '/api/qualityprofiles/add_project',
+      deselectUrl: window.baseUrl + '/api/qualityprofiles/remove_project',
       extra: {
         profileKey: key
       },
index ab0770edea6e166194823f8e0f6d086d9cc0b49b..00935378225e75baa45f5c76b3a86928e11140f3 100644 (file)
@@ -42,7 +42,7 @@ export default Backbone.Model.extend({
 
   fetchProfileRules () {
     const that = this;
-    const url = '/api/rules/search';
+    const url = window.baseUrl + '/api/rules/search';
     const key = this.id;
     const options = {
       ps: 1,
@@ -66,7 +66,7 @@ export default Backbone.Model.extend({
 
   fetchInheritance () {
     const that = this;
-    const url = '/api/qualityprofiles/inheritance';
+    const url = window.baseUrl + '/api/qualityprofiles/inheritance';
     const options = { profileKey: this.id };
     return $.get(url, options).done(function (r) {
       _.extend(that.fetchChanged, r.profile, {
@@ -78,7 +78,7 @@ export default Backbone.Model.extend({
 
   fetchChangelog (options) {
     const that = this;
-    const url = '/api/qualityprofiles/changelog';
+    const url = window.baseUrl + '/api/qualityprofiles/changelog';
     const opts = _.extend({}, options, { profileKey: this.id });
     return $.get(url, opts).done(function (r) {
       that.set({
@@ -92,7 +92,7 @@ export default Backbone.Model.extend({
 
   fetchMoreChangelog () {
     const that = this;
-    const url = '/api/qualityprofiles/changelog';
+    const url = window.baseUrl + '/api/qualityprofiles/changelog';
     const page = this.get('eventsPage') || 0;
     const parameters = this.get('eventsParameters') || {};
     const opts = _.extend({}, parameters, { profileKey: this.id, p: page + 1 });
@@ -114,7 +114,7 @@ export default Backbone.Model.extend({
 
   compareWith (withKey) {
     const that = this;
-    const url = '/api/qualityprofiles/compare';
+    const url = window.baseUrl + '/api/qualityprofiles/compare';
     const options = { leftKey: this.id, rightKey: withKey };
     return $.get(url, options).done(function (r) {
       const comparison = _.extend(r, {
index a170c4f334effd894106c41dfa000d8594dba9ab..c3b9335c952942674c3be71086aa2003c288ee36 100644 (file)
@@ -22,7 +22,7 @@ import Profile from './profile';
 
 export default Backbone.Collection.extend({
   model: Profile,
-  url: '/api/qualityprofiles/search',
+  url: window.baseUrl + '/api/qualityprofiles/search',
   comparator: 'key',
 
   parse (r) {
index 4e15d54fc6bd71461c8c2d414e9ce53c4d5fd702..77ab397642c5dccc4ddff20af09feeae04180943 100644 (file)
@@ -31,7 +31,7 @@ export default ModalFormView.extend({
 
   sendRequest () {
     const that = this;
-    const url = '/api/qualityprofiles/rename';
+    const url = window.baseUrl + '/api/qualityprofiles/rename';
     const name = this.$('#rename-profile-name').val();
     const options = {
       key: this.model.get('key'),
index 97cd9797c6d000757863e0ac2eaf7d6d4c98bdca..3f3de05c29effa0025cd36d7dc794473d12a68e0 100644 (file)
@@ -47,7 +47,7 @@ export default ModalFormView.extend({
 
   sendRequest () {
     const that = this;
-    const url = '/api/qualityprofiles/restore_built_in';
+    const url = window.baseUrl + '/api/qualityprofiles/restore_built_in';
     const lang = this.$('#restore-built-in-profiles-language').val();
     const options = { language: lang };
     this.selectedLanguage = _.findWhere(this.options.languages, { key: lang }).name;
index 65cafba2d933d9a7f11a249ea6ed76af54c65650..f600dd3438b2dbaec6cb074a54513f536f79c1ba 100644 (file)
@@ -70,8 +70,8 @@ export default React.createClass({
       <header className="page-header">
         <h1 className="page-title">{translate('system_info.page')}</h1>
         <div className="page-actions">
-          <a className="spacer-right" href={'/api/system/logs'} id="logs-link">Logs</a>
-          <a href={'/api/system/info'} id="download-link">Download</a>
+          <a className="spacer-right" href={window.baseUrl + '/api/system/logs'} id="logs-link">Logs</a>
+          <a href={window.baseUrl + '/api/system/info'} id="download-link">Download</a>
           <button
               id="restart-server-button"
               className="big-spacer-left"
index 959ee5eb37849a84d29eb8c7cfa572d663fe43e0..3997e5c9a8f922de3392d0912839412f3cf94986 100644 (file)
@@ -61,7 +61,7 @@ export default Backbone.Model.extend({
 
   install () {
     return this._action({
-      url: '/api/plugins/install',
+      url: window.baseUrl + '/api/plugins/install',
       success (model) {
         model.set({ _status: 'installing' });
       }
@@ -70,7 +70,7 @@ export default Backbone.Model.extend({
 
   update () {
     return this._action({
-      url: '/api/plugins/update',
+      url: window.baseUrl + '/api/plugins/update',
       success (model) {
         model.set({ _status: 'installing' });
       }
@@ -79,7 +79,7 @@ export default Backbone.Model.extend({
 
   uninstall () {
     return this._action({
-      url: '/api/plugins/uninstall',
+      url: window.baseUrl + '/api/plugins/uninstall',
       success (model) {
         model.set({ _status: 'uninstalling' });
       }
index fee5a59fb0b71390ed9d1fc481c71dbe9a4f0485..94317555e5d4d8dc6659c3620388059232d3d114 100644 (file)
@@ -70,7 +70,7 @@ const Plugins = Backbone.Collection.extend({
     const that = this;
     const opts = {
       type: 'GET',
-      url: '/api/plugins/installed',
+      url: window.baseUrl + '/api/plugins/installed',
       success (r) {
         that._installed = that.parse(r);
       }
@@ -85,7 +85,7 @@ const Plugins = Backbone.Collection.extend({
     const that = this;
     const opts = {
       type: 'GET',
-      url: '/api/plugins/updates',
+      url: window.baseUrl + '/api/plugins/updates',
       success (r) {
         that._updates = that.parse(r);
       }
@@ -100,7 +100,7 @@ const Plugins = Backbone.Collection.extend({
     const that = this;
     const opts = {
       type: 'GET',
-      url: '/api/plugins/available',
+      url: window.baseUrl + '/api/plugins/available',
       success (r) {
         that._available = that.parse(r);
       }
@@ -112,7 +112,7 @@ const Plugins = Backbone.Collection.extend({
     const that = this;
     const opts = {
       type: 'GET',
-      url: '/api/plugins/pending',
+      url: window.baseUrl + '/api/plugins/pending',
       success (r) {
         const installing = r.installing.map(function (plugin) {
           return { key: plugin.key, _status: 'installing' };
@@ -135,7 +135,7 @@ const Plugins = Backbone.Collection.extend({
     const that = this;
     const opts = {
       type: 'GET',
-      url: '/api/system/upgrades',
+      url: window.baseUrl + '/api/system/upgrades',
       success (r) {
         that._systemUpdates = r.upgrades.map(function (update) {
           return _.extend(update, { _system: true });
@@ -195,7 +195,7 @@ const Plugins = Backbone.Collection.extend({
     const that = this;
     const opts = {
       type: 'POST',
-      url: '/api/plugins/cancel_all',
+      url: window.baseUrl + '/api/plugins/cancel_all',
       success () {
         that._installedCount = 0;
         that._uninstalledCount = 0;
index b66ec089153377ca5cf718d55c61381fad51271e..f8a01ebc49aa1cebca3f24efc34e4b369f44df17 100644 (file)
@@ -35,9 +35,9 @@ export default Modal.extend({
         return `${item.name}<br><span class="note">${item.description}</span>`;
       },
       queryParam: 'q',
-      searchUrl: '/api/users/groups?ps=100&login=' + this.model.id,
-      selectUrl: '/api/user_groups/add_user',
-      deselectUrl: '/api/user_groups/remove_user',
+      searchUrl: window.baseUrl + '/api/users/groups?ps=100&login=' + this.model.id,
+      selectUrl: window.baseUrl + '/api/user_groups/add_user',
+      deselectUrl: window.baseUrl + '/api/user_groups/remove_user',
       extra: {
         login: this.model.id
       },
index 84e7728dc2a0d296006fda8c92ad1767b99d2abb..d041faad6118a2298b3789aabdcea8f61b774025 100644 (file)
@@ -24,7 +24,7 @@ export default Backbone.Model.extend({
   idAttribute: 'login',
 
   urlRoot () {
-    return '/api/users';
+    return window.baseUrl + '/api/users';
   },
 
   defaults () {
index 8759d700c5a4e4a7b79150a65db3458e7d3d8cde..1d495078ac4e9a255d7df2e7d9001f291ec344e7 100644 (file)
@@ -24,7 +24,7 @@ export default Backbone.Collection.extend({
   model: User,
 
   url () {
-    return '/api/users/search';
+    return window.baseUrl + '/api/users/search';
   },
 
   parse (r) {
index b2d3a4b672c58572d31e11bbb0f99d7cc58df7ff..d6e538797c34c65e08a63f2c519fe85b7bdfc759 100644 (file)
@@ -1,4 +1,4 @@
 <div class="markdown-tips">
-  <a href="#" onclick="window.open('/markdown/help','markdown','height=300,width=600,scrollbars=1,resizable=1');return false;">{{t 'markdown.helplink'}}</a> :
+  <a href="#" onclick="window.open(window.baseUrl + '/markdown/help','markdown','height=300,width=600,scrollbars=1,resizable=1');return false;">{{t 'markdown.helplink'}}</a> :
   &nbsp; *{{t 'bold'}}* &nbsp;&nbsp; ``{{t 'code'}}`` &nbsp;&nbsp; * {{t 'bulleted_point'}}
 </div>
index bb17e325a8eee05b22f1f4b5cae1735572c36a51..ee155975159746207323a1e71304b7c4876a7632 100644 (file)
@@ -25,7 +25,7 @@ export default Backbone.Collection.extend({
   model: Issue,
 
   url () {
-    return '/api/issues/search';
+    return window.baseUrl + '/api/issues/search';
   },
 
   _injectRelational (issue, source, baseField, lookupField) {
index 82594682e0f715b5ba91c08c173ea66f603f4d5a..51c7162c71624a5446f747ad8e21455edb331647 100644 (file)
@@ -151,7 +151,7 @@ export default Marionette.ItemView.extend({
       this.disableControls();
       return $.ajax({
         type: 'POST',
-        url: '/api/issues/delete_comment?key=' + commentKey
+        url: window.baseUrl + '/api/issues/delete_comment?key=' + commentKey
       }).done(function () {
         that.updateAfterAction(true);
       });
@@ -253,7 +253,7 @@ export default Marionette.ItemView.extend({
   serializeData () {
     const issueKey = encodeURIComponent(this.model.get('key'));
     return _.extend(Marionette.ItemView.prototype.serializeData.apply(this, arguments), {
-      permalink: '/issues/search#issues=' + issueKey,
+      permalink: window.baseUrl + '/issues/search#issues=' + issueKey,
       hasSecondaryLocations: this.model.get('flows').length
     });
   }
index dc27c3ff8b9beecaeb4bf17db5dff1040bd4d4f9..d485962892941aa473cf3f61c2561c079c04157b 100644 (file)
@@ -21,7 +21,7 @@ import Backbone from 'backbone';
 
 export default Backbone.Collection.extend({
   url () {
-    return '/api/issues/changelog';
+    return window.baseUrl + '/api/issues/changelog';
   },
 
   parse (r) {
index d860a9c57d101026a6b690fd919deff03771ead8..8a282647b41d3dd1688a3c7d5ad198766908d14e 100644 (file)
@@ -30,11 +30,11 @@ export default Backbone.Model.extend({
   },
 
   url () {
-    return '/api/issues';
+    return window.baseUrl + '/api/issues';
   },
 
   urlRoot () {
-    return '/api/issues';
+    return window.baseUrl + '/api/issues';
   },
 
   parse (r) {
index 5fba121bf5c16dba85e52dbb0b1d9b4b68b49782..3750074803a88ccef18fd887c3a7323df6009e17 100644 (file)
@@ -119,7 +119,7 @@ export default ActionOptionsView.extend({
   search (query) {
     const that = this;
     if (query.length > 1) {
-      $.get('/api/users/search', { q: query }).done(function (data) {
+      $.get(window.baseUrl + '/api/users/search', { q: query }).done(function (data) {
         that.resetAssignees(data.users);
       });
     } else {
index 4e4ac129b098a67d1c4af0203f1abd4a3b497676..8b4c0c629c58e88fdee36d6736a3ecb181e6805f 100644 (file)
@@ -82,7 +82,7 @@ export default PopupView.extend({
     const text = this.ui.textarea.val();
     const update = this.model && this.model.has('key');
     const method = update ? 'edit_comment' : 'add_comment';
-    const url = '/api/issues/' + method;
+    const url = window.baseUrl + '/api/issues/' + method;
     const data = { text };
     if (update) {
       data.key = this.model.get('key');
index 8465005d70ab3389e5663ea20631e51cde6cd672..ca096aa4d2a43fcef492614f92aa653d8787b4e2 100644 (file)
@@ -50,7 +50,7 @@ export default ActionOptionsView.extend({
 
   requestTags (query) {
     const that = this;
-    return $.get('/api/issues/tags', { ps: 10, q: query }).done(function (data) {
+    return $.get(window.baseUrl + '/api/issues/tags', { ps: 10, q: query }).done(function (data) {
       that.tags = data.tags;
       that.renderTags();
     });
@@ -134,7 +134,7 @@ export default ActionOptionsView.extend({
     this.model.set({ tags });
     return $.ajax({
       type: 'POST',
-      url: '/api/issues/set_tags',
+      url: window.baseUrl + '/api/issues/set_tags',
       data: {
         key: this.model.id,
         tags: tags.join()
index 4e5bcb8fb0041ef66fc3bd38d595959a0d79bd52..461d411334873803a4c6f0bfd2679e6847208fb0 100644 (file)
@@ -69,7 +69,7 @@ const Suggestions = Backbone.Collection.extend({
 const UserSuggestions = Suggestions.extend({
 
   url () {
-    return '/api/users/search';
+    return window.baseUrl + '/api/users/search';
   },
 
   parse (response) {
@@ -84,7 +84,7 @@ const UserSuggestions = Suggestions.extend({
 const ProjectSuggestions = Suggestions.extend({
 
   url () {
-    return '/api/resources/search?f=s2&q=TRK&display_key=true';
+    return window.baseUrl + '/api/resources/search?f=s2&q=TRK&display_key=true';
   }
 
 });
@@ -93,7 +93,7 @@ const ProjectSuggestions = Suggestions.extend({
 const ComponentSuggestions = Suggestions.extend({
 
   url () {
-    return '/api/resources/search?f=s2&qp=supportsGlobalDashboards&display_key=true';
+    return window.baseUrl + '/api/resources/search?f=s2&qp=supportsGlobalDashboards&display_key=true';
   },
 
   parse (r) {
@@ -377,7 +377,7 @@ const ComponentFilterView = AjaxSelectFilterView.extend({
     const that = this;
     return $
         .ajax({
-          url: '/api/resources',
+          url: window.baseUrl + '/api/resources',
           type: 'GET',
           data: { resource: v }
         })
@@ -407,7 +407,7 @@ const ProjectFilterView = AjaxSelectFilterView.extend({
     const that = this;
     return $
         .ajax({
-          url: '/api/resources',
+          url: window.baseUrl + '/api/resources',
           type: 'GET',
           data: { resource: v }
         })
@@ -437,7 +437,7 @@ const AssigneeFilterView = AjaxSelectFilterView.extend({
     const that = this;
     return $
         .ajax({
-          url: '/api/users/search',
+          url: window.baseUrl + '/api/users/search',
           type: 'GET',
           data: { q: v }
         })
index 11b769a903a8dcccd92bbaf8476fcd13d26d9225..1c14e30f127527a45378e5808412ff43150cd68e 100644 (file)
@@ -36,12 +36,12 @@ const DetailsFavoriteFilterView = BaseFilters.DetailsFilterView.extend({
 
   applyFavorite (e) {
     const id = $(e.target).data('id');
-    window.location = this.model.get('favoriteUrl') + '/' + id;
+    window.location = window.baseUrl + this.model.get('favoriteUrl') + '/' + id;
   },
 
 
   manage () {
-    window.location = this.model.get('manageUrl');
+    window.location = window.baseUrl + this.model.get('manageUrl');
   },
 
 
index b742e31b0eb9aa65071dee51bf1c861ee9fbe086..00dd7d8359f35f277ed079b358e7bc12849e240d 100644 (file)
@@ -40,13 +40,13 @@ export default React.createClass({
   },
 
   addFavorite() {
-    const url = '/api/favourites';
+    const url = window.baseUrl + '/api/favourites';
     const data = { key: this.props.component };
     $.ajax({ type: 'POST', url, data }).done(() => this.setState({ favorite: true }));
   },
 
   removeFavorite() {
-    const url = `/api/favourites/${encodeURIComponent(this.props.component)}`;
+    const url = `${window.baseUrl}/api/favourites/${encodeURIComponent(this.props.component)}`;
     $.ajax({ type: 'DELETE', url }).done(() => this.setState({ favorite: false }));
   },
 
index 852e347ccb294cfb703ec85dccb75edf719f1073..c0f506ce69a63377d905cc9ac810381eaf636682 100644 (file)
@@ -22,7 +22,7 @@ import React from 'react';
 
 export const QualityGateLink = React.createClass({
   render() {
-    let url = `/quality_gates/show/${this.props.gate}`;
+    let url = `${window.baseUrl}/quality_gates/show/${this.props.gate}`;
     return <a href={url}>{this.props.children}</a>;
   }
 });
index 1b9b4ea7ddc5fc05986e1772ebb86a6a5bb66f06..681c1494258d3baef66fe1e17868da20630b4f03 100644 (file)
@@ -22,7 +22,7 @@ import React from 'react';
 
 export const QualityProfileLink = React.createClass({
   render() {
-    let url = `/profiles/show?key=${encodeURIComponent(this.props.profile)}`;
+    let url = `${window.baseUrl}/profiles/show?key=${encodeURIComponent(this.props.profile)}`;
     return <a href={url}>{this.props.children}</a>;
   }
 });
index 14b995d212754bc5a0f13d7905f01bf40c893cb6..07a191a606112561a31864fd5cabc72c7b85099e 100644 (file)
@@ -24,7 +24,7 @@ import MoreActionsView from './more-actions';
 import MeasuresOverlay from './measures-overlay';
 import Template from './templates/source-viewer-header.hbs';
 
-const API_FAVORITE = '/api/favourites';
+const API_FAVORITE = window.baseUrl + '/api/favourites';
 
 export default Marionette.ItemView.extend({
   template: Template,
@@ -75,11 +75,11 @@ export default Marionette.ItemView.extend({
     if (this.options.viewer.highlightedLine) {
       query = query + '&line=' + this.options.viewer.highlightedLine;
     }
-    window.open('/component/index?' + query, this.model.get('name'), windowParams);
+    window.open(window.baseUrl + '/component/index?' + query, this.model.get('name'), windowParams);
   },
 
   showRawSources () {
-    const url = '/api/sources/raw?key=' + encodeURIComponent(this.model.get('key'));
+    const url = window.baseUrl + '/api/sources/raw?key=' + encodeURIComponent(this.model.get('key'));
     const windowParams = 'resizable=1,scrollbars=1,status=1';
     window.open(url, this.model.get('name'), windowParams);
   },
index 4669fb5b079b34560bc74db98bf9c030539c20d1..0eb02489056ecabb525b646b5daed8f82734de15 100644 (file)
@@ -150,7 +150,7 @@ export default Marionette.LayoutView.extend({
 
   requestComponent () {
     const that = this;
-    const url = '/api/components/app';
+    const url = window.baseUrl + '/api/components/app';
     const data = { uuid: this.model.id };
     return $.ajax({
       url,
@@ -206,7 +206,7 @@ export default Marionette.LayoutView.extend({
 
   requestSource () {
     const that = this;
-    const url = '/api/sources/lines';
+    const url = window.baseUrl + '/api/sources/lines';
     const options = _.extend({ uuid: this.model.id }, this.linesLimit());
     return $.get(url, options).done(function (data) {
       let source = (data.sources || []).slice(0);
@@ -243,7 +243,7 @@ export default Marionette.LayoutView.extend({
 
   requestDuplications () {
     const that = this;
-    const url = '/api/duplications/show';
+    const url = window.baseUrl + '/api/duplications/show';
     const options = { uuid: this.model.id };
     return $.get(url, options, function (data) {
       const hasDuplications = (data != null) && (data.duplications != null);
@@ -418,7 +418,7 @@ export default Marionette.LayoutView.extend({
     this.clearTooltips();
     const line = $(e.currentTarget).data('line-number');
     const row = _.findWhere(this.model.get('source'), { line });
-    const url = '/api/tests/list';
+    const url = window.baseUrl + '/api/tests/list';
     const options = {
       sourceFileId: this.model.id,
       sourceFileLineNumber: line,
@@ -619,7 +619,7 @@ export default Marionette.LayoutView.extend({
     const that = this;
     let source = this.model.get('source');
     const firstLine = _.first(source).line;
-    const url = '/api/sources/lines';
+    const url = window.baseUrl + '/api/sources/lines';
     const options = {
       uuid: this.model.id,
       from: firstLine - this.LINES_AROUND,
@@ -665,7 +665,7 @@ export default Marionette.LayoutView.extend({
     const that = this;
     let source = this.model.get('source');
     const lastLine = _.last(source).line;
-    const url = '/api/sources/lines';
+    const url = window.baseUrl + '/api/sources/lines';
     const options = {
       uuid: this.model.id,
       from: lastLine + 1,
index 953a3e90f80039063bcb5997c0e22cfdf9ce1247..44d9837f70cbc3267f7ea8792961d19a578d2d9e 100644 (file)
@@ -106,7 +106,7 @@ export default ModalView.extend({
 
   getMetrics () {
     let metrics = '';
-    const url = '/api/metrics/search';
+    const url = window.baseUrl + '/api/metrics/search';
     $.ajax({
       url,
       async: false,
@@ -156,7 +156,7 @@ export default ModalView.extend({
 
   requestMeasures () {
     const that = this;
-    const url = '/api/resources';
+    const url = window.baseUrl + '/api/resources';
     const metrics = this.getMetrics();
     const options = {
       resource: this.model.key(),
@@ -181,7 +181,7 @@ export default ModalView.extend({
 
   requestIssues () {
     const that = this;
-    const url = '/api/issues/search';
+    const url = window.baseUrl + '/api/issues/search';
     const options = {
       componentUuids: this.model.id,
       resolved: false,
@@ -211,7 +211,7 @@ export default ModalView.extend({
 
   requestTests () {
     const that = this;
-    const url = '/api/tests/list';
+    const url = window.baseUrl + '/api/tests/list';
     const options = { testFileId: this.model.id };
     return $.get(url, options).done(function (data) {
       that.model.set({ tests: data.tests });
@@ -267,7 +267,7 @@ export default ModalView.extend({
   showTest (e) {
     const that = this;
     const testId = $(e.currentTarget).data('id');
-    const url = '/api/tests/covered_files';
+    const url = window.baseUrl + '/api/tests/covered_files';
     const options = { testId };
     this.testsScroll = $(e.currentTarget).scrollParent().scrollTop();
     return $.get(url, options).done(function (data) {
index acb9b46be42fab2a27abeb9e5eb10626e99ec3d8..0dc4d4ab01244ee1a1fac51c9e4bfbd86a22cd24 100644 (file)
@@ -29,7 +29,7 @@ export default Popup.extend({
 
   getPermalink (e) {
     e.preventDefault();
-    const url = `/component/index?id=${encodeURIComponent(this.model.key())}&line=${this.options.line}`;
+    const url = `${window.baseUrl}/component/index?id=${encodeURIComponent(this.model.key())}&line=${this.options.line}`;
     const windowParams = 'resizable=1,scrollbars=1,status=1';
     window.open(url, this.model.get('name'), windowParams);
   }
index b3f94c3e6d1a524dda4949ad7825747b998d8fa3..b41e3e1440f9f051400258d53bee564157da8681 100644 (file)
@@ -127,7 +127,7 @@ Workspace.prototype = {
   },
 
   fetchRule (model) {
-    const url = '/api/rules/show';
+    const url = window.baseUrl + '/api/rules/show';
     const options = { key: model.get('key') };
     return $.get(url, options).done(function (r) {
       model.set(r.rule);
index 3ab861f7ed5766d1a3e7ff8bbebc6235bc0b8cff..7ff209124331a58427830bea16d5ffbf5d8019fa 100644 (file)
@@ -18,5 +18,5 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 module.exports = function (componentKey) {
-  return '/components/index?id=' + encodeURIComponent(componentKey);
+  return window.baseUrl + '/components/index?id=' + encodeURIComponent(componentKey);
 };
index 6dbd1e36d059189743f289a9dd80c9513e2e0cf0..4409bdfa442037226263503541402ec40700143a 100644 (file)
@@ -35,5 +35,5 @@ module.exports = function (componentKey, dashboardKey) {
   const query = params.map(function (p) {
     return p.key + '=' + encodeURIComponent(p.value);
   }).join('&');
-  return '/dashboard/index?' + query;
+  return window.baseUrl + '/dashboard/index?' + query;
 };
index 6a05b8fbb77890c1942395f9be271242144af8f4..5dcf2d00bcc96064429900705a5d4f2c73a982df 100644 (file)
@@ -18,5 +18,5 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 module.exports = function (componentKey) {
-  return '/component_issues/index?id=' + encodeURIComponent(componentKey);
+  return window.baseUrl + '/component_issues/index?id=' + encodeURIComponent(componentKey);
 };
index a259f0f1c19e0c099dcfd12e61b7cdc64bd3f554..9a58d761cb290fc0d2fc3e97049bf953342655cf 100644 (file)
@@ -18,5 +18,5 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 module.exports = function (componentKey) {
-  return '/dashboard/index?id=' + encodeURIComponent(componentKey);
+  return window.baseUrl + '/dashboard/index?id=' + encodeURIComponent(componentKey);
 };
index 618f65b651c14b9e482f39ff5010f08eca5e2397..f4ffe0d04e64d016c7c002bf806b3eab00f87bd7 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 module.exports = function (componentKey, componentQualifier) {
-  let url = '/dashboard/index?id=' + encodeURIComponent(componentKey);
+  let url = window.baseUrl + '/dashboard/index?id=' + encodeURIComponent(componentKey);
   if (componentQualifier === 'FIL' || componentQualifier === 'CLA') {
     url += '&metric=sqale_index';
   }
index dca3e991b694da8e2f090da752ce6ae7c6b9dd2b..7ae30121d77b30818972e5ab24c29c1b92bd6cc7 100644 (file)
@@ -18,7 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 module.exports = function (profile, exporterKey) {
-  let url = '/api/qualityprofiles/export';
+  let url = window.baseUrl + '/api/qualityprofiles/export';
   url += '?language=' + encodeURIComponent(profile.language);
   url += '&name=' + encodeURIComponent(profile.name);
   if (exporterKey != null) {
index d52892d3512940e2204ea02894a18bc7e3d62e0b..34e9433c814c505a6c1160c7673af739d177e663 100644 (file)
@@ -22,6 +22,6 @@ module.exports = function (...args) {
   const list = args.slice(0, -1);
   const prefix = list.join('');
   const path = window.location.pathname;
-  const match = path.indexOf(prefix) === 0;
+  const match = path.indexOf(window.baseUrl + prefix) === 0;
   return match ? options.fn(this) : options.inverse(this);
 };
index 916163307c17eff9108595748efb899fbd8f2276..45223dab35a8c1bf4fabc730f2f50602fe9707f3 100644 (file)
@@ -18,5 +18,5 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 module.exports = function (id) {
-  return '/issues/search#id=' + id;
+  return window.baseUrl + '/issues/search#id=' + id;
 };
index 5039f525a95923937a147cacca86bfad7630c978..92c18bcc5ca771c1097d89a3b894102b4a8f5aa7 100644 (file)
@@ -36,9 +36,9 @@ module.exports = function (query, property, value, mode) {
     r.facetMode = 'debt';
   }
   if (r.componentKey != null) {
-    return '/component_issues/index?id=' + encodeURIComponent(r.componentKey) +
+    return window.baseUrl + '/component_issues/index?id=' + encodeURIComponent(r.componentKey) +
         '#' + getQuery(_.omit(r, 'componentKey'));
   } else {
-    return '/issues/search#' + getQuery(r);
+    return window.baseUrl + '/issues/search#' + getQuery(r);
   }
 };
index 5b02cca139f834c0c797c7c26ac05fa93097c42b..c5212c6fcfb5f79db51dab37f0c6809469e4fe48 100644 (file)
@@ -34,9 +34,9 @@ module.exports = function (query, mode) {
     r.facetMode = 'debt';
   }
   if (r.componentKey != null) {
-    return '/component_issues/index?id=' + encodeURIComponent(r.componentKey) +
+    return window.baseUrl + '/component_issues/index?id=' + encodeURIComponent(r.componentKey) +
         '#' + getQuery(_.omit(r, 'componentKey'));
   } else {
-    return '/issues/search#' + getQuery(r);
+    return window.baseUrl + '/issues/search#' + getQuery(r);
   }
 };
index c0db825918d9d0810ffd69552db6e815e995a7eb..5ef30cdbddfea0f3879e8a25e64b1e8234883ea9 100644 (file)
@@ -18,5 +18,5 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 module.exports = function (...args) {
-  return args.slice(0, -1).join('');
+  return window.baseUrl + args.slice(0, -1).join('');
 };
index 29635828f1072003ac499aa38344a0ff6117fe37..e865772206ce2aa5538af22b5a575082f9a5f199 100644 (file)
@@ -18,5 +18,5 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 module.exports = function (key) {
-  return '/profiles/show?key=' + encodeURIComponent(key);
+  return window.baseUrl + '/profiles/show?key=' + encodeURIComponent(key);
 };
index 2e119690f34e2f1338d47861193c0afe99b6a822..13b121aa1737ff76e74d83f0be56e90f9aae20c2 100644 (file)
@@ -18,5 +18,5 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 module.exports = function (ruleKey) {
-  return '/coding_rules#rule_key=' + encodeURIComponent(ruleKey);
+  return window.baseUrl + '/coding_rules#rule_key=' + encodeURIComponent(ruleKey);
 };
index 3045a66c855fd5c650456787ea1b43c976d94f46..0744ede3acf41632efd3956e9451cc0690a28aab 100644 (file)
@@ -44,7 +44,7 @@ function getCurrentLocale () {
 }
 
 function makeRequest (params) {
-  const url = `/api/l10n/index?${stringify(params)}`;
+  const url = `${window.baseUrl}/api/l10n/index?${stringify(params)}`;
 
   return fetch(url, { credentials: 'same-origin' }).then(response => {
     if (response.status === 304) {
index 5279154290a78ed356e5bcc40fcd94210c4deb6e..ef621da701a175a482faf8a4e6f289c1b08178a6 100644 (file)
@@ -23,7 +23,7 @@
  * @returns {string}
  */
 export function getComponentUrl (componentKey) {
-  return '/dashboard?id=' + encodeURIComponent(componentKey);
+  return window.baseUrl + '/dashboard?id=' + encodeURIComponent(componentKey);
 }
 
 
@@ -37,7 +37,7 @@ export function getComponentIssuesUrl (componentKey, query) {
   const serializedQuery = Object.keys(query).map(criterion => (
       `${encodeURIComponent(criterion)}=${encodeURIComponent(query[criterion])}`
   )).join('|');
-  return '/component_issues?id=' + encodeURIComponent(componentKey) + '#' + serializedQuery;
+  return window.baseUrl + '/component_issues?id=' + encodeURIComponent(componentKey) + '#' + serializedQuery;
 }
 
 
@@ -48,7 +48,7 @@ export function getComponentIssuesUrl (componentKey, query) {
  * @returns {string}
  */
 export function getComponentDrilldownUrl (componentKey, metric) {
-  return `/component_measures/metric/${metric}?id=${encodeURIComponent(componentKey)}`;
+  return `${window.baseUrl}/component_measures/metric/${metric}?id=${encodeURIComponent(componentKey)}`;
 }
 
 
@@ -60,7 +60,7 @@ export function getComponentDrilldownUrl (componentKey, metric) {
  * @returns {string}
  */
 export function getComponentDashboardUrl (componentKey, dashboardKey, period) {
-  let url = '/dashboard?id=' + encodeURIComponent(componentKey) +
+  let url = window.baseUrl + '/dashboard?id=' + encodeURIComponent(componentKey) +
       '&did=' + encodeURIComponent(dashboardKey);
   if (period) {
     url += '&period=' + period;
@@ -76,7 +76,7 @@ export function getComponentDashboardUrl (componentKey, dashboardKey, period) {
  * @returns {string}
  */
 export function getComponentFixedDashboardUrl (componentKey, dashboardKey) {
-  return '/overview' + dashboardKey + '?id=' + encodeURIComponent(componentKey);
+  return window.baseUrl + '/overview' + dashboardKey + '?id=' + encodeURIComponent(componentKey);
 }
 
 
@@ -86,5 +86,5 @@ export function getComponentFixedDashboardUrl (componentKey, dashboardKey) {
  * @returns {string}
  */
 export function getComponentDashboardManagementUrl (componentKey) {
-  return '/dashboards?resource=' + encodeURIComponent(componentKey);
+  return window.baseUrl + '/dashboards?resource=' + encodeURIComponent(componentKey);
 }
index 20564e127d540d7725bd0a5b8e15dae4756492b6..43a1492ca2df257580c42dde389de993fafbc372 100644 (file)
@@ -99,7 +99,7 @@
 
 function toggleFav (resourceId, elt) {
   jQuery.ajax({
-    type: 'POST', dataType: 'json', url: '/favourites/toggle/' + resourceId,
+    type: 'POST', dataType: 'json', url: window.baseUrl + '/favourites/toggle/' + resourceId,
     success: function (data) {
       var star = jQuery(elt);
       star.removeClass('icon-favorite icon-not-favorite');
index 9f606b9f24defe995b8782ca3bfa1421ea4613c0..0b71555ad811945ad9388ca62c68ec78547591c0 100644 (file)
@@ -26,7 +26,7 @@ export default React.createClass({
       return null;
     }
     const items = this.props.breadcrumbs.map((item, index) => {
-      const url = `/dashboard/index?id=${encodeURIComponent(item.key)}`;
+      const url = `${window.baseUrl}/dashboard/index?id=${encodeURIComponent(item.key)}`;
       return (
           <li key={index}>
             <a href={url}>
index a8041db7fe5a564939b00bfdbee0e37aa9cfe5b7..22fb055a93ad1b32cfb705945421df22eecf740b 100644 (file)
@@ -69,13 +69,13 @@ export default React.createClass({
 
   isFixedDashboardActive() {
     const path = window.location.pathname;
-    return path.indexOf('/overview') === 0;
+    return path.indexOf(window.baseUrl + '/overview') === 0;
   },
 
   isCustomDashboardActive(customDashboard) {
     const path = window.location.pathname;
     const params = qs.parse(window.location.search.substr(1));
-    return path.indexOf('/dashboard') === 0 && params['did'] === `${customDashboard.key}`;
+    return path.indexOf(window.baseUrl + '/dashboard') === 0 && params['did'] === `${customDashboard.key}`;
   },
 
   isCustomDashboardsActive () {
@@ -87,12 +87,12 @@ export default React.createClass({
 
   isDefaultDeveloperDashboardActive() {
     const path = window.location.pathname;
-    return this.isDeveloper() && path.indexOf('/dashboard') === 0;
+    return this.isDeveloper() && path.indexOf(window.baseUrl + '/dashboard') === 0;
   },
 
   isDashboardManagementActive () {
     const path = window.location.pathname;
-    return path.indexOf('/dashboards') === 0;
+    return path.indexOf(window.baseUrl + '/dashboards') === 0;
   },
 
   renderOverviewLink() {
index d3ad623999c331de026ba1ced0bfd3ac236d557a..27e52fc75085afed4e7ae82ad9c36cbc4e1d06a5 100644 (file)
@@ -26,7 +26,7 @@ export default React.createClass({
   render() {
     let metaList = [];
     let canSeeBackgroundTasks = this.props.conf.showBackgroundTasks;
-    let backgroundTasksUrl = `/project/background_tasks?id=${encodeURIComponent(this.props.component.key)}`;
+    let backgroundTasksUrl = `${window.baseUrl}/project/background_tasks?id=${encodeURIComponent(this.props.component.key)}`;
 
     if (this.props.isInProgress) {
       let tooltip = canSeeBackgroundTasks ?
index b572ad97ce608fa1604dcac0e53292aa791cffc2..150e8f524bec69ade2ee134b3e68d738ca8744ed 100644 (file)
@@ -22,7 +22,7 @@ import { translate } from '../../../helpers/l10n';
 
 export default React.createClass({
   renderLogo() {
-    let url = this.props.logoUrl || '/images/logo.svg';
+    let url = this.props.logoUrl || `${window.baseUrl}/images/logo.svg`;
     let width = this.props.logoWidth || 100;
     let height = 30;
     let title = translate('layout.sonar.slogan');
@@ -34,7 +34,7 @@ export default React.createClass({
   },
 
   render() {
-    const homeUrl = '/';
+    const homeUrl = window.baseUrl + '/';
     const homeLinkClassName = 'navbar-brand' + (this.props.logoUrl ? ' navbar-brand-custom' : '');
     return (
         <div className="navbar-header">
index e3d0bc158c942a264603b35a158e1f0637c28dfa..cf945ffb4b8b7a5535c4200567dc37ac6a3c944b 100644 (file)
@@ -30,7 +30,7 @@ export default React.createClass({
   },
 
   renderDashboardLink (dashboard) {
-    const url = `/dashboard/index?did=${encodeURIComponent(dashboard.key)}`;
+    const url = `${window.baseUrl}/dashboard/index?did=${encodeURIComponent(dashboard.key)}`;
     const name = this.getLocalizedDashboardName(dashboard.name);
     return (
         <li key={dashboard.name}>
@@ -40,7 +40,7 @@ export default React.createClass({
   },
 
   renderDashboardsManagementLink () {
-    const url = '/dashboards';
+    const url = window.baseUrl + '/dashboards';
     return (
         <li>
           <a href={url}>{translate('dashboard.manage_dashboards')}</a>
@@ -67,7 +67,7 @@ export default React.createClass({
   },
 
   renderIssuesLink () {
-    const url = '/issues/search';
+    const url = window.baseUrl + '/issues/search';
     return (
         <li className={this.activeLink('/issues')}>
           <a href={url}>{translate('issues.page')}</a>
@@ -76,7 +76,7 @@ export default React.createClass({
   },
 
   renderMeasuresLink () {
-    const url = '/measures/search?qualifiers[]=TRK';
+    const url = window.baseUrl + '/measures/search?qualifiers[]=TRK';
     return (
         <li className={this.activeLink('/measures')}>
           <a href={url}>{translate('layout.measures')}</a>
@@ -85,7 +85,7 @@ export default React.createClass({
   },
 
   renderRulesLink () {
-    const url = '/coding_rules';
+    const url = window.baseUrl + '/coding_rules';
     return (
         <li className={this.activeLink('/coding_rules')}>
           <a href={url}>{translate('coding_rules.page')}</a>
@@ -94,7 +94,7 @@ export default React.createClass({
   },
 
   renderProfilesLink() {
-    const url = '/profiles';
+    const url = window.baseUrl + '/profiles';
     return (
         <li className={this.activeLink('/profiles')}>
           <a href={url}>{translate('quality_profiles.page')}</a>
@@ -103,7 +103,7 @@ export default React.createClass({
   },
 
   renderQualityGatesLink () {
-    const url = '/quality_gates';
+    const url = window.baseUrl + '/quality_gates';
     return (
         <li className={this.activeLink('/quality_gates')}>
           <a href={url}>{translate('quality_gates.page')}</a>
@@ -115,7 +115,7 @@ export default React.createClass({
     if (!window.SS.isUserAdmin) {
       return null;
     }
-    const url = '/settings';
+    const url = window.baseUrl + '/settings';
     return (
         <li className={this.activeLink('/settings')}>
           <a className="navbar-admin-link" href={url}>{translate('layout.settings')}</a>
@@ -124,7 +124,7 @@ export default React.createClass({
   },
 
   renderComparisonLink () {
-    const url = '/comparison';
+    const url = window.baseUrl + '/comparison';
     return (
         <li className={this.activeLink('/comparison')}>
           <a href={url}>{translate('comparison_global.page')}</a>
@@ -133,7 +133,7 @@ export default React.createClass({
   },
 
   renderGlobalPageLink (globalPage, index) {
-    const url = globalPage.url;
+    const url = window.baseUrl + globalPage.url;
     return (
         <li key={index}>
           <a href={url}>{globalPage.name}</a>
index e9acafd470076d9afbf9f2828769230a3af50e04..1feb41770e190f6962d5a535bd2deece4978e6c2 100644 (file)
@@ -32,7 +32,7 @@ export default React.createClass({
           </a>
           <ul className="dropdown-menu dropdown-menu-right">
             <li>
-              <a href="/account/">{translate('my_account.page')}</a>
+              <a href={`${window.baseUrl}/account/`}>{translate('my_account.page')}</a>
             </li>
             <li>
               <a onClick={this.handleLogout} href="#">{translate('layout.logout')}</a>
@@ -53,13 +53,13 @@ export default React.createClass({
   handleLogin(e) {
     e.preventDefault();
     const returnTo = window.location.pathname + window.location.search;
-    window.location = `/sessions/new?return_to=${encodeURIComponent(returnTo)}${window.location.hash}`;
+    window.location = `${window.baseUrl}/sessions/new?return_to=${encodeURIComponent(returnTo)}${window.location.hash}`;
   },
 
   handleLogout(e) {
     e.preventDefault();
     RecentHistory.clear();
-    window.location = '/sessions/logout';
+    window.location = `${window.baseUrl}/sessions/logout`;
   },
 
   render() {
index 14751ee3ad711b7da59ca986acee3a65860da0ce..80c05243334bcbcdaf051ded60dfa30e4c20a93a 100644 (file)
@@ -154,11 +154,11 @@ export default Marionette.LayoutView.extend({
 
   fetchFavorite () {
     const that = this;
-    return $.get('/api/favourites').done(function (r) {
+    return $.get(window.baseUrl + '/api/favourites').done(function (r) {
       that.favorite = r.map(function (f) {
         const isFile = ['FIL', 'UTS'].indexOf(f.qualifier) !== -1;
         return {
-          url: '/dashboard/index?id=' + encodeURIComponent(f.key) + window.dashboardParameters(true),
+          url: window.baseUrl + '/dashboard/index?id=' + encodeURIComponent(f.key) + window.dashboardParameters(true),
           name: isFile ? collapsedDirFromPath(f.lname) + fileFromPath(f.lname) : f.name,
           icon: 'favorite'
         };
@@ -170,7 +170,7 @@ export default Marionette.LayoutView.extend({
   resetResultsToDefault () {
     const recentHistory = RecentHistory.get();
     const history = recentHistory.map(function (historyItem, index) {
-      const url = '/dashboard/index?id=' + encodeURIComponent(historyItem.key) +
+      const url = window.baseUrl + '/dashboard/index?id=' + encodeURIComponent(historyItem.key) +
           window.dashboardParameters(true);
       return {
         url,
@@ -184,7 +184,7 @@ export default Marionette.LayoutView.extend({
     });
     const qualifiers = this.model.get('qualifiers').map(function (q, index) {
       return {
-        url: '/all_projects?qualifier=' + encodeURIComponent(q),
+        url: window.baseUrl + '/all_projects?qualifier=' + encodeURIComponent(q),
         name: translate('qualifiers.all', q),
         extra: index === 0 ? '' : null
       };
@@ -198,7 +198,7 @@ export default Marionette.LayoutView.extend({
       return;
     }
     const that = this;
-    const url = '/api/components/suggestions';
+    const url = window.baseUrl + '/api/components/suggestions';
     const options = { s: q };
     return $.get(url, options).done(function (r) {
       const collection = [];
@@ -207,7 +207,7 @@ export default Marionette.LayoutView.extend({
           collection.push(_.extend(item, {
             q: domain.q,
             extra: index === 0 ? domain.name : null,
-            url: '/dashboard/index?id=' + encodeURIComponent(item.key) + window.dashboardParameters(true)
+            url: window.baseUrl + '/dashboard/index?id=' + encodeURIComponent(item.key) + window.dashboardParameters(true)
           }));
         });
       });
@@ -222,16 +222,16 @@ export default Marionette.LayoutView.extend({
 
   getNavigationFindings (q) {
     const DEFAULT_ITEMS = [
-      { name: translate('issues.page'), url: '/issues/search' },
-      { name: translate('layout.measures'), url: '/measures/search?qualifiers[]=TRK' },
-      { name: translate('coding_rules.page'), url: '/coding_rules' },
-      { name: translate('quality_profiles.page'), url: '/profiles' },
-      { name: translate('quality_gates.page'), url: '/quality_gates' },
-      { name: translate('comparison_global.page'), url: '/comparison' }
+      { name: translate('issues.page'), url: window.baseUrl + '/issues/search' },
+      { name: translate('layout.measures'), url: window.baseUrl + '/measures/search?qualifiers[]=TRK' },
+      { name: translate('coding_rules.page'), url: window.baseUrl + '/coding_rules' },
+      { name: translate('quality_profiles.page'), url: window.baseUrl + '/profiles' },
+      { name: translate('quality_gates.page'), url: window.baseUrl + '/quality_gates' },
+      { name: translate('comparison_global.page'), url: window.baseUrl + '/comparison' }
     ];
     const customItems = [];
     if (window.SS.isUserAdmin) {
-      customItems.push({ name: translate('layout.settings'), url: '/settings' });
+      customItems.push({ name: translate('layout.settings'), url: window.baseUrl + '/settings' });
     }
     const findings = [].concat(DEFAULT_ITEMS, customItems).filter(function (f) {
       return f.name.match(new RegExp(q, 'i'));
@@ -245,7 +245,7 @@ export default Marionette.LayoutView.extend({
   getGlobalDashboardFindings (q) {
     const dashboards = this.model.get('globalDashboards') || [];
     const items = dashboards.map(function (d) {
-      return { name: d.name, url: '/dashboard/index?did=' + encodeURIComponent(d.key) };
+      return { name: d.name, url: window.baseUrl + '/dashboard/index?did=' + encodeURIComponent(d.key) };
     });
     const findings = items.filter(function (f) {
       return f.name.match(new RegExp(q, 'i'));
index 4990a86365d0ed5833902d04343fbcfb7d7e5615..5db7233ba3ce1d9a5504896b2d9767cf28ee9398 100644 (file)
@@ -23,11 +23,11 @@ import React from 'react';
 
 export default {
   activeLink(url) {
-    return window.location.pathname.indexOf(url) === 0 ? 'active' : null;
+    return window.location.pathname.indexOf(window.baseUrl + url) === 0 ? 'active' : null;
   },
 
   renderLink(url, title, highlightUrl = url) {
-    let fullUrl = url;
+    let fullUrl = window.baseUrl + url;
     let check = _.isFunction(highlightUrl) ? highlightUrl : this.activeLink;
     return (
         <li key={url} className={check(highlightUrl)}>
@@ -37,7 +37,7 @@ export default {
   },
 
   renderNewLink(url, title, highlightUrl = url) {
-    let fullUrl = url;
+    let fullUrl = window.baseUrl + url;
     let check = _.isFunction(highlightUrl) ? highlightUrl : this.activeLink;
     return (
         <li key={highlightUrl} className={check(highlightUrl)}>
index 343e0be648207c64bd1b7e2de254118711bb068a..4e768bdd01ad3b420d47ad24d30ed503c1fc4664 100644 (file)
@@ -56,10 +56,10 @@ const defaultLink = function (item, property, query, index, items, mode) {
     r.facetMode = 'debt';
   }
   if (r.componentKey != null) {
-    return '/component_issues/index?id=' + encodeURIComponent(r.componentKey) +
+    return window.baseUrl + '/component_issues/index?id=' + encodeURIComponent(r.componentKey) +
         '#' + getQuery(_.omit(r, 'componentKey'));
   } else {
-    return '/issues/search#' + getQuery(r);
+    return window.baseUrl + '/issues/search#' + getQuery(r);
   }
 };
 
@@ -181,10 +181,10 @@ const byDistributionConf = {
         r.facetMode = 'debt';
       }
       if (r.componentKey != null) {
-        return '/component_issues/index?id=' + encodeURIComponent(r.componentKey) +
+        return window.baseUrl + '/component_issues/index?id=' + encodeURIComponent(r.componentKey) +
             '#' + getQuery(_.omit(r, 'componentKey'));
       } else {
-        return '/issues/search#' + getQuery(r);
+        return window.baseUrl + '/issues/search#' + getQuery(r);
       }
     }
   }
@@ -285,7 +285,7 @@ export default Marionette.ItemView.extend({
   requestIssues () {
     const that = this;
     const facetMode = this.options.displayMode;
-    const url = '/api/issues/search';
+    const url = window.baseUrl + '/api/issues/search';
     const options = _.extend({}, this.query, {
       facetMode,
       ps: 1,
index 8ee32b8397d344017fb1366945c2c677b2fc8730..090deb108868d15fec09d0b23d2ee42ac4ac7fd8 100644 (file)
@@ -331,7 +331,7 @@ import { translate } from '../../helpers/l10n';
   Treemap.prototype.requestChildren = function (d) {
     const that = this;
     const metrics = this.metricsPriority().join(',');
-    const RESOURCES_URL = '/api/resources/index';
+    const RESOURCES_URL = window.baseUrl + '/api/resources/index';
     return $.get(RESOURCES_URL, {
       resource: d.key,
       depth: 1,
index 99d3093545d598f77596ec1f31febcf89e1bc998..508c5ac7ae184bd2afd1feec1dfdd85c342f753a 100644 (file)
@@ -80,7 +80,7 @@ class AccountController < ApplicationController
       end
     end
 
-    redirect_to "/account/notifications"
+    redirect_to "#{ApplicationController.root_context}/account/notifications"
   end
 
   private
index 55959e331d183990434ce12a086f998110cc38f9..d1c1682b30e6f4b01a18f611e4eb7380a4f4f353 100644 (file)
@@ -43,7 +43,7 @@ class ApplicationController < ActionController::Base
   rescue_from Errors::AccessDenied, :with => :render_access_denied # See lib/authenticated_system.rb#access_denied()
 
   def self.root_context
-    ''
+    ActionController::Base.relative_url_root || ''
   end
 
   def java_facade
index 262665471b97d22136b11dc7019688a0ef2a2089..982956acd762c91b4d2d4185aaed2ba29876ab09 100644 (file)
@@ -167,9 +167,9 @@ module ApplicationHelper
   #   url_for_static(:plugin => 'myplugin', :path => 'image.png')
   def url_for_static(options={})
     if options[:plugin]
-      "/static/#{options[:plugin]}/#{options[:path]}"
+      "#{ApplicationController.root_context}/static/#{options[:plugin]}/#{options[:path]}"
     else
-      "/#{options[:path]}"
+      "#{ApplicationController.root_context}/#{options[:path]}"
     end
   end
 
@@ -329,10 +329,10 @@ module ApplicationHelper
     period_index=nil if period_index && period_index<=0
     if resource.display_dashboard?
       if options[:dashboard]
-        root = "/dashboard/index?"
+        root = "#{ApplicationController.root_context}/dashboard/index?"
       else
         # stay on the same page (for example components)
-        root = "/#{u params[:controller]}/#{u params[:action]}?"
+        root = "#{ApplicationController.root_context}/#{u params[:controller]}/#{u params[:action]}?"
       end
       path = ''
       query = request.query_parameters
@@ -345,7 +345,7 @@ module ApplicationHelper
       end
       "<a class='#{options[:class]}' title='#{options[:title]}' href='#{root + path}'>#{name || resource.name}</a>"
     else
-      url = "/dashboard/index?id=#{u resource.key}"
+      url = "#{ApplicationController.root_context}/dashboard/index?id=#{u resource.key}"
       url += "&period=#{u period_index}" if period_index
       url += "&metric=#{u options[:metric]}" if options[:metric]
       "<a class='#{options[:class]}' title='#{options[:title]}' " +
@@ -413,7 +413,7 @@ module ApplicationHelper
   end
 
   def chart(parameters, options={})
-    image_tag("/chart?#{parameters}", options)
+    image_tag("#{ApplicationController.root_context}/chart?#{parameters}", options)
   end
 
   def link_to_favourite(resource, deprecated_options=nil)
@@ -645,7 +645,7 @@ module ApplicationHelper
     # see limitation in /api/resources/search
     options[:min_length]=2
 
-    ws_url="/api/resources/search?f=s2&"
+    ws_url="#{ApplicationController::root_context}/api/resources/search?f=s2&"
     if options[:qualifiers]
       ws_url+="q=#{options[:qualifiers].join(',')}"
     elsif options[:resource_type_property]
@@ -679,7 +679,7 @@ module ApplicationHelper
     # see limitation in /api/resources/search
     options[:min_length]=2
 
-    ws_url="/api/resources/search?f=s2&"
+    ws_url="#{ApplicationController::root_context}/api/resources/search?f=s2&"
     if options[:qualifiers]
       ws_url+="q=#{options[:qualifiers].join(',')}"
     elsif options[:resource_type_property]
@@ -711,7 +711,7 @@ module ApplicationHelper
   # * <tt>:select2_options</tt> - hash of select2 options
   #
   def user_select_tag(name, options={})
-    ws_url="/api/users/search"
+    ws_url="#{ApplicationController::root_context}/api/users/search"
     options[:min_length]=2
     options[:select2_ajax_options]={
       'data' => 'function (term, page) { return { q: term, p: page } }',
@@ -851,7 +851,7 @@ module ApplicationHelper
     message_params = options[:confirm_msg_params]
     width = options[:confirm_width]||500
 
-    url = "/confirm?url=#{u post_url}"
+    url = "#{ApplicationController.root_context}/confirm?url=#{u post_url}"
     url += "&tk=#{u title_key}" if title_key
     if message_key
       url += "&mk=#{u message_key}&"
@@ -877,7 +877,7 @@ module ApplicationHelper
     html += " colspan='#{options[:colspan]}'" if options[:colspan]
     html += '>'
     if options[:include_loading_icon] && options[:id]
-      html += "<img src='/images/loading-small.gif' style='display: none' id='#{options[:id]}_loading'>"
+      html += "<img src='#{ApplicationController.root_context}/images/loading-small.gif' style='display: none' id='#{options[:id]}_loading'>"
     end
     html += '<div'
     html += " id='#{options[:id]}_pages'" if options[:id]
@@ -944,7 +944,7 @@ module ApplicationHelper
     html += " colspan='#{options[:colspan]}'" if options[:colspan]
     html += '>'
     if options[:include_loading_icon] && options[:id]
-      html += "<img src='/images/loading-small.gif' style='display: none' id='#{options[:id]}_loading'>"
+      html += "<img src='#{ApplicationController.root_context}/images/loading-small.gif' style='display: none' id='#{options[:id]}_loading'>"
     end
     html += '<div'
     html += " id='#{options[:id]}_pages'" if options[:id]
@@ -992,7 +992,7 @@ module ApplicationHelper
   end
 
   def url_for_issues(params)
-    url = '/issues/search#'
+    url = ApplicationController.root_context + '/issues/search#'
     params.each_with_index do |(key, value), index|
       if key == 'filter'
         key = 'id'
@@ -1009,7 +1009,7 @@ module ApplicationHelper
     if component.blank?
       url_for_issues(params)
     else
-      url = '/component_issues/index?id=' + url_encode(component.key) + '#'
+      url = ApplicationController.root_context + '/component_issues/index?id=' + url_encode(component.key) + '#'
       params.each_with_index do |(key, value), index|
         if key != 'componentUuids'
           url += key.to_s + '=' + value.to_s
index 63b2f0b9cfdd5b83e51f366b1bd7d5e140a1f422..c62a514c98e2fe6695f268ed540f259903310edf 100644 (file)
@@ -1,4 +1,4 @@
-<form id="pass_form_tag" name="pass_form_tag" method="post" action="/account/change_password">
+<form id="pass_form_tag" name="pass_form_tag" method="post" action="<%= ApplicationController.root_context -%>/account/change_password">
   <div class="modal-head">
     <h2><%= message('my_profile.password.title') -%></h2>
   </div>
index 434c160613a493c08e7f2a587111dca755fa0b4c..e0f6c2f658ff79e2da55dc65ec72367ec9edd0e4 100644 (file)
@@ -7,7 +7,7 @@
       <td class="thin"><%= link_to_favourite f -%></td>
       <td>
         <%
-          url = '/dashboard?id=' + url_encode(f.key)
+          url = ApplicationController.root_context + '/dashboard?id=' + url_encode(f.key)
         %>
         <a href="<%= url -%>" class="link-with-icon">
           <%= qualifier_icon f %>
index c81109e64f95b88ad329604776c7ca689f01388d..bcad3768198be9ef058bac71b68e3ed87670eed7 100644 (file)
@@ -92,5 +92,5 @@
       ]
     };
   </script>
-  <script src="/js/bundles/account.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/account.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 728550b5a3ef65d619b8bb8bdb6eee5ba0428829..29ac2b1ce1d1f28e73328849a8e6d27e806af7c7 100644 (file)
@@ -48,7 +48,7 @@
       </section>
     <% end %>
 
-    <form id="notif_form" method="post" action="/account/update_notifications">
+    <form id="notif_form" method="post" action="<%= ApplicationController.root_context -%>/account/update_notifications">
       <% unless @global_dispatchers.empty? -%>
         <section class="big-spacer-bottom">
           <%= render "account/global_notifications" -%>
@@ -71,5 +71,5 @@
 </div>
 
 <% content_for :extra_script do %>
-  <script src="/js/bundles/account.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/account.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 5b1b5346f45cc6b8ced8b834d0054e3f95f409c3..3e12a98f45d0f6f9549b263c97a72e12f808a4f0 100644 (file)
@@ -2,5 +2,5 @@
   <script>
     window.sonarqube.urlRoot = window.baseUrl + '/web_api';
   </script>
-  <script src="/js/bundles/api-documentation.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/api-documentation.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 8b7563b9081bee0c12adc1a91c5119e4ceafd3b1..18cce998a6f5b780346cb6c4bccb1b25c284423b 100644 (file)
@@ -1,3 +1,3 @@
 <% content_for :extra_script do %>
-  <script src="/js/bundles/background-tasks.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/background-tasks.js?v=<%= sonar_version -%>"></script>
 <% end %>
index a805ff002fd04d93bc6d8b5d74ec2b2fa026bfb1..f5600f6ca038e77994fb461fbf7bee312c01f00a 100644 (file)
@@ -1,3 +1,3 @@
 <% content_for :extra_script do %>
-  <script src="/js/bundles/code.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/code.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 21b70621c4efaf363ea7317bf49a02e4ba97c3d5..7d421c9d66d178850a03c16e99b3fa90e6b32bcf 100644 (file)
@@ -1,3 +1,3 @@
 <% content_for :extra_script do %>
-  <script src="/js/bundles/coding-rules.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/coding-rules.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 540fd047a6e294fdf53124529e7f7e3950d71264..67618e7b4cbd88db6a0d066a1c6bfadc4b5e0047 100644 (file)
@@ -69,7 +69,7 @@
     <header class="page-header">
       <h1 class="page-title"><%= h message('comparison.page') -%></h1>
     </header>
-    <form method="GET" id="compare-form" action="/comparison/index">
+    <form method="GET" id="compare-form" action="<%= ApplicationController.root_context -%>/comparison/index">
       <input type="hidden" name="sids" id="sids" value="<%= @snapshots.map { |s| s.id.to_s }.join(',') -%>">
       <input type="hidden" name="metrics" id="metrics" value="<%= @metrics.map { |m| m.key }.join(',') -%>">
 
                   $j('#version_loading').show();
                   $j.ajax({
                     type:'GET',
-                    url:'/comparison/versions?resource='
+                    url:'<%= ApplicationController.root_context -%>/comparison/versions?resource='
                       + id + '&sids='
                       + $j('#sids').val(),
                     success:function (data) {
                     <% if index > 0 %>
                       <a class="icon-move-left" href="#" onclick="moveLeft(<%= index -%>)" id="left-<%= index -%>"></a>
                     <% else %>
-                      <img src="/images/transparent_16.gif"/>
+                      <img src="<%= ApplicationController.root_context -%>/images/transparent_16.gif"/>
                     <% end %>
                   </td>
                   <td style="text-align: center; min-width: 100px">
                     <% if index < last_index %>
                       <a class="icon-move-right" href="#" onclick="moveRight(<%= index -%>)" id="right-<%= index -%>"></a>
                     <% else %>
-                      <img src="/images/transparent_16.gif"/>
+                      <img src="<%= ApplicationController.root_context -%>/images/transparent_16.gif"/>
                     <% end %>
                   </td>
                 </tr>
             %>
               <th style="text-align: center; vertical-align: top; line-height: 1.5;">
                 <span class="no-transform">
-                  <a href="/dashboard/index/<%= s.resource.key -%>"><%= h s.resource.name(true) -%></a>
+                  <a href="<%= ApplicationController.root_context -%>/dashboard/index/<%= s.resource.key -%>"><%= h s.resource.name(true) -%></a>
                   <br/>
                   <span class="note"><b><%= event ? h(event.name) : message('comparison.version.latest') -%></b></span>
                   <br/>
index 39ca697ed6e848a7cae64e595371eedecb5b36da..27fe285b3d7358dc99304b53132a63b5c8d979c2 100644 (file)
@@ -9,7 +9,7 @@
       };
     })();
   </script>
-  <script src="/js/bundles/source-viewer.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/source-viewer.js?v=<%= sonar_version -%>"></script>
 <% end %>
 
 
index 53629f560208a3803c7dc68590bae36f46996b4c..b2b853e610b90982c3e9e799afe55d3919e41738 100644 (file)
@@ -9,5 +9,5 @@
       };
     })();
   </script>
-  <script src="/js/bundles/component-issues.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/component-issues.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 48f2b4c0e9532ecf89e15848e2924524ff5d024a..96d117fa27e0180577f0b222f64fda19c544d8e0 100644 (file)
@@ -1,3 +1,3 @@
 <% content_for :extra_script do %>
-  <script src="/js/bundles/component-measures.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/component-measures.js?v=<%= sonar_version -%>"></script>
 <% end %>
index bfecce9911ee77c7b52310000effdaf8b9f272b9..64f47c4f522d39e20fba6514df471083f50a6b1e 100644 (file)
@@ -11,7 +11,7 @@
     </div>
     <div class="modal-body">
       <div class="info">
-        <img src="/images/information.png" style="vertical-align: text-bottom"/>
+        <img src="<%= ApplicationController.root_context -%>/images/information.png" style="vertical-align: text-bottom"/>
         <%= h message(message_key, :params => message_params) -%>
       </div>
     </div>
index cff02fb111d46ab67ec006839761967086ebdeb8..8a7e139e257efa7a20a92b95fc32db3609e896f6 100644 (file)
@@ -2,5 +2,5 @@
   <script>
     window.sonarqube.projectId = '<%= @resource.uuid -%>';
   </script>
-  <script src="/js/bundles/custom-measures.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/custom-measures.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 319694faee35c91686cc578fbcb2ea1113b49408..48343d6ab402d7976557c93edbf912bc6c053124 100644 (file)
@@ -1,4 +1,4 @@
-<form id="configure-widget-<%= widget.id -%>" method="post" action="/dashboard/save_widget?wid=<%= widget.id -%>">
+<form id="configure-widget-<%= widget.id -%>" method="post" action="<%= ApplicationController.root_context -%>/dashboard/save_widget?wid=<%= widget.id -%>">
   <div id="error<%= widget.id -%>" class="error" style="display: none"></div>
   <table class="table width100">
     <tbody>
@@ -65,7 +65,7 @@
         $('#error<%= widget.id -%>').show();
       } else {
         $.ajax({
-          url: baseUrl + '/dashboard/save_widget?wid=<%= widget.id -%>&id=<%= params[:id] -%>',
+          url: window.baseUrl + '/dashboard/save_widget?wid=<%= widget.id -%>&id=<%= params[:id] -%>',
           type: 'POST',
           data: form.serialize(),
           error: function (request) {
index 296fe1e3e00e8930885d7e167b384fd97ac5c852..48b2288e5fae3eedb347dd41970fd23b7203c990 100644 (file)
@@ -1,6 +1,6 @@
 <% content_for :script do %>
-  <script src="/js/bundles/dashboard.js?v=<%= sonar_version -%>"></script>
-  <script src="/js/bundles/widgets.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/dashboard.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/widgets.js?v=<%= sonar_version -%>"></script>
 <% end %>
 
 <div class="page" id="dashboard">
index 6603843b8708e8479bbc359ebdc49c792c230f5a..132fe9ded988941400c2fa525726b3f13729093e 100644 (file)
@@ -1,6 +1,6 @@
 <% content_for :script do %>
-  <script src="/js/bundles/dashboard.js?v=<%= sonar_version -%>"></script>
-  <script src="/js/bundles/widgets.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/dashboard.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/widgets.js?v=<%= sonar_version -%>"></script>
 <% end %>
 
 
index 05f0f5bfb271cef5fccf79f5d6159d9c3cf19f1d..72416ed82eb84fbd1629caffa5d6a1522c968dce 100644 (file)
@@ -14,7 +14,7 @@
       };
     })();
   </script>
-  <script src="/js/bundles/source-viewer.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/source-viewer.js?v=<%= sonar_version -%>"></script>
 <% end %>
 
 
index 298a8073f34843c1ea0b005e578c54eb274e686a..6ea5082291931229b67a816153fcce48476d30e5 100644 (file)
@@ -1,4 +1,4 @@
-<form id="create-dashboard-form" method="post" action="/dashboards/create">
+<form id="create-dashboard-form" method="post" action="<%= ApplicationController.root_context -%>/dashboards/create">
   <% if @global %>
     <input type="hidden" name="global" value="true" />
   <% else %>
@@ -39,7 +39,7 @@
 <script>
   $j("#create-dashboard-form").modalForm({success: function (data) {
     var contextParams = data.trim().length > 0 ? '?resource=' + data.trim() : '';
-    window.location = baseUrl + '/dashboards' + contextParams;
+    window.location = window.baseUrl + '/dashboards' + contextParams;
   }});
 </script>
 
index 9b44f6643a13a5cd2eb3a414484188e3dd52931b..2bbdcfa5270cba9102a4698e8383bc55eb0545a7 100644 (file)
@@ -1,4 +1,4 @@
-<form id="delete-dashboard-form" method="post" action="/dashboards/delete">
+<form id="delete-dashboard-form" method="post" action="<%= ApplicationController.root_context -%>/dashboards/delete">
   <input type="hidden" name="id" value="<%= @dashboard.id -%>">
   <% if @dashboard.global %>
     <input type="hidden" name="global" value="true" />
@@ -27,6 +27,6 @@
 <script>
   $j("#delete-dashboard-form").modalForm({success: function (data) {
     var contextParams = data.trim().length > 0 ? '?resource=' + data.trim() : '';
-    window.location = baseUrl + '/dashboards' + contextParams;
+    window.location = window.baseUrl + '/dashboards' + contextParams;
   }});
 </script>
index 9309a22c5ff52606ae73542d64677a3958b22b5c..afd283ef4ac98e747e43ec1b44e5775a9e23e593 100644 (file)
@@ -1,4 +1,4 @@
-<form id="edit-dashboard-form" method="post" action="/dashboards/update">
+<form id="edit-dashboard-form" method="post" action="<%= ApplicationController.root_context -%>/dashboards/update">
   <input type="hidden" name="id" value="<%= @dashboard.id -%>">
   <% if @dashboard.global %>
     <input type="hidden" name="global" value="true" />
@@ -46,6 +46,6 @@
 <script>
   $j("#edit-dashboard-form").modalForm({success: function (data) {
     var contextParams = data.trim().length > 0 ? '?resource=' + data.trim() : '';
-    window.location = baseUrl + '/dashboards' + contextParams;
+    window.location = window.baseUrl + '/dashboards' + contextParams;
   }});
 </script>
index b071bc9ea401aa241be78c1dd7baf3f833773d77..375fb397e3c21a1565f6e8a5d906dcdc5f6f5108 100644 (file)
@@ -7,7 +7,7 @@
         severity: <% if @severity %>'<%= @severity -%>'<% else %>null<% end %>,
         periodDate: <% if @period %>'<%= @snapshot.period_datetime(@period) -%>'<% else %>null<% end %>
       },
-      url = baseUrl + '/component_issues/index?id=<%= @resource.key -%>#resolved=false';
+      url = window.baseUrl + '/component_issues/index?id=<%= @resource.key -%>#resolved=false';
   if (config.rule) {
     url = url + '|rules=' + config.rule;
   }
index 0de15fd9ff542d7c61ae51e5bf549d3bd8349a65..76265ab10972288fd3cb1c4278cea8301e131025 100644 (file)
@@ -1,4 +1,4 @@
-<form method="post" action="/email_configuration/save" class="marginbottom10">
+<form method="post" action="<%= ApplicationController.root_context -%>/email_configuration/save" class="marginbottom10">
   <table class="marginbottom10">
     <tbody>
     <tr class="property">
@@ -62,7 +62,7 @@
   </table>
 </form>
 
-<form method="post" action="/email_configuration/send_test_email">
+<form method="post" action="<%= ApplicationController.root_context -%>/email_configuration/send_test_email">
   <table class="data marginbottom10">
     <thead>
     <tr>
index 572d1ea6ea5cfa4eef05836c9b19fb2d3b2bce25..e2624527d17ba6e6842d5064101ed9464bd42413 100644 (file)
@@ -17,7 +17,7 @@
                   type="button"
                   value="Generate secret key"
                   onclick="$j.ajax({
-                    url:'/encryption_configuration/generate_secret',
+                    url:'<%=ApplicationController.root_context-%>/encryption_configuration/generate_secret',
                     type:'post',
                     success:function(response){$j('#secret_content').html(response);},
                     error:function(response){$j('#secret_error').html(response.responseText); $j('#secret_error').show();}
index 112eb854801b9011004067d14a607144a461befb..c2a1493ccd579d8930a196d32234279c65dbfdf1 100644 (file)
@@ -13,7 +13,7 @@
         <form  class="spacer-bottom"
                onsubmit=
                  "$j.ajax({
-                   url:'/encryption_configuration/encrypt',
+                   url:'<%=ApplicationController.root_context-%>/encryption_configuration/encrypt',
                    type:'post',
                    success:function(response)
                      {
@@ -31,7 +31,7 @@
                    });
                    return false;"
                method="post"
-               action="/encryption_configuration/encrypt"      >
+               action="<%=ApplicationController.root_context-%>/encryption_configuration/encrypt"      >
         <!-- for our lovely Chrome -->
         <input style="display:none">
         <input type="password" name="fake" style="display:none">
index 747f7383293aa7b5c43d69cc31bd2554f66f083a..e3bee63260c5e3098c9dd94672b0072e94bcf0a3 100644 (file)
@@ -1,3 +1,3 @@
 <% content_for :extra_script do %>
-  <script src="/js/bundles/groups.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/groups.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 81e331a02a32f5392060294dc6c84d49be935c2d..1d209e79cf9635669d4270c673dd7675424b4e95 100644 (file)
@@ -23,7 +23,7 @@
      all_issues_are_assigned_to_current_user &&= issue.assignee() == current_user.login
    end
 %>
-<form id="bulk-change-form" method="post" action="/issues/bulk_change">
+<form id="bulk-change-form" method="post" action="<%= ApplicationController.root_context -%>/issues/bulk_change">
   <input type="hidden" name="issues" value="<%= @issues.map { |issue| issue.key() }.join(',') -%>">
   <input type="hidden" name="actions[]" id="bulk-change-transition-action">
   <fieldset>
index 51551254393d345c1a9ab1f41117b515dde0d33e..ad34992b2884deeea086284bfce55c3af4210610 100644 (file)
@@ -1,4 +1,4 @@
-<form id="copy-filter-form" method="post" action="/issues/copy">
+<form id="copy-filter-form" method="post" action="<%= ApplicationController.root_context -%>/issues/copy">
   <input type="hidden" name="id" value="<%= @filter.id -%>">
   <fieldset>
     <div class="modal-head">
index c30a633e20202ff36f6b92094d88923225f245e3..650e7e19993aea0e9eb53b5540f800d383193c19 100644 (file)
@@ -1,4 +1,4 @@
-<form id="edit-filter-form" method="post" action="/issues/edit">
+<form id="edit-filter-form" method="post" action="<%= ApplicationController.root_context -%>/issues/edit">
   <input type="hidden" name="id" value="<%= @filter.id -%>">
   <fieldset>
     <div class="modal-head">
index 339e6cde5b775416668ee978e5ceb89984c72c00..a771f24bd01ead91e2bdd827d8ba4fb4fabe336e 100644 (file)
@@ -1,4 +1,4 @@
-<form id="save-as-filter-form" method="post" action="/issues/save_as">
+<form id="save-as-filter-form" method="post" action="<%= ApplicationController.root_context -%>/issues/save_as">
   <input type="hidden" name="data" value="<%= u(@filter_query_serialized) -%>">
   <fieldset>
     <div class="modal-head">
index d3019835eb58c1264222217cbe84e3a70af683b8..6f069b685338304c86ad7f77d2c07c8779a2bd40 100644 (file)
@@ -6,7 +6,7 @@
         var star = $j(this);
         $j.ajax({
           type: 'POST',
-          url: baseUrl + "/issues/toggle_fav",
+          url: window.baseUrl + "/issues/toggle_fav",
           data: {id: filterId},
           success: function (data) {
             if (data == 'true') {
     });
 
     function onSaveAs(data) {
-      window.location = baseUrl + '/issues/search#id=' + data;
+      window.location = window.baseUrl + '/issues/search#id=' + data;
     }
 
     function onCopy(data) {
-      window.location = baseUrl + '/issues/search#id=' + data;
+      window.location = window.baseUrl + '/issues/search#id=' + data;
     }
 
     function onEdit(data) {
-      window.location = baseUrl + '/issues/search#id=' + data;
+      window.location = window.baseUrl + '/issues/search#id=' + data;
     }
   </script>
 <% end %>
@@ -59,7 +59,7 @@
               <%= issue_filter_star(filter, @favourite_filter_ids.include?(filter.id)) -%>
             </td>
             <td>
-              <a href="/issues/search#id=<%= h filter.id -%>"><%= h filter.name -%></a>
+              <a href="<%= ApplicationController.root_context -%>/issues/search#id=<%= h filter.id -%>"><%= h filter.name -%></a>
               <% if filter.description %>
                 <div class="note"><%= h filter.description -%></div>
               <% end %>
               <% end %>
             </td>
             <td class="thin nowrap text-right">
-              <a id="copy-<%= filter.name.parameterize -%>" href="/issues/copy_form/<%= filter.id -%>"
+              <a id="copy-<%= filter.name.parameterize -%>" href="<%= ApplicationController.root_context -%>/issues/copy_form/<%= filter.id -%>"
                  class="link-action open-modal"><%= message('copy') -%></a>
               &nbsp;
-              <a id="edit_<%= filter.name.parameterize -%>" href="/issues/edit_form/<%= filter.id -%>"
+              <a id="edit_<%= filter.name.parameterize -%>" href="<%= ApplicationController.root_context -%>/issues/edit_form/<%= filter.id -%>"
                  class="link-action open-modal"><%= message('edit') -%></a>
               &nbsp;
-              <%= link_to_action message('delete'), "/issues/delete/#{filter.id}",
+              <%= link_to_action message('delete'), "#{ApplicationController.root_context}/issues/delete/#{filter.id}",
                                  :class => 'link-action link-red',
                                  :id => "delete_#{filter.name.parameterize}",
                                  :confirm_button => message('delete'),
               <%= issue_filter_star(filter, @favourite_filter_ids.include?(filter.id)) -%>
             </td>
             <td>
-              <a href="/issues/search#id=<%= h filter.id -%>|<%= h filter.data -%>"><%= h filter.name -%></a>
+              <a href="<%= ApplicationController.root_context -%>/issues/search#id=<%= h filter.id -%>|<%= h filter.data -%>"><%= h filter.name -%></a>
               <% if filter.description %>
                 <div class="note"><%= h filter.description -%></div>
               <% end %>
               <%= filter.userLogin ? h(Api.users.findByLogin(filter.userLogin).name) : '[SonarQube]' -%>
             </td>
             <td class="thin nowrap text-right">
-              <a id="copy-<%= filter.name.parameterize -%>" href="/issues/copy_form/<%= filter.id -%>" class="link-action open-modal"><%= message('copy') -%></a>
+              <a id="copy-<%= filter.name.parameterize -%>" href="<%= ApplicationController.root_context -%>/issues/copy_form/<%= filter.id -%>" class="link-action open-modal"><%= message('copy') -%></a>
               <% if has_role?(:admin) %>
                 &nbsp;
-                <a id="edit_shared_<%= filter.name.parameterize -%>" href="/issues/edit_form/<%= filter.id -%>" class="link-action open-modal"><%= message('edit') -%></a>
+                <a id="edit_shared_<%= filter.name.parameterize -%>" href="<%= ApplicationController.root_context -%>/issues/edit_form/<%= filter.id -%>" class="link-action open-modal"><%= message('edit') -%></a>
                 &nbsp;
-                <%= link_to_action message('delete'), "/issues/delete/#{filter.id}",
+                <%= link_to_action message('delete'), "#{ApplicationController.root_context}/issues/delete/#{filter.id}",
                                    :class => 'link-action link-red',
                                    :id => "delete_system_#{filter.name.parameterize}",
                                    :confirm_button => message('delete'),
index 48b7b4b268dea80845dfe3ace1251478cc51e4aa..b1baf27f96c5dd63c454ead3f717b02f8dabd42e 100644 (file)
@@ -1,3 +1,3 @@
 <% content_for :extra_script do %>
-  <script src="/js/bundles/issues.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/issues.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 409489b00943910cb5e746f98ae79a8d7bf29463..c5dbab53411d3ddedff9f56b7d9febc73638b297 100644 (file)
@@ -16,7 +16,7 @@
   </script>
 <% end %>
 
-<script src="/js/bundles/main.js?v=<%= sonar_version -%>"></script>
+<script src="<%= ApplicationController.root_context -%>/js/bundles/main.js?v=<%= sonar_version -%>"></script>
 <%= yield :extra_script -%>
 
 </body>
index ec1b9db64c7c1a314a01b5046983b5f429a8a449..66c5645c688a3a0fd01aed685048bc09264e7de2 100644 (file)
@@ -18,7 +18,7 @@
   %>
   <title><%= title -%></title>
 
-  <link href="/css/sonar.css?v=<%= sonar_version -%>" rel="stylesheet" media="all">
+  <link href="<%= ApplicationController.root_context -%>/css/sonar.css?v=<%= sonar_version -%>" rel="stylesheet" media="all">
   <%= yield :style -%>
 
   <script>
       updateCenterActive: <%= configuration('sonar.updatecenter.activate', true) %>
     };
   </script>
-  <script src="/js/bundles/vendor.js?v=<%= sonar_version -%>"></script>
-  <script src="/js/bundles/sonar.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/vendor.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/sonar.js?v=<%= sonar_version -%>"></script>
   <script>
-    window.baseUrl = '';
+    window.baseUrl = '<%= ApplicationController.root_context -%>';
   </script>
   <%= yield :script -%>
 </head>
index 55cfc7eb40914ffd5760a2ba1d5b3fc911ccc294..956616e9c7b6e98700a3f13b2f0f3d67e369b4fd 100644 (file)
@@ -56,7 +56,7 @@
       <a href="http://www.sonarqube.org/documentation" target="sonar_doc">Documentation</a> -
       <a href="http://www.sonarqube.org/support" target="support">Get Support</a> -
       <a href="http://redirect.sonarsource.com/doc/plugin-library.html" target="plugins">Plugins</a> -
-      <a href="/web_api">Web API</a>
+      <a href="<%= ApplicationController.root_context -%>/web_api">Web Service API</a>
     </div>
     <!--[if lte IE 8 ]><p class="spacer-top alert alert-danger">IE 8 is not supported. Some widgets may not be properly displayed. Please switch to a <a target="_blank" href="http://redirect.sonarsource.com/doc/requirements.html">supported version or another supported browser</a>.</p><!--<![endif]-->
   </div>
index 34a06883d13921afb38142db33f981df29ec9c04..be802926bd3d4fb3c2e7b70c6a29b8f9c7f824df 100644 (file)
@@ -2,8 +2,8 @@
 
 <nav class="navbar navbar-global page-container" id="global-navigation">
   <div class="navbar-header">
-    <a class="navbar-brand" href="/">
-      <img src="/images/logo.svg" height="30"
+    <a class="navbar-brand" href="<%= ApplicationController.root_context -%>/">
+      <img src="<%= ApplicationController.root_context -%>/images/logo.svg" height="30"
            alt="<%= h message('layout.sonar.slogan') -%>"
            title="<%= h message('layout.sonar.slogan') -%>">
     </a>
@@ -24,7 +24,7 @@
     <a href="http://www.sonarqube.org/documentation" target="sonar_doc">Documentation</a> -
     <a href="http://www.sonarqube.org/support" target="support">Get Support</a> -
     <a href="http://redirect.sonarsource.com/doc/plugin-library.html" target="plugins">Plugins</a> -
-    <a href="/web_api">Web API</a>
+    <a href="<%= ApplicationController.root_context -%>/web_api">Web API</a>
   </div>
   <%= render 'branding/footer' -%>
 </div>
@@ -36,7 +36,7 @@
   })(window.jQuery);
 </script>
 
-<script src="/js/bundles/main.js?v=<%= sonar_version -%>"></script>
+<script src="<%= ApplicationController.root_context -%>/js/bundles/main.js?v=<%= sonar_version -%>"></script>
 <%= yield :extra_script -%>
 
 </body></html>
index 106956d89d98ce3e9dc2da6a7f1a95190ad85272..346aa13f86077f1fbf2ade91652a3c9d9f0eb62d 100644 (file)
@@ -2,6 +2,6 @@
   <script>
     window.sonarqube.setup = false;
   </script>
-  <script src="/js/bundles/maintenance.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/maintenance.js?v=<%= sonar_version -%>"></script>
 <% end %>
 
index 84057db8521eb718c9f4b09a62e087b4d6942c53..6f667bc45cd3d7021b49837d8b298e9bf7f267f3 100644 (file)
@@ -4,5 +4,5 @@
   <script>
     window.sonarqube.el = '#markdown-full-help';
   </script>
-  <script src="/js/bundles/markdown.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/markdown.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 7fa6351ed3da0439b0c897bfea91ee39f08cf332..8112f5105a4442f2874301a7c1e9b2afdec016ff 100644 (file)
@@ -1,4 +1,4 @@
-<form id="copy-filter-form" method="post" action="/measures/copy">
+<form id="copy-filter-form" method="post" action="<%= ApplicationController.root_context -%>/measures/copy">
   <input type="hidden" name="id" value="<%= @filter.id -%>">
   <fieldset>
     <div class="modal-head">
@@ -15,6 +15,6 @@
 </form>
 <script>
   $j("#copy-filter-form").modalForm({success: function (data) {
-    window.location = baseUrl + '/measures/filter/' + data;
+    window.location = window.baseUrl + '/measures/filter/' + data;
   }});
 </script>
index 7c6ebfcb704e4b84d09b462866244229dd29bc48..2e27d04a14c740580c70063828de95d3295cdb69 100644 (file)
@@ -9,7 +9,7 @@
     filterCriteria<%= widget_id -%>['sort']=sort;
     filterCriteria<%= widget_id -%>['asc']=asc;
     filterCriteria<%= widget_id -%>['page']=page;
-    var url=baseUrl + '/measures/search/<%= filter.id -%>?widget_id=<%= widget_id -%>&' + $j.param(filterCriteria<%= widget_id -%>);
+    var url = window.baseUrl + '/measures/search/<%= filter.id -%>?widget_id=<%= widget_id -%>&' + $j.param(filterCriteria<%= widget_id -%>);
 
     <% if widget_id %>
     $j('#measure_filter_list<%= widget_id -%>').load(url);
           }
           cols.push(columnKey);
           filterCriteria['edit']='true';
-          window.location = baseUrl + '/measures/search/<%= filter.id -%>?' + $j.param(filterCriteria<%= widget_id -%>);
+          window.location = window.baseUrl + '/measures/search/<%= filter.id -%>?' + $j.param(filterCriteria<%= widget_id -%>);
         });
         $j("#add-metric").attr("disabled", "disabled");
 
         $j("#exit-edit").on("click", function (e) {
           delete filterCriteria['edit'];
-          window.location = baseUrl + '/measures/search/<%= filter.id -%>?' + $j.param(filterCriteria<%= widget_id -%>);
+          window.location = window.baseUrl + '/measures/search/<%= filter.id -%>?' + $j.param(filterCriteria<%= widget_id -%>);
         });
       });
     </script>
index dff381e9e19db64ba615470299645d86641acef1..361edddcd9ac99fdd69bbd54988e6717fb52afe8 100644 (file)
@@ -1,4 +1,4 @@
-<form id="edit-filter-form" method="post" action="/measures/edit">
+<form id="edit-filter-form" method="post" action="<%= ApplicationController.root_context -%>/measures/edit">
   <input type="hidden" name="id" value="<%= @filter.id -%>">
   <fieldset>
     <div class="modal-head">
@@ -15,6 +15,6 @@
 </form>
 <script>
   $j("#edit-filter-form").modalForm({success: function (data) {
-    window.location = baseUrl + '/measures/filter/' + data;
+    window.location = window.baseUrl + '/measures/filter/' + data;
   }});
 </script>
index d12704e559d87c4f2456c9e394ebf4957214f3a2..8961805961404304fb1a881072afc19931f6afad 100644 (file)
@@ -3,10 +3,10 @@
   <li class="sidebar-title"><%= message('measure_filter.favourite_filters') -%></li>
   <% current_user.favourited_measure_filters.each do |filter| %>
     <li <%= "class='active'" if @filter && filter.id==@filter.id -%>>
-      <a href="/measures/filter/<%= filter.id -%>"><%= h filter.name -%></a>
+      <a href="<%= ApplicationController.root_context -%>/measures/filter/<%= filter.id -%>"><%= h filter.name -%></a>
     </li>
   <% end %>
-  <li><a href="/measures/manage" class="link-action"><%= message('manage') %></a></li>
+  <li><a href="<%= ApplicationController.root_context -%>/measures/manage" class="link-action"><%= message('manage') %></a></li>
   <li class="spacer"></li>
 <% end %>
 </div>
index b43563c5e80793847a5783589b3e143df1a096b3..2bfc2eb15164679bb5eb0fd13032d0b4ec6483fb 100644 (file)
@@ -1,4 +1,4 @@
-<form id="save-as-filter-form" method="post" action="/measures/save_as">
+<form id="save-as-filter-form" method="post" action="<%= ApplicationController.root_context -%>/measures/save_as">
   <input type="hidden" name="id" value="<%= @filter.id -%>">
   <input type="hidden" name="data" value="<%= u(@filter.data) -%>">
   <fieldset>
@@ -16,6 +16,6 @@
 </form>
 <script>
   $j("#save-as-filter-form").modalForm({success:function (data) {
-    window.location = baseUrl + '/measures/filter/' + data;
+    window.location = window.baseUrl + '/measures/filter/' + data;
   }});
 </script>
index 6c4c3581a50721f0cf3c488cf74491ec25401225..fa098e9775049cbba7696cdd4e997c2a5f60890a 100644 (file)
@@ -24,7 +24,7 @@
 
   <div class="page-actions">
     <div class="button-group">
-      <button onclick="window.location='/measures/search?qualifiers[]=TRK';"><%= message 'measure_filter.new_search' -%></button>
+      <button onclick="window.location='<%= ApplicationController.root_context -%>/measures/search?qualifiers[]=TRK';"><%= message 'measure_filter.new_search' -%></button>
 
       <% unless edit_mode %>
         <% if logged_in? %>
index 802605fe3e1c076fdef0096274ae5f9caede9855..3017c74dcff32c15c8e97fa8593fa0b048f1b54c 100644 (file)
@@ -6,7 +6,7 @@
         var star = $j(this);
         $j.ajax({
           type: 'POST',
-          url: baseUrl + "/measures/toggle_fav",
+          url: window.baseUrl + "/measures/toggle_fav",
           data: {id: filterId},
           success: function (data) {
             if (data == 'true') {
                 <% end %>
               </td>
               <td class="text-thin nowrap text-right">
-                <a id="copy-<%= filter.name.parameterize -%>" href="/measures/copy_form/<%= filter.id -%>" class="link-action open-modal"><%= message('copy') -%></a>
+                <a id="copy-<%= filter.name.parameterize -%>" href="<%= ApplicationController.root_context -%>/measures/copy_form/<%= filter.id -%>" class="link-action open-modal"><%= message('copy') -%></a>
                 &nbsp;
-                <a id="edit_<%= filter.name.parameterize -%>" href="/measures/edit_form/<%= filter.id -%>" class="link-action open-modal"><%= message('edit') -%></a>
+                <a id="edit_<%= filter.name.parameterize -%>" href="<%= ApplicationController.root_context -%>/measures/edit_form/<%= filter.id -%>" class="link-action open-modal"><%= message('edit') -%></a>
                 &nbsp;
-                <%= link_to_action message('delete'), "/measures/delete/#{filter.id}",
+                <%= link_to_action message('delete'), "#{ApplicationController.root_context}/measures/delete/#{filter.id}",
                                    :class => 'link-action link-red',
                                    :id => "delete_#{filter.name.parameterize}",
                                    :confirm_button => message('delete'),
                 <%= filter.user ? h(filter.user.name) : '[SonarQube]' -%>
               </td>
               <td class="thin nowrap text-right">
-                <a id="copy-<%= filter.name.parameterize -%>" href="/measures/copy_form/<%= filter.id -%>" class="link-action open-modal"><%= message('copy') -%></a>
+                <a id="copy-<%= filter.name.parameterize -%>" href="<%= ApplicationController.root_context -%>/measures/copy_form/<%= filter.id -%>" class="link-action open-modal"><%= message('copy') -%></a>
                 <% if has_role?(:admin) %>
                   &nbsp;
-                  <a id="edit_system_<%= filter.name.parameterize -%>" href="/measures/edit_form/<%= filter.id -%>" class="link-action open-modal"><%= message('edit') -%></a>
+                  <a id="edit_system_<%= filter.name.parameterize -%>" href="<%= ApplicationController.root_context -%>/measures/edit_form/<%= filter.id -%>" class="link-action open-modal"><%= message('edit') -%></a>
                   &nbsp;
-                  <%= link_to_action message('delete'), "/measures/delete/#{filter.id}",
+                  <%= link_to_action message('delete'), "#{ApplicationController.root_context}/measures/delete/#{filter.id}",
                                      :class => 'link-action link-red',
                                      :id => "delete_system_#{filter.name.parameterize}",
                                      :confirm_button => message('delete'),
index 5d0bd1c595bf018458d7fd207c184452b024e4ab..fff811989ea8f17e979f6fd16f5c9cd13714b1b0 100644 (file)
@@ -16,7 +16,7 @@
 
 
 <script id="filter-bar-template" type="text/x-handlebars-template">
-  <form method="get" action="/measures/search">
+  <form method="get" action="<%= ApplicationController.root_context -%>/measures/search">
     <% if @filter.id %>
       <input type="hidden" name="id" value="<%= h @filter.id -%>">
     <% end %>
@@ -93,5 +93,5 @@
     ];
   </script>
 
-  <script src="/js/bundles/measures.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/measures.js?v=<%= sonar_version -%>"></script>
 <% end %>
index e8879ceb4320df166724934c8b996997be080c49..5a8e0641d976875e9e53a228510b81a8df00240a 100644 (file)
@@ -1,3 +1,3 @@
 <% content_for :extra_script do %>
-  <script src="/js/bundles/metrics.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/metrics.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 3990afdce08c32fb372ab63c6de386ec02aff1ff..e5fc799417b220f73a2716cdf727ab91f2c2ec5d 100644 (file)
       };
     })();
   </script>
-  <script src="/js/bundles/overview.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/overview.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 7597579ae760a5d9bf75cf53f13c9241ea8a32e6..fb97f387c59fd54f930aa79d8a3f125ad098a247 100644 (file)
@@ -1,3 +1,3 @@
 <% content_for :extra_script do %>
-  <script src="/js/bundles/permission-templates.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/permission-templates.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 898ed10342f6aca8ede81adf09183aec3dc3aef4..b41bb0bbcd5ed58805df857cf5e2e65b8c8326aa 100644 (file)
@@ -1,6 +1,6 @@
 <% content_for :extra_script do %>
   <script>
-    window.sonarqube.urlRoot = baseUrl + '/profiles';
+    window.sonarqube.urlRoot = window.baseUrl + '/profiles';
   </script>
-  <script src="/js/bundles/quality-profiles.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/quality-profiles.js?v=<%= sonar_version -%>"></script>
 <% end %>
index f4fddfc43915b43f116fbe3c7fcc73b76b565134..79c73cd6f8255b464ac2d80e2f6d6f54ac69f27e 100644 (file)
@@ -1,5 +1,5 @@
 <% resource_qualifier = message('qualifier.' + @project.qualifier) %>
-<form id="delete-project-form" method="post" action="/project/delete">
+<form id="delete-project-form" method="post" action="<%= ApplicationController.root_context -%>/project/delete">
   <fieldset>
     <div class="modal-head">
       <h2><%= message('project_deletion.page', :params => resource_qualifier) -%></h2>
@@ -18,7 +18,7 @@
   $j("#delete-project-form").modalForm({
     success: function () {
       $j.ajax({
-        url: "/project/delete/<%= h(@project.id) -%>",
+        url: "<%= ApplicationController.root_context-%>/project/delete/<%= h(@project.id) -%>",
         success: function (request) {
           window.location = '<%= url_for(:action => 'pending_deletion',:id => @project.id)-%>';
         },
index 096a2eb2f8b78a6ed4ca37cf9503a8f80f150dbb..ba6d27a4da6148bf5c12d68bcbc31ccaa3849083 100644 (file)
@@ -2,5 +2,5 @@
   <script>
     window.sonarqube.componentId = '<%= @project.uuid -%>';
   </script>
-  <script src="/js/bundles/background-tasks.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/background-tasks.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 8f9f509b939b93e67299485f5b1e45bb6a69c3e2..73bdb62f6bef669f7b04c4b8fa3a2f6b945c0db3 100644 (file)
@@ -12,7 +12,7 @@
     <div class="yui-g widget" id="widget_delete_project">
       <div class="alert alert-warning spacer-bottom"><%= message('project_deletion.operation_cannot_be_undone') -%></div>
       <a id="delete_resource" class="open-modal button button-red"
-         href="/project/delete_form/<%= h(@project.id) -%>"><%= delete_resource_message -%></a>
+         href="<%= ApplicationController.root_context -%>/project/delete_form/<%= h(@project.id) -%>"><%= delete_resource_message -%></a>
     </div>
   <% end %>
 </div>
index 399e50a65c2e4ef34ca2838b6d98c5ffe08578aa..d24f845572e5d0aa41173f356abcf40d8029ec23 100644 (file)
@@ -19,7 +19,7 @@
       <tr class="<%= cycle 'even', 'odd' -%>">
         <td class="thin" nowrap><%= h language.getName() -%></td>
         <td>
-          <form id="form-<%= language.getKey().parameterize -%>" method="POST" action="/project/set_profile">
+          <form id="form-<%= language.getKey().parameterize -%>" method="POST" action="<%= ApplicationController.root_context -%>/project/set_profile">
             <input type="hidden" name="id" value="<%= @project_id -%>"/>
             <input type="hidden" name="language" value="<%= language.getKey() -%>"/>
 
index d14507675a018885db13ff1bca7b389d7e1b849a..cd6e5a57567b46151cf2811c563c3ab06a233dbd 100644 (file)
@@ -4,7 +4,7 @@
     <p class="page-description"><%= message('project_quality_gate.page.description') -%></p>
   </header>
 
-  <form id="select-quality-gate" method="POST" action="/project/set_qualitygate">
+  <form id="select-quality-gate" method="POST" action="<%= ApplicationController.root_context -%>/project/set_qualitygate">
     <input type="hidden" name="id" value="<%= @project_id -%>"/>
     <input type="hidden" name="previous_qgate_id" value="<%= @selected_qgate -%>"/>
 
index 70938e7cad1712b9618c0813c40fbf0eb2c10e2d..02610e495e4d9e5fac72a0e3d2dcc503b8b358d8 100644 (file)
@@ -56,7 +56,7 @@
             <%= h truncate(issue.message, :length => 100) -%></a>
           <% if last_comment && last_comment.userLogin() %>
             <div class="comment-excerpt">
-              <img src="/images/reviews/comment.png"/>
+              <img src="<%= ApplicationController.root_context -%>/images/reviews/comment.png"/>
               <% commentAuthor = users_by_login[last_comment.userLogin()] %>
               &nbsp;<b><%= h( commentAuthor.nil? ? last_comment.userLogin() : commentAuthor.name() ) -%> :</b>
               <%= Internal.text.markdownToHtml(last_comment.markdownText) -%>
index 57b2c1ab069a96b8820a5b816ef60a41b7607ac9..2ffe436320a8dfb4218111ba58159fb7b09a62f0 100644 (file)
@@ -2,5 +2,5 @@
   <script>
     window.sonarqube.componentId = '<%= @project.uuid -%>';
   </script>
-  <script src="/js/bundles/project-permissions.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/project-permissions.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 290a9ac5f9f7c1a8e974fd044f1a6d2056ada199..e9c8ffd9ad8506e3f552e4865f1362303d2ad48f 100644 (file)
@@ -1,3 +1,3 @@
 <% content_for :extra_script do %>
-  <script src="/js/bundles/projects.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/projects.js?v=<%= sonar_version -%>"></script>
 <% end %>
index ed03db047c09f27f107d576821ede99f1b6552c5..5cc9585f4dd8ff3c47740f46b7a4e7ccf0a89533 100644 (file)
@@ -1,6 +1,6 @@
 <% content_for :extra_script do %>
   <script>
-    window.sonarqube.urlRoot = baseUrl + '/quality_gates';
+    window.sonarqube.urlRoot = window.baseUrl + '/quality_gates';
   </script>
-  <script src="/js/bundles/quality-gates.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/quality-gates.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 1b84a1069deddabf4b864df28056d9bd78eb2aab..3c79bb2feca566f738448260d59c76e8f4f98cae 100644 (file)
@@ -1,3 +1,3 @@
 <% content_for :extra_script do %>
-  <script src="/js/bundles/global-permissions.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/global-permissions.js?v=<%= sonar_version -%>"></script>
 <% end %>
index b37e4b37e9258ba2b81b84ec4c88f39de2a36fba..df0126ffd091829d2c4a609d1f5e6fa433b20121 100644 (file)
@@ -1,3 +1,3 @@
 <% content_for :extra_script do %>
-  <script src="/js/bundles/project-permissions.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/project-permissions.js?v=<%= sonar_version -%>"></script>
 <% end %>
index feede78b06eaa0d973ceca6a2a684eed5b4bf270..6e7bb79fa362ddc035edf19dd4df4a9896ed9d31 100644 (file)
@@ -1,4 +1,4 @@
-<form method="post" action="/server_id_configuration/generate">
+<form method="post" action="<%= ApplicationController.root_context -%>/server_id_configuration/generate">
   <table class="marginbottom10">
     <thead>
     <tr>
index 7d87eabaa49f3d839e980015e8d79dc79be5077b..9ef0f8ba55df0cd8e553b108cce84778d9fc716e 100644 (file)
@@ -85,7 +85,7 @@
       <div class="marginbottom10" style="padding-left: 5px;">
         <%= hidden_field_tag('page_version', (params[:page_version] || 0).to_i + 1) -%>
         <%= submit_tag(message('settings.save_category', :params => [subcategory_name(@category, @subcategory)]), :id => 'submit_settings') -%>
-        <img src="/images/loading.gif" id="loading_settings" style="display:none;">
+        <img src="<%= ApplicationController.root_context -%>/images/loading.gif" id="loading_settings" style="display:none;">
       </div>
       <% end %>
 
index 2d20d38d06fd9e41690b52b311b1fb9ed185c06f..a06263ce4456e773df56820267137e0e69cfe928 100644 (file)
@@ -2,6 +2,6 @@
   <script>
     window.sonarqube.setup = true;
   </script>
-  <script src="/js/bundles/maintenance.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/maintenance.js?v=<%= sonar_version -%>"></script>
 <% end %>
 
index cd47108111d84a6414893f00c13ef80160676406..1cb1986738883d44fdea7a1f594cc5e013dbe30f 100644 (file)
@@ -1,4 +1,4 @@
 <% content_for :extra_script do %>
-<script src="/js/bundles/system.js?v=<%= sonar_version -%>"></script>
+<script src="<%= ApplicationController.root_context -%>/js/bundles/system.js?v=<%= sonar_version -%>"></script>
 <% end %>
 
index d98e537dcfb9ff02b0d3f1aada3eda9d6dd8c0b4..403d4baf226db3a863a60b7702cddb74bcd2b875 100644 (file)
@@ -1,7 +1,7 @@
 <% content_for :extra_script do %>
   <script>
-    window.sonarqube.urlRoot = baseUrl + '/updatecenter';
+    window.sonarqube.urlRoot = window.baseUrl + '/updatecenter';
   </script>
-  <script src="/js/bundles/update-center.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/update-center.js?v=<%= sonar_version -%>"></script>
 <% end %>
 
index 8e36411a411dc11907c55864bea8fb1c432b4993..17fc622e6007aecf058cac45f5aec0bad9ac1c55 100644 (file)
@@ -1,4 +1,4 @@
-<form id="user_edit_form" method="post" action="/users/update">
+<form id="user_edit_form" method="post" action="<%= ApplicationController.root_context -%>/users/update">
 <fieldset>
       <div class="modal-head">
         <h2>Edit user: <%= h @user.login() -%></h2>
index b7ba2fbd7e592a187173e45a276a9f221f889efe..73d9880257322690e75c203fb5135edde4b69be1 100644 (file)
@@ -21,9 +21,9 @@
       }
       return label;
     },
-    searchUrl: baseUrl + '/user_groups/search?user=<%= @user.login -%>',
-    selectUrl: baseUrl + '/groups/add_member',
-    deselectUrl: baseUrl + '/groups/remove_member',
+    searchUrl: window.baseUrl + '/user_groups/search?user=<%= @user.login -%>',
+    selectUrl: window.baseUrl + '/groups/add_member',
+    deselectUrl: window.baseUrl + '/groups/remove_member',
     extra: {
       user: '<%= @user.login -%>'
     },
index 12257ae3f4d87ee85cd1e037b076d0ac9b8ac036..56d012090af0b4e15f371a394974f35cfcaf126c 100644 (file)
@@ -1,3 +1,3 @@
 <% content_for :extra_script do %>
-  <script src="/js/bundles/users.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/users.js?v=<%= sonar_version -%>"></script>
 <% end %>
index a805ff002fd04d93bc6d8b5d74ec2b2fa026bfb1..f5600f6ca038e77994fb461fbf7bee312c01f00a 100644 (file)
@@ -1,3 +1,3 @@
 <% content_for :extra_script do %>
-  <script src="/js/bundles/code.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/code.js?v=<%= sonar_version -%>"></script>
 <% end %>
index 5e276447f7d4dc51ad8f0b0dd624ee04070c5d39..8edb6222ec34e8e145777f0242847650a68d4a0b 100644 (file)
@@ -1,6 +1,6 @@
 <% content_for :extra_script do %>
   <script>
-    window.sonarqube.urlRoot = '/web_api';
+    window.sonarqube.urlRoot = window.baseUrl + '/web_api';
   </script>
-  <script src="/js/bundles/web-api.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/web-api.js?v=<%= sonar_version -%>"></script>
 <% end %>
index d2ca0b0b9c3afd8f22a35f24902b6140f9958a13..ea9e4e3e9d58affe05783c8e929fcd0745cd09ab 100644 (file)
@@ -1,6 +1,6 @@
 <% content_for :script do %>
-  <script src="/js/bundles/dashboard.js?v=<%= sonar_version -%>"></script>
-  <script src="/js/bundles/widgets.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/dashboard.js?v=<%= sonar_version -%>"></script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/widgets.js?v=<%= sonar_version -%>"></script>
 <% end %>
 
 <div id="block_1" class="block" style="width: <%= @widget_width -%>">
index 1cb46cd7952d455c150393a6e76140b285724869..39b7c43b963c866b4ddc1f3c81792d7a9b761f58 100644 (file)
@@ -29,6 +29,11 @@ describe('URLs', function () {
     it('should encode component key', function () {
       expect(getComponentUrl(COMPLEX_COMPONENT_KEY)).to.equal('/dashboard?id=' + COMPLEX_COMPONENT_KEY_ENCODED);
     });
+
+    it('should take baseUrl into account', function () {
+      window.baseUrl = '/context';
+      expect(getComponentUrl(COMPLEX_COMPONENT_KEY)).to.equal('/context/dashboard?id=' + COMPLEX_COMPONENT_KEY_ENCODED);
+    });
   });
 
   describe('#getComponentIssuesUrl', function () {
@@ -51,6 +56,12 @@ describe('URLs', function () {
       expect(getComponentIssuesUrl(SIMPLE_COMPONENT_KEY, { componentUuids: COMPLEX_COMPONENT_KEY })).to.equal(
           '/component_issues?id=' + SIMPLE_COMPONENT_KEY + '#componentUuids=' + COMPLEX_COMPONENT_KEY_ENCODED);
     });
+
+    it('should take baseUrl into account', function () {
+      window.baseUrl = '/context';
+      expect(getComponentIssuesUrl(SIMPLE_COMPONENT_KEY, {})).to.equal(
+          '/context/component_issues?id=' + SIMPLE_COMPONENT_KEY + '#');
+    });
   });
 
   describe('#getComponentDrilldownUrl', function () {
@@ -63,5 +74,11 @@ describe('URLs', function () {
       expect(getComponentDrilldownUrl(COMPLEX_COMPONENT_KEY, METRIC)).to.equal(
           '/component_measures/metric/' + METRIC + '?id=' + COMPLEX_COMPONENT_KEY_ENCODED);
     });
+
+    it('should take baseUrl into account', function () {
+      window.baseUrl = '/context';
+      expect(getComponentDrilldownUrl(SIMPLE_COMPONENT_KEY, METRIC)).to.equal(
+          '/context/component_measures/metric/' + METRIC + '?id=' + SIMPLE_COMPONENT_KEY);
+    });
   });
 });
index 6fb408ff7ef26a526256dddbc0827cc850812c6b..f1d92d7d81870ec99cf80c018c8847d4cc7d363e 100644 (file)
@@ -9,6 +9,7 @@ global.document = jsdom.jsdom('<!doctype html><html><body></body></html>');
 global.window = document.defaultView;
 global.navigator = document.defaultView.navigator;
 
+global.window.baseUrl = '';
 global.window.t = global.window.tp = function () {
   var args = Array.prototype.slice.call(arguments, 0);
   return args.join('.');