From e12f240303a57ca726860ab3ce3d03b1bf8d5b5a Mon Sep 17 00:00:00 2001 From: Stas Vilchik Date: Fri, 25 Nov 2016 16:08:41 +0100 Subject: SONAR-8382 apply feedback on about page (#1411) --- .../src/main/js/apps/about/components/AboutApp.js | 86 +++++++------ .../js/apps/about/components/AboutCleanCode.js | 18 +-- .../main/js/apps/about/components/AboutIssues.js | 70 ++--------- .../js/apps/about/components/AboutLeakPeriod.js | 23 ++-- .../main/js/apps/about/components/AboutProjects.js | 19 +-- .../js/apps/about/components/AboutQualityGates.js | 23 ++-- .../main/js/apps/about/components/AboutScanners.js | 140 ++++++--------------- .../js/apps/about/components/AboutStandards.js | 60 ++++++--- .../src/main/js/apps/about/components/DropImage.js | 36 ------ .../js/apps/about/components/EntryIssueTypes.js | 69 ++++++++++ .../main/js/apps/about/components/LoginSection.js | 2 +- .../js/apps/about/components/OAuthProvider.css | 1 + .../src/main/js/apps/about/components/ReadMore.js | 38 ++++++ server/sonar-web/src/main/js/apps/about/styles.css | 126 +++++++++++-------- .../main/webapp/images/scanner-logos/msbuild.png | Bin 14320 -> 0 bytes .../main/webapp/images/scanner-logos/msbuild.svg | 8 ++ 16 files changed, 358 insertions(+), 361 deletions(-) delete mode 100644 server/sonar-web/src/main/js/apps/about/components/DropImage.js create mode 100644 server/sonar-web/src/main/js/apps/about/components/EntryIssueTypes.js create mode 100644 server/sonar-web/src/main/js/apps/about/components/ReadMore.js delete mode 100644 server/sonar-web/src/main/webapp/images/scanner-logos/msbuild.png create mode 100644 server/sonar-web/src/main/webapp/images/scanner-logos/msbuild.svg (limited to 'server/sonar-web') 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 f6138107d1d..dedff134191 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 @@ -19,9 +19,8 @@ */ import React from 'react'; import keyBy from 'lodash/keyBy'; -import LoginSection from './LoginSection'; -import LoginForm from './LoginForm'; import AboutProjects from './AboutProjects'; +import EntryIssueTypes from './EntryIssueTypes'; import AboutCleanCode from './AboutCleanCode'; import AboutIssues from './AboutIssues'; import AboutQualityGates from './AboutQualityGates'; @@ -40,10 +39,12 @@ export default class AboutApp extends React.Component { componentDidMount () { this.mounted = true; + document.querySelector('html').classList.add('dashboard-page'); this.loadData(); } componentWillUnmount () { + document.querySelector('html').classList.remove('dashboard-page'); this.mounted = false; } @@ -52,7 +53,7 @@ export default class AboutApp extends React.Component { } loadIssues () { - return getFacet({ resolved: false }, 'types').then(r => keyBy(r.facet, 'val')); + return getFacet({ resolved: false }, 'types'); } loadData () { @@ -62,7 +63,8 @@ export default class AboutApp extends React.Component { this.loadIssues() ]).then(responses => { if (this.mounted) { - const [options, projectsCount, issueTypes] = responses; + const [options, projectsCount, issues] = responses; + const issueTypes = keyBy(issues.facet, 'val'); this.setState({ projectsCount, issueTypes, @@ -79,9 +81,7 @@ export default class AboutApp extends React.Component { return null; } - const isAuthenticated = !!window.SS.user; - const { signUpAllowed, landingText } = window.sonarqube; - const loginFormShown = !isAuthenticated && this.props.location.query.login !== undefined; + const { landingText } = window.sonarqube; const logoUrl = this.state.logoUrl || `${window.baseUrl}/images/logo.svg`; const logoWidth = this.state.logoWidth || 100; @@ -91,49 +91,53 @@ export default class AboutApp extends React.Component { return (
- -
- {logoTitle}/ -
- - {loginFormShown ? ( -
- +
+
+
+ {logoTitle}/
- ) : ( -
- - {!isAuthenticated && } -
- )} - - {signUpAllowed && !isAuthenticated && ( -
- No account yet? Sign up -
- )} -
+
- {landingText.length > 0 && ( -
-
+
+
- )} - +
+ +
+
+
- +
- + {landingText.length > 0 && ( +
+ )} - +
+
+ + +
+
+ +
+
- +
+
+ +
+
+ +
+
- + +
); } 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 1da76b6945e..9c3c57c5e0a 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,23 +18,15 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import React from 'react'; -import DropImage from './DropImage'; +import { translate } from '../../../helpers/l10n'; export default class AboutCleanCode extends React.Component { render () { return ( -
-
-

Keep your code clean by fixing the leak

-

- By fixing new issues as they appear in code, you create and maintain a clean code base. -
- Even on legacy projects, focusing on keeping new code clean will eventually yield a code base you can be - proud of. -

-
- -
+
+

{translate('about_page.clean_code')}

+
+

{translate('about_page.clean_code.text')}

); 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 index f762de45f26..dd2f0b3584e 100644 --- a/server/sonar-web/src/main/js/apps/about/components/AboutIssues.js +++ b/server/sonar-web/src/main/js/apps/about/components/AboutIssues.js @@ -18,68 +18,24 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import React from 'react'; -import { formatMeasure } from '../../../helpers/measures'; -import { getIssuesUrl } from '../../../helpers/urls'; +import { translate } from '../../../helpers/l10n'; export default class AboutIssues extends React.Component { - static propTypes = { - bugs: React.PropTypes.number.isRequired, - vulnerabilities: React.PropTypes.number.isRequired, - codeSmells: React.PropTypes.number.isRequired - }; render () { - const displayNumbers = this.props.bugs > 0 || this.props.vulnerabilities > 0 || this.props.codeSmells > 0; - return ( -
-
-

Track incoming issues using the SonarQube Quality Model

-
-
- {displayNumbers && ( - - {formatMeasure(this.props.bugs, 'SHORT_INT')} - - )} -
-

Bugs

-

- Bugs track code that is demonstrably wrong or highly likely to yield unexpected behavior. -

-
-
-
- {displayNumbers && ( - - {formatMeasure(this.props.vulnerabilities, 'SHORT_INT')} - - )} -
-

Vulnerabilities

-

- Vulnerabilities are raised on code that is potentially vulnerable to exploitation by hackers. -

-
-
-
- {displayNumbers && ( - - {formatMeasure(this.props.codeSmells, 'SHORT_INT')} - - )} -
-

Code Smells

-

- Code Smells will confuse maintainers or give them pause. They are measured primarily in terms of - the time they will take to fix. -

-
-
-
+
+

{translate('about_page.quality_model')}

+ +
+

{translate('issue.type.BUG.plural')}

+

{translate('about_page.quality_model.bugs')}

+ +

{translate('issue.type.VULNERABILITY.plural')}

+

{translate('about_page.quality_model.vulnerabilities')}

+ +

{translate('issue.type.CODE_SMELL.plural')}

+

{translate('about_page.quality_model.code_smells')}

); 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 3da6656a460..1755b96e69a 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 @@ -18,28 +18,19 @@ * 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 = 'http://redirect.sonarsource.com/doc/fix-the-leak.html'; export default class AboutLeakPeriod extends React.Component { render () { return ( -
-
- Understanding the Leak Period -

Understanding the Leak Period

-

- The leak metaphor and the default Quality Gate are based on the leak period - the recent period against - which you're tracking issues. For some previous_version makes the most sense, for others - the last 30 days is a good option. -

- +
+

{translate('about_page.leak_period')}

+
+

{translate('about_page.leak_period.text')}

+
); 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 af7852bb772..0c407f7b063 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 @@ -19,6 +19,7 @@ */ import React from 'react'; import { formatMeasure } from '../../../helpers/measures'; +import { translate } from '../../../helpers/l10n'; export default class AboutProjects extends React.Component { static propTypes = { @@ -26,16 +27,16 @@ export default class AboutProjects extends React.Component { }; render () { - const { count } = this.props; - const label = count > 1 ? `${formatMeasure(count, 'INT')} projects` : '1 project'; - return ( -
- {count > 0 ? ( - {label} - ) : 'Put your projects'} - {' '} - under continuous
code quality management +
+ +
+ {translate('about_page.projects_analyzed')} +
); } diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutQualityGates.js b/server/sonar-web/src/main/js/apps/about/components/AboutQualityGates.js index 4ba827fdf80..024fb12b510 100644 --- a/server/sonar-web/src/main/js/apps/about/components/AboutQualityGates.js +++ b/server/sonar-web/src/main/js/apps/about/components/AboutQualityGates.js @@ -18,28 +18,19 @@ * 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 = 'http://redirect.sonarsource.com/doc/quality-gates.html'; export default class AboutQualityGates extends React.Component { render () { return ( -
-
- Understanding Quality Gates -

Understanding Quality Gates

-

- Your project's quality gate is the set of conditions the project must meet before it can be released - into production. The quality gate is designed to ensure that the next version's quality will be better - than the last. -

- +
+

{translate('about_page.quality_gates')}

+
+

{translate('about_page.quality_gates.text')}

+
); 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 f6f0a263ca0..764f63876a7 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,116 +18,48 @@ * 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 links = { - sonarqube: 'http://redirect.sonarsource.com/doc/install-configure-scanner.html', - msbuild: 'http://redirect.sonarsource.com/doc/install-configure-scanner-msbuild.html', - maven: 'http://redirect.sonarsource.com/doc/install-configure-scanner-maven.html', - gradle: 'http://redirect.sonarsource.com/doc/gradle.html', - jenkins: 'http://redirect.sonarsource.com/plugins/jenkins.html', - ant: 'http://redirect.sonarsource.com/doc/install-configure-scanner-ant.html' -}; +const scanners = [ + { + key: 'sonarqube', + link: 'http://redirect.sonarsource.com/doc/install-configure-scanner.html' + }, { + key: 'msbuild', + link: 'http://redirect.sonarsource.com/doc/install-configure-scanner-msbuild.html' + }, { + key: 'maven', + link: 'http://redirect.sonarsource.com/doc/install-configure-scanner-maven.html' + }, { + key: 'gradle', + link: 'http://redirect.sonarsource.com/doc/gradle.html' + }, { + key: 'jenkins', + link: 'http://redirect.sonarsource.com/plugins/jenkins.html' + }, { + key: 'ant', + link: 'http://redirect.sonarsource.com/doc/install-configure-scanner-ant.html' + } +]; export default class AboutScanners extends React.Component { render () { return ( -
-
-

Start analyzing your projects with a SonarQube Scanner

+
+

Start analyzing your projects with a SonarQube Scanner

+
-
-
- SonarQube Scanner -
-

- The SonarQube Scanner is a Java-based command-line tool that can analyze any language SonarQube - supports. -

- -
-
-
- SonarQube Scanner for MSBuild -
-

- Built in collaboration with Microsoft, the SonarQube Scanner for MSBuild is the recommended way to - launch a SonarQube analysis on MSBuild projects and solutions. -

- -
-
-
- SonarQube Scanner for Maven -
-

- Using the SonarQube Scanner for Maven is as simple as running mvn sonar:sonar on your - Maven project. -

- -
-
-
- SonarQube Scanner for Gradle -
-

- The SonarQube Scanner for Gradle provides an easy way to start analysis of a Gradle project. -

- -
-
-
- SonarQube Scanner for Jenkins -
-

- The SonarQube Scanner for Jenkins lets you integrate analysis seamlessly into a job or a pipeline. -

- -
-
-
- SonarQube Scanner for Ant -
-

- The SonarQube Scanner for Ant lets you start an analysis directly from an Apache Ant script. -

- -
+ {scanners.map(scanner => ( +
+
+ {translate('about_page.scanners', +
+

{translate('about_page.scanners.sonarqube.text')}

+ +
+ ))}
diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutStandards.js b/server/sonar-web/src/main/js/apps/about/components/AboutStandards.js index 42a84da0054..437c7b5e021 100644 --- a/server/sonar-web/src/main/js/apps/about/components/AboutStandards.js +++ b/server/sonar-web/src/main/js/apps/about/components/AboutStandards.js @@ -18,27 +18,59 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import React from 'react'; +import ReadMore from './ReadMore'; +import { translate } from '../../../helpers/l10n'; +import { getRulesUrl } from '../../../helpers/urls'; const link = 'http://redirect.sonarsource.com/doc/rules.html'; +const owaspTags = 'owasp-a1,owasp-a2,owasp-a3,owasp-a4,owasp-a5,owasp-a6,owasp-a7,owasp-a8,owasp-a9,owasp-a10'; + export default class AboutStandards extends React.Component { render () { return ( -
-
- Conform to recognized standards -

Conform to recognized standards

-

- SonarAnalyzers offer rules that support industry standards: MISRA, CERT, CWE, OWASP Top 10 and SANS Top - 25. Configure your Quality Profile with standard-related rules to ensure adherence. -

-
- - Read more - - +
+

{translate('about_page.standards')}

+
+

{translate('about_page.standards.text')}

+ + + +
); diff --git a/server/sonar-web/src/main/js/apps/about/components/DropImage.js b/server/sonar-web/src/main/js/apps/about/components/DropImage.js deleted file mode 100644 index 63ef476e87b..00000000000 --- a/server/sonar-web/src/main/js/apps/about/components/DropImage.js +++ /dev/null @@ -1,36 +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'; - -export default function () { - /* eslint-disable max-len */ - return ( - - - - - - - - - - - ); -} diff --git a/server/sonar-web/src/main/js/apps/about/components/EntryIssueTypes.js b/server/sonar-web/src/main/js/apps/about/components/EntryIssueTypes.js new file mode 100644 index 00000000000..4ebae3adc72 --- /dev/null +++ b/server/sonar-web/src/main/js/apps/about/components/EntryIssueTypes.js @@ -0,0 +1,69 @@ +/* + * 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 { formatMeasure } from '../../../helpers/measures'; +import { translate } from '../../../helpers/l10n'; +import { getIssuesUrl } from '../../../helpers/urls'; + +export default class EntryIssueTypes extends React.Component { + static propTypes = { + bugs: React.PropTypes.number.isRequired, + vulnerabilities: React.PropTypes.number.isRequired, + codeSmells: React.PropTypes.number.isRequired + }; + + render () { + const { bugs, vulnerabilities, codeSmells } = this.props; + + return ( +
+ +
+ ); + } +} diff --git a/server/sonar-web/src/main/js/apps/about/components/LoginSection.js b/server/sonar-web/src/main/js/apps/about/components/LoginSection.js index 43942c7cb09..08773d996bd 100644 --- a/server/sonar-web/src/main/js/apps/about/components/LoginSection.js +++ b/server/sonar-web/src/main/js/apps/about/components/LoginSection.js @@ -30,7 +30,7 @@ export default class LoginSection extends React.Component { return (
-
+
{authProviders.map(provider => ( ))} diff --git a/server/sonar-web/src/main/js/apps/about/components/OAuthProvider.css b/server/sonar-web/src/main/js/apps/about/components/OAuthProvider.css index 5bd25619460..0718acd0253 100644 --- a/server/sonar-web/src/main/js/apps/about/components/OAuthProvider.css +++ b/server/sonar-web/src/main/js/apps/about/components/OAuthProvider.css @@ -8,6 +8,7 @@ box-sizing: border-box; background-color: #236a97; color: #fff; + text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 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 new file mode 100644 index 00000000000..2199979f1ca --- /dev/null +++ b/server/sonar-web/src/main/js/apps/about/components/ReadMore.js @@ -0,0 +1,38 @@ +/* + * 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'; + +export default class ReadMore extends React.Component { + static propTypes = { + link: React.PropTypes.string.isRequired + }; + + render () { + return ( + + ); + } +} 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 1c79a4a3d33..a61922f9218 100644 --- a/server/sonar-web/src/main/js/apps/about/styles.css +++ b/server/sonar-web/src/main/js/apps/about/styles.css @@ -1,11 +1,20 @@ .about-page { } +.about-page .boxed-group h2 { + font-size: 18px; + font-weight: bold; + text-align: center; +} + .about-page-container { position: relative; width: 1080px; margin-left: auto; margin-right: auto; + padding-left: 20px; + padding-right: 20px; + box-sizing: border-box; } .about-page-center-container { @@ -15,36 +24,66 @@ text-align: center; } -.about-page-container .pull-left { - margin-right: 40px; +.about-page-logo { + padding: 20px 0; } -.about-page-container .pull-right { - margin-left: 40px; +.about-page-entry { + margin-bottom: 50px; + padding: 40px 0 50px; + background-color: #363636; } -.about-page-logo { - margin-bottom: 30px; +.about-page-entry .about-page-header { + color: rgba(255, 255, 255, 0.9); } -.about-page-entry { - padding: 75px 0; - background-color: #363636; +.about-page-entry-column { + float: right; text-align: center; + box-sizing: border-box; +} + +.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-entry .alert { font-size: 13px; } -.about-page-entry-box { - width: 320px; - margin-left: auto; - margin-right: auto; - padding: 40px 30px; - box-sizing: border-box; - border-radius: 2px; - background-color: #fff; +.about-page-projects { + 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; +} + +.about-page-issue-types { + text-align: left; +} + +.about-page-issue-type-number { + display: inline-block; + min-width: 60px; + margin-right: 8px; + text-align: right; +} + +.about-page-issue-type-link { + border-bottom-color: rgba(75, 159, 213, 0.2); + color: rgb(75, 159, 213); + font-size: 24px; + font-weight: bold; } .about-login-form-header { @@ -64,16 +103,19 @@ } .about-page-auth-providers { + width: 200px; } .about-page-auth-providers .oauth-provider { width: 100%; +} + +.about-page-auth-providers .oauth-provider + .oauth-provider { margin-top: 20px; } .about-page-section { - padding-top: 80px; - padding-bottom: 80px; + padding-bottom: 40px; } .about-page-section-gray { @@ -102,8 +144,7 @@ } .about-page-text { - line-height: 1.5; - font-size: 15px; + line-height: 1.4; } .about-page-link-more { @@ -115,43 +156,25 @@ } .about-page-issues { - display: flex; - justify-content: space-around; margin-top: 80px; } .about-page-issues-box { - width: 280px; + float: left; + width: 33%; text-align: center; } .about-page-issues-number { - display: block; - border: none; - padding: 20px 0; - border-top-left-radius: 2px; - border-top-right-radius: 2px; - background-color: #4b9fd5; - color: #fff; - font-size: 50px; + display: inline-block; + font-size: 32px; font-weight: bold; } -.about-page-issues-number:hover { - background-color: #236a97; - color: #fff; -} - -.about-page-issues-number:focus { - color: #fff; -} - .about-page-issues-description { - min-height: 120px; - padding: 25px 20px 25px; - border: 1px solid #e6e6e6; - border-radius: 2px; - background-color: #fff; + margin-top: 12px; + padding: 0 15px; + line-height: 1.4; } .about-page-issues-number + .about-page-issues-description { @@ -166,18 +189,13 @@ text-transform: uppercase; } -.about-page-issues-text { - line-height: 1.3; - font-size: 14px; -} - .about-page-analyzers { display: flex; - justify-content: space-around; + justify-content: space-between; flex-wrap: wrap; } .about-page-analyzer-box { - width: 280px; - margin-top: 80px; + width: 310px; + margin-top: 40px; } diff --git a/server/sonar-web/src/main/webapp/images/scanner-logos/msbuild.png b/server/sonar-web/src/main/webapp/images/scanner-logos/msbuild.png deleted file mode 100644 index 7b82a40d1e7..00000000000 Binary files a/server/sonar-web/src/main/webapp/images/scanner-logos/msbuild.png and /dev/null differ diff --git a/server/sonar-web/src/main/webapp/images/scanner-logos/msbuild.svg b/server/sonar-web/src/main/webapp/images/scanner-logos/msbuild.svg new file mode 100644 index 00000000000..811245afe89 --- /dev/null +++ b/server/sonar-web/src/main/webapp/images/scanner-logos/msbuild.svg @@ -0,0 +1,8 @@ + + + + + + + + -- cgit v1.2.3