]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6331 revert overview page
authorStas Vilchik <vilchiks@gmail.com>
Tue, 15 Sep 2015 15:54:25 +0000 (17:54 +0200)
committerStas Vilchik <vilchiks@gmail.com>
Wed, 16 Sep 2015 08:12:15 +0000 (10:12 +0200)
44 files changed:
it/it-tests/src/test/resources/server/ServerTest/url_ending_by_jsp.html
it/it-tests/src/test/resources/ui/i18n/default-locale-is-english.html
it/it-tests/src/test/resources/ui/i18n/french-locale.html
it/it-tests/src/test/resources/ui/i18n/locale-with-france-country.html
it/it-tests/src/test/resources/ui/i18n/locale-with-swiss-country.html
server/sonar-web/Gruntfile.coffee
server/sonar-web/src/main/js/apps/nav/component/component-nav-menu.jsx
server/sonar-web/src/main/js/apps/nav/links-mixin.jsx
server/sonar-web/src/main/js/apps/overview/app.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/card.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/cards.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/empty.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/gate-condition.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/gate-conditions.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/gate.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/helpers/donut.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/helpers/drilldown-link.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/helpers/gate-link.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/helpers/issues-link.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/helpers/measure-variation.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/helpers/measure.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/helpers/period-label.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/helpers/profile-link.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/helpers/rating.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/leak-coverage.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/leak-dups.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/leak-issues.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/leak-size.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/leak.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/main.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/meta.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/nutshell-coverage.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/nutshell-dups.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/nutshell-issues.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/nutshell-size.jsx [deleted file]
server/sonar-web/src/main/js/apps/overview/nutshell.jsx [deleted file]
server/sonar-web/src/main/js/components/common/handlebars-extensions.js
server/sonar-web/src/main/js/helpers/Url.jsx
server/sonar-web/src/main/less/pages.less
server/sonar-web/src/main/less/pages/overview.less [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/controllers/dashboard_controller.rb
server/sonar-web/src/main/webapp/WEB-INF/app/controllers/overview_controller.rb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/overview/index.html.erb [deleted file]
sonar-core/src/main/resources/org/sonar/l10n/core.properties

index ffb2216a1b3dd3eaa0a4f2671fe7c00033c15588..4e8715c3d18b8b53b618acb670feb4c2935d283b 100644 (file)
@@ -9,12 +9,12 @@
     <tbody>
     <tr>
         <td>open</td>
-        <td>/sonar/overview/index/myproject.jsp</td>
+        <td>/sonar/dashboard/index/myproject.jsp</td>
         <td></td>
     </tr>
     <tr>
         <td>waitForElementPresent</td>
-        <td>css=.overview</td>
+        <td>css=#dashboard</td>
         <td></td>
     </tr>
 </table>
index 71123d9ce0c1ebd4f7e37aaec0a839893c85bad0..f2e23f196a1d0c2979efb2c2041a25a61cdbba3b 100644 (file)
   <tbody>
   <tr>
     <td>open</td>
-    <td>/sonar/overview/index?id=sample&locale=foo</td>
+    <td>/sonar/dashboard/index?id=sample&locale=foo</td>
     <td></td>
   </tr>
   <tr>
     <td>waitForText</td>
-    <td>css=.navbar-context</td>
+    <td>css=#content</td>
     <td>regexp:.*Jan.*|.*Feb.*|.*Mar.*|.*Apr.*|.*May.*|.*Jun.*|.*Jul.*|.*Aug.*|.*Sep.*|.*Oct.*|.*Nov.*|.*Dec.*</td>
   </tr>
   <tr>
     <td>waitForText</td>
-    <td>css=.overview</td>
+    <td>css=#content</td>
     <td>*0.0%*</td>
   </tr>
   </tbody>
index 8fd6d8db3dd36a8e3f115defdf3cac30572c23ec..74f2f320a027897216a1b8114875ef1564d23860 100644 (file)
   <tbody>
   <tr>
     <td>open</td>
-    <td>/sonar/overview/index?id=sample&locale=fr</td>
+    <td>/sonar/dashboard/index?id=sample&locale=fr</td>
     <td></td>
   </tr>
   <tr>
     <td>waitForText</td>
-    <td>css=.navbar-context</td>
+    <td>css=#content</td>
     <td>regexp:.*jan.*|.*fév.*|.*mar.*|.*avr.*|.*mai.*|.*juin.*|.*juil.*|.*août.*|.*sept.*|.*oct.*|.*nov.*|.*déc.*</td>
   </tr>
   <tr>
     <td>waitForText</td>
-    <td>css=.overview</td>
+    <td>css=#content</td>
     <td>*0,0%*</td>
   </tr>
   </tbody>
index e8c6431f41439fe4f951f0a3f63f271bdb3b7796..e65cd5e95bfaa6ad86164d9fe435e0a17dd14b38 100644 (file)
   <tbody>
   <tr>
     <td>open</td>
-    <td>/sonar/overview/index?id=sample&locale=fr-FR</td>
+    <td>/sonar/dashboard/index?id=sample&locale=fr-FR</td>
     <td></td>
   </tr>
   <tr>
     <td>waitForText</td>
-    <td>css=.navbar-context</td>
+    <td>css=#content</td>
     <td>regexp:.*jan.*|.*fév.*|.*mar.*|.*avr.*|.*mai.*|.*juin.*|.*juil.*|.*août.*|.*sept.*|.*oct.*|.*nov.*|.*déc.*</td>
   </tr>
   <tr>
     <td>waitForText</td>
-    <td>css=.overview</td>
+    <td>css=#content</td>
     <td>*0,0%*</td>
   </tr>
   </tbody>
index 6073c0f51278fb05df7bd45580f6b721a58ef337..888f5d8f3a8a6e2796348e0308d3399a94a32c1e 100644 (file)
   <tbody>
   <tr>
     <td>open</td>
-    <td>/sonar/overview/index?id=sample&locale=fr-CH</td>
+    <td>/sonar/dashboard/index?id=sample&locale=fr-CH</td>
     <td></td>
   </tr>
   <tr>
     <td>waitForText</td>
-    <td>css=.navbar-context</td>
+    <td>css=#content</td>
     <td>regexp:.*jan.*|.*fév.*|.*mar.*|.*avr.*|.*mai.*|.*juin.*|.*juil.*|.*août.*|.*sept.*|.*oct.*|.*nov.*|.*déc.*</td>
   </tr>
   <tr>
     <td>waitForText</td>
-    <td>css=.overview</td>
+    <td>css=#content</td>
     <td>*0.0%*</td>
   </tr>
   </tbody>
index 3e0626d7789ef4006eef5303de7e65999c00cdba..2a35ef057dbc2fe200bd0e070afa1e82195890aa 100644 (file)
@@ -149,7 +149,6 @@ module.exports = (grunt) ->
           'build-app:measures'
           'build-app:metrics'
           'build-app:nav'
-          'build-app:overview'
           'build-app:project-permissions'
           'build-app:provisioning'
           'build-app:quality-gates'
index c3679649e638b5ed27174b0832e696a886109f9d..ae1564630863f5003887ffe77d89dfe9d8d2b5dc 100644 (file)
@@ -8,14 +8,24 @@ const SETTINGS_URLS = [
   '/project/deletion'
 ];
 
-const MORE_URLS = ['/dashboards', '/dashboard', '/plugins/resource'];
-
 export default React.createClass({
   mixins: [DashboardNameMixin, LinksMixin],
 
   renderOverviewLink() {
-    const url = `/overview/index?id=${encodeURIComponent(this.props.component.key)}`;
-    return this.renderLink(url, window.t('overview.page'), '/overview');
+    if (_.size(this.props.component.dashboards) === 0) {
+      return null;
+    }
+    let firstDashboard = _.first(this.props.component.dashboards);
+    let url = `/dashboard/index?id=${encodeURIComponent(this.props.component.key)}`;
+    let name = this.getLocalizedDashboardName(firstDashboard.name);
+    return this.renderLink(url, name, () => {
+      /* eslint eqeqeq: 0 */
+      let pathMatch = window.location.pathname === `${window.baseUrl}/dashboard` ||
+          window.location.pathname === `${window.baseUrl}/dashboard/index`;
+      let params = window.getQueryParams();
+      let paramMatch = !params['did'] || params['did'] == firstDashboard.key;
+      return pathMatch && paramMatch ? 'active' : null;
+    });
   },
 
   renderComponentsLink() {
@@ -156,12 +166,8 @@ export default React.createClass({
   },
 
   renderMore() {
-    let isActive = MORE_URLS.some(url => {
-          return window.location.href.indexOf(url) !== -1;
-        }),
-        className = 'dropdown' + (isActive ? ' active' : '');
     return (
-        <li className={className}>
+        <li className="dropdown">
           <a className="dropdown-toggle" data-toggle="dropdown" href="#">
             {window.t('more')}&nbsp;<i className="icon-dropdown"></i>
           </a>
@@ -175,7 +181,7 @@ export default React.createClass({
   },
 
   renderDashboards() {
-    let dashboards = (this.props.component.dashboards || []).map(d => {
+    let dashboards = _.rest(this.props.component.dashboards || []).map(d => {
       let url = `/dashboard?id=${encodeURIComponent(this.props.component.key)}&did=${d.key}`;
       let name = this.getLocalizedDashboardName(d.name);
       return this.renderLink(url, name);
index e807c5a26d0ae1621079b3b55190b6b173e838c3..7e9d76121aa34f2a6b5891d431fd31feeeb9929b 100644 (file)
@@ -7,8 +7,9 @@ export default {
 
   renderLink(url, title, highlightUrl = url) {
     let fullUrl = window.baseUrl + url;
+    let check = _.isFunction(highlightUrl) ? highlightUrl : this.activeLink;
     return (
-        <li key={highlightUrl} className={this.activeLink(highlightUrl)}>
+        <li key={highlightUrl} className={check(highlightUrl)}>
           <a href={fullUrl}>{title}</a>
         </li>
     );
diff --git a/server/sonar-web/src/main/js/apps/overview/app.jsx b/server/sonar-web/src/main/js/apps/overview/app.jsx
deleted file mode 100644 (file)
index 475b1c0..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-import React from 'react';
-import Main from './main';
-import Empty from './empty';
-
-const $ = jQuery;
-
-export default {
-  start(options) {
-    $('html').toggleClass('dashboard-page', options.component.hasSnapshot);
-    window.requestMessages().done(() => {
-      const el = document.querySelector(options.el);
-      const inner = options.component.hasSnapshot ? (
-          <Main
-              component={options.component}
-              gate={options.gate}
-              measures={options.measures}
-              leak={options.leak}/>
-      ) : <Empty/>;
-      React.render(inner, el);
-    });
-  }
-};
diff --git a/server/sonar-web/src/main/js/apps/overview/card.jsx b/server/sonar-web/src/main/js/apps/overview/card.jsx
deleted file mode 100644 (file)
index a221462..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-import React from 'react';
-
-export default React.createClass({
-  render() {
-    return <li className="overview-card">{this.props.children}</li>;
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/cards.jsx b/server/sonar-web/src/main/js/apps/overview/cards.jsx
deleted file mode 100644 (file)
index 3d69cf8..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-import React from 'react';
-
-export default React.createClass({
-  render() {
-    return <ul className="overview-cards">{this.props.children}</ul>;
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/empty.jsx b/server/sonar-web/src/main/js/apps/overview/empty.jsx
deleted file mode 100644 (file)
index 78c5320..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-import React from 'react';
-
-export default React.createClass({
-  render() {
-    return (
-        <div className="panel">
-          <div className="alert alert-warning">
-            {window.t('provisioning.no_analysis')}
-          </div>
-        </div>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/gate-condition.jsx b/server/sonar-web/src/main/js/apps/overview/gate-condition.jsx
deleted file mode 100644 (file)
index cd2c4ec..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-import React from 'react';
-import Card from './card';
-import Measure from './helpers/measure';
-import {periodLabel, getPeriodDate} from './helpers/period-label';
-import DrilldownLink from './helpers/drilldown-link';
-
-export default React.createClass({
-  render() {
-    const
-        metricName = window.t('metric', this.props.condition.metric.name, 'name'),
-        threshold = this.props.condition.level === 'ERROR' ?
-            this.props.condition.error : this.props.condition.warning,
-        iconClassName = 'icon-alert-' + this.props.condition.level.toLowerCase(),
-        period = this.props.condition.period ?
-            `(${periodLabel(this.props.component.periods, this.props.condition.period)})` : null,
-        periodDate = getPeriodDate(this.props.component.periods, this.props.condition.period);
-
-    return (
-        <div>
-          <h4 className="overview-gate-condition-metric">{metricName} {period}</h4>
-          <div className="overview-gate-condition-value">
-            <i className={iconClassName}></i>&nbsp;
-            <DrilldownLink component={this.props.component.key} metric={this.props.condition.metric.name}
-                           period={this.props.condition.period} periodDate={periodDate}>
-              <Measure value={this.props.condition.actual} type={this.props.condition.metric.type}/>
-            </DrilldownLink>&nbsp;
-            <span className="overview-gate-condition-itself">
-              {window.t('quality_gates.operator', this.props.condition.op, 'short')}&nbsp;
-              <Measure value={threshold} type={this.props.condition.metric.type}/>
-            </span>
-          </div>
-        </div>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/gate-conditions.jsx b/server/sonar-web/src/main/js/apps/overview/gate-conditions.jsx
deleted file mode 100644 (file)
index dddac46..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react';
-import Cards from './cards';
-import Card from './card';
-import GateCondition from './gate-condition';
-
-export default React.createClass({
-  render() {
-    const conditions = this.props.gate.conditions
-        .filter((c) => {
-          return c.level !== 'OK';
-        })
-        .map((c) => {
-          return (
-              <Card key={c.metric.name}>
-                <GateCondition condition={c} component={this.props.component}/>
-              </Card>
-          );
-        });
-    return <Cards>{conditions}</Cards>;
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/gate.jsx b/server/sonar-web/src/main/js/apps/overview/gate.jsx
deleted file mode 100644 (file)
index f805da9..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react';
-import GateConditions from './gate-conditions';
-
-export default React.createClass({
-  render() {
-    if (!this.props.gate || !this.props.gate.level) {
-      return null;
-    }
-
-    const
-        badgeClassName = 'badge badge-' + this.props.gate.level.toLowerCase(),
-        badgeText = window.t('overview.gate', this.props.gate.level);
-
-    return (
-        <div className="overview-gate">
-          <div className="overview-title">
-            {window.t('overview.quality_gate')}
-            <span className={badgeClassName}>{badgeText}</span>
-          </div>
-          <GateConditions gate={this.props.gate} component={this.props.component}/>
-        </div>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/helpers/donut.jsx b/server/sonar-web/src/main/js/apps/overview/helpers/donut.jsx
deleted file mode 100644 (file)
index 58ba8a3..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-import React from 'react';
-
-const Sector = React.createClass({
-  render() {
-    const arc = d3.svg.arc()
-        .outerRadius(this.props.radius)
-        .innerRadius(this.props.radius - this.props.thickness);
-    return <path d={arc(this.props.data)} style={{ fill: this.props.fill }}></path>;
-  }
-});
-
-export default React.createClass({
-  getDefaultProps() {
-    return {
-      size: 30,
-      thickness: 6
-    };
-  },
-
-  render() {
-    const radius = this.props.size / 2;
-    const pie = d3.layout.pie().sort(null)
-        .value(d => {
-          return d.value
-        });
-    const data = this.props.data;
-    const sectors = pie(data).map((d, i) => {
-      return <Sector
-          key={i}
-          data={d}
-          fill={data[i].fill}
-          radius={radius}
-          thickness={this.props.thickness}/>;
-    });
-    return (
-        <svg width={this.props.size} height={this.props.size}>
-          <g transform={`translate(${radius}, ${radius})`}>{sectors}</g>
-        </svg>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/helpers/drilldown-link.jsx b/server/sonar-web/src/main/js/apps/overview/helpers/drilldown-link.jsx
deleted file mode 100644 (file)
index 57b2996..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-import React from 'react';
-import IssuesLink from './issues-link';
-
-export default React.createClass({
-  render() {
-    if (this.isIssueMeasure()) {
-      return this.renderIssuesLink();
-    }
-
-    let params = { id: this.props.component, metric: this.props.metric };
-    if (this.props.period) {
-      params.period = this.props.period;
-    }
-
-    const
-        query = Object.keys(params).map(key => {
-          return `${key}=${encodeURIComponent(params[key])}`;
-        }).join('&'),
-        url = `${baseUrl}/drilldown/measures?${query}`;
-
-    return <a href={url}>{this.props.children}</a>;
-  },
-
-  isIssueMeasure() {
-    const ISSUE_MEASURES = [
-      'violations',
-      'blocker_violations',
-      'critical_violations',
-      'major_violations',
-      'minor_violations',
-      'info_violations',
-      'new_blocker_violations',
-      'new_critical_violations',
-      'new_major_violations',
-      'new_minor_violations',
-      'new_info_violations',
-      'open_issues',
-      'reopened_issues',
-      'confirmed_issues',
-      'false_positive_issues'
-    ];
-    return ISSUE_MEASURES.indexOf(this.props.metric) !== -1;
-  },
-
-  propsToIssueParams() {
-    let params = {};
-    if (this.props.periodDate) {
-      params.createdAfter = moment(this.props.periodDate).format('YYYY-MM-DDTHH:mm:ssZZ');
-    }
-    switch (this.props.metric) {
-      case 'blocker_violations':
-      case 'new_blocker_violations':
-        _.extend(params, { resolved: 'false', severities: 'BLOCKER' });
-        break;
-      case 'critical_violations':
-      case 'new_critical_violations':
-        _.extend(params, { resolved: 'false', severities: 'CRITICAL' });
-        break;
-      case 'major_violations':
-      case 'new_major_violations':
-        _.extend(params, { resolved: 'false', severities: 'MAJOR' });
-        break;
-      case 'minor_violations':
-      case 'new_minor_violations':
-        _.extend(params, { resolved: 'false', severities: 'MINOR' });
-        break;
-      case 'info_violations':
-      case 'new_info_violations':
-        _.extend(params, { resolved: 'false', severities: 'INFO' });
-        break;
-      case 'open_issues':
-        _.extend(params, { resolved: 'false', statuses: 'OPEN' });
-        break;
-      case 'reopened_issues':
-        _.extend(params, { resolved: 'false', statuses: 'REOPENED' });
-        break;
-      case 'confirmed_issues':
-        _.extend(params, { resolved: 'false', statuses: 'CONFIRMED' });
-        break;
-      case 'false_positive_issues':
-        _.extend(params, { resolutions: 'FALSE-POSITIVE' });
-        break;
-      default:
-        _.extend(params, { resolved: 'false' });
-    }
-    return params;
-  },
-
-  renderIssuesLink() {
-    return (
-        <IssuesLink component={this.props.component} params={this.propsToIssueParams()}>
-          {this.props.children}
-        </IssuesLink>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/helpers/gate-link.jsx b/server/sonar-web/src/main/js/apps/overview/helpers/gate-link.jsx
deleted file mode 100644 (file)
index 7a5e63d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-import React from 'react';
-
-export default React.createClass({
-  render() {
-    const url = `${baseUrl}/quality_gates/show/${this.props.gate}`;
-    return <a href={url}>{this.props.children}</a>;
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/helpers/issues-link.jsx b/server/sonar-web/src/main/js/apps/overview/helpers/issues-link.jsx
deleted file mode 100644 (file)
index 365bee7..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-import React from 'react';
-
-export default React.createClass({
-  render() {
-    const params = Object.keys(this.props.params).map((key) => {
-          return `${key}=${encodeURIComponent(this.props.params[key])}`;
-        }).join('|'),
-        url = `${baseUrl}/component_issues/index?id=${encodeURIComponent(this.props.component)}#${params}`;
-    return <a href={url}>{this.props.children}</a>;
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/helpers/measure-variation.jsx b/server/sonar-web/src/main/js/apps/overview/helpers/measure-variation.jsx
deleted file mode 100644 (file)
index 8c84737..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-import React from 'react';
-
-export default React.createClass({
-  render() {
-    if (this.props.value == null || isNaN(this.props.value)) {
-      return null;
-    }
-    const formatted = window.formatMeasureVariation(this.props.value, this.props.type);
-    return <span>{formatted}</span>;
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/helpers/measure.jsx b/server/sonar-web/src/main/js/apps/overview/helpers/measure.jsx
deleted file mode 100644 (file)
index 078e125..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-import React from 'react';
-
-export default React.createClass({
-  render() {
-    if (this.props.value == null || isNaN(this.props.value)) {
-      return null;
-    }
-    const formatted = window.formatMeasure(this.props.value, this.props.type);
-    return <span>{formatted}</span>;
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/helpers/period-label.jsx b/server/sonar-web/src/main/js/apps/overview/helpers/period-label.jsx
deleted file mode 100644 (file)
index 996ea01..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-export let periodLabel = (periods, periodIndex) => {
-  let period = _.findWhere(periods, { index: periodIndex });
-  if (!period) {
-    return null;
-  }
-  return window.tp(`overview.period.${period.mode}`, period.modeParam);
-};
-
-export let getPeriodDate = (periods, periodIndex) => {
-  let period = _.findWhere(periods, { index: periodIndex });
-  if (!period) {
-    return null;
-  }
-  return moment(period.date).toDate();
-};
diff --git a/server/sonar-web/src/main/js/apps/overview/helpers/profile-link.jsx b/server/sonar-web/src/main/js/apps/overview/helpers/profile-link.jsx
deleted file mode 100644 (file)
index 3d22d8f..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-import React from 'react';
-
-export default React.createClass({
-  render() {
-    const url = `${baseUrl}/profiles/show?key=${encodeURIComponent(this.props.profile)}`;
-    return <a href={url}>{this.props.children}</a>;
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/helpers/rating.jsx b/server/sonar-web/src/main/js/apps/overview/helpers/rating.jsx
deleted file mode 100644 (file)
index 9b37f94..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-import React from 'react';
-
-export default React.createClass({
-  render() {
-    if (this.props.value == null || isNaN(this.props.value)) {
-      return null;
-    }
-    const formatted = window.formatMeasure(this.props.value, 'RATING');
-    const className = 'rating rating-' + formatted;
-    return <span className={className}>{formatted}</span>;
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/leak-coverage.jsx b/server/sonar-web/src/main/js/apps/overview/leak-coverage.jsx
deleted file mode 100644 (file)
index 6106e87..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-import React from 'react';
-import Card from './card';
-import Measure from './helpers/measure';
-import MeasureVariation from './helpers/measure-variation';
-import DrilldownLink from './helpers/drilldown-link';
-import Donut from './helpers/donut';
-
-export default React.createClass({
-  render() {
-    const
-        newCoverage = parseInt(this.props.leak.newCoverage, 10),
-        tests = this.props.leak.tests,
-        donutData = [
-          { value: newCoverage, fill: '#85bb43' },
-          { value: 100 - newCoverage, fill: '#d4333f' }
-        ];
-
-    if (newCoverage == null || isNaN(newCoverage)) {
-      return null;
-    }
-
-    return (
-        <Card>
-          <div className="measures">
-            <div className="measures-chart">
-              <Donut data={donutData} size="47"/>
-            </div>
-            <div className="measure measure-big" data-metric="new_coverage">
-              <span className="measure-value">
-                <DrilldownLink component={this.props.component.key} metric="new_coverage" period="3">
-                  <Measure value={newCoverage} type="PERCENT"/>
-                </DrilldownLink>
-              </span>
-              <span className="measure-name">{window.t('overview.metric.new_coverage')}</span>
-            </div>
-          </div>
-          <ul className="list-inline big-spacer-top measures-chart-indent">
-            <li>
-              <span><MeasureVariation value={tests} type="SHORT_INT"/></span>&nbsp;
-              <span>{window.t('overview.metric.tests')}</span>
-            </li>
-          </ul>
-        </Card>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/leak-dups.jsx b/server/sonar-web/src/main/js/apps/overview/leak-dups.jsx
deleted file mode 100644 (file)
index 80ff544..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-import React from 'react';
-import Card from './card';
-import MeasureVariation from './helpers/measure-variation';
-import DrilldownLink from './helpers/drilldown-link';
-import Donut from './helpers/donut';
-
-export default React.createClass({
-  render() {
-    const
-        density = this.props.leak.duplications,
-        lines = this.props.leak.duplicatedLines,
-        donutData = [
-          { value: density, fill: '#f3ca8e' },
-          { value: 100 - density, fill: '#e6e6e6' }
-        ];
-
-    if (density == null) {
-      return null;
-    }
-
-    return (
-        <Card>
-          <div className="measures">
-            <div className="measures-chart">
-              <Donut data={donutData} size="47"/>
-            </div>
-            <div className="measure measure-big" data-metric="duplicated_lines_density">
-              <span className="measure-value">
-                <MeasureVariation value={density} type="PERCENT"/>
-              </span>
-              <span className="measure-name">{window.t('overview.metric.duplications')}</span>
-            </div>
-          </div>
-          <ul className="list-inline big-spacer-top measures-chart-indent">
-            <li>
-              <span><MeasureVariation value={lines} type="SHORT_INT"/></span>&nbsp;
-              <span>{window.t('overview.metric.duplicated_lines')}</span>
-            </li>
-          </ul>
-        </Card>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/leak-issues.jsx b/server/sonar-web/src/main/js/apps/overview/leak-issues.jsx
deleted file mode 100644 (file)
index 558eb8e..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-import React from 'react';
-import Card from './card';
-import Measure from './helpers/measure';
-import MeasureVariation from './helpers/measure-variation';
-import IssuesLink from './helpers/issues-link';
-import DrilldownLink from './helpers/drilldown-link';
-import SeverityIcon from 'components/shared/severity-icon';
-import StatusIcon from 'components/shared/status-icon';
-import SeverityHelper from 'components/shared/severity-helper';
-import {getPeriodDate} from './helpers/period-label';
-
-export default React.createClass({
-  render() {
-    const
-        newDebt = this.props.leak.newDebt,
-        issues = this.props.leak.newIssues,
-        blockerIssues = this.props.leak.newBlockerIssues,
-        criticalIssues = this.props.leak.newCriticalIssues,
-        issuesToReview = this.props.leak.newOpenIssues + this.props.leak.newReopenedIssues,
-        periodDate = moment(getPeriodDate(this.props.component.periods, '3')).format('YYYY-MM-DDTHH:mm:ssZZ');
-
-    return (
-        <Card>
-          <div className="measures">
-            <div className="measure measure-big" data-metric="sqale_index">
-              <span className="measure-value">
-                <IssuesLink component={this.props.component.key}
-                            params={{ resolved: 'false', createdAfter: periodDate, facetMode: 'debt' }}>
-                  <Measure value={newDebt} type="SHORT_WORK_DUR"/>
-                </IssuesLink>
-              </span>
-              <span className="measure-name">{window.t('overview.metric.new_debt')}</span>
-            </div>
-            <div className="measure measure-big" data-metric="violations">
-              <span className="measure-value">
-                <IssuesLink component={this.props.component.key}
-                            params={{ resolved: 'false', createdAfter: periodDate }}>
-                  <Measure value={issues} type="SHORT_INT"/>
-                </IssuesLink>
-              </span>
-              <span className="measure-name">{window.t('overview.metric.new_issues')}</span>
-            </div>
-          </div>
-          <ul className="list-inline big-spacer-top">
-            <li>
-              <span><SeverityIcon severity="BLOCKER"/></span>&nbsp;
-              <IssuesLink component={this.props.component.key}
-                          params={{ resolved: 'false', createdAfter: periodDate, severities: 'BLOCKER' }}>
-                <MeasureVariation value={blockerIssues} type="SHORT_INT"/>
-              </IssuesLink>
-            </li>
-            <li>
-              <span><SeverityIcon severity="CRITICAL"/></span>&nbsp;
-              <IssuesLink component={this.props.component.key}
-                          params={{ resolved: 'false', createdAfter: periodDate, severities: 'CRITICAL' }}>
-                <MeasureVariation value={criticalIssues} type="SHORT_INT"/>
-              </IssuesLink>
-            </li>
-            <li>
-              <span><StatusIcon status="OPEN"/></span>&nbsp;
-              <IssuesLink component={this.props.component.key}
-                          params={{ resolved: 'false', createdAfter: periodDate, statuses: 'OPEN,REOPENED' }}>
-                <MeasureVariation value={issuesToReview} type="SHORT_INT"/>
-              </IssuesLink>
-            </li>
-          </ul>
-        </Card>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/leak-size.jsx b/server/sonar-web/src/main/js/apps/overview/leak-size.jsx
deleted file mode 100644 (file)
index 80ceceb..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react';
-import Card from './card';
-import MeasureVariation from './helpers/measure-variation';
-import DrilldownLink from './helpers/drilldown-link';
-
-export default React.createClass({
-  render() {
-    const
-        lines = this.props.leak.lines,
-        files = this.props.leak.files;
-
-    return (
-        <Card>
-          <div className="measures">
-            <div className="measure measure-big" data-metric="lines">
-              <span className="measure-value">
-                <MeasureVariation value={lines} type="SHORT_INT"/>
-              </span>
-              <span className="measure-name">{window.t('overview.metric.lines')}</span>
-            </div>
-            <div className="measure measure-big" data-metric="files">
-              <span className="measure-value">
-                <MeasureVariation value={files} type="SHORT_INT"/>
-              </span>
-              <span className="measure-name">{window.t('overview.metric.files')}</span>
-            </div>
-          </div>
-        </Card>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/leak.jsx b/server/sonar-web/src/main/js/apps/overview/leak.jsx
deleted file mode 100644 (file)
index 06dc550..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-import React from 'react';
-import Cards from './cards';
-import LeakIssues from './leak-issues';
-import LeakCoverage from './leak-coverage';
-import LeakSize from './leak-size';
-import LeakDups from './leak-dups';
-import {periodLabel} from './helpers/period-label';
-
-export default React.createClass({
-  render() {
-    if (_.size(this.props.component.periods) < 3) {
-      return null;
-    }
-
-    const period = periodLabel(this.props.component.periods, '3');
-
-    return (
-        <div className="overview-leak">
-          <div className="overview-title">
-            {window.t('overview.water_leak')}
-            <span className="overview-leak-period">{period}</span>
-          </div>
-          <Cards>
-            <LeakIssues component={this.props.component} leak={this.props.leak} measures={this.props.measures}/>
-            <LeakCoverage component={this.props.component} leak={this.props.leak}/>
-            <LeakDups component={this.props.component} leak={this.props.leak}/>
-            <LeakSize component={this.props.component} leak={this.props.leak}/>
-          </Cards>
-        </div>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/main.jsx b/server/sonar-web/src/main/js/apps/overview/main.jsx
deleted file mode 100644 (file)
index 5a9408f..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-import React from 'react';
-import Gate from './gate';
-import Leak from './leak';
-import Nutshell from './nutshell';
-import Meta from './meta';
-import {getPeriodDate} from './helpers/period-label';
-
-const $ = jQuery;
-
-export default React.createClass({
-  getInitialState() {
-    return { leak: this.props.leak, measures: this.props.measures };
-  },
-
-  componentDidMount() {
-    if (this._hasWaterLeak()) {
-      this.requestLeakIssues();
-      this.requestLeakDebt();
-    }
-    this.requestNutshellIssues();
-    this.requestNutshellDebt();
-  },
-
-  _hasWaterLeak() {
-    return !!_.findWhere(this.props.component.periods, { index: '3' });
-  },
-
-  _requestIssues(data) {
-    const url = `${baseUrl}/api/issues/search`;
-    data.ps = 1;
-    data.componentUuids = this.props.component.id;
-    return $.get(url, data);
-  },
-
-  requestLeakIssues() {
-    const createdAfter = moment(getPeriodDate(this.props.component.periods, '3')).format('YYYY-MM-DDTHH:mm:ssZZ');
-    this._requestIssues({ resolved: 'false', createdAfter, facets: 'severities,statuses' }).done(r => {
-      const
-          severitiesFacet = _.findWhere(r.facets, { property: 'severities' }).values,
-          statusesFacet = _.findWhere(r.facets, { property: 'statuses' }).values;
-
-      this.setState({
-        leak: _.extend({}, this.state.leak, {
-          newIssues: r.total,
-          newBlockerIssues: _.findWhere(severitiesFacet, { val: 'BLOCKER' }).count,
-          newCriticalIssues: _.findWhere(severitiesFacet, { val: 'CRITICAL' }).count,
-          newOpenIssues: _.findWhere(statusesFacet, { val: 'OPEN' }).count,
-          newReopenedIssues: _.findWhere(statusesFacet, { val: 'REOPENED' }).count
-        })
-      });
-    });
-  },
-
-  requestNutshellIssues() {
-    this._requestIssues({ resolved: 'false', facets: 'severities,statuses' }).done(r => {
-      const
-          severitiesFacet = _.findWhere(r.facets, { property: 'severities' }).values,
-          statusesFacet = _.findWhere(r.facets, { property: 'statuses' }).values;
-
-      this.setState({
-        measures: _.extend({}, this.state.measures, {
-          issues: r.total,
-          blockerIssues: _.findWhere(severitiesFacet, { val: 'BLOCKER' }).count,
-          criticalIssues: _.findWhere(severitiesFacet, { val: 'CRITICAL' }).count,
-          openIssues: _.findWhere(statusesFacet, { val: 'OPEN' }).count,
-          reopenedIssues: _.findWhere(statusesFacet, { val: 'REOPENED' }).count
-        })
-      });
-    });
-  },
-
-  requestLeakDebt() {
-    const createdAfter = moment(getPeriodDate(this.props.component.periods, '3')).format('YYYY-MM-DDTHH:mm:ssZZ');
-    this._requestIssues({ resolved: 'false', createdAfter, facets: 'severities', facetMode: 'debt' }).done(r => {
-      this.setState({
-        leak: _.extend({}, this.state.leak, { newDebt: r.debtTotal })
-      });
-    });
-  },
-
-  requestNutshellDebt() {
-    this._requestIssues({ resolved: 'false', facets: 'severities', facetMode: 'debt' }).done(r => {
-      this.setState({
-        measures: _.extend({}, this.state.measures, { debt: r.debtTotal })
-      });
-    });
-  },
-
-  render() {
-    return (
-        <div className="overview">
-          <div className="overview-main">
-            <Gate component={this.props.component} gate={this.props.gate}/>
-            <Leak component={this.props.component} leak={this.state.leak} measures={this.state.measures}/>
-            <Nutshell component={this.props.component} measures={this.state.measures}/>
-          </div>
-          <Meta component={this.props.component}/>
-        </div>
-    );
-  }
-})
diff --git a/server/sonar-web/src/main/js/apps/overview/meta.jsx b/server/sonar-web/src/main/js/apps/overview/meta.jsx
deleted file mode 100644 (file)
index 8951b60..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-import React from 'react';
-import ProfileLink from './helpers/profile-link';
-import GateLink from './helpers/gate-link';
-
-export default React.createClass({
-  render() {
-    const
-        profiles = (this.props.component.profiles || []).map(profile => {
-          return (
-              <li key={profile.key}>
-                <span className="note little-spacer-right">({profile.language})</span>
-                <ProfileLink profile={profile.key}>{profile.name}</ProfileLink>
-              </li>
-          );
-        }),
-        links = (this.props.component.links || []).map(link => {
-          const iconClassName = `little-spacer-right icon-color-link icon-${link.type}`;
-          return (
-              <li key={link.type}>
-                <i className={iconClassName}></i>
-                <a href={link.href} target="_blank">{link.name}</a>
-              </li>
-          );
-        });
-
-    const descriptionCard = this.props.component.description ? (
-            <div className="overview-card">
-              <div className="overview-meta-description">{this.props.component.description}</div>
-            </div>
-        ) : null,
-
-        linksCard = _.size(this.props.component.links) > 0 ? (
-            <div className="overview-card">
-              <ul className="overview-meta-list">{links}</ul>
-            </div>
-        ) : null,
-
-        profilesCard = _.size(this.props.component.profiles) > 0 ? (
-            <div className="overview-card">
-              <h4 className="overview-meta-header">{window.t('overview.quality_profiles')}</h4>
-              <ul className="overview-meta-list">{profiles}</ul>
-            </div>
-        ) : null,
-
-        gateCard = this.props.component.gate ? (
-            <div className="overview-card">
-              <h4 className="overview-meta-header">{window.t('overview.quality_gate')}</h4>
-              <ul className="overview-meta-list">
-                <li>
-                  {this.props.component.gate.isDefault ?
-                      <span className="note little-spacer-right">(Default)</span> : null}
-                  <GateLink gate={this.props.component.gate.key}>{this.props.component.gate.name}</GateLink>
-                </li>
-              </ul>
-            </div>
-        ) : null;
-
-    return (
-        <div className="overview-meta">
-          {descriptionCard}
-          {linksCard}
-          {profilesCard}
-          {gateCard}
-        </div>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/nutshell-coverage.jsx b/server/sonar-web/src/main/js/apps/overview/nutshell-coverage.jsx
deleted file mode 100644 (file)
index 7633539..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-import React from 'react';
-import Card from './card';
-import Measure from './helpers/measure';
-import DrilldownLink from './helpers/drilldown-link';
-import Donut from './helpers/donut';
-
-export default React.createClass({
-  render() {
-    const
-        coverage = this.props.measures.coverage,
-        tests = this.props.measures.tests,
-        donutData = [
-          { value: coverage, fill: '#85bb43' },
-          { value: 100 - coverage, fill: '#d4333f' }
-        ];
-
-    if (coverage == null) {
-      return null;
-    }
-
-    return (
-        <Card>
-          <div className="measures">
-            <div className="measures-chart">
-              <Donut data={donutData} size="47"/>
-            </div>
-            <div className="measure measure-big">
-              <span className="measure-value">
-                <DrilldownLink component={this.props.component.key} metric="overall_coverage">
-                  <Measure value={coverage} type="PERCENT"/>
-                </DrilldownLink>
-              </span>
-              <span className="measure-name">{window.t('overview.metric.coverage')}</span>
-            </div>
-          </div>
-          <ul className="list-inline big-spacer-top measures-chart-indent">
-            <li>
-              <DrilldownLink component={this.props.component.key} metric="tests">
-                <Measure value={tests} type="SHORT_INT"/>
-              </DrilldownLink>&nbsp;
-              <span>{window.t('overview.metric.tests')}</span>
-            </li>
-          </ul>
-        </Card>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/nutshell-dups.jsx b/server/sonar-web/src/main/js/apps/overview/nutshell-dups.jsx
deleted file mode 100644 (file)
index 827dc45..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-import React from 'react';
-import Card from './card';
-import Measure from './helpers/measure';
-import DrilldownLink from './helpers/drilldown-link';
-import Donut from './helpers/donut';
-
-export default React.createClass({
-  render() {
-    const
-        density = this.props.measures.duplications,
-        lines = this.props.measures.duplicatedLines,
-        donutData = [
-          { value: density, fill: '#f3ca8e' },
-          { value: 100 - density, fill: '#e6e6e6' }
-        ];
-
-    if (density == null) {
-      return null;
-    }
-
-    return (
-        <Card>
-          <div className="measures">
-            <div className="measures-chart">
-              <Donut data={donutData} size="47"/>
-            </div>
-            <div className="measure measure-big">
-              <span className="measure-value">
-                <DrilldownLink component={this.props.component.key} metric="duplicated_lines_density">
-                  <Measure value={density} type="PERCENT"/>
-                </DrilldownLink>
-              </span>
-              <span className="measure-name">{window.t('overview.metric.duplications')}</span>
-            </div>
-          </div>
-          <ul className="list-inline big-spacer-top measures-chart-indent">
-            <li>
-              <DrilldownLink component={this.props.component.key} metric="duplicated_lines">
-                <Measure value={lines} type="SHORT_INT"/>
-              </DrilldownLink>&nbsp;
-              <span>{window.t('overview.metric.duplicated_lines')}</span>
-            </li>
-          </ul>
-        </Card>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/nutshell-issues.jsx b/server/sonar-web/src/main/js/apps/overview/nutshell-issues.jsx
deleted file mode 100644 (file)
index d61332c..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-import React from 'react';
-import Card from './card';
-import Measure from './helpers/measure';
-import Rating from './helpers/rating';
-import IssuesLink from './helpers/issues-link';
-import DrilldownLink from './helpers/drilldown-link';
-import SeverityIcon from 'components/shared/severity-icon';
-import SeverityHelper from 'components/shared/severity-helper';
-import StatusIcon from 'components/shared/status-icon';
-
-export default React.createClass({
-  render() {
-    const
-        debt = this.props.measures.debt,
-        rating = this.props.measures.sqaleRating,
-        issues = this.props.measures.issues,
-        blockerIssues = this.props.measures.blockerIssues,
-        criticalIssues = this.props.measures.criticalIssues,
-        issuesToReview = this.props.measures.openIssues + this.props.measures.reopenedIssues;
-
-    return (
-        <Card>
-          <div className="measures">
-            <div className="measure measure-big" data-metric="sqale_rating">
-              <DrilldownLink component={this.props.component.key} metric="sqale_rating">
-                <Rating value={rating}/>
-              </DrilldownLink>
-            </div>
-            <div className="measure measure-big" data-metric="sqale_index">
-              <span className="measure-value">
-                <IssuesLink component={this.props.component.key} params={{ resolved: 'false', facetMode: 'debt' }}>
-                  <Measure value={debt} type="SHORT_WORK_DUR"/>
-                </IssuesLink>
-              </span>
-              <span className="measure-name">{window.t('overview.metric.debt')}</span>
-            </div>
-            <div className="measure measure-big" data-metric="violations">
-              <span className="measure-value">
-                <IssuesLink component={this.props.component.key} params={{ resolved: 'false' }}>
-                  <Measure value={issues} type="SHORT_INT"/>
-                </IssuesLink>
-              </span>
-              <span className="measure-name">{window.t('overview.metric.issues')}</span>
-            </div>
-          </div>
-          <ul className="list-inline big-spacer-top">
-            <li>
-              <span><SeverityIcon severity="BLOCKER"/></span>&nbsp;
-              <IssuesLink component={this.props.component.key} params={{ resolved: 'false', severities: 'BLOCKER' }}>
-                <Measure value={blockerIssues} type="SHORT_INT"/>
-              </IssuesLink>
-            </li>
-            <li>
-              <span><SeverityIcon severity="CRITICAL"/></span>&nbsp;
-              <IssuesLink component={this.props.component.key} params={{ resolved: 'false', severities: 'CRITICAL' }}>
-                <Measure value={criticalIssues} type="SHORT_INT"/>
-              </IssuesLink>
-            </li>
-            <li>
-              <span><StatusIcon status="OPEN"/></span>&nbsp;
-              <IssuesLink component={this.props.component.key} params={{ resolved: 'false', statuses: 'OPEN,REOPENED' }}>
-                <Measure value={issuesToReview} type="SHORT_INT"/>
-              </IssuesLink>
-            </li>
-          </ul>
-        </Card>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/nutshell-size.jsx b/server/sonar-web/src/main/js/apps/overview/nutshell-size.jsx
deleted file mode 100644 (file)
index 366d29c..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-import React from 'react';
-import Card from './card';
-import Measure from './helpers/measure';
-import DrilldownLink from './helpers/drilldown-link';
-
-export default React.createClass({
-  render() {
-    const
-        lines = this.props.measures['lines'],
-        files = this.props.measures['files'];
-
-    return (
-        <Card>
-          <div className="measures">
-            <div className="measure measure-big" data-metric="lines">
-              <span className="measure-value">
-                <DrilldownLink component={this.props.component.key} metric="lines">
-                  <Measure value={lines} type="SHORT_INT"/>
-                </DrilldownLink>
-              </span>
-              <span className="measure-name">{window.t('overview.metric.lines')}</span>
-            </div>
-            <div className="measure measure-big" data-metric="files">
-              <span className="measure-value">
-                <DrilldownLink component={this.props.component.key} metric="files">
-                  <Measure value={files} type="SHORT_INT"/>
-                </DrilldownLink>
-              </span>
-              <span className="measure-name">{window.t('overview.metric.files')}</span>
-            </div>
-          </div>
-        </Card>
-    );
-  }
-});
diff --git a/server/sonar-web/src/main/js/apps/overview/nutshell.jsx b/server/sonar-web/src/main/js/apps/overview/nutshell.jsx
deleted file mode 100644 (file)
index d645bfa..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-import React from 'react';
-import Cards from './cards';
-import NutshellIssues from './nutshell-issues';
-import NutshellCoverage from './nutshell-coverage';
-import NutshellSize from './nutshell-size';
-import NutshellDups from './nutshell-dups';
-
-export default React.createClass({
-  render() {
-    const props = { measures: this.props.measures, component: this.props.component };
-    return (
-        <div className="overview-nutshell">
-          <div className="overview-title">{window.t('overview.project_in_a_nutshell')}</div>
-          <Cards>
-            <NutshellIssues {...props}/>
-            <NutshellCoverage {...props}/>
-            <NutshellDups {...props}/>
-            <NutshellSize {...props}/>
-          </Cards>
-        </div>
-    );
-  }
-});
index 6e5d8e03a743473124ccd34ef0302da0ff01165f..bddf43df1f6a2942bc9abd6b41d73973142daf7a 100644 (file)
     return baseUrl + '/dashboard/index?id=' + encodeURIComponent(componentKey);
   });
 
-  Handlebars.registerHelper('componentOverviewPermalink', function (componentKey) {
-    return baseUrl + '/overview/index?id=' + encodeURIComponent(componentKey);
-  });
-
   Handlebars.registerHelper('componentDashboardPermalink', function (componentKey, dashboardKey) {
     var params = [
       { key: 'id', value: componentKey },
index e88ddb55808ef58e508ac811cf661b299c546de0..7fa21b44f0f49c3ee4c855bbd9da249b889a2943 100644 (file)
@@ -2,5 +2,5 @@ export function getProjectUrl(project) {
   if (typeof project !== 'string') {
     throw new TypeError("Project ID or KEY should be passed");
   }
-  return `${window.baseUrl}/overview?id=${encodeURIComponent(project)}`;
+  return `${window.baseUrl}/dashboard?id=${encodeURIComponent(project)}`;
 }
index b0e1b6ce99a467ce6b4b4c3678fe8e173b98bc51..91623b3d1f36a509cd40e878f4039f7cdb05299d 100644 (file)
@@ -7,4 +7,3 @@
 @import "pages/quality-gates";
 @import "pages/maintenance";
 @import "pages/login";
-@import "pages/overview";
diff --git a/server/sonar-web/src/main/less/pages/overview.less b/server/sonar-web/src/main/less/pages/overview.less
deleted file mode 100644 (file)
index e4ec6a5..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-@import (reference) "../variables";
-@import (reference) "../mixins";
-@import (reference) "../init/type";
-
-.overview {
-  display: table;
-  width: 100%;
-  min-height: ~"calc(100vh - @{navbarGlobalHeight} - @{navbarContextHeight} - @{pageFooterHeight})";
-}
-
-.overview-main {
-  display: table-cell;
-  vertical-align: top;
-  .box-sizing(border-box);
-  background-color: #fff;
-}
-
-.overview-gate {
-  .clearfix;
-  padding: 50px 30px;
-}
-
-.overview-gate-box {
-  float: left;
-  .size(120px, 70px);
-  padding: 10px;
-  .box-sizing(border-box);
-  line-height: 24px;
-  color: #fff;
-  font-size: 16px;
-  font-weight: 300;
-}
-
-.overview-gate-box-error { background-color: @red; }
-
-.overview-gate-box-warn { background-color: @orange; }
-
-.overview-gate-box-ok { background-color: @green; }
-
-.overview-gate-conditions {
-  line-height: 70px;
-  font-size: 0;
-  white-space: nowrap;
-  overflow: hidden;
-
-  & > li {
-    display: inline-block;
-    vertical-align: middle;
-    padding: 0 20px;
-    .box-sizing(border-box);
-    font-size: @baseFontSize;
-    line-height: 1;
-  }
-}
-
-.overview-gate-condition-metric {
-  //color: mix(@baseFontColor, @barBackgroundColor, 70%);
-  font-weight: 300;
-  font-size: 15px;
-  //letter-spacing: 0.03em;
-}
-
-.overview-gate-condition-value {
-  margin-top: 8px;
-  font-weight: 300;
-  font-size: 20px;
-
-  i {
-    position: relative;
-    top: -1px;
-  }
-}
-
-.overview-gate-condition-itself {
-  padding-left: 4px;
-  color: mix(@baseFontColor, @barBackgroundColor, 70%);
-  font-size: 13px;
-}
-
-.overview-gate-condition-level {
-  margin-top: 8px;
-}
-
-.overview-leak {
-  padding: 50px 30px;
-  border-top: 1px solid @barBorderColor;
-  border-bottom: 1px solid @barBorderColor;
-}
-
-.overview-title {
-  margin-bottom: 20px;
-  font-size: 24px;
-  font-weight: 300;
-
-  & > .badge {
-    position: relative;
-    top: -2px;
-    margin-left: 15px;
-    padding: 8px 15px;
-    font-size: 16px;
-  }
-}
-
-.overview-leak-period {
-  margin-left: 10px;
-  font-size: 16px;
-}
-
-.overview-nutshell {
-  padding: 50px 30px;
-}
-
-.overview-cards {
-}
-
-.overview-card {
-  display: inline-block;
-  vertical-align: top;
-  width: 200px;
-  margin-right: 30px;
-  .box-sizing(border-box);
-
-  &:last-child { margin-right: 0; }
-
-  .overview-main & {
-    font-weight: 300;
-    font-size: 14px;
-  }
-}
-
-.overview-measure {
-  font-size: 28px;
-}
-
-.overview-measure-label {
-  font-size: 16px;
-}
-
-.overview-meta {
-  display: table-cell;
-  vertical-align: top;
-  width: 180px;
-  padding: 30px;
-  border-left: 1px solid @barBorderColor;
-  background-color: @barBackgroundColor;
-
-  .panel {
-    border: none !important;
-  }
-}
-
-.overview-meta-description {
-  line-height: 1.5;
-}
-
-.overview-meta-header {
-  color: #797979;
-}
-
-.overview-meta-list {
-  & > li {
-    padding-bottom: 4px;
-    .text-ellipsis;
-  }
-}
-
-@media (max-width: 1200px) {
-  .overview {
-    display: block;
-  }
-
-  .overview-main {
-    display: block;
-  }
-
-  .overview-meta {
-    display: block;
-    width: auto;
-    border-top: 1px solid @barBorderColor;
-    border-left: none;
-  }
-}
-
-@media (min-width: 1201px) {
-  .overview-meta .overview-card {
-    width: 180px;
-    margin-right: 0;
-    margin-bottom: 30px;
-  }
-}
index 9c084dea9795b7b884937f114f1ce03fe4171dc2..7c6fdc34a30a8510c8224ebe9b708324749856c4 100644 (file)
@@ -17,8 +17,6 @@
 # along with this program; if not, write to the Free Software Foundation,
 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 #
-include ERB::Util
-
 class DashboardController < ApplicationController
 
   SECTION=Navigation::SECTION_RESOURCE
@@ -27,24 +25,20 @@ class DashboardController < ApplicationController
 
   def index
     load_resource()
-    if @resource && @resource.display_dashboard? && !params[:did] && !params[:name]
-      overview_url = url_for({:controller => 'overview', :action => :index}) + '?id=' + url_encode(@resource.key)
-      return redirect_to overview_url
-    end
-    if !@resource || @resource.display_dashboard?
-      redirect_if_bad_component()
-      load_dashboard()
-      load_authorized_widget_definitions()
-    else
-      if !@resource || !@snapshot
+      if !@resource || @resource.display_dashboard?
         redirect_if_bad_component()
+        load_dashboard()
+        load_authorized_widget_definitions()
       else
-        # display the layout of the parent without the sidebar, usually the directory, but display the file viewers
-        @hide_sidebar = true
-        @file = @resource
-        @project = @snapshot.parent.project
-        @metric=params[:metric]
-        render :action => 'no_dashboard'
+        if !@resource || !@snapshot
+          redirect_if_bad_component()
+        else
+          # display the layout of the parent without the sidebar, usually the directory, but display the file viewers
+          @hide_sidebar = true
+          @file = @resource
+          @project = @snapshot.parent.project
+          @metric=params[:metric]
+          render :action => 'no_dashboard'
       end
     end
   end
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/overview_controller.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/overview_controller.rb
deleted file mode 100644 (file)
index 746bc65..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-# SonarQube, open source software quality management tool.
-# Copyright (C) 2008-2014 SonarSource
-# mailto:contact AT sonarsource DOT com
-#
-# SonarQube is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 3 of the License, or (at your option) any later version.
-#
-# SonarQube is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-class OverviewController < ApplicationController
-  before_filter :init_resource_for_user_role
-
-  SECTION=Navigation::SECTION_RESOURCE
-
-  def index
-
-  end
-
-end
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/overview/index.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/overview/index.html.erb
deleted file mode 100644 (file)
index f95b57d..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-<%
-   links_size = @resource.project_links.size
-
-   profiles = []
-   if @snapshot
-     qprofiles_measure = @snapshot.measure(Metric::QUALITY_PROFILES)
-     if qprofiles_measure && !qprofiles_measure.data.blank?
-       profiles = JSON.parse qprofiles_measure.data
-     end
-   end
-   profiles_size = profiles.size
-
-   is_gate_default = false
-   gate = nil
-   gate_id = Property.value('sonar.qualitygate', @resource && @resource.id, nil)
-   unless gate_id
-     gate_id=Property.value('sonar.qualitygate', nil, nil)
-     is_gate_default = false || gate_id
-   end
-   if gate_id
-     gate = Internal.quality_gates.get(gate_id.to_i)
-   end
-%>
-
-<%
-   if @snapshot
-     m = @snapshot.measure(Metric::QUALITY_GATE_DETAILS)
-     if m && !m.data.blank?
-       details = JSON.parse m.data
-       m.alert_status = details['level']
-       raw_conditions = details['conditions']
-       conditions = []
-       missing_metric = false
-       raw_conditions.each do |condition|
-         if metric(condition['metric']).nil?
-           missing_metric = true
-         else
-           conditions << condition
-         end
-       end
-       alert_metric = metric(Metric::ALERT_STATUS)
-     end
-   end
-%>
-
-<% content_for :extra_script do %>
-  <script>
-    (function () {
-      var component = {
-        id: '<%= @resource.uuid %>',
-        key: '<%= @resource.key %>',
-        description: '<%= @resource.description %>',
-        hasSnapshot: <%= @snapshot ? true : false %>,
-        periods: [
-          <%
-            if @snapshot && @snapshot.project_snapshot.periods?
-              (1..5).each do |index|
-                if @snapshot.period_mode(index)
-          %>
-          {
-            index: '<%= index -%>',
-            mode: '<%= @snapshot.period_mode(index) -%>',
-            modeParam: '<%= @snapshot.period_param(index) -%>',
-            date: '<%= @snapshot.period_datetime(index).to_date.strftime('%FT%T%z') -%>'
-          },
-          <% end %>
-          <% end %>
-          <% end %>
-        ],
-        links: [
-          <% @resource.project_links.sort.each_with_index do |link, index| %>
-          {
-            name: '<%= escape_javascript link.name -%>',
-            type: '<%= escape_javascript link.link_type -%>',
-            href: '<%= escape_javascript link.href -%>'
-          }<% if index < links_size - 1 %>, <% end -%>
-          <% end %>
-        ],
-        profiles: [
-          <% profiles.each_with_index do |profile, index| %>
-          {
-            name: '<%= escape_javascript profile['name'] -%>',
-            key: '<%= escape_javascript profile['key']-%>',
-            language: '<%= escape_javascript Api::Utils.language_name(profile['language']) -%>'
-          }<% if index < profiles_size - 1 %>, <% end -%>
-          <% end %>
-        ],
-        <% if gate %>
-        gate: {
-          name: '<%= escape_javascript gate.getName() -%>',
-          key: <%= escape_javascript gate_id -%>,
-          isDefault: <%= is_gate_default -%>
-        }
-        <% end %>
-      };
-
-      <% if m %>
-      var gate = {
-        level: '<%= m.alert_status -%>',
-        conditions: [
-          <% conditions.sort_by {|condition| [ -condition['level'].length, metric(condition['metric']).short_name] }.each do |condition| %>
-          <% metric = metric(condition['metric']) %>
-          {
-            level: '<%= escape_javascript condition['level'] %>',
-            metric: {
-              name: '<%= escape_javascript metric.name %>',
-              type: '<%= escape_javascript metric.value_type %>'
-            },
-            op: '<%= escape_javascript condition['op'] %>',
-            period: '<%= condition['period'] %>',
-            warning: '<%= escape_javascript condition['warning'] %>',
-            error: '<%= escape_javascript condition['error'] %>',
-            actual: '<%= escape_javascript condition['actual'] %>',
-          },
-          <% end %>
-        ]
-      };
-      <% else %>
-      var gate = null;
-      <% end %>
-
-      var measures = {
-        <% if @snapshot %>
-
-        // issues
-        <% if @snapshot.measure('sqale_rating') %>
-        sqaleRating: '<%= @snapshot.measure('sqale_rating').value -%>',
-        <% else %>
-        sqaleRating: 'A',
-        <% end %>
-
-        // coverage
-        <% if @snapshot.measure('overall_coverage') %>
-        coverage: '<%= @snapshot.measure('overall_coverage').value -%>',
-        <% end %>
-        <% if @snapshot.measure('tests') %>
-        tests: '<%= @snapshot.measure('tests').value -%>',
-        <% end %>
-
-        // duplications
-        duplications: '<%= @snapshot.measure('duplicated_lines_density').value -%>',
-        duplicatedLines: '<%= @snapshot.measure('duplicated_lines').value -%>',
-        duplicatedBlocks: '<%= @snapshot.measure('duplicated_blocks').value -%>',
-
-        // size
-        lines: '<%= @snapshot.measure('lines').value -%>',
-        files: '<%= @snapshot.measure('files').value -%>'
-        <% end %>
-      };
-
-      var leak = {
-        <% if @snapshot %>
-        // coverage
-        <% if @snapshot.measure('new_overall_coverage') %>
-        newCoverage: '<%= @snapshot.measure('new_overall_coverage').variation(3) -%>',
-        <% end %>
-        <% if @snapshot.measure('tests') %>
-        tests: '<%= @snapshot.measure('tests').variation(3) -%>',
-        <% end %>
-
-        // duplications
-        duplications: '<%= @snapshot.measure('duplicated_lines_density').variation(3) -%>',
-        duplicatedLines: '<%= @snapshot.measure('duplicated_lines').variation(3) -%>',
-        duplicatedBlocks: '<%= @snapshot.measure('duplicated_blocks').variation(3) -%>',
-
-        // size
-        lines: '<%= @snapshot.measure('lines').variation(3) -%>',
-        files: '<%= @snapshot.measure('files').variation(3) -%>'
-        <% end %>
-      };
-
-      require(['apps/overview/app'], function (App) {
-        App.start({ el: '#content', component: component, gate: gate, measures: measures, leak: leak });
-      });
-    })();
-  </script>
-<% end %>
index 8590692e193245292f54234297ab1847872dea59..7ad9f19649f067c8a5dd97adc38335f3cc717963 100644 (file)
@@ -3032,35 +3032,3 @@ update_center.status.COMPATIBLE=Compatible
 update_center.status.INCOMPATIBLE=Incompatible
 update_center.status.REQUIRES_SYSTEM_UPGRADE=Requires system update
 update_center.status.DEPS_REQUIRE_SYSTEM_UPGRADE=Some of dependencies requires system update
-
-
-
-#------------------------------------------------------------------------------
-#
-# OVERVIEW
-#
-#------------------------------------------------------------------------------
-overview.quality_gate=Quality Gate
-overview.quality_profiles=Quality Profiles
-overview.water_leak=Water Leak
-overview.project_in_a_nutshell=Project In a Nutshell
-
-overview.metric.new_coverage=New Coverage
-overview.metric.tests=tests
-overview.metric.duplications=Duplications
-overview.metric.duplicated_lines=lines
-overview.metric.debt=Debt
-overview.metric.issues=Issues
-overview.metric.new_debt=New Debt
-overview.metric.new_issues=New Issues
-overview.metric.lines=Lines
-overview.metric.files=Files
-overview.metric.coverage=Coverage
-
-overview.period.previous_version=since {0}
-overview.period.previous_analysis=since previous analysis
-overview.period.days=last {0} days
-
-overview.gate.ERROR=Failed
-overview.gate.WARN=Warning
-overview.gate.OK=Passed