aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src
diff options
context:
space:
mode:
authorStas Vilchik <vilchiks@gmail.com>2017-02-07 16:19:54 +0100
committerStas Vilchik <stas-vilchik@users.noreply.github.com>2017-02-08 16:25:16 +0100
commit6d40de520d8927f6d2b9da67b427e8b589075fe4 (patch)
tree064fd6e81877fe17efa31c05b1f516e0e9c6bdb0 /server/sonar-web/src
parent21a188aad134c69739b5f9dce43f0981580721ac (diff)
downloadsonarqube-6d40de520d8927f6d2b9da67b427e8b589075fe4.tar.gz
sonarqube-6d40de520d8927f6d2b9da67b427e8b589075fe4.zip
SONAR-8749 Update landing page
Diffstat (limited to 'server/sonar-web/src')
-rw-r--r--server/sonar-web/src/main/js/apps/about/components/AboutApp.js88
-rw-r--r--server/sonar-web/src/main/js/apps/about/components/AboutCleanCode.js4
-rw-r--r--server/sonar-web/src/main/js/apps/about/components/AboutIssues.js60
-rw-r--r--server/sonar-web/src/main/js/apps/about/components/AboutLanguages.js70
-rw-r--r--server/sonar-web/src/main/js/apps/about/components/AboutLeakPeriod.js4
-rw-r--r--server/sonar-web/src/main/js/apps/about/components/AboutProjects.js2
-rw-r--r--server/sonar-web/src/main/js/apps/about/components/AboutQualityModel.js65
-rw-r--r--server/sonar-web/src/main/js/apps/about/components/AboutScanners.js14
-rw-r--r--server/sonar-web/src/main/js/apps/about/components/ReadMore.js1
-rw-r--r--server/sonar-web/src/main/js/apps/about/styles.css108
-rw-r--r--server/sonar-web/src/main/webapp/images/scanner-logos/sonarqube.svg7
11 files changed, 271 insertions, 152 deletions
diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutApp.js b/server/sonar-web/src/main/js/apps/about/components/AboutApp.js
index 542056a1329..21db6186dee 100644
--- a/server/sonar-web/src/main/js/apps/about/components/AboutApp.js
+++ b/server/sonar-web/src/main/js/apps/about/components/AboutApp.js
@@ -17,42 +17,55 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+// @flow
import React from 'react';
import { connect } from 'react-redux';
import keyBy from 'lodash/keyBy';
+import { Link } from 'react-router';
import AboutProjects from './AboutProjects';
import EntryIssueTypes from './EntryIssueTypes';
+import AboutLanguages from './AboutLanguages';
import AboutCleanCode from './AboutCleanCode';
-import AboutIssues from './AboutIssues';
+import AboutQualityModel from './AboutQualityModel';
import AboutQualityGates from './AboutQualityGates';
import AboutLeakPeriod from './AboutLeakPeriod';
import AboutStandards from './AboutStandards';
import AboutScanners from './AboutScanners';
-import { translate } from '../../../helpers/l10n';
import { searchProjects } from '../../../api/components';
import { getFacet } from '../../../api/issues';
-import { getSettingValue } from '../../../store/rootReducer';
import * as settingsAPI from '../../../api/settings';
+import { getCurrentUser } from '../../../store/rootReducer';
import '../styles.css';
+import { translate } from '../../../helpers/l10n';
+
+type State = {
+ loading: boolean,
+ projectsCount?: number,
+ issueTypes?: {
+ [key: string]: {
+ count: number
+ }
+ },
+ customText?: string
+};
class AboutApp extends React.Component {
- static propTypes = {
- customLogoUrl: React.PropTypes.string,
- customLogoWidth: React.PropTypes.oneOfType([React.PropTypes.string, React.PropTypes.number])
+ mounted: boolean;
+
+ props: {
+ currentUser: { isLoggedIn: boolean }
};
- state = {
+ state: State = {
loading: true
};
componentDidMount () {
this.mounted = true;
- document.querySelector('html').classList.add('dashboard-page');
this.loadData();
}
componentWillUnmount () {
- document.querySelector('html').classList.remove('dashboard-page');
this.mounted = false;
}
@@ -94,47 +107,51 @@ class AboutApp extends React.Component {
const { customText } = this.state;
- const logoUrl = this.props.customLogoUrl || `${window.baseUrl}/images/logo.svg`;
- const logoWidth = Number(this.props.customLogoWidth || 100);
- const logoHeight = 30;
- const logoTitle = this.props.customLogoUrl ? '' : translate('layout.sonar.slogan');
+ // $FlowFixMe
+ const bugs = this.state.issueTypes['BUG'].count;
+ // $FlowFixMe
+ const vulnerabilities = this.state.issueTypes['VULNERABILITY'].count;
+ // $FlowFixMe
+ const codeSmells = this.state.issueTypes['CODE_SMELL'].count;
return (
<div id="about-page" className="about-page">
- <div className="about-page-entry">
- <div className="about-page-container clearfix">
- <div className="pull-left">
- <div className="about-page-logo">
- <img src={logoUrl} width={2 * logoWidth} height={2 * logoHeight} alt={logoTitle}/>
- </div>
- </div>
-
- <div className="about-page-entry-column">
- <EntryIssueTypes
- bugs={this.state.issueTypes['BUG'].count}
- vulnerabilities={this.state.issueTypes['VULNERABILITY'].count}
- codeSmells={this.state.issueTypes['CODE_SMELL'].count}/>
+ <div className="about-page-container">
+ <div className="about-page-entry">
+ <div className="about-page-intro">
+ <h1 className="big-spacer-bottom">
+ {translate('layout.sonar.slogan')}
+ </h1>
+ {!this.props.currentUser.isLoggedIn && (
+ <Link to="/sessions/new" className="button button-active big-spacer-right">
+ {translate('layout.login')}
+ </Link>
+ )}
+ <a className="button" href="https://redirect.sonarsource.com/doc/home.html">
+ {translate('about_page.read_documentation')}
+ </a>
</div>
- <div className="about-page-entry-column">
+ <div className="about-page-instance">
<AboutProjects count={this.state.projectsCount}/>
+ <EntryIssueTypes bugs={bugs} vulnerabilities={vulnerabilities} codeSmells={codeSmells}/>
</div>
</div>
- </div>
-
- <div className="about-page-container">
{customText != null && customText.length > 0 && (
<div className="about-page-section" dangerouslySetInnerHTML={{ __html: customText }}/>
)}
+ <AboutLanguages/>
+
+ <AboutQualityModel/>
+
<div className="flex-columns">
- <div className="flex-column flex-column-two-thirds about-page-group-boxes">
+ <div className="flex-column flex-column-half about-page-group-boxes">
<AboutCleanCode/>
- <AboutLeakPeriod/>
</div>
- <div className="flex-column flex-column-third about-page-group-boxes">
- <AboutIssues/>
+ <div className="flex-column flex-column-half about-page-group-boxes">
+ <AboutLeakPeriod/>
</div>
</div>
@@ -155,8 +172,7 @@ class AboutApp extends React.Component {
}
const mapStateToProps = state => ({
- customLogoUrl: (getSettingValue(state, 'sonar.lf.logoUrl') || {}).value,
- customLogoWidth: (getSettingValue(state, 'sonar.lf.logoWidthPx') || {}).value
+ currentUser: getCurrentUser(state)
});
export default connect(mapStateToProps)(AboutApp);
diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutCleanCode.js b/server/sonar-web/src/main/js/apps/about/components/AboutCleanCode.js
index 9c3c57c5e0a..d5531859fc2 100644
--- a/server/sonar-web/src/main/js/apps/about/components/AboutCleanCode.js
+++ b/server/sonar-web/src/main/js/apps/about/components/AboutCleanCode.js
@@ -18,8 +18,11 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import React from 'react';
+import ReadMore from './ReadMore';
import { translate } from '../../../helpers/l10n';
+const link = 'https://redirect.sonarsource.com/doc/issues.html';
+
export default class AboutCleanCode extends React.Component {
render () {
return (
@@ -27,6 +30,7 @@ export default class AboutCleanCode extends React.Component {
<h2>{translate('about_page.clean_code')}</h2>
<div className="boxed-group-inner">
<p className="about-page-text">{translate('about_page.clean_code.text')}</p>
+ <ReadMore link={link}/>
</div>
</div>
);
diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutIssues.js b/server/sonar-web/src/main/js/apps/about/components/AboutIssues.js
deleted file mode 100644
index 8213bf6316c..00000000000
--- a/server/sonar-web/src/main/js/apps/about/components/AboutIssues.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2016 SonarSource SA
- * mailto:contact AT sonarsource DOT com
- *
- * This program 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.
- *
- * This program 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.
- */
-import React from 'react';
-import { translate } from '../../../helpers/l10n';
-import BugIcon from '../../../components/ui/BugIcon';
-import VulnerabilityIcon from '../../../components/ui/VulnerabilityIcon';
-import CodeSmellIcon from '../../../components/ui/CodeSmellIcon';
-
-export default class AboutIssues extends React.Component {
- render () {
- return (
- <div className="boxed-group">
- <h2>{translate('about_page.quality_model')}</h2>
-
- <div className="boxed-group-inner clearfix">
- <h3 className="spacer-bottom">
- <span className="little-spacer-right"><BugIcon/></span>
- {translate('issue.type.BUG.plural')}
- </h3>
- <p className="about-page-text">
- {translate('about_page.quality_model.bugs')}
- </p>
-
- <h3 className="big-spacer-top spacer-bottom">
- <span className="little-spacer-right"><VulnerabilityIcon/></span>
- {translate('issue.type.VULNERABILITY.plural')}
- </h3>
- <p className="about-page-text">
- {translate('about_page.quality_model.vulnerabilities')}
- </p>
-
- <h3 className="big-spacer-top spacer-bottom">
- <span className="little-spacer-right"><CodeSmellIcon/></span>
- {translate('issue.type.CODE_SMELL.plural')}
- </h3>
- <p className="about-page-text">
- {translate('about_page.quality_model.code_smells')}
- </p>
- </div>
- </div>
- );
- }
-}
diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutLanguages.js b/server/sonar-web/src/main/js/apps/about/components/AboutLanguages.js
new file mode 100644
index 00000000000..824e10cb33d
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/about/components/AboutLanguages.js
@@ -0,0 +1,70 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.
+ */
+// @flow
+import React from 'react';
+import { translate } from '../../../helpers/l10n';
+
+const languages = [
+ { name: 'Java', url: 'https://redirect.sonarsource.com/plugins/java.html' },
+ { name: 'C/C++', url: 'https://redirect.sonarsource.com/plugins/cpp.html' },
+ { name: 'C#', url: 'https://redirect.sonarsource.com/plugins/csharp.html' },
+ { name: 'COBOL', url: 'https://redirect.sonarsource.com/plugins/cobol.html' },
+ { name: 'ABAP', url: 'https://redirect.sonarsource.com/plugins/abap.html' },
+ { name: 'HTML', url: 'https://redirect.sonarsource.com/plugins/web.html' },
+ { name: 'RPG', url: 'https://redirect.sonarsource.com/plugins/rpg.html' },
+ { name: 'JavaScript', url: 'https://redirect.sonarsource.com/plugins/javascript.html' },
+ { name: 'Objective C', url: 'https://redirect.sonarsource.com/plugins/objectivec.html' },
+ { name: 'XML', url: 'https://redirect.sonarsource.com/plugins/xml.html' },
+ { name: 'VB.NET', url: 'https://redirect.sonarsource.com/plugins/vbnet.html' },
+ { name: 'PL/SQL', url: 'https://redirect.sonarsource.com/plugins/plsql.html' },
+ { name: 'Flex', url: 'https://redirect.sonarsource.com/plugins/flex.html' },
+ { name: 'Python', url: 'https://redirect.sonarsource.com/plugins/python.html' },
+ { name: 'Groovy', url: 'https://redirect.sonarsource.com/plugins/groovy.html' },
+ { name: 'PHP', url: 'https://redirect.sonarsource.com/plugins/php.html' },
+ { name: 'Swift', url: 'https://redirect.sonarsource.com/plugins/swift.html' },
+ { name: 'Visual Basic', url: 'https://redirect.sonarsource.com/plugins/vb.html' },
+ { name: 'PL/I', url: 'https://redirect.sonarsource.com/plugins/pli.html' }
+];
+
+const half = (languages.length + 1) / 2;
+
+export default class AboutLanguages extends React.Component {
+ render () {
+ return (
+ <div className="boxed-group">
+ <h2>{translate('about_page.languages')}</h2>
+ <div className="boxed-group-inner">
+ <p className="about-page-text">{translate('about_page.languages.text')}</p>
+ <ul className="about-page-languages">
+ {languages.slice(0, half).map((language, index) => (
+ <li key={index}>
+ <a href={languages[index].url}>{languages[index].name}</a>
+ <br/>
+ {index + half < languages.length && (
+ <a href={languages[index + half].url}>{languages[index + half].name}</a>
+ )}
+ </li>
+ ))}
+ </ul>
+ </div>
+ </div>
+ );
+ }
+}
diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutLeakPeriod.js b/server/sonar-web/src/main/js/apps/about/components/AboutLeakPeriod.js
index 1755b96e69a..feb094aa5c9 100644
--- a/server/sonar-web/src/main/js/apps/about/components/AboutLeakPeriod.js
+++ b/server/sonar-web/src/main/js/apps/about/components/AboutLeakPeriod.js
@@ -27,9 +27,9 @@ export default class AboutLeakPeriod extends React.Component {
render () {
return (
<div className="boxed-group">
- <h2>{translate('about_page.leak_period')}</h2>
+ <h2>{translate('about_page.fix_the_leak')}</h2>
<div className="boxed-group-inner">
- <p className="about-page-text">{translate('about_page.leak_period.text')}</p>
+ <p className="about-page-text">{translate('about_page.fix_the_leak.text')}</p>
<ReadMore link={link}/>
</div>
</div>
diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutProjects.js b/server/sonar-web/src/main/js/apps/about/components/AboutProjects.js
index 190f41f6704..ecaf724f924 100644
--- a/server/sonar-web/src/main/js/apps/about/components/AboutProjects.js
+++ b/server/sonar-web/src/main/js/apps/about/components/AboutProjects.js
@@ -30,7 +30,7 @@ export default class AboutProjects extends React.Component {
render () {
return (
<div className="about-page-projects">
- <div className="big-spacer-bottom">
+ <div>
<Link to="/projects" className="about-page-projects-link">
{formatMeasure(this.props.count, 'INT')}
</Link>
diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutQualityModel.js b/server/sonar-web/src/main/js/apps/about/components/AboutQualityModel.js
new file mode 100644
index 00000000000..fc036f18c95
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/about/components/AboutQualityModel.js
@@ -0,0 +1,65 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2016 SonarSource SA
+ * mailto:contact AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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.
+ */
+import React from 'react';
+import { translate } from '../../../helpers/l10n';
+import BugIcon from '../../../components/ui/BugIcon';
+import VulnerabilityIcon from '../../../components/ui/VulnerabilityIcon';
+import CodeSmellIcon from '../../../components/ui/CodeSmellIcon';
+
+export default class AboutQualityModel extends React.Component {
+ render () {
+ return (
+ <div className="boxed-group about-quality-model">
+ <h2>{translate('about_page.quality_model')}</h2>
+
+ <div className="boxed-group-inner clearfix">
+ <div className="flex-columns">
+ <div className="flex-column flex-column-third">
+ <div className="pull-left little-spacer-right"><BugIcon/></div>
+ <p className="about-page-text overflow-hidden">
+ <strong>{translate('issue.type.BUG.plural')}</strong>
+ {' '}
+ {translate('about_page.quality_model.bugs')}
+ </p>
+ </div>
+
+ <div className="flex-column flex-column-third">
+ <div className="pull-left little-spacer-right"><VulnerabilityIcon/></div>
+ <p className="about-page-text overflow-hidden">
+ <strong>{translate('issue.type.VULNERABILITY.plural')}</strong>
+ {' '}
+ {translate('about_page.quality_model.vulnerabilities')}
+ </p>
+ </div>
+
+ <div className="flex-column flex-column-third">
+ <div className="pull-left little-spacer-right"><CodeSmellIcon/></div>
+ <p className="about-page-text overflow-hidden">
+ <strong>{translate('issue.type.CODE_SMELL.plural')}</strong>
+ {' '}
+ {translate('about_page.quality_model.code_smells')}
+ </p>
+ </div>
+ </div>
+ </div>
+ </div>
+ );
+ }
+}
diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutScanners.js b/server/sonar-web/src/main/js/apps/about/components/AboutScanners.js
index 627996d1945..42b0e5328a9 100644
--- a/server/sonar-web/src/main/js/apps/about/components/AboutScanners.js
+++ b/server/sonar-web/src/main/js/apps/about/components/AboutScanners.js
@@ -18,7 +18,6 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import React from 'react';
-import ReadMore from './ReadMore';
import { translate } from '../../../helpers/l10n';
const scanners = [
@@ -49,16 +48,13 @@ export default class AboutScanners extends React.Component {
<div className="boxed-group">
<h2>{translate('about_page.scanners')}</h2>
<div className="boxed-group-inner">
+ <p className="about-page-text">{translate('about_page.scanners.text')}</p>
<div className="about-page-analyzers">
{scanners.map(scanner => (
- <div key={scanner.key} className="about-page-analyzer-box">
- <div className="big-spacer-bottom">
- <img src={`${window.baseUrl}/images/scanner-logos/${scanner.key}.svg`} height={80}
- alt={translate('about_page.scanners', scanner.key)}/>
- </div>
- <p className="about-page-text">{translate('about_page.scanners', scanner.key, 'text')}</p>
- <ReadMore link={scanner.link}/>
- </div>
+ <a key={scanner.key} className="about-page-analyzer-box" href={scanner.link}>
+ <img src={`${window.baseUrl}/images/scanner-logos/${scanner.key}.svg`} height={60}
+ alt={translate('about_page.scanners', scanner.key)}/>
+ </a>
))}
</div>
</div>
diff --git a/server/sonar-web/src/main/js/apps/about/components/ReadMore.js b/server/sonar-web/src/main/js/apps/about/components/ReadMore.js
index 2199979f1ca..8ba0ea98a22 100644
--- a/server/sonar-web/src/main/js/apps/about/components/ReadMore.js
+++ b/server/sonar-web/src/main/js/apps/about/components/ReadMore.js
@@ -30,7 +30,6 @@ export default class ReadMore extends React.Component {
<div className="big-spacer-top">
<a className="about-page-link-more" href={this.props.link} target="_blank">
<span>{translate('about_page.read_more')}</span>
- <i className="icon-detach spacer-left"/>
</a>
</div>
);
diff --git a/server/sonar-web/src/main/js/apps/about/styles.css b/server/sonar-web/src/main/js/apps/about/styles.css
index 98840ab8fcd..d09ede5c5f7 100644
--- a/server/sonar-web/src/main/js/apps/about/styles.css
+++ b/server/sonar-web/src/main/js/apps/about/styles.css
@@ -1,10 +1,21 @@
.about-page {
+ font-size: 14px;
+}
+
+.about-page .boxed-group {
+ border: none;
}
.about-page .boxed-group h2 {
font-size: 18px;
- font-weight: bold;
- text-align: center;
+}
+
+.about-page .boxed-group > h2 {
+ padding-top: 25px;
+}
+
+.about-page .boxed-group-inner {
+ padding-bottom: 25px;
}
.about-page-container {
@@ -17,61 +28,63 @@
box-sizing: border-box;
}
-.about-page-center-container {
- position: relative;
- width: 640px;
- margin: 0 auto;
- text-align: center;
-}
-
-.about-page-logo {
- padding: 20px 0;
-}
-
.about-page-entry {
- margin-bottom: 50px;
- padding: 40px 0 50px;
- background-color: #363636;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 45px;
+ padding: 65px 0 65px;
+ border-bottom: 1px solid #e6e6e6;
}
-.about-page-entry .about-page-header {
- color: rgba(255, 255, 255, 0.9);
+.about-page-intro {
+ padding-right: 65px;
+ border-right: 1px solid #e6e6e6;
}
-.about-page-entry-column {
- float: right;
- text-align: center;
- box-sizing: border-box;
+.about-page-intro > h1 {
+ line-height: 40px;
+ font-size: 26px;
+ font-weight: 300;
}
-.about-page-entry-column + .about-page-entry-column {
- margin-right: 60px;
- padding-right: 60px;
- border-right: 1px solid rgba(75, 159, 213, 0.2);
+.about-page-intro > .button {
+ height: 32px;
+ line-height: 30px;
+ padding-left: 15px;
+ padding-right: 15px;
+ border-radius: 3px;
+ font-size: 13px;
+ font-weight: 400;
}
-.about-page-entry .alert {
- font-size: 13px;
+.about-page-instance {
+ display: flex;
+ align-items: center;
}
.about-page-projects {
+ margin-left: 65px;
line-height: 1.4;
- color: rgba(255, 255, 255, 0.9);
font-size: 16px;
text-align: center;
}
.about-page-projects-link {
- border-bottom-color: rgba(75, 159, 213, 0.2);
- color: rgb(75, 159, 213);
- font-size: 44px;
- font-weight: bold;
+ display: inline-block;
+ line-height: 1;
+ margin-bottom: 12px;
+ font-size: 32px;
}
.about-page-issue-types {
text-align: left;
}
+.about-page-issue-types > li + li {
+ margin-top: 12px;
+}
+
.about-page-issue-types svg {
vertical-align: middle;
transform: translateY(-1px);
@@ -85,9 +98,7 @@
}
.about-page-issue-type-link {
- border-bottom-color: rgba(75, 159, 213, 0.2);
- color: rgb(75, 159, 213);
- font-size: 24px;
+ font-size: 16px;
font-weight: bold;
}
@@ -194,15 +205,34 @@
text-transform: uppercase;
}
+.about-page-languages {
+ display: flex;
+ justify-content: space-between;
+ margin-top: 10px;
+}
+
+.about-page-languages > li {
+ line-height: 2;
+}
+
+.about-quality-model .flex-column + .flex-column{
+ margin-left: 30px;
+ padding-left: 30px;
+ border-left: 1px solid #e6e6e6;
+}
+
+.about-quality-model svg {
+ transform: translateY(2px);
+}
+
.about-page-analyzers {
display: flex;
justify-content: space-between;
- flex-wrap: wrap;
+ margin-top: 15px;
}
.about-page-analyzer-box {
- width: 310px;
- margin-top: 40px;
+ border: none;
}
.about-page-group-boxes {
diff --git a/server/sonar-web/src/main/webapp/images/scanner-logos/sonarqube.svg b/server/sonar-web/src/main/webapp/images/scanner-logos/sonarqube.svg
index f0650ba552f..ad6cebddc28 100644
--- a/server/sonar-web/src/main/webapp/images/scanner-logos/sonarqube.svg
+++ b/server/sonar-web/src/main/webapp/images/scanner-logos/sonarqube.svg
@@ -1,7 +1,6 @@
-<svg viewBox="0 0 165 80" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414">
+<svg viewBox="0 0 169 60" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41421">
<g fill-rule="nonzero">
- <path d="M159.602 51.9h-2.013c0-16.19-13.378-29.423-29.903-29.423V20.4c17.603 0 31.956 14.217 31.956 31.5h-.04z" fill="#4B9FD5"/>
- <path d="M161 41.066c-2.424-10.167-10.658-18.708-21.053-21.653l.467-1.652c10.94 3.184 19.655 12.153 22.174 22.987l-1.587.32zM163.28 31.55c-2.505-5.474-6.703-10.18-11.954-13.35l.668-1.2c5.45 3.278 9.94 8.316 12.46 14.005l-1.174.546z" fill="#4B9FD5"/>
- <path d="M0 51.14c1.2.654 3.064 1.2 5.144 1.2 4.49 0 6.782-2.186 6.782-5.145-.04-2.29-1.318-3.93-4.263-4.917-1.947-.666-2.52-1.09-2.52-1.865-.04-.76.653-1.2 1.854-1.2 1.304 0 2.744.44 3.398.868l.853-3.385c-.974-.44-2.6-.986-4.466-.986C2.905 35.71.44 38 .44 40.96c-.08 1.865 1.198 3.61 4.477 4.704 1.8.653 2.305.987 2.305 1.866-.012.878-.653 1.306-2.078 1.306-1.493 0-3.398-.654-4.265-1.2L0 51.14zM21.575 39.32c2.225 0 3.158 2.292 3.158 4.704-.026 2.853-1.213 4.704-3.172 4.704-2.09 0-3.184-1.972-3.184-4.704-.026-2.29.88-4.704 3.185-4.704m.174-3.61c-5.104 0-8.488 3.278-8.488 8.42.026 5.145 3.597 8.21 8.196 8.21 4.237 0 8.315-2.733 8.315-8.53.026-4.703-3.17-8.1-7.983-8.1h-.04M31.316 51.9h4.917v-9.075c0-.44-.014-.88.2-1.213.307-.865 1.092-1.85 2.518-1.85 1.733 0 2.413 1.425 2.413 3.383l.04 8.755h4.905v-9.3c0-4.706-2.426-6.784-5.61-6.784-2.693 0-4.266 1.533-4.918 2.52h-.108l-.226-2.188h-4.263c.065 1.428.105 3.066.105 5.04l.028 10.712zM57.154 46.21c0 .226-.04.546-.147.773-.28 1.093-1.318 1.853-2.517 1.853-1.08 0-1.973-.654-1.973-1.853.04-1.865 2.078-2.52 4.597-2.52l.04 1.746m4.744-3.61c0-3.72-1.612-6.89-6.864-6.89-2.93 0-5.143.88-6.235 1.425l.946 3.17c1.037-.65 2.77-1.198 4.41-1.198 2.386 0 2.85 1.2 2.85 2.08l-.01.213c-5.598 0-9.29 1.972-9.29 6.022.013 2.505 1.972 4.917 5.143 4.917 1.838 0 3.505-.76 4.477-1.973h.107l.293 1.533h4.438c-.2-.865-.24-2.293-.24-3.824l-.027-5.477zM64.31 51.9h4.903v-7.98c0-.335.042-.775.042-1.095.386-1.533 1.652-2.52 3.398-2.52.573 0 .986.108 1.304.108l.04-4.597c-.346 0-.585-.107-1.012-.107-1.573 0-3.505.985-4.277 3.278h-.133l-.2-2.84h-4.198c.093 1.307.16 2.84.16 5.144L64.31 51.9zM106.82 47.53c0 1.638.08 3.17.08 4.37h-2.534l-.16-2.625h-.064c-.762 1.318-2.494 3.064-5.345 3.064-2.45 0-5.464-1.426-5.464-6.996v-9.422h2.92v8.876c0 3.052.906 5.13 3.53 5.13 1.987 0 3.29-1.412 3.838-2.733.188-.44.32-.878.32-1.425l-.025-9.848h2.905V47.53zM111.95 45.664c0 .333.093.653.093.987.613 2.078 2.293 3.504 4.37 3.504 3.078 0 4.932-2.517 4.932-6.235-.04-3.173-1.64-5.918-4.824-5.918-1.958 0-3.825 1.318-4.37 3.61-.093.334-.214.666-.214 1.213l.014 2.84m-3 6.342c.067-1.093.135-2.624.135-4.038V28.592h2.865v10.075h.065c1.026-1.76 2.866-2.96 5.492-2.96 3.93 0 6.782 3.28 6.675 8.21.028 5.69-3.61 8.53-7.102 8.53-2.345 0-4.158-.868-5.37-3.065h-.12l-.133 2.624h-2.506zM137.096 42.386c.026-1.865-.76-4.705-4.052-4.705-2.917 0-4.263 2.733-4.478 4.706h8.53m-8.53 2.078c.068 3.944 2.627 5.585 5.464 5.585 2.106 0 3.398-.443 4.492-.882l.453 2.08c-1.026.44-2.76.986-5.265.986-4.983 0-7.888-3.172-7.888-7.995-.028-4.813 2.852-8.636 7.448-8.636 5.238 0 6.677 4.597 6.677 7.54-.053.548-.12.987-.12 1.32h-11.26zM86.577 48.836c-2.704 1.865-6.37 1.213-8.236-1.533-1.81-2.732-1.09-6.343 1.534-8.196 2.746-1.865 6.45-1.105 8.316 1.533 1.785 2.732 1.093 6.45-1.64 8.196m3.68-9.622c-2.613-3.837-7.836-4.81-11.78-2.185-3.8 2.624-4.81 7.875-2.186 11.698 2.318 3.398 6.676 4.597 10.393 3.066l3.225 5.25 2.598-1.746-3.265-5.37c2.826-2.733 3.345-7.21 1.054-10.714h-.04"/>
+ <path d="M5.6405 33.56208c0-.39166-.13802-.6925-.41525-.9013-.27605-.21-.7739-.43178-1.49235-.66418-.71962-.2324-1.28825-.46245-1.70823-.68778-1.14197-.617-1.71413-1.44988-1.71413-2.4951 0-.54386.15336-1.02872.4601-1.45578.3067-.42588.74675-.75856 1.3201-.99805.57334-.2395 1.21747-.35982 1.93238-.35982.71844 0 1.35903.12977 1.92176.3905.56155.2607.99804.6276 1.3095 1.10302.31143.47425.46716 1.01338.46716 1.6174H5.6476c0-.46127-.14512-.8199-.43533-1.07472-.2902-.256-.6984-.3846-1.22337-.3846-.50728 0-.9013.10736-1.18208.32207-.28195.2147-.42234.49666-.42234.84704 0 .32677.16517.60047.4943.82225.32915.2206.8152.42824 1.45578.62172 1.17972.3551 2.03856.79513 2.5777 1.3201.53912.52616.80928 1.17972.80928 1.96306 0 .8718-.33032 1.55487-.9886 2.05035-.65947.49548-1.54662.74322-2.66146.74322-.7739 0-1.47937-.14156-2.11523-.42587-.63587-.28314-1.12074-.67126-1.45578-1.1644-.33386-.4931-.5002-1.0641-.5002-1.71412h2.07985c0 1.11013.66418 1.66577 1.99136 1.66577.49313 0 .87772-.10027 1.15377-.30082.27723-.20056.41526-.48015.41526-.83997zM16.47152 31.39848c0 .99096-.17578 1.85924-.52497 2.606-.35038.74676-.85176 1.32247-1.50415 1.7283-.65238.4058-1.39915.60872-2.24265.60872-.83406 0-1.57846-.20055-2.2332-.60165-.65357-.4011-1.16085-.97327-1.52066-1.71767-.35983-.7444-.5415-1.60088-.54622-2.56826v-.49784c0-.99096.1793-1.86277.5356-2.61662.35744-.75266.86236-1.33072 1.51475-1.73418.6512-.40347 1.3968-.6052 2.23557-.6052.83878 0 1.58436.20173 2.23675.6052.6512.40346 1.15612.98152 1.51358 1.73418.35745.75385.5356 1.6233.5356 2.60954v.44948zm-2.10108-.45655c0-1.05467-.18994-1.85688-.56745-2.40545-.37752-.5474-.91665-.82227-1.6174-.82227-.69604 0-1.2328.27135-1.61032.81284-.3775.5415-.5698 1.33426-.57452 2.38067v.49078c0 1.02753.18993 1.82502.56744 2.39247.3775.56627.92136.8494 1.63155.8494.69604 0 1.23045-.27252 1.60324-.81873.37397-.5462.56272-1.34252.56744-2.38893v-.49077zM25.24274 36.2023H23.1688l-4.037-6.62177v6.62177h-2.07396V26.1381h2.07395l4.04407 6.63593V26.1381h2.06687v10.0642zM31.94 34.12953h-3.6359l-.6913 2.07277h-2.2049l3.7456-10.0642h1.92177l3.76803 10.0642h-2.2049l-.6984-2.07277zm-3.0767-1.67992h2.51634l-1.26466-3.76802-1.25168 3.76803zM38.5889 32.51803h-1.65278v3.68427h-2.07276V26.1381h3.73853c1.18915 0 2.10697.26544 2.75228.79514.64412.5297.96737 1.2788.96737 2.24618 0 .6866-.14865 1.25995-.44594 1.71768-.29728.4589-.74793.82462-1.35195 1.09596l2.17777 4.1125v.09674h-2.22614l-1.88637-3.68427zm-1.65278-1.67874h1.67285c.52143 0 .9249-.13332 1.2104-.39757.28548-.26544.42823-.63115.42823-1.09596 0-.47425-.1345-.84822-.40465-1.11956-.26897-.2725-.68305-.40817-1.24106-.40817H36.9361v3.02126zM51.2308 31.39848c0 .94023-.1522 1.7566-.45656 2.45028-.30437.69367-.72553 1.2505-1.26466 1.6693l1.67284 1.3142-1.3201 1.16793-2.14356-1.72122c-.2442.0413-.49784.06252-.75974.06252-.83406 0-1.57846-.20055-2.2332-.60165-.65475-.4011-1.16085-.97327-1.52066-1.71767-.35982-.7444-.5415-1.60088-.5462-2.56826v-.49784c0-.99096.1793-1.86277.53558-2.61662.35745-.75266.86237-1.33072 1.51476-1.73418.6512-.40347 1.3968-.6052 2.23557-.6052.83878 0 1.58436.20173 2.23675.6052.6512.40346 1.15612.98152 1.51358 1.73418.35627.75385.5356 1.6233.5356 2.60954v.44948zm-2.1011-.45655c0-1.05467-.18993-1.85688-.56744-2.40545-.3775-.5474-.91664-.82227-1.6174-.82227-.69603 0-1.2328.27135-1.6103.81284-.3787.5415-.5698 1.33426-.57453 2.38067v.49078c0 1.02753.18993 1.82502.56744 2.39247.3775.56627.92136.8494 1.63155.8494.69604 0 1.23045-.27252 1.60324-.81873.37398-.5462.56273-1.34252.56745-2.38893v-.49077zM59.44872 26.1381v6.62885c0 1.10186-.34448 1.9725-1.03343 2.61308-.68897.6406-1.6304.96147-2.82426.96147-1.175 0-2.10816-.31144-2.79948-.93315-.69132-.6229-1.04287-1.477-1.05703-2.5647V26.1381h2.07395v6.643c0 .65947.1569 1.13962.47307 1.44163.31616.302.75266.453 1.3095.453 1.16673 0 1.75895-.61344 1.77664-1.83917V26.1381h2.08102zM60.22852 36.2023V26.1381h3.52618c1.221 0 2.1471.2336 2.77824.70194.63115.46717.9473 1.1526.9473 2.05625 0 .4931-.1274.92725-.37986 1.30358-.25364.37515-.60637.65003-1.0582.8258.5167.1286.92254.3893 1.21983.78098.2973.39167.44594.87063.44594 1.43808 0 .96737-.3091 1.69998-.92608 2.19782-.617.49784-1.49706.75148-2.6402.75974H60.2285zm2.07394-4.38148v2.7157h1.77666c.4884 0 .86946-.1156 1.14433-.34918.2737-.2324.41054-.5533.41054-.96384 0-.92136-.4766-1.3897-1.431-1.40268h-1.90054zm0-1.4664h1.53482c1.0464-.0177 1.56903-.4353 1.56903-1.2505 0-.45655-.13212-.7845-.39756-.98506-.26426-.20056-.68306-.30083-1.25404-.30083h-1.45224v2.5364zM74.39813 31.84087h-3.98155v2.69566h4.67287v1.66577H68.3438V26.1381h6.73267v1.67993h-4.6599v2.39837h3.98156v1.62447z" fill="#4A9ACD"/>
+ <path d="M83.21064 33.56208c0-.39166-.1392-.6925-.41526-.9013-.27606-.21-.7739-.43178-1.49353-.66418-.71845-.2324-1.28707-.46245-1.70705-.68778-1.14315-.617-1.71413-1.44988-1.71413-2.4951 0-.54386.15336-1.02872.4601-1.45578.3067-.42588.74675-.75856 1.3201-.99805.57334-.2395 1.21746-.35982 1.93237-.35982.71845 0 1.35904.12977 1.9206.3905.56272.2607.9992.6276 1.31066 1.10302.31144.47425.466 1.01338.466 1.6174H83.2177c0-.46127-.1463-.8199-.4365-1.07472-.2902-.256-.6972-.3846-1.22337-.3846-.5061 0-.90012.10736-1.18208.32207-.28077.2147-.42116.49666-.42116.84704 0 .32677.16517.60047.49432.82225.32914.2206.814.42824 1.4546.62172 1.1797.3551 2.03973.79513 2.57886 1.3201.53913.52616.8081 1.17972.8081 1.96306 0 .8718-.32913 1.55487-.9886 2.05035-.65828.49548-1.54543.74322-2.66027.74322-.77506 0-1.47936-.14156-2.11522-.42587-.63587-.28314-1.12192-.67126-1.45578-1.1644-.33386-.4931-.50138-1.0641-.50138-1.71412h2.08103c0 1.11013.66418 1.66577 1.99136 1.66577.49314 0 .87772-.10027 1.15378-.30082.27605-.20056.41526-.48015.41526-.83997zM93.67476 32.8507c-.07786 1.083-.4778 1.93475-1.19978 2.55765-.7208.6217-1.67166.93315-2.85138.93315-1.28944 0-2.30517-.4353-3.04486-1.3036-.73968-.86826-1.10894-2.06096-1.10894-3.5769v-.6158c0-.96738.17106-1.82032.512-2.55764.34094-.73733.82817-1.3024 1.46168-1.69644.6335-.39403 1.36965-.59104 2.20843-.59104 1.16086 0 2.09637.31145 2.80657.93316.709.6217 1.11955 1.49588 1.23044 2.62016h-2.07393c-.05073-.65003-.23123-1.12074-.54268-1.4145-.31145-.29256-.78452-.43884-1.4204-.43884-.6913 0-1.2092.24774-1.5525.74322-.3433.49548-.51908 1.26466-.5285 2.30517v.76092c0 1.0877.16515 1.88283.4943 2.38422.32913.50255.8494.75383 1.5584.75383.6406 0 1.11955-.1463 1.43454-.43886.31616-.29257.49666-.74558.54267-1.35786h2.07396zM99.79868 34.12953h-3.6359l-.6913 2.07277h-2.2049l3.7456-10.0642h1.92177l3.76802 10.0642h-2.2049l-.6984-2.07277zm-3.0767-1.67992h2.51634l-1.26466-3.76802-1.2517 3.76803zM110.90575 36.2023h-2.07395l-4.037-6.62177v6.62177h-2.07277V26.1381h2.07277l4.04408 6.63593V26.1381h2.06687v10.0642zM119.98133 36.2023h-2.07394l-4.03702-6.62177v6.62177h-2.07394V26.1381h2.07394l4.04408 6.63593V26.1381h2.06687v10.0642zM126.92752 31.84087h-3.98155v2.69566h4.67287v1.66577h-6.74682V26.1381h6.73266v1.67993h-4.6587v2.39837h3.98154v1.62447zM131.6405 32.51803h-1.6516v3.68427h-2.07395V26.1381h3.7397c1.18917 0 2.1058.26544 2.75112.79514.6453.5297.96737 1.2788.96737 2.24618 0 .6866-.14864 1.25995-.44593 1.71768-.29728.4589-.74794.82462-1.35077 1.09596l2.17658 4.1125v.09674h-2.22494l-1.88755-3.68427zm-1.6516-1.67874h1.67284c.52026 0 .92372-.13332 1.2092-.39757.2855-.26544.42825-.63115.42825-1.09596 0-.47425-.1345-.84822-.40347-1.11956-.27016-.2725-.68424-.40817-1.24107-.40817h-1.66576v3.02126zM146.53565 32.8507c-.07904 1.083-.47897 1.93475-1.19977 2.55765-.7208.6217-1.67167.93315-2.8514.93315-1.2906 0-2.30516-.4353-3.04485-1.3036-.73968-.86826-1.10893-2.06096-1.10893-3.5769v-.6158c0-.96738.16988-1.82032.51082-2.55764.34094-.73733.82816-1.3024 1.46167-1.69644.63468-.39403 1.37082-.59104 2.20843-.59104 1.16202 0 2.09754.31145 2.80655.93316.7102.6217 1.12073 1.49588 1.23045 2.62016h-2.07277c-.05073-.65003-.2324-1.12074-.54267-1.4145-.31146-.29256-.78453-.43884-1.42157-.43884-.69014 0-1.20804.24774-1.55134.74322-.3433.49548-.51908 1.26466-.52852 2.30517v.76092c0 1.0877.16398 1.88283.4943 2.38422.32914.50255.84822.75383 1.5584.75383.6406 0 1.1184-.1463 1.43455-.43886.315-.29257.49666-.74558.54267-1.35786h2.07395zM149.0508 34.53653h4.40273v1.66577h-6.47666V26.1381h2.07394v8.39843zM153.85345 26.1381h2.07395v10.0642h-2.07395z" fill="#616161"/>
</g>
</svg>