]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8382 Create landing page for anonymous users
authorStas Vilchik <vilchiks@gmail.com>
Fri, 11 Nov 2016 14:28:22 +0000 (15:28 +0100)
committerStas Vilchik <vilchiks@gmail.com>
Wed, 16 Nov 2016 09:06:50 +0000 (10:06 +0100)
37 files changed:
server/sonar-web/src/main/js/api/auth.js [new file with mode: 0644]
server/sonar-web/src/main/js/app/index.js
server/sonar-web/src/main/js/apps/about/components/AboutApp.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/components/AboutCleanCode.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/components/AboutIssues.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/components/AboutLeakPeriod.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/components/AboutProjects.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/components/AboutQualityGates.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/components/AboutScanners.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/components/AboutStandards.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/components/DropImage.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/components/IconLock.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/components/LoginForm.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/components/LoginSection.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/components/OAuthProvider.css [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/components/OAuthProvider.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/routes.js [new file with mode: 0644]
server/sonar-web/src/main/js/apps/about/styles.css [new file with mode: 0644]
server/sonar-web/src/main/js/helpers/urls.js
server/sonar-web/src/main/js/main/app.js
server/sonar-web/src/main/js/main/nav/global/global-nav-branding.js
server/sonar-web/src/main/js/main/nav/templates/nav-shortcuts-help.hbs
server/sonar-web/src/main/webapp/WEB-INF/app/controllers/about_controller.rb [new file with mode: 0644]
server/sonar-web/src/main/webapp/WEB-INF/app/controllers/dashboard_controller.rb
server/sonar-web/src/main/webapp/WEB-INF/app/controllers/landing_controller.rb [new file with mode: 0644]
server/sonar-web/src/main/webapp/WEB-INF/app/views/about/index.html.erb [new file with mode: 0644]
server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb
server/sonar-web/src/main/webapp/WEB-INF/config/routes.rb
server/sonar-web/src/main/webapp/images/recognized-standards.svg [new file with mode: 0644]
server/sonar-web/src/main/webapp/images/scanner-logos/ant.svg [new file with mode: 0644]
server/sonar-web/src/main/webapp/images/scanner-logos/gradle.svg [new file with mode: 0644]
server/sonar-web/src/main/webapp/images/scanner-logos/jenkins.svg [new file with mode: 0644]
server/sonar-web/src/main/webapp/images/scanner-logos/maven.svg [new file with mode: 0644]
server/sonar-web/src/main/webapp/images/scanner-logos/msbuild.svg [new file with mode: 0644]
server/sonar-web/src/main/webapp/images/scanner-logos/sonarqube.svg [new file with mode: 0644]
server/sonar-web/src/main/webapp/images/understanding-leak-period.svg [new file with mode: 0644]
server/sonar-web/src/main/webapp/images/understanding-quality-gates.svg [new file with mode: 0644]

diff --git a/server/sonar-web/src/main/js/api/auth.js b/server/sonar-web/src/main/js/api/auth.js
new file mode 100644 (file)
index 0000000..064ca29
--- /dev/null
@@ -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 { request } from '../helpers/request';
+
+const basicCheckStatus = response => {
+  if (response.status >= 200 && response.status < 300) {
+    return response;
+  } else {
+    const error = new Error(response.status);
+    error.response = response;
+    throw error;
+  }
+};
+
+export const login = (login, password) => (
+    request('/api/authentication/login')
+        .setMethod('POST')
+        .setData({ login, password })
+        .submit()
+        .then(basicCheckStatus)
+);
index 84268cf48618c9bc8f8bebf238e78562930c191c..3ed7485fed35f50e148bfe2f29b9955f68619711 100644 (file)
@@ -23,6 +23,7 @@ import { Router, Route, useRouterHistory } from 'react-router';
 import { createHistory } from 'history';
 import { Provider } from 'react-redux';
 import App from './components/App';
+import aboutRoutes from '../apps/about/routes';
 import accountRoutes from '../apps/account/routes';
 import projectsRoutes from '../apps/projects/routes';
 import qualityGatesRoutes from '../apps/quality-gates/routes';
@@ -44,6 +45,7 @@ window.sonarqube.appStarted.then(options => {
       <Provider store={store}>
         <Router history={history}>
           <Route path="/" component={App}>
+            <Route path="about">{aboutRoutes}</Route>
             <Route path="account">{accountRoutes}</Route>
             {projectsRoutes}
             {qualityGatesRoutes}
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
new file mode 100644 (file)
index 0000000..bc4c24d
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+ * 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 keyBy from 'lodash/keyBy';
+import LoginSection from './LoginSection';
+import LoginForm from './LoginForm';
+import AboutProjects from './AboutProjects';
+import AboutCleanCode from './AboutCleanCode';
+import AboutIssues from './AboutIssues';
+import AboutQualityGates from './AboutQualityGates';
+import AboutLeakPeriod from './AboutLeakPeriod';
+import AboutStandards from './AboutStandards';
+import AboutScanners from './AboutScanners';
+import { translate } from '../../../helpers/l10n';
+import '../styles.css';
+import { searchProjects } from '../../../api/components';
+import { getFacet } from '../../../api/issues';
+
+export default class AboutApp extends React.Component {
+  state = {
+    loading: true
+  };
+
+  componentDidMount () {
+    this.mounted = true;
+    this.loadData();
+  }
+
+  componentWillUnmount () {
+    this.mounted = false;
+  }
+
+  loadProjects () {
+    return searchProjects({ ps: 1 }).then(r => r.paging.total);
+  }
+
+  loadIssues () {
+    return getFacet({ resolved: false }, 'types').then(r => keyBy(r.facet, 'val'));
+  }
+
+  loadData () {
+    Promise.all([
+      window.sonarqube.appStarted,
+      this.loadProjects(),
+      this.loadIssues()
+    ]).then(responses => {
+      if (this.mounted) {
+        const [options, projectsCount, issueTypes] = responses;
+        this.setState({
+          projectsCount,
+          issueTypes,
+          logoUrl: options.logoUrl,
+          logoWidth: options.logoWidth,
+          loading: false
+        });
+      }
+    });
+  }
+
+  render () {
+    if (this.state.loading) {
+      return null;
+    }
+
+    const isAuthenticated = !!window.SS.user;
+    const { signUpAllowed } = window.sonarqube;
+    const loginFormShown = !isAuthenticated && this.props.location.query.login !== undefined;
+
+    const logoUrl = this.state.logoUrl || `${window.baseUrl}/images/logo.svg`;
+    const logoWidth = this.state.logoWidth || 100;
+    const logoHeight = 30;
+    const logoTitle = this.state.logoUrl ? '' : translate('layout.sonar.slogan');
+
+    return (
+        <div id="about-page" className="about-page">
+          <div className="about-page-entry">
+
+            <div className="about-page-logo">
+              <img src={logoUrl} width={2 * logoWidth} height={2 * logoHeight} alt={logoTitle}/>
+            </div>
+
+            {loginFormShown ? (
+                <div className="about-page-entry-box">
+                  <LoginForm/>
+                </div>
+            ) : (
+                <div className="about-page-entry-box">
+                  <AboutProjects count={this.state.projectsCount}/>
+                  {!isAuthenticated && <LoginSection/>}
+                </div>
+            )}
+
+            {signUpAllowed && (
+                <div className="about-page-sign-up">
+                  No account yet? <a href={window.baseUrl + '/users/new'}>Sign up</a>
+                </div>
+            )}
+          </div>
+
+          <AboutCleanCode/>
+
+          <AboutIssues
+              bugs={this.state.issueTypes['BUG'].count}
+              vulnerabilities={this.state.issueTypes['VULNERABILITY'].count}
+              codeSmells={this.state.issueTypes['CODE_SMELL'].count}/>
+
+          <AboutQualityGates/>
+
+          <AboutLeakPeriod/>
+
+          <AboutStandards/>
+
+          <AboutScanners/>
+        </div>
+    );
+  }
+}
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
new file mode 100644 (file)
index 0000000..1da76b6
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * 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 DropImage from './DropImage';
+
+export default class AboutCleanCode extends React.Component {
+  render () {
+    return (
+        <div className="about-page-section">
+          <div className="about-page-center-container">
+            <h2 className="about-page-header">Keep your code clean by fixing the leak</h2>
+            <p className="about-page-text about-page-text-center">
+              By fixing new issues as they appear in code, you create and maintain a clean code base.
+              <br/>
+              Even on legacy projects, focusing on keeping new code clean will eventually yield a code base you can be
+              proud of.
+            </p>
+            <div className="about-page-section-image">
+              <DropImage/>
+            </div>
+          </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
new file mode 100644 (file)
index 0000000..d097d4b
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * 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 { getIssuesUrl } from '../../../helpers/urls';
+
+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 () {
+    return (
+        <div className="about-page-section about-page-section-gray">
+          <div className="about-page-container">
+            <h2 className="about-page-header text-center">Track incoming issues using the SonarQube Quality Model</h2>
+            <div className="about-page-issues">
+              <div className="about-page-issues-box">
+                <a className="about-page-issues-number" href={getIssuesUrl({ resolved: false, types: 'BUG' })}>
+                  {formatMeasure(this.props.bugs, 'SHORT_INT')}
+                </a>
+                <div className="about-page-issues-description">
+                  <h3 className="about-page-issues-header">Bugs</h3>
+                  <p className="about-page-issues-text">
+                    Bugs track code that is demonstrably wrong or highly likely to be yielding unexpected behavior.
+                  </p>
+                </div>
+              </div>
+              <div className="about-page-issues-box">
+                <a className="about-page-issues-number"
+                   href={getIssuesUrl({ resolved: false, types: 'VULNERABILITY' })}>
+                  {formatMeasure(this.props.vulnerabilities, 'SHORT_INT')}
+                </a>
+                <div className="about-page-issues-description">
+                  <h3 className="about-page-issues-header">Vulnerabilities</h3>
+                  <p className="about-page-issues-text">
+                    Vulnerabilities are raised on code that potentially vulnerable to exploitation by hackers.
+                  </p>
+                </div>
+              </div>
+              <div className="about-page-issues-box">
+                <a className="about-page-issues-number" href={getIssuesUrl({ resolved: false, types: 'CODE_SMELL' })}>
+                  {formatMeasure(this.props.codeSmells, 'SHORT_INT')}
+                </a>
+                <div className="about-page-issues-description">
+                  <h3 className="about-page-issues-header">Code Smells</h3>
+                  <p className="about-page-issues-text">
+                    Code Smells will confuse maintainers or give them pause. They are measured primarily in terms of
+                    the time they will take to fix.
+                  </p>
+                </div>
+              </div>
+            </div>
+          </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
new file mode 100644 (file)
index 0000000..47d4a02
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * 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';
+
+const link = 'http://docs.sonarqube.org/display/HOME/Fixing+the+Water+Leak';
+
+export default class AboutLeakPeriod extends React.Component {
+  render () {
+    return (
+        <div className="about-page-section">
+          <div className="about-page-container clearfix">
+            <img className="pull-left" src="/images/understanding-leak-period.svg" width={500} height={175}
+                 alt="Understanding the Leak Period"/>
+            <h2 className="about-page-header">Understanding the Leak Period</h2>
+            <p className="about-page-text">
+              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 <code>previous_version</code> makes the most sense, for others
+              the last 30 days is a good option.
+            </p>
+            <div className="big-spacer-top">
+              <a className="about-page-link-more" href={link} target="_blank">
+                <span>Read more</span>
+                <i className="icon-detach spacer-left"/>
+              </a>
+            </div>
+          </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
new file mode 100644 (file)
index 0000000..d79982b
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * 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 { Link } from 'react-router';
+import { formatMeasure } from '../../../helpers/measures';
+
+export default class AboutProjects extends React.Component {
+  static propTypes = {
+    count: React.PropTypes.number.isRequired
+  };
+
+  render () {
+    const { count } = this.props;
+    const label = count > 1 ? `${formatMeasure(count, 'INT')} projects` : '1 project';
+
+    return (
+        <div className="about-page-text">
+          {count > 0 ? (
+              <Link to="/projects">{label}</Link>
+          ) : 'Put your projects'}
+          {' '}
+          under continuous<br/>code quality management
+        </div>
+    );
+  }
+}
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
new file mode 100644 (file)
index 0000000..843403b
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * 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';
+
+const link = 'http://docs.sonarqube.org/display/SONAR/Quality+Gates';
+
+export default class AboutQualityGates extends React.Component {
+  render () {
+    return (
+        <div className="about-page-section">
+          <div className="about-page-container clearfix">
+            <img className="pull-right" src="/images/understanding-quality-gates.svg" width={500} height={175}
+                 alt="Understanding Quality Gates"/>
+            <h2 className="about-page-header">Understanding Quality Gates</h2>
+            <p className="about-page-text">
+              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.
+            </p>
+            <div className="big-spacer-top">
+              <a className="about-page-link-more" href={link} target="_blank">
+                <span>Read more</span>
+                <i className="icon-detach spacer-left"/>
+              </a>
+            </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
new file mode 100644 (file)
index 0000000..2ae938b
--- /dev/null
@@ -0,0 +1,135 @@
+/*
+ * 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';
+
+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'
+};
+
+export default class AboutScanners extends React.Component {
+  render () {
+    return (
+        <div className="about-page-section">
+          <div className="about-page-container">
+            <h2 className="about-page-header text-center">Start analyzing your projects with a SonarQube Scanner</h2>
+            <div className="about-page-analyzers">
+              <div className="about-page-analyzer-box">
+                <div className=" big-spacer-bottom">
+                  <img src={window.baseUrl + '/images/scanner-logos/sonarqube.svg'} height={80}
+                       alt="SonarQube Scanner"/>
+                </div>
+                <p className="about-page-text">
+                  This Java-based command-line tool can analyze any languages SonarQube supports.
+                </p>
+                <div className="big-spacer-top">
+                  <a className="about-page-link-more" href={links.sonarqube} target="_blank">
+                    <span>Read more</span>
+                    <i className="icon-detach spacer-left"/>
+                  </a>
+                </div>
+              </div>
+              <div className="about-page-analyzer-box">
+                <div className=" big-spacer-bottom">
+                  <img src={window.baseUrl + '/images/scanner-logos/msbuild.svg'} height={80}
+                       alt="SonarQube Scanner for MSBuild"/>
+                </div>
+                <p className="about-page-text">
+                  Built in collaboration with Microsoft this is the recommended way to launch a SonarQube analysis on
+                  MSBuild projects and solutions.
+                </p>
+                <div className="big-spacer-top">
+                  <a className="about-page-link-more" href={links.msbuild} target="_blank">
+                    <span>Read more</span>
+                    <i className="icon-detach spacer-left"/>
+                  </a>
+                </div>
+              </div>
+              <div className="about-page-analyzer-box">
+                <div className=" big-spacer-bottom">
+                  <img src={window.baseUrl + '/images/scanner-logos/maven.svg'} height={80}
+                       alt="SonarQube Scanner for Maven"/>
+                </div>
+                <p className="about-page-text">
+                  Using the SonarQube Scanner for Maven is as simple as running <code>mvn sonar:sonar</code> on your
+                  Maven project.
+                </p>
+                <div className="big-spacer-top">
+                  <a className="about-page-link-more" href={links.maven} target="_blank">
+                    <span>Read more</span>
+                    <i className="icon-detach spacer-left"/>
+                  </a>
+                </div>
+              </div>
+              <div className="about-page-analyzer-box">
+                <div className=" big-spacer-bottom">
+                  <img src={window.baseUrl + '/images/scanner-logos/gradle.svg'} height={80}
+                       alt="SonarQube Scanner for Gradle"/>
+                </div>
+                <p className="about-page-text">
+                  The SonarQube Scanner for Gradle provides an easy way to start analysis of a Gradle project.
+                </p>
+                <div className="big-spacer-top">
+                  <a className="about-page-link-more" href={links.gradle} target="_blank">
+                    <span>Read more</span>
+                    <i className="icon-detach spacer-left"/>
+                  </a>
+                </div>
+              </div>
+              <div className="about-page-analyzer-box">
+                <div className=" big-spacer-bottom">
+                  <img src={window.baseUrl + '/images/scanner-logos/jenkins.svg'} height={80}
+                       alt="SonarQube Scanner for Jenkins"/>
+                </div>
+                <p className="about-page-text">
+                  The SonarQube Scanner for Jenkins lets you integrate analysis seamlessly into a job or a pipeline.
+                </p>
+                <div className="big-spacer-top">
+                  <a className="about-page-link-more" href={links.jenkins} target="_blank">
+                    <span>Read more</span>
+                    <i className="icon-detach spacer-left"/>
+                  </a>
+                </div>
+              </div>
+              <div className="about-page-analyzer-box">
+                <div className=" big-spacer-bottom">
+                  <img src={window.baseUrl + '/images/scanner-logos/ant.svg'} height={80}
+                       alt="SonarQube Scanner for Ant"/>
+                </div>
+                <p className="about-page-text">
+                  The SonarQube Scanner for Ant lets you start an analysis directly from an Apache Ant script.
+                </p>
+                <div className="big-spacer-top">
+                  <a className="about-page-link-more" href={links.ant} target="_blank">
+                    <span>Read more</span>
+                    <i className="icon-detach spacer-left"/>
+                  </a>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+    );
+  }
+}
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
new file mode 100644 (file)
index 0000000..874ee4e
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * 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';
+
+const link = 'http://docs.sonarqube.org/display/SONAR/Rules';
+
+export default class AboutStandards extends React.Component {
+  render () {
+    return (
+        <div className="about-page-section">
+          <div className="about-page-container clearfix">
+            <img className="pull-right" src="/images/recognized-standards.svg" width={500} height={175}
+                 alt="Conform to recognized standards"/>
+            <h2 className="about-page-header">Conform to recognized standards</h2>
+            <p className="about-page-text">
+              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.
+            </p>
+            <div className="big-spacer-top">
+              <a className="about-page-link-more" href={link} target="_blank">
+                <span>Read more</span>
+                <i className="icon-detach spacer-left"/>
+              </a>
+            </div>
+          </div>
+        </div>
+    );
+  }
+}
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
new file mode 100644 (file)
index 0000000..63ef476
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * 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 (
+      <svg viewBox="0 0 131 230" width={131} height={230} xmlns="http://www.w3.org/2000/svg" fillRule="evenodd" clipRule="evenodd" strokeLinejoin="round" strokeMiterlimit="1.414">
+        <path d="M0 40.99h131v52.113H0V40.99z" fill="#D8D8D8" fillRule="nonzero"/>
+        <path d="M80.223 40.99h38.66v52.113h-38.66V40.99z" fill="#DFDFDF" fillRule="nonzero"/>
+        <path d="M7.812 0h115.476v40.99H7.812V0z" fill="#D8D8D8" fillRule="nonzero"/>
+        <path d="M71.61 0h38.458v41.29h-38.46V0z" fill="#DFDFDF" fillRule="nonzero"/>
+        <path d="M7.812 40.99h115.376v-7.317L7.812 38.383v2.606z" fill="#C9C8C8" fillRule="nonzero"/>
+        <path d="M41.463 181.395l-7.01 8.72 5.308 14.23 6.71 10.122 11.218 6.714 12.82 3.008 9.514-2.506.6-12.828-10.915-8.117-11.518-7.016-16.727-12.325z" fill="#6ABAE4" fillRule="nonzero"/>
+        <path d="M108.065 184.702l-37.457-72.157-37.157 72.157C26.04 209.957 50.178 230 70.81 230c20.532 0 45.87-19.642 37.257-45.298zm-37.758 37.18c-.5 0-1.1 0-1.602-.1 0 0-.7-.1-1.903-.3-.3-.1-.6-.1-1-.2-.502-.1-1.003-.2-1.504-.4-1.1-.302-2.303-.603-3.405-1.104-.6-.2-1.202-.5-1.803-.7-.6-.302-1.202-.603-1.903-.903-1.302-.602-2.503-1.504-3.805-2.305-1.202-.902-2.504-1.804-3.606-3.007-1.202-1.002-2.203-2.305-3.205-3.508-.9-1.302-1.902-2.505-2.603-3.908-.8-1.303-1.302-2.706-1.903-4.01-.4-1.402-1-2.604-1.202-3.907-.1-.602-.3-1.203-.4-1.804-.1-.602-.1-1.203-.2-1.704-.2-1.102-.2-2.104-.2-3.006 0-.902 0-1.604.1-2.305.1-1.202.2-2.004.2-2.004s.1.702.4 1.904c.1.602.3 1.303.5 2.205.2.802.502 1.704.902 2.706l.6 1.504c.302.5.502 1.002.803 1.504.5 1.102 1.302 2.004 1.903 3.106.8 1.002 1.602 2.005 2.503 2.907.902.903 1.903 1.704 2.905 2.606 1.1.702 2.103 1.504 3.205 2.005 1.1.602 2.203 1.003 3.305 1.504 1.1.3 2.103.7 3.205.902l1.502.3c.5 0 .9.1 1.402.1.9.1 1.602.1 2.203.1h.902c.4 0 .7-.1 1-.1 1.203-.1 2.004-.2 2.004-.2 3.305-.3 6.21 2.205 6.51 5.512 0 3.408-2.504 6.314-5.81 6.615z" fill="#429BCD" fillRule="nonzero"/>
+      </svg>
+
+  );
+}
diff --git a/server/sonar-web/src/main/js/apps/about/components/IconLock.js b/server/sonar-web/src/main/js/apps/about/components/IconLock.js
new file mode 100644 (file)
index 0000000..fbdc836
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * 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 (
+      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 288 448" width="20" height="20">
+        <path fill="#fff" d="M264 192q10 0 17 7t7 17v144q0 10-7 17t-17 7H24q-10 0-17-7t-7-17V216q0-10 7-17t17-7h8v-80q0-46.25 32.875-79.125T144 0t79.125 32.875T256 112q0 6.5-4.75 11.25T240 128h-16q-6.5 0-11.25-4.75T208 112q0-26.5-18.75-45.25T144 48 98.75 66.75 80 112v80h184z"/>
+      </svg>
+  );
+}
diff --git a/server/sonar-web/src/main/js/apps/about/components/LoginForm.js b/server/sonar-web/src/main/js/apps/about/components/LoginForm.js
new file mode 100644 (file)
index 0000000..631959f
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * 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 { Link } from 'react-router';
+import { translate } from '../../../helpers/l10n';
+import { login } from '../../../api/auth';
+
+export default class LoginForm extends React.Component {
+  state = {
+    login: '',
+    password: '',
+    error: false
+  };
+
+  handleLogin = () => {
+    this.setState({ error: false });
+    window.location = window.baseUrl + '/projects/favorite';
+  };
+
+  handleFailedLogin = () => {
+    this.setState({ error: true });
+  };
+
+  handleSubmit = e => {
+    e.preventDefault();
+    login(this.state.login, this.state.password)
+        .then(this.handleLogin, this.handleFailedLogin);
+  };
+
+  render () {
+    return (
+        <form onSubmit={this.handleSubmit}>
+          <h2 className="about-login-form-header">Log In to SonarQube</h2>
+
+          {this.state.error && (
+              <div className="alert alert-danger">
+                {translate('session.flash_notice.authentication_failed')}
+              </div>
+          )}
+
+          <div className="big-spacer-bottom">
+            <label htmlFor="login" className="login-label">{translate('login')}</label>
+            <input type="text" id="login" name="login" className="login-input" maxLength="255" required
+                   placeholder={translate('login')}
+                   value={this.state.login}
+                   onChange={e => this.setState({ login: e.target.value })}/>
+          </div>
+
+          <div className="big-spacer-bottom">
+            <label htmlFor="password" className="login-label">{translate('password')}</label>
+            <input type="password" id="password" name="password" className="login-input" required
+                   placeholder={translate('password')}
+                   value={this.state.password}
+                   onChange={e => this.setState({ password: e.target.value })}/>
+          </div>
+
+          <div className="text-right">
+            <button name="commit" type="submit">{translate('sessions.log_in')}</button>
+            <Link className="spacer-left" to="/about">Cancel</Link>
+          </div>
+        </form>
+    );
+  }
+}
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
new file mode 100644 (file)
index 0000000..43942c7
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * 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 { Link } from 'react-router';
+import OAuthProvider from './OAuthProvider';
+import IconLock from './IconLock';
+
+export default class LoginSection extends React.Component {
+  render () {
+    const { authProviders } = window.sonarqube;
+
+    const loginWithSonarQubeLabel = authProviders.length ? 'Log in with SonarQube' : 'Log in';
+
+    return (
+        <div id="about-login">
+          <div className="about-page-auth-providers">
+            {authProviders.map(provider => (
+                <OAuthProvider key={provider.key} provider={provider}/>
+            ))}
+
+            <Link to={{ pathname: '/about', query: { login: null } }}
+                  className="oauth-provider oauth-provider-sonarqube">
+              <IconLock/>
+              <span>{loginWithSonarQubeLabel}</span>
+            </Link>
+          </div>
+        </div>
+    );
+  }
+}
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
new file mode 100644 (file)
index 0000000..5bd2561
--- /dev/null
@@ -0,0 +1,28 @@
+.oauth-provider {
+  display: block;
+  width: 180px;
+  line-height: 22px;
+  padding: 8px 12px;
+  border: none;
+  border-radius: 2px;
+  box-sizing: border-box;
+  background-color: #236a97;
+  color: #fff;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.oauth-provider:hover,
+.oauth-provider:focus {
+  color: #fff;
+  box-shadow: inset 0 0 16px rgba(0, 0, 0, 0.3);
+}
+
+.oauth-provider > span {
+  padding-left: 6px;
+}
+
+.oauth-provider-sonarqube {
+  background-color: #4b9fd5;
+}
diff --git a/server/sonar-web/src/main/js/apps/about/components/OAuthProvider.js b/server/sonar-web/src/main/js/apps/about/components/OAuthProvider.js
new file mode 100644 (file)
index 0000000..1ae5365
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * 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 './OAuthProvider.css';
+
+export default class OAuthProvider extends React.Component {
+  static propTypes = {
+    provider: React.PropTypes.shape({
+      key: React.PropTypes.string.isRequired,
+      name: React.PropTypes.string.isRequired,
+      iconPath: React.PropTypes.string.isRequired,
+      backgroundColor: React.PropTypes.string.isRequired
+    }).isRequired
+  };
+
+  render () {
+    const { key, name, iconPath, backgroundColor } = this.props.provider;
+
+    const url = window.baseUrl + '/sessions/init/' + key;
+    const label = 'Log in with ' + name;
+
+    return (
+        <a className="oauth-provider" href={url} style={{ backgroundColor }} title={label}>
+          <img alt={name} width="20" height="20" src={window.baseUrl + iconPath}/>
+          <span>{label}</span>
+        </a>
+    );
+  }
+}
diff --git a/server/sonar-web/src/main/js/apps/about/routes.js b/server/sonar-web/src/main/js/apps/about/routes.js
new file mode 100644 (file)
index 0000000..e599023
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * 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 { IndexRoute } from 'react-router';
+import AboutApp from './components/AboutApp';
+
+export default (
+    <IndexRoute component={AboutApp}/>
+);
diff --git a/server/sonar-web/src/main/js/apps/about/styles.css b/server/sonar-web/src/main/js/apps/about/styles.css
new file mode 100644 (file)
index 0000000..cd6953e
--- /dev/null
@@ -0,0 +1,179 @@
+.about-page {
+}
+
+.about-page-container {
+  position: relative;
+  width: 1080px;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.about-page-center-container {
+  position: relative;
+  width: 640px;
+  margin: 0 auto;
+  text-align: center;
+}
+
+.about-page-container .pull-left {
+  margin-right: 40px;
+}
+
+.about-page-container .pull-right {
+  margin-left: 40px;
+}
+
+.about-page-logo {
+  margin-bottom: 30px;
+}
+
+.about-page-entry {
+  padding: 75px 0;
+  background-color: #363636;
+  text-align: center;
+}
+
+.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-login-form-header {
+  margin-bottom: 30px;
+  font-size: 18px;
+  font-weight: bold;
+}
+
+.about-page-sign-up {
+  margin-top: 20px;
+  color: rgba(255, 255, 255, 0.7);
+}
+
+.about-page-sign-up a {
+  color: #4b9fd5;
+  border-color: #4b9fd5;
+}
+
+.about-page-auth-providers {
+}
+
+.about-page-auth-providers .oauth-provider {
+  width: 100%;
+  margin-top: 20px;
+}
+
+.about-page-section {
+  padding-top: 80px;
+  padding-bottom: 80px;
+}
+
+.about-page-section-gray {
+  border-top: 1px solid #e6e6e6;
+  border-bottom: 1px solid #e6e6e6;
+  background-color: #f3f3f3;
+}
+
+.about-page-section-image {
+  position: absolute;
+  z-index: 5;
+  top: -80px;
+  right: 100%;
+}
+
+.about-page-center-container .about-page-section-image {
+  right: auto;
+  left: -210px;
+}
+
+.about-page-header {
+  line-height: 1;
+  margin-bottom: 30px;
+  font-size: 28px;
+  font-weight: bold;
+}
+
+.about-page-text {
+  line-height: 1.5;
+  font-size: 15px;
+}
+
+.about-page-link-more {
+  border: none;
+}
+
+.about-page-link-more > span {
+  border-bottom: 1px solid #cae3f2;
+}
+
+.about-page-issues {
+  display: flex;
+  justify-content: space-around;
+  margin-top: 80px;
+}
+
+.about-page-issues-box {
+  width: 280px;
+  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;
+  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-top: none;
+  border-bottom-left-radius: 2px;
+  border-bottom-right-radius: 2px;
+  background-color: #fff;
+}
+
+.about-page-issues-header {
+  margin-bottom: 20px;
+  font-size: 21px;
+  text-transform: uppercase;
+}
+
+.about-page-issues-text {
+  line-height: 1.3;
+  font-size: 14px;
+}
+
+.about-page-analyzers {
+  display: flex;
+  justify-content: space-around;
+  flex-wrap: wrap;
+}
+
+.about-page-analyzer-box {
+  width: 280px;
+  margin-top: 80px;
+}
index 894d9e1e257ab6e45a84915f1e4db0b49bc7eae1..16da020a96beb2dd03cd18aafb8a455090925c2c 100644 (file)
@@ -35,7 +35,7 @@ export function getIssuesUrl (query) {
   const serializedQuery = Object.keys(query).map(criterion => (
       `${encodeURIComponent(criterion)}=${encodeURIComponent(query[criterion])}`
   )).join('|');
-  return window.baseUrl + '/issues/search#' + serializedQuery;
+  return window.baseUrl + '/issues#' + serializedQuery;
 }
 
 /**
index fecb0b26e475a1909fd86ee3a5e53be62f7f00b7..0fe3aa0765b23fe982d6f67d3c5d9931d938f79b 100644 (file)
@@ -54,6 +54,8 @@ function prepareAppOptions (navResponse) {
   const appOptions = { el: '#content' };
   if (navResponse) {
     appOptions.rootQualifiers = navResponse.global.qualifiers;
+    appOptions.logoUrl = navResponse.global.logoUrl;
+    appOptions.logoWidth = navResponse.global.logoWidth;
     if (navResponse.component) {
       appOptions.component = {
         id: navResponse.component.uuid,
index 2c33fea9724533a5d1069eb1e4f128d1dee115e7..88a8b038bb70e5e776daeef05a2eaed44691c008 100644 (file)
@@ -34,7 +34,7 @@ export default React.createClass({
   },
 
   render() {
-    const homeController = window.SS.user ? '/projects/favorite' : '/projects';
+    const homeController = window.SS.user ? '/projects/favorite' : '/about';
     const homeUrl = window.baseUrl + homeController;
     const homeLinkClassName = 'navbar-brand' + (this.props.logoUrl ? ' navbar-brand-custom' : '');
     return (
index 22356c886e4e74778e9e0e0ab939225bb66ba77c..bb29bf9597b58b68974c2d6742b098f94e6876cf 100644 (file)
@@ -8,6 +8,7 @@
     <a href="http://www.sonarqube.org/documentation" target="sonar_doc">Documentation</a> -
     <a href="http://www.sonarqube.org/support" target="support">Get Support</a> -
     <a href="http://redirect.sonarsource.com/doc/plugin-library.html" target="plugins">Plugins</a> -
+    <a href="{{ link '/about'}}">About</a> -
     <a href="{{link '/web_api'}}">Web API</a>
   </div>
 
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/about_controller.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/about_controller.rb
new file mode 100644 (file)
index 0000000..5fcb51d
--- /dev/null
@@ -0,0 +1,27 @@
+#
+# 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 AboutController < ApplicationController
+
+  def index
+
+  end
+
+end
index 4538745baead3235859400d4aa48ac98ec5ae67e..de4577c911048f0683e858790039ab88e0920e42 100644 (file)
@@ -23,40 +23,32 @@ class DashboardController < ApplicationController
   SECTION=Navigation::SECTION_RESOURCE
 
   def index
-    if params[:id]
-      @resource = Project.by_key(params[:id])
-      return project_not_found unless @resource
-      @resource = @resource.permanent_resource
+    @resource = Project.by_key(params[:id])
+    return project_not_found unless @resource
+    @resource = @resource.permanent_resource
 
-      access_denied unless has_role?(:user, @resource)
+    access_denied unless has_role?(:user, @resource)
 
-      # for backward compatibility with old widgets
-      @project = @resource
+    # for backward compatibility with old widgets
+    @project = @resource
 
-      # if file
-      if !@resource.display_dashboard?
-        @snapshot = @resource.last_snapshot
-        return project_not_analyzed unless @snapshot
-        @hide_sidebar = true
-        @file = @resource
-        @project = @resource.root_project
-        @metric=params[:metric]
-        render :action => 'no_dashboard'
-      else
-        # it is a project dashboard
-        # if governance plugin is installed and we are opening a view
-        if Project.root_qualifiers.include?('VW') && (@resource.qualifier == 'VW' || @resource.qualifier == 'SVW')
-          return redirect_to(url_for({:controller => 'governance'}) + '?id=' + url_encode(params[:id]))
-        else
-          @snapshot = @resource.last_snapshot
-          render :action => 'overview'
-        end
-      end
+    # if file
+    if !@resource.display_dashboard?
+      @snapshot = @resource.last_snapshot
+      return project_not_analyzed unless @snapshot
+      @hide_sidebar = true
+      @file = @resource
+      @project = @resource.root_project
+      @metric=params[:metric]
+      render :action => 'no_dashboard'
     else
-      if logged_in?
-        return redirect_to :controller => 'projects', :action => 'favorite'
+      # it is a project dashboard
+      # if governance plugin is installed and we are opening a view
+      if Project.root_qualifiers.include?('VW') && (@resource.qualifier == 'VW' || @resource.qualifier == 'SVW')
+        return redirect_to(url_for({:controller => 'governance'}) + '?id=' + url_encode(params[:id]))
       else
-        return redirect_to :controller => 'projects'
+        @snapshot = @resource.last_snapshot
+        render :action => 'overview'
       end
     end
   end
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/landing_controller.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/landing_controller.rb
new file mode 100644 (file)
index 0000000..878e866
--- /dev/null
@@ -0,0 +1,31 @@
+#
+# 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 LandingController < ApplicationController
+
+  def index
+    if logged_in?
+      return redirect_to :controller => 'projects', :action => 'favorite'
+    else
+      return redirect_to :controller => 'about'
+    end
+  end
+
+end
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/about/index.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/about/index.html.erb
new file mode 100644 (file)
index 0000000..5a7fb78
--- /dev/null
@@ -0,0 +1,18 @@
+<% content_for :extra_script do %>
+  <script>
+    window.sonarqube.signUpAllowed = <%= Property.value("sonar.allowUsersToSignUp") == "true" ? "true" : "false" -%>;
+
+    <% auth_providers = Api::Utils.java_facade.getIdentityProviders().to_a %>
+    window.sonarqube.authProviders = [
+      <% auth_providers.each do |provider| %>
+        {
+          key: '<%= provider.getKey().to_s %>',
+          name: '<%= provider.getName().to_s -%>',
+          iconPath: '<%= provider.getDisplay().getIconPath().to_s -%>',
+          backgroundColor: '<%= provider.getDisplay().getBackgroundColor().to_s -%>'
+        },
+      <% end %>
+    ];
+  </script>
+  <script src="<%= ApplicationController.root_context -%>/js/bundles/app.js?v=<%= sonar_version -%>"></script>
+<% end %>
index 1a2672d9fecda0b266f05d9df6d6baf6f8da51a2..15022ecb49ece07bab55ba0ec8974bd80c2da3fd 100644 (file)
@@ -56,6 +56,7 @@
       <a href="http://www.sonarqube.org/documentation" target="sonar_doc">Documentation</a> -
       <a href="http://www.sonarqube.org/support" target="support">Get Support</a> -
       <a href="http://redirect.sonarsource.com/doc/plugin-library.html" target="plugins">Plugins</a> -
+      <a href="<%= ApplicationController.root_context -%>/about">About</a> -
       <a href="<%= ApplicationController.root_context -%>/web_api">Web API</a>
     </div>
     <!--[if lte IE 8 ]><p class="spacer-top alert alert-danger">IE 8 is not supported. Some widgets may not be properly displayed. Please switch to a <a target="_blank" href="http://redirect.sonarsource.com/doc/requirements.html">supported version or another supported browser</a>.</p><!--<![endif]-->
index 1af5e16edacc16a68e6476098c8b12190f14e12e..a62b6c7af3c49c6f3b7879cebc2b6e1b886834fe 100644 (file)
@@ -14,8 +14,8 @@ ActionController::Routing::Routes.draw do |map|
   map.resources 'properties', :path_prefix => 'api', :controller => 'api/properties', :requirements => { :id => /.*/ }
 
   # home page
-  map.home '', :controller => :dashboard, :action => :index
-  map.root :controller => :dashboard, :action => :index
+  map.home '', :controller => :landing, :action => :index
+  map.root :controller => :landing, :action => :index
 
   # page plugins
   map.connect 'plugins/configuration/:page', :controller => 'plugins/configuration', :action => 'index', :requirements => { :page => /.*/ }
diff --git a/server/sonar-web/src/main/webapp/images/recognized-standards.svg b/server/sonar-web/src/main/webapp/images/recognized-standards.svg
new file mode 100644 (file)
index 0000000..c190836
--- /dev/null
@@ -0,0 +1,26 @@
+<svg viewBox="0 0 500 240" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41">
+  <g transform="matrix(.964 0 0 .964 91.858 -35.894)">
+    <path d="M143.7 209.7l79.6 76.2H356s.3-40.2 0-41.2C354.3 238.3 236 121 236 121l-30.3 52.7L168 212l-24.3-2.3z" fill="url(#a)" fill-rule="nonzero"/>
+    <path d="M95.6 64.3l68.8-3.9c3.3-.3 6.2 1 8.5 3.2l87.1 80.9c4.3 4.2 6.9 14.3 2.6 18.8l-75 74.4c-4.3 4.2-11.5 4.2-16 0l-87.1-86.4c-2.3-2.3-3.6-5.2-3.3-8.4l3.9-69.5c.3-5.6 4.9-8.8 10.5-9.1z" fill="#E8201D" fill-rule="nonzero"/>
+    <path d="M95.6 58.8l68.8-3.9c3.3-.3 6.2 1 8.5 3.2l87.1 86.4c4.3 4.2 4.3 11.4 0 15.9l-72.4 71.8c-4.3 4.2-11.5 4.2-16 0l-87.1-86.4c-2.3-2.3-3.6-5.2-3.3-8.4l3.9-67.9c.3-5.9 4.9-10.4 10.5-10.7z" fill="#ED592C" fill-rule="nonzero"/>
+    <path d="M187.6 232.2c-4.3 4.2-11.5 4.2-16 0l-87.1-86.4c-2.3-2.3-3.6-5.2-3.3-8.4l3.9-67.9c.3-5.5 4.9-10.1 10.5-10.4l68.8-4.2c3.3-.3 6.2 1 8.5 3.2" fill="#EC4F22" fill-rule="nonzero"/>
+    <path d="M99.8 91.6c0 10.1 8.2 23.7 18.7 23.7 10.1 0 18.7-13.6 18.7-23.7S129 73 118.5 73s-18.7 8.5-18.7 18.6z" fill="#DF4221" fill-rule="nonzero"/>
+    <ellipse cx="118.1" cy="91.6" rx="18.7" ry="18.5" fill="#DE1B1E"/>
+    <path d="M131.2 78.6c-7.2-7.1-19-7.1-26.2 0-7.2 7.1-7.2 18.8 0 26" fill="#C1081D" fill-rule="nonzero"/>
+    <ellipse cx="118.1" cy="91.6" rx="11.1" ry="11" fill="#EBF0F2"/>
+    <path d="M110.3 83.8c-4.3 4.2-4.3 11 0 15.3 4.3 4.2 11.1 4.2 15.4 0" fill="#C9DFE4" fill-rule="nonzero"/>
+    <g fill="#435A57" fill-rule="nonzero">
+      <path d="M66.1 44.1c-1.3-1.3-1.3-2.9 0-4.2 1.3-1.3 2.9-1.3 4.3 0l50.1 49.7c1.3 1.3 1.3 2.9 0 4.2-1.3 1.3-5.2 3.6-6.5 2.3l-47.9-52z" fill-opacity=".3"/>
+      <path d="M66.1 44.1c-1.3-1.3-1.3-2.9 0-4.2 1.3-1.3 2.9-1.3 4.3 0l50.1 49.7c1.3 1.3 1.3 2.9 0 4.2-1.3 1.3-2.9 1.3-4.3 0L66.1 44.1z"/>
+    </g>
+    <path d="M120.4 93.8c-1.3 1.3-2.9 1.3-4.3 0l-50-49.7c-1.3-1.3-1.3-2.9 0-4.2" fill="#314442" fill-rule="nonzero"/>
+    <path d="M128 163.7c-2 1.9-2 4.9 0 6.8l48.1 47.7c2 1.9 4.9 1.9 6.9 0l62.9-62.4c2-1.9 2-4.9 0-6.8l-48.1-47.7c-2-1.9-4.9-1.9-6.9 0L128 163.7z" fill="#EBF0F2" fill-rule="nonzero"/>
+    <path d="M128 163.7l49.8-49 8.5 100.7-3.3 3.2c-2 1.9-4.9 1.9-6.9 0L128 170.8c-2-2.3-2-5.2 0-7.1z" fill="#C9DFE4" fill-rule="nonzero"/>
+  </g>
+  <defs>
+    <linearGradient id="a" x2="1" gradientUnits="userSpaceOnUse" gradientTransform="scale(110.93) rotate(-128 1.66 .488)">
+      <stop offset="0%" stop-color="#fff"/>
+      <stop offset="100%" stop-color="#ABABAB"/>
+    </linearGradient>
+  </defs>
+</svg>
diff --git a/server/sonar-web/src/main/webapp/images/scanner-logos/ant.svg b/server/sonar-web/src/main/webapp/images/scanner-logos/ant.svg
new file mode 100644 (file)
index 0000000..697ae4d
--- /dev/null
@@ -0,0 +1,8 @@
+<svg viewBox="0 0 130 80" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41">
+  <path d="M128.44 47.8s-1.66-1.68-3.1-2.33c-1.45-.65-1.38-1.3-2.24-1.37-.87-.07-2.45-.36-3.75-.94-1.3-.58-4.98-2.1-6.56-2.95-1.6-.86-2.6-1.5-3.04-1.87-.44-.36-1.16-.3-2.53-.1 0 0-3.9.9-5.26 1.54-1.37.65-4.47 2.38-4.98 2.8 0 0-.58 0-.8.3l-.07-.07c-.36-.22-2.67-2.45-2.67-2.45-1.16-1-3.1-3.1-4.33-4.1-1.23-1.02-6.17-2.6-8.22-2.4-1.9.2-2.82 1.45-3.32 2.68-.4-.72-.85-1.44-1.3-1.95l-1.57-1.88s-1.3 0-2.6.87c-.77.52-1.88 1.7-2.63 2.56-.62.02-1.12.17-1.4.4-.93.8-6.27 4.54-6.5 5.48-.12.6-.34.98-.63 1.2-.42-.44-1.28-.82-2.24-.4l-.2.08c-.13-2.6-.5-9.4-.67-10.1-.2-.87-.65-1.52-1.37-1.16-.72.36-1.37 1.37-1.37 2.46 0 1.08.43 1.65.57 2.1.12.35.24 5.7.5 7.8-.96.5-1.83 1.16-2.1 1.92-.5 1.52-.42 2.1-.85 2.53l-.24.18c-.3-.3-.67-.58-.96-.87-.15-.66-.2-1.4.4-1.76.73-.43.73-3.24 0-3.53l-.72-.3s1.3-4.82 1-7.56c-.28-2.74-.56-5.63-1.14-6.06-.58-.43-1.8-.2-1.8-.2s-1.66.92-3.75 2.15c-2.08 1.22-5.84 3.82-6.4 4.7-.6.85-2.97 3.38-2.97 3.38l-.16.2c-1.85-.24-3.8-.3-4.96.08-2.3.8-7.27 3.75-8.07 5.56-.65 1.47-1.35 2.76-1.42 4.37-.9 1.93-1.38 5.25.78 9.9 0 0 1.3.8 3.32.57.45-.04 1.1-.06 1.8-.14-1.76 2.3-3.93 5.16-4.75 5.98-1.23 1.23-9.1 8.15-10.4 8.5-1.3.38-1.72.23-.64.8 1.1.58 3.02.15 3.7-.86.7-1 1.65-2.67 2.44-3.46.8-.8 4.98-3.4 5.34-3.9.35-.5 6.38-6.52 7.04-7.73.43-.2.83-.5 1.15-.85.35-.02.67-.1.97-.2 1.94-.8 5.05-3.26 6.56-5.42.87-1.25 1.65-2.6 2.07-3.7.8-.63 1.45-1.1 1.68-1.13.72-.15 1.87-.5 1.87.72s1.23 3.9 2.3 5.48c1.1 1.6 2.54 2.88 2.54 2.88s-.08.66.65.74c.73.07 1.37-.15 1.52.2.35.88 1.87.23 2.6-.42.72-.65 1 .43 2-.22C57.56 55.86 58 55 58 53.83c0-.5-.24-.9-.6-1.2l.1-.1s.85.07 1.7-.2c-.05.37-.05.86.02 1.5.22 1.8 1.45 2.96 2.17 2.96s1.22.78 1.22.78-.08 1.37.93 1.66c1 .3 3.75-1 4.4-1.58.65-.58 1.95.86 2.52 2.1.58 1.2 3.6 6.33 4.7 7.56 1.07 1.23 2.5 3.25 3.88 4.98 1.38 1.73.6 1.9 1.02 1.9.44 0 .15.3.5.65.37.36 2.32 1.5 2.82 1.88.5.36 2.6 1.08 2.9.86.27-.22.42-.94.42-.94s-.37.14-1.8-.37c-1.46-.5-3.33-1.74-3.55-2.1-.22-.36-.86-.65-.86-.65s-1.95-2.26-3.1-4.5c0 0-.96-2.3-1.97-4.54-1-2.23-4.33-8.8-5.77-9.15-1.44-.36-3.25.07-4.26.94-1 .85-1.44.56-1.94.2-.5-.36.07-1.22-.22-2.45-.1-.43-.3-1.1-.62-1.75.34-.05.63-.25.77-.63.28-.8.2-1.15 1.2-1 .16 0 .38.03.66.03-.14.26-.23.48-.24.62-.02.8.62 2.27 1.57 2.63.95.35 5 2.12 5.84 1.27.85-.85 4.62-2.9 5.3-3.28.66-.37 1.9-.62 2.32-.53.42.1 1.3 3.25 2.77 5.93 1.5 2.68 1.24 3.8 2.2 3.43.98-.38.96.72 1.85.7.9-.03 1.05.6 1.57 1.6.53 1 1.07 2.22 2.35 2.42 1.3.2 6.4 1.53 6.97 1.22.6-.32.6-1.12-.87-1.44-1.48-.33-4.94-.34-5.7-.88-.78-.53-.97-3.38-1.8-3.7-.8-.33-2.04-.75-2.2-1.07-.12-.27-3.02-5.42-4.14-8.16 1.47.63 3.75 1.52 5.13 1.96 2 .65 5.47 1.73 6.92 1.73.9 0 1.27-.32 1.42-.55.1.25.18.45.24.55.28.5.72.87.72.87s-.15.3.28.5c.44.22 3.4.65 4.48 1.66 1.08 1 2.6 2.96 2.74 4.76.14 1.8 1.3 3.75 1.87 3.82.58.08 1.23 0 .65-2.45-.58-2.46-1.44-4.4-2.8-5.5-1.38-1.07-4.92-2.8-5.35-3.02-.43-.22-1-.8-1.22-.8-.22 0-.15-.2-.5-1.43-.07-.22-.14-.46-.2-.72.1-.24.43-1.15.55-2.4.15-1.43-.5-4.6-1.08-5.4 0 0-.06-.5-.07-.92.18.1.36.12.5 0 .43-.36 1.6-1.88 3.4-2.67 1.8-.8 3.52-1.5 5.54-1.66 2-.14 2.3-.3 2.3-.3s.94-.13 2.02.45c1.08.57 7.5 3.82 8.44 4.18.94.36 2.38 1 3.4 1.8 1 .8 1.8.72 1.8.72s.7.8 1.8 1.52c1.08.72 1.44 1.08 2.1 1.22.63.15 1.93.82.28-1.56zm-86.76-.76c.03-.28 0-.52-.07-.7-.13-.32-.15-.8-.12-1.35.36.2 1.08.66 1.73 1-.5.25-.98.64-1.52 1.04zm5.98-6.9c-1.08-.73-3.1.07-3.82.43-.58.3-1.7.48-2.08.55-.15-.52-.44-1.06-1.02-1.35-.53-.26-1.78-.6-3.23-.85l2.3-2.47s1.73-.14 2.96-1c1.23-.87 5.92-5.56 6.56-5.92.65-.36 1.23-.2 1.1.87-.16 1.08-.88 5.48-.95 7.14-.07 1.65.07 5.04.07 5.04s-.9.63-.8 1.33c-.26-.04-.47-.07-.57-.1-.3-.06.58-2.95-.5-3.67zm4.12 14.56c-.44.58-.94.3-.94.3s-1.73-2.9-2.45-5.57l-.3-.9c.57.13 1.1.13 1.5.54.5.5.9 1.7 1.3 2.28-.3.95-.38 1.4.52 1.7 1.08.35 2-.15 2-.15s.14.15.36.34c-.9.52-1.74 1.1-2 1.46zm21.5-19.76c.7-1 1.43-1 1.64-.22.14.48.53 2.23.82 3.56-.7.13-1.2.24-1.5.4-.6-.8-1.3-1.4-2-1.8.27-.57.56-1.28 1.03-1.94zM77.5 49.2s-5.86 1.2-6.94 1.77c-1.08.58-2 1.34-2.68 1.12-.7-.24 1.15-.87 2.74-2.07.62-.48 1.1-1.2 1.18-1.83l.3-.42c1.08-1.6 2.3-2.86 2.92-4.2.23.06.46.1.7.1.05 1.37.68 2.44 1.15 3.3.33.6 1.13 1.3 1.98 1.95-.5.07-.97.18-1.34.28zm10.84.14c-.54.54-1.17.72-2.7-1.35-1.53-2.1-.03-3.2.9-3.08.72.1.72.27 1.44 1.36.73 1.08.9 2.52.36 3.06" fill="#A81C7D" fill-rule="nonzero"/>
+  <path d="M5.33 79.42l-4.9-2.04V76.1l4.9-2.03v1.53l-2.97 1.14 2.97 1.16v1.52M13.4 78.85h-2.2l-.32 1.04h-2l2.38-6.32h2.13l2.36 6.3h-2.04l-.32-1.03zM13 77.5l-.7-2.3-.7 2.3H13M19.46 73.58h3.24c.7 0 1.24.16 1.6.5.34.34.52.82.52 1.44 0 .63-.2 1.13-.58 1.5-.38.35-.96.53-1.75.53H21.4v2.34h-1.96v-6.32zm1.96 2.7h.48c.38 0 .64-.07.8-.2.15-.13.22-.3.22-.5s-.06-.37-.2-.5c-.13-.15-.38-.22-.74-.22h-.56v1.4M32.05 78.85h-2.2l-.32 1.04h-2l2.37-6.32h2.14l2.37 6.3h-2.04l-.3-1.03zm-.4-1.36l-.7-2.3-.7 2.3h1.4M42.16 77.3l1.7.53c-.1.48-.28.88-.53 1.2-.25.32-.55.56-.92.72-.36.17-.82.25-1.4.25-.67 0-1.23-.1-1.67-.3-.43-.2-.8-.55-1.13-1.05-.3-.5-.47-1.15-.47-1.93 0-1.05.28-1.85.83-2.4.56-.57 1.34-.85 2.36-.85.8 0 1.42.16 1.87.48.45.32.8.82 1 1.48l-1.7.4c-.07-.2-.14-.35-.2-.44-.1-.16-.25-.27-.4-.35-.16-.08-.34-.12-.53-.12-.44 0-.78.17-1 .53-.2.26-.28.68-.28 1.24 0 .7.1 1.18.3 1.44.22.26.52.4.9.4.37 0 .65-.1.84-.32.2-.2.33-.5.42-.9M47.9 73.58h1.96v2.2H52v-2.2h1.95v6.3H52v-2.54h-2.14v2.55H47.9v-6.32M58.32 73.58h5.24v1.35h-3.28v1h3.04v1.28h-3.04v1.26h3.37v1.43h-5.33v-6.32M77.68 78.85h-2.2l-.32 1.04h-2l2.38-6.32h2.13l2.37 6.3H78l-.32-1.03zm-.4-1.36l-.7-2.3-.7 2.3h1.4M83.76 73.58h1.82l2.38 3.5v-3.5h1.84v6.3h-1.84l-2.37-3.47v3.5h-1.84v-6.32M93.75 73.58h5.92v1.55h-2v4.76h-1.94v-4.77h-1.98v-1.55M103.45 77.9l2.98-1.16-2.98-1.14v-1.53l4.9 2.03v1.28l-4.9 2.04V77.9" fill="#231F20" fill-rule="nonzero"/>
+  <path d="M0 67.66L80.7 0h.46l28.9 67.66H0" fill="#fff" fill-rule="nonzero"/>
+  <path d="M71.8 48.2c-.1.63-.56 1.35-1.18 1.83-1.6 1.2-3.43 1.83-2.74 2.06.7.2 1.6-.55 2.68-1.13 1.08-.57 6.95-1.76 6.95-1.76.38-.1.84-.2 1.35-.27-.85-.64-1.65-1.34-1.98-1.95-.47-.86-1.1-1.93-1.16-3.3-.22 0-.45-.04-.68-.1-.62 1.34-1.84 2.6-2.9 4.2-.1.14-.2.28-.32.42M75.74 38.28c-.3-1.33-.68-3.08-.82-3.56-.2-.8-.93-.8-1.65.22-.47.66-.76 1.37-1.02 1.95.7.4 1.4.97 1.98 1.78.3-.16.82-.27 1.5-.4M86.54 44.92c-.93-.1-2.43 1-.9 3.07 1.53 2.06 2.16 1.88 2.7 1.34.54-.54.37-1.98-.36-3.06-.72-1.1-.72-1.26-1.44-1.36" fill="#A81C7D" fill-rule="nonzero"/>
+  <path d="M46 30.47c2.1-1.23 3.76-2.16 3.76-2.16s1.22-.2 1.8.22c.58.43.86 3.32 1.15 6.06.3 2.74-1 7.57-1 7.57l.72.3c.73.28.73 3.1 0 3.52-.6.36-.55 1.1-.4 1.76.3.3.65.58.96.88l.24-.17c.43-.44.36-1 .86-2.53.26-.76 1.13-1.4 2.08-1.93-.25-2.1-.37-7.44-.5-7.8-.13-.44-.57-1-.57-2.1 0-1.08.64-2.1 1.36-2.45.72-.36 1.16.3 1.37 1.16.18.7.54 7.5.67 10.1l.2-.08c.96-.42 1.82-.04 2.24.4.3-.22.5-.6.64-1.2.22-.93 5.56-4.68 6.5-5.47.27-.23.77-.38 1.4-.4.74-.85 1.85-2.04 2.63-2.56 1.3-.87 2.6-.87 2.6-.87l1.6 1.88c.43.5.88 1.23 1.28 1.95.5-1.23 1.4-2.5 3.33-2.67 2.06-.2 7 1.37 8.23 2.38 1.23 1 3.17 3.1 4.33 4.1 0 0 2.3 2.24 2.67 2.46l.08.06c.22-.28.8-.28.8-.28.2-.17.84-.56 1.6-1L81.17.7h-.46L42.3 32.9c1.25-.9 2.68-1.83 3.7-2.43M61.37 56.8c-.72 0-1.95-1.16-2.17-2.97-.07-.64-.07-1.13 0-1.5-.87.27-1.73.2-1.73.2l-.1.1c.37.3.6.7.6 1.2 0 1.16-.42 2.03-1.44 2.67-1 .65-1.3-.43-2.02.22-.7.65-2.23 1.3-2.58.43-.15-.36-.8-.14-1.5-.2-.74-.1-.66-.74-.66-.74s-1.45-1.28-2.53-2.87c-1.08-1.6-2.3-4.26-2.3-5.48 0-1.23-1.16-.87-1.88-.72-.23.04-.87.5-1.68 1.13-.42 1.1-1.2 2.45-2.07 3.7-1.5 2.16-4.62 4.6-6.56 5.4-.3.13-.62.2-.97.22-.32.36-.72.64-1.15.85-.66 1.2-6.7 7.24-7.04 7.74-.2.3-1.67 1.26-3.03 2.2H76c-.3-.4-.6-.75-.86-1.05-1.08-1.23-4.1-6.35-4.7-7.57-.56-1.23-1.86-2.67-2.5-2.1-.66.58-3.4 1.88-4.4 1.6-1.02-.3-.95-1.67-.95-1.67s-.5-.8-1.23-.8M23.15 65.08c.82-.82 3-3.67 4.75-5.98-.7.08-1.35.1-1.8.14-2.02.22-3.32-.57-3.32-.57-1.66-3.57-1.75-6.34-1.3-8.32L0 68.35h19.5c1.7-1.46 3.17-2.8 3.65-3.27" fill="#A81C7D" fill-rule="nonzero"/>
+  <path d="M97.35 44.1c-.14.12-.32.1-.5 0 0 .43.07.94.07.94.58.8 1.23 3.96 1.08 5.4-.12 1.24-.46 2.15-.55 2.4.06.25.13.5.2.7.35 1.23.28 1.45.5 1.45.2 0 .8.56 1.22.78.43.22 3.97 1.95 5.34 3.03 1.38 1.1 2.24 3.04 2.82 5.5.58 2.44-.07 2.52-.65 2.44-.58-.07-1.73-2.02-1.87-3.82-.15-1.8-1.66-3.75-2.74-4.76-1.08-1-4.04-1.44-4.48-1.66-.43-.2-.28-.5-.28-.5s-.44-.36-.72-.87c-.06-.1-.15-.3-.24-.55-.15.23-.5.55-1.42.55-1.45 0-4.9-1.08-6.93-1.73-1.4-.44-3.67-1.33-5.14-1.96 1.12 2.74 4.02 7.9 4.15 8.17.16.33 1.4.75 2.2 1.08.83.32 1.02 3.17 1.8 3.7.76.54 4.22.55 5.7.88 1.48.32 1.46 1.12.87 1.44-.58.3-5.68-1-6.97-1.22-1.28-.2-1.82-1.43-2.35-2.43-.52-1-.68-1.62-1.57-1.6-.9.03-.87-1.07-1.84-.7-.97.4-.72-.74-2.2-3.42-1.5-2.68-2.36-5.83-2.78-5.92-.43-.08-1.66.17-2.33.54-.67.37-4.44 2.43-5.3 3.28-.84.85-4.88-.92-5.84-1.27-.96-.36-1.6-1.82-1.58-2.63 0-.14.1-.36.24-.62-.28 0-.5-.02-.65-.04-1-.14-.92.22-1.2 1-.15.4-.44.6-.78.64.3.64.52 1.32.62 1.75.3 1.23-.3 2.1.22 2.45.5.36.94.65 1.94-.2 1-.88 2.82-1.3 4.26-.95 1.44.36 4.76 6.92 5.77 9.16.67 1.5 1.32 3 1.68 3.86h32.95L99 42.5c-.8.68-1.37 1.37-1.65 1.6M36.47 38.76l.16-.2s2.32-2.47 2.93-3.37l-4.1 3.44c.33.03.67.07 1 .12M49.6 49.07c-.4-.4-.93-.4-1.5-.53l.3.9c.7 2.66 2.44 5.55 2.44 5.55s.5.28.94-.3c.26-.35 1.1-.94 2-1.46l-.35-.34s-.93.5-2 .14c-.9-.3-.82-.74-.52-1.7-.4-.58-.8-1.78-1.3-2.27M49.32 29.53c-.64.36-5.33 5.05-6.56 5.92-1.23.86-2.96 1-2.96 1l-2.3 2.47c1.46.25 2.7.6 3.24.85.58.3.87.83 1.02 1.35.4-.07 1.5-.26 2.08-.55.72-.36 2.74-1.16 3.82-.44 1.1.72.22 3.6.5 3.68.1.03.32.06.58.1-.1-.7.8-1.32.8-1.32s-.14-3.4-.07-5.04c.07-1.66.8-6.06.94-7.14.15-1.08-.43-1.23-1.08-.87M43.2 46c-.64-.34-1.36-.8-1.72-1-.03.53 0 1.02.13 1.34.1.18.1.42.08.7.54-.4 1.02-.8 1.53-1.04" fill="#A81C7D" fill-rule="nonzero"/>
+</svg>
diff --git a/server/sonar-web/src/main/webapp/images/scanner-logos/gradle.svg b/server/sonar-web/src/main/webapp/images/scanner-logos/gradle.svg
new file mode 100644 (file)
index 0000000..0d178e1
--- /dev/null
@@ -0,0 +1,10 @@
+<svg viewBox="0 0 121 80" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414">
+  <path d="M40.12 36.842c.926-2.127.903-4.232.348-5.897-.694-2.036-3.54-4.72-4.44-3.655-.116.14-1.758-.046-2.013.3-.393.51-.162.672.023.857.58.51 2.036 1.064 2.706 2.798.278.74.926 2.452-.208 3.493-1.272 1.156-2.706 1.434-8.58-4.025-6.245-5.805-14.618-3.446-17.393-2.52-2.776.925-4.048 1.85-2.96 3.977 1.48 2.915.994 2.013 2.45 4.418 2.29 3.816 7.333-1.758 7.333-1.758-3.747 5.644-6.962 4.28-8.188 2.313-1.11-1.78-1.966-3.816-1.966-3.816C-2.25 36.75.317 51.83.317 51.83h4.718c1.203-5.55 5.505-5.343 6.222 0h3.585c3.168-10.847 9.968 0 9.968 0h4.024c0-5.782-.6-7.956 2.36-8.373 5.042-.67 7.4-3.03 8.927-6.615z" fill="#02303A"/>
+  <g fill="#22DA27" fill-rule="nonzero">
+    <path d="M57.528 35.495v2.325c.493-.845 1.62-2.77 5.284-2.653l-.024 4.015c-.845.024-2.324.047-3.522.963-1.667 1.268-1.738 2.935-1.738 5.636v6.177h-3.78V35.472l3.78.023zM64.385 40.427c.07-.822.14-1.62.658-2.56 1.573-2.84 5.448-2.818 6.504-2.818 1.574 0 3.452.21 4.885 1.056 1.925 1.174 1.95 2.724 1.95 4.485l-.025 8.643c0 1.244 0 1.737.705 2.724h-4.626c-.024-.4-.094-1.15-.094-1.362-.846.704-2.583 1.644-4.838 1.644-3.686-.025-5.894-2.303-5.894-5.12 0-.823.212-1.574.54-2.208 1.174-2.348 3.687-2.865 5.26-3.147 5.33-.892 5.026-1.41 4.932-2.207-.07-.752-.846-1.456-2.654-1.456-1.62 0-2.512.517-2.912 1.033-.422.517-.4.846-.4 1.315h-3.99v-.023zm10.05 3.31c-.774.4-1.667.682-3.428.964-1.41.188-3.264.517-3.264 2.23 0 1.27 1.08 1.927 2.63 1.927 1.996 0 3.405-.892 3.828-1.88.236-.492.236-.985.236-1.454v-1.785zM95.9 28.897l-.072 23.06h-3.874V50.36c-1.22 1.456-2.842 2.043-4.533 2.043-3.873-.024-7.23-2.935-7.208-8.313.024-4.86 2.77-8.994 7.444-8.97 1.597 0 3.077.47 4.32 1.83v-8.053H95.9zM91.06 40.24c-.586-.893-1.55-1.504-2.864-1.504-2.653 0-3.92 2.372-3.92 4.955 0 .306.022 5.19 3.826 5.19 2.02 0 3.852-1.48 3.828-5-.047-1.058-.164-2.56-.87-3.64zM102.71 28.897l-.072 23.06h-3.945v-23.06h4.016zM120.203 48.13c-1.808 3.193-4.11 4.367-7.444 4.367-4.275-.024-8.384-2.724-8.36-8.736.023-5.47 3.545-8.57 8.148-8.546 4.297.023 6.082 2.606 6.41 3.076 1.34 1.902 1.62 4.743 1.644 6.364l-12.07-.047c.446 2.583 2.043 4.062 4.626 4.062 2.677 0 3.382-1.574 3.875-2.255l3.17 1.714zm-3.874-6.365c-.354-2.536-1.904-3.428-3.64-3.428-2.09 0-3.524 1.197-3.993 3.405l7.632.023zM41.7 39.91v3.382h5.778v3.968c-1.48.94-3.17 1.48-5.59 1.48-3.897 0-7.114-3.264-7.114-8.36 0-5.002 2.958-8.336 7.467-8.336 3.617 0 4.98 2.982 5.19 4.11h3.946c0-2.302-2.724-7.962-9.487-7.962-7.163 0-11.39 5.073-11.39 12.21 0 7.422 5.072 12.07 11.13 12.07 8.97 0 9.746-4.484 9.746-4.484V39.91H41.7z"/>
+  </g>
+  <path d="M40.838 32.934c-.856.07-1.71.208-2.52.44-.024.022-.047.07-.07.092-.37.416-.833.81-1.342 1.04-.07.047-.138.07-.208.093l-.14.138c-1.27 1.156-2.82 1.434-8.58-4.025-6.175-5.85-14.617-3.446-17.392-2.52-2.776.925-4.048 1.85-2.96 3.977 1.48 2.915.994 2.013 2.45 4.418 2.29 3.816 7.333-1.758 7.333-1.758-3.748 5.644-6.963 4.28-8.19 2.313-1.11-1.78-1.965-3.816-1.965-3.816C-2.227 36.75.34 51.83.34 51.83h4.718c1.203-5.55 5.505-5.343 6.222 0h3.585c3.168-10.847 9.968 0 9.968 0h4.025c0-5.782-.602-7.956 2.36-8.373 5.064-.694 7.4-3.053 8.926-6.615.555-1.34.764-2.682.694-3.908z" fill="#02303A"/>
+  <path d="M23.746 34.437s2.174.717 5.088 1.688c-.16.787-1.62 2.29-3.492 1.643-2.498-.81-1.596-3.33-1.596-3.33z" fill="#fff"/>
+  <ellipse cx="124.8" cy="98.1" rx="5.7" ry="5.5" fill="#02303A" transform="matrix(.23 -.02442 .02442 .23 -4.88 16.496)"/>
+  <path d="M34.038 28.47c.162.14.37.277.58.416.97-.81 2.242-.786 3.33-1.226-.95-.878-2.476-1.55-2.938-.994-.116.14-.717.6-.972.948-.416.51-.208.67 0 .856z" fill="#02303A"/>
+</svg>
diff --git a/server/sonar-web/src/main/webapp/images/scanner-logos/jenkins.svg b/server/sonar-web/src/main/webapp/images/scanner-logos/jenkins.svg
new file mode 100644 (file)
index 0000000..284455c
--- /dev/null
@@ -0,0 +1,46 @@
+<svg viewBox="0 0 188 80" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd">
+  <path d="M41.107 38.595c0 11.404-9.038 20.65-20.188 20.65C9.77 59.244.73 49.998.73 38.594c0-11.404 9.038-20.65 20.187-20.65 11.15 0 20.187 9.246 20.187 20.65" fill="#D33833"/>
+  <path d="M1.554 43.71s-1.46-21.535 18.38-22.15l-1.383-2.307-10.766 3.615-3.076 3.537-2.692 5.153-1.538 6 .46 3.998" fill="#EF3D3A" fill-rule="nonzero"/>
+  <path d="M7.092 24.508C3.55 28.133 1.36 33.136 1.36 38.672c0 5.534 2.19 10.54 5.732 14.162 3.544 3.624 8.428 5.86 13.827 5.86 5.398 0 10.282-2.236 13.826-5.86 3.54-3.623 5.734-8.628 5.734-14.162 0-5.536-2.193-10.54-5.734-14.164-3.544-3.622-8.428-5.858-13.827-5.86-5.4.002-10.284 2.238-13.828 5.86zM6.196 53.71C2.432 49.86.104 44.54.104 38.673c0-5.87 2.328-11.19 6.092-15.04 3.763-3.85 8.973-6.237 14.723-6.236 5.75 0 10.96 2.386 14.722 6.236 3.765 3.85 6.092 9.17 6.092 15.04 0 5.87-2.327 11.19-6.092 15.04-3.763 3.85-8.973 6.236-14.723 6.236S9.96 57.56 6.195 53.71" fill="#231F20" fill-rule="nonzero"/>
+  <path d="M29.417 38.71l-3.076.46-4.152.462-2.692.077-2.614-.078-2-.615-1.77-1.923-1.383-3.922-.31-.846-1.845-.615L8.5 29.943l-.77-2.538.846-2.23 2-.692 1.614.77.77 1.69.922-.153.308-.385-.308-1.77-.077-2.23.462-3.076-.018-1.758 1.4-2.242 2.462-1.77 4.307-1.845 4.767.693 4.153 3 1.922 3.075 1.23 2.23.308 5.538-.922 4.77-1.692 4.23-1.615 2.23" fill="#F0D6B7"/>
+  <path d="M26.802 52.014l-10.997.46v1.847l.923 6.46-.462.54-7.69-2.615-.54-.923-.768-8.69-1.768-5.23-.385-1.23 6.152-4.23 1.923-.77 1.692 2.077 1.46 1.307 1.693.538.77.23.922 4 .692.846 1.768-.615-1.23 2.384 6.69 3.152-.846.462" fill="#335061"/>
+  <path d="M8.576 25.174l2-.692 1.614.77.77 1.69.922-.153.23-.924-.46-1.77.46-4.23-.384-2.306 1.385-1.615 3-2.384-.847-1.152-4.23 2.076-1.77 1.384-.998 2.154-1.54 2.076-.46 2.46.308 2.616" fill="#6D6B6D"/>
+  <path d="M11.73 17.945s1.152-2.846 5.767-4.23c4.614-1.384.23-1 .23-1l-4.998 1.923-1.924 1.923-.846 1.54 1.77-.155M9.422 24.636s-1.615-5.384 4.537-6.153l-.232-.923-4.23 1-1.23 4 .308 2.614.846-.538" fill="#DCD9D8"/>
+  <path d="M11.883 31.788l1.006-.976s.454.053.53.59c.078.54.308 5.385 3.615 8 .302.238-2.46-.385-2.46-.385l-2.462-3.845M26.034 30.327s.18-2.33.807-2.152c.628.18.628.807.628.807s-1.524.986-1.434 1.345" fill="#F7E4CD"/>
+  <path d="M32.416 21.79s-1.267.268-1.384 1.384c-.117 1.117 1.384.23 1.615.154M23.11 21.867s-1.69.23-1.69 1.307 1.922 1 2.46.54" fill="#F7E4CD" fill-rule="nonzero"/>
+  <path d="M12.652 26.866s-2.923-1.77-3.23-.077c-.308 1.69-1 2.922.46 4.69l-1-.307-.922-2.384-.307-2.308 1.77-1.846 1.998.153 1.155.922.077 1.154M14.036 22.02s1.307-6.767 7.92-8.074c5.446-1.077 8.307.23 9.384 1.46 0 0-4.845-5.767-9.46-3.998-4.614 1.77-7.998 5-7.92 7.075.13 3.536.076 3.538.076 3.538M31.878 16.176s-2.23-.077-2.307 1.923c0 0 0 .306.155.614 0 0 1.77-2 2.845-.923" fill="#F7E4CD"/>
+  <path d="M22.112 18.922s-.384-3.07-3-1.285c-1.692 1.154-1.538 2.77-1.23 3.076.307.308.223.928.457.502.233-.425.156-1.81 1.002-2.193.846-.385 2.233-.815 2.77-.1" fill="#F7E4CD"/>
+  <path d="M14.882 39.71l-7.23 3.23s3 11.92 1.462 15.61l-1.077-.383-.077-4.538-2-8.614-.845-2.384 7.537-5.076 2.23 2.153M15.625 46.302l1.026 1.252v4.614h-1.23s-.153-3.23-.153-3.615c0-.384.153-1.77.153-1.77M15.65 52.86l-3.46.154 1 .692 2.46.385" fill="#49728B"/>
+  <path d="M27.495 52.09l2.845-.076.692 7.075-2.922.384-.615-7.383" fill="#335061"/>
+  <path d="M28.264 52.09l4.306-.23s1.77-4.46 1.77-4.69c0-.232 1.537-6.46 1.537-6.46l-3.46-3.615-.693-.616-1.845 1.845v7.152l-1.616 6.614" fill="#335061"/>
+  <path d="M30.186 51.553l-2.69.538.383 2.154c1 .462 2.69-.77 2.69-.77M30.263 38.094l5.383 4 .154-1.846-4.076-3.77-1.46 1.616" fill="#49728B"/>
+  <path d="M18.32 67.242l-1.592-6.46-.792-4.768-.13-3.54 7.205-.382h4.485l-.408 8.075.692 6.23-.078 1.153-5.845.46-3.537-.768" fill="#fff"/>
+  <path d="M26.495 52.014s-.385 7.998.77 13.69c0 0-2.308 1.46-5.692 1.845l6.46-.232.77-.46-.924-12.614-.232-2.692" fill="#DCD9D8"/>
+  <path d="M31.163 58.475l3-.846 5.69-.31.846-2.613-1.54-4.538-1.767-.232-2.462.77-2.36 1.152-1.253-.23-.977.384" fill="#fff"/>
+  <path d="M31.11 56.936s1.998-.923 2.306-.846l-.846-4.23 1-.384s.692 4 .692 4.46c0 0 4.307.23 4.69.23 0 0 .924-1.768.693-3.614l.847 2.46.076 1.386-1.23 1.845-1.384.308-2.308-.076-.77-1-2.69.385-.846.307" fill="#DCD9D8"/>
+  <path d="M28.087 51.477l-1.692-4.307-1.77-2.538s.385-1.077.924-1.077h1.768l1.692.615-.154 2.846-.77 4.46" fill="#fff" fill-rule="nonzero"/>
+  <path d="M28.417 50.014s-2.153-4.152-2.153-4.768c0 0 .384-.922.923-.692.538.23 1.692.846 1.692.846v-1.46l-2.616-.54-1.77.23 3 7.077.616.077" fill="#DCD9D8"/>
+  <path d="M19.012 39.864l-2.13-.232-2-.615v.692l.977 1.076 3.075 1.385" fill="#fff" fill-rule="nonzero"/>
+  <path d="M15.574 40.094s2.385 1 3.154.77l.076.92-2.153-.46-1.306-.922.23-.308" fill="#DCD9D8"/>
+  <path d="M31.155 43.817c-1.305-.038-2.484-.193-3.516-.485.07-.423-.062-.838.043-1.143.288-.208.77-.205 1.205-.253-.376-.185-.905-.258-1.34-.152-.01-.293-.14-.475-.22-.705.733-.262 2.465-1.98 3.44-1.41.464.27.66 1.815.697 2.566.03.623-.056 1.25-.31 1.58" fill="#D33833"/>
+  <path d="M31.155 43.817c-1.305-.038-2.484-.193-3.516-.485.07-.423-.062-.838.043-1.143.288-.208.77-.205 1.205-.253-.376-.185-.905-.258-1.34-.152-.01-.293-.14-.475-.22-.705.733-.262 2.465-1.98 3.44-1.41.464.27.66 1.815.697 2.566.03.623-.056 1.25-.31 1.58z" fill="none" stroke="#D33833" stroke-width=".46144"/>
+  <path d="M24.915 41.684l-.012.298c-.407.267-1.065.264-1.512.49.66.028 1.18.187 1.628.41l-.03.746c-.746.51-1.428 1.273-2.308 1.752-.415.227-1.874.81-2.317.707-.25-.058-.273-.368-.373-.66-.213-.628-.703-1.626-.746-2.57-.055-1.19-.175-3.19 1.11-2.943 1.036.197 2.24.675 3.043 1.113.49.268.774.6 1.518.657" fill="#D33833"/>
+  <path d="M24.915 41.684l-.012.298c-.407.267-1.065.264-1.512.49.66.028 1.18.187 1.628.41l-.03.746c-.746.51-1.428 1.273-2.308 1.752-.415.227-1.874.81-2.317.707-.25-.058-.273-.368-.373-.66-.213-.628-.703-1.626-.746-2.57-.055-1.19-.175-3.19 1.11-2.943 1.036.197 2.24.675 3.043 1.113.49.268.774.6 1.518.657z" fill="none" stroke="#D33833" stroke-width=".46144"/>
+  <path d="M25.656 43.106c-.114-.65-.245-.835-.194-1.4 1.73-1.156 2.056 1.982.194 1.4" fill="#D33833"/>
+  <path d="M25.656 43.106c-.114-.65-.245-.835-.194-1.4 1.73-1.156 2.056 1.982.194 1.4z" fill="none" stroke="#D33833" stroke-width=".46144"/>
+  <path d="M28.164 43.632s-.54-.77-.154-1c.384-.23.77 0 1-.384.23-.385 0-.615.076-1.077.077-.46.462-.537.847-.614.384-.077 1.46-.23 1.615.154l-.462-1.385-.923-.307-2.922 1.692-.153.846v1.692M20.09 46.17c-.094-1.2-.192-2.4-.3-3.598-.163-1.79.43-1.478 1.982-1.478.237 0 1.46.283 1.547.462.418.856-.703.666.482 1.312 1 .545 2.766-.33 2.362-1.543-.226-.27-1.178-.084-1.52-.26-.6-.312-1.2-.624-1.802-.935-.764-.397-2.53-.975-3.346-.42-2.065 1.403.13 4.912.867 6.377" fill="#EF3D3A"/>
+  <path d="M22.112 18.922c-2.096-.488-3.137.877-3.773 2.293-.568-.137-.342-.91-.2-1.302.376-1.03 1.888-2.405 3.124-2.22.53.08 1.25.567.848 1.23M32.325 21.31l.1.003c.473.984.883 2.026 1.48 2.895-.4.932-3.03 1.757-2.99.083.57-.247 1.55-.05 2.056-.367-.29-.8-.712-1.482-.645-2.614M23.185 21.335c.45.824.596 1.69 1.235 2.312.288.28.847.622.57 1.402-.065.182-.54.592-.812.673-1 .295-3.326.06-2.538-1.184.826.037 1.936.535 2.554-.065-.474-.757-1.32-2.257-1.01-3.14M31.95 29.708c-1.503.966-3.18 2.017-5.644 1.773-.527-.457-.728-1.475-.216-2.148.266.458.1 1.3.84 1.426 1.4.24 3.026-.855 4.032-1.237.624-1.05-.054-1.437-.616-2.114-1.15-1.387-2.693-3.105-2.636-5.18.464-.338.505.514.57.67.602 1.405 2.113 3.202 3.216 4.405.27.297.717.582.767.777.143.57-.372 1.253-.313 1.63M12.125 28.69c-.47-.268-.583-1.453-1.137-1.486-.79-.048-.646 1.537-.643 2.464-.545-.494-.64-2.016-.24-2.797-.456-.223-.66.248-.912.414.325-2.36 3.452-1.095 2.932 1.407M32.908 30.69c-.7 1.334-1.69 2.8-3.744 2.844-.042-.43-.074-1.085.002-1.344 1.57-.15 2.54-.95 3.742-1.5M23.067 31.555c1.31.69 3.718.763 5.5.71.094.39.092.873.095 1.35-2.29.113-4.995-.453-5.595-2.06M22.818 32.84c.906 2.274 4.02 2.012 6.645 1.95-.115.295-.366.644-.677.77-.842.342-3.162.602-4.33-.018-.74-.394-1.217-1.284-1.623-1.806-.196-.25-1.172-.895-.015-.896" fill="#231F20"/>
+  <path d="M31.84 45.387c-1.062 1.82-2.08 3.69-3.34 5.297.528-1.555.754-4.157.834-6.14 1.107-.52 2.054.115 2.507.843" fill="#81B0C4"/>
+  <path d="M37.562 51.93c-1.19.24-2.027 1.396-3.188 1.322.638-.9 1.756-1.28 3.188-1.32M38.087 53.794c-.97.102-2.11.26-3.094.178.466-.71 2.26-.466 3.094-.178M38.423 55.4c-1.09.023-2.445.002-3.482-.085.614-.66 2.776-.245 3.483.085" fill="#231F20"/>
+  <path d="M29.79 59.795c.156 1.37.7 2.757.63 4.256-.602.205-.948.382-1.756.38-.057-1.273-.228-3.222-.177-4.437.398.027.983-.283 1.302-.198" fill="#DCD9D8"/>
+  <path d="M28.032 39.614c-.548.357-1.014.803-1.54 1.185-1.166.056-1.802-.082-2.66-.752.015-.053.1-.03.104-.095 1.25.556 2.835-.227 4.096-.34" fill="#F0D6B7"/>
+  <path d="M21.48 48.122c.342-1.486 1.686-2.256 2.906-3.074 1.26 1.598 2.026 3.654 2.87 5.638-1.994-.6-4.03-1.576-5.777-2.564" fill="#81B0C4"/>
+  <path d="M28.487 59.993c-.05 1.215.12 3.164.177 4.438.808.002 1.154-.175 1.757-.38.07-1.498-.474-2.886-.63-4.255-.32-.085-.905.225-1.303.198zm-12.577-6.91c.533 4.897 1.304 9.013 2.72 13.35 3.14.953 6.925 1.036 9.7.176-.51-2.45-.286-5.428-.584-8.04-.224-1.963-.11-3.938-.418-5.94-3.363-.7-8.117-.164-11.418.454zm12.213-.422c-.028 2.104.095 4.178.255 6.283.808-.12 1.356-.202 2.106-.366-.244-2.027-.214-4.308-.71-6.1-.574.004-1.08-.008-1.65.184zm4.097-.338c-.383-.088-.83-.004-1.196.003.172 1.715.59 3.606.737 5.406.577.02.885-.253 1.36-.345.024-1.58-.14-3.755-.9-5.063zm6.202 5.667c1.2-.293 1.956-1.764 1.62-3.274-.225-1.015-.626-2.927-1.056-3.576-.317-.48-1.178-1.11-1.866-.67-1.118.717-3.087.924-3.903 1.79.41 1.362.536 3.232.705 4.957 1.397.087 3.115-.385 4.277.116-.812.262-1.864.264-2.565.647.573.277 1.913.22 2.787.01zm-11.167-7.304c-.843-1.984-1.61-4.04-2.87-5.638-1.22.818-2.563 1.588-2.906 3.074 1.746.988 3.782 1.963 5.775 2.564zm2.08-6.143c-.08 1.984-.307 4.586-.836 6.14 1.26-1.605 2.278-3.475 3.34-5.296-.452-.728-1.4-1.362-2.506-.844zm-2.358-.838c-.478-.05-.883.55-1.504.29-.143.157-.272.328-.417.48 1.372 1.655 1.996 4.002 3.055 5.945.57-1.867.505-3.912.63-5.95-.782.05-1.215-.707-1.763-.765zm-1.515-2c-.05.566.08.752.194 1.4 1.862.583 1.537-2.555-.194-1.4zm-2.065-.678c-.802-.438-2.007-.916-3.044-1.113-1.284-.246-1.164 1.752-1.11 2.944.044.943.534 1.94.747 2.568.1.293.123.603.373.66.443.105 1.902-.48 2.317-.706.88-.48 1.562-1.24 2.31-1.752.008-.248.018-.497.028-.746-.45-.223-.968-.382-1.627-.41.448-.226 1.106-.223 1.513-.49l.012-.298c-.744-.057-1.028-.39-1.518-.657zm-7.663-1.392c-.666.676 1.868 1.598 2.674 1.647-.004-.427.244-.83.194-1.138-.958-.168-2.217-.057-2.868-.51zm8.202.318c-.003.066-.09.042-.103.095.857.67 1.493.808 2.66.75.525-.38.99-.827 1.54-1.184-1.262.112-2.848.895-4.097.34zm7.53 2.283c-.037-.75-.234-2.296-.698-2.566-.975-.57-2.707 1.148-3.44 1.41.08.23.21.412.22.705.435-.106.964-.033 1.34.152-.435.048-.917.045-1.205.252-.105.304.026.72-.044 1.142 1.03.292 2.21.447 3.515.485.254-.33.34-.958.31-1.58zM14.612 40.29c-.21-.15-1.623-1.99-1.817-1.914-2.56 1.01-4.953 2.755-7.092 4.405 2.04 4.377 2.862 9.737 3.008 14.904 2.336 1.092 4.387 2.667 7.557 2.832-.368-2.595-.702-4.91-.91-7.354-.797-.336-1.94.015-2.685-.104-.006-.898 1.138-.393 1.234-.997.07-.456-.63-.49-.403-1.21.583.212.89.68 1.51.855.568-1.242-.008-3.44.074-4.478.017-.195.1-1.08.535-.925.387.138-.022 2.354.02 3.337.04.904-.11 1.78.258 2.348 3.063-.417 6.175-.686 9.49-.777-.73-.312-1.596-.608-2.546-1.143-.515-.29-2.137-.894-2.286-1.383-.236-.78.623-1.194.77-1.862-1.546.843-1.848-.808-2.214-1.978-.33-1.06-.52-1.852-.6-2.463-1.333-.634-2.756-1.277-3.903-2.09zm15.5-1.69c2.132-1.035 2.516 3.863 1.68 5.44.13.472.574.652.755 1.075-1.19 2.132-2.51 4.122-3.726 6.23.904-.563 2.194-.102 3.257-.523.387-.153.668-1.043.963-1.754.81-1.958 1.658-4.426 2.036-6.294.084-.426.317-1.353.265-1.732-.093-.678-1.013-1.18-1.482-1.6-.862-.775-1.405-1.457-2.305-2.182-.364.54-1.147.9-1.446 1.34zM9.735 19.686c-1.016 1.118-.803 3.213-.68 4.704 1.836-1.155 4.274.092 4.25 2.057.878-.023.33-1.095.17-1.786-.518-2.254.873-4.704.063-6.767-1.574.12-2.866.762-3.804 1.794zm7.27-6.49c-2.3.653-5.248 2.325-6.193 4.39.732-.105 1.24-.474 1.962-.52.273-.018.63.114.944.036.624-.155 1.152-1.556 1.623-2.077.46-.51 1.012-.727 1.39-1.19.243-.12.602-.11.616-.475-.106-.112-.217-.198-.343-.162zm11.976.614c-2.388-1.346-6.43-2.36-8.97-1.093-2.05 1.022-4.82 2.713-5.763 4.855.88 2.067-.263 3.962-.336 6.06-.038 1.118.526 2.093.57 3.31-.303.497-1.225.558-1.864.524-.215-1.076-.59-2.285-1.698-2.406-1.568-.17-2.714 1.126-2.785 2.48-.084 1.595 1.225 4.237 3.08 4.054.716-.07.892-.79 1.672-.782.423.844-.653 1.11-.764 1.713-.03.156.09.766.158 1.052.337 1.39 1.088 3.193 1.827 4.253.94 1.344 2.783 1.546 4.765 1.678.355-.763 1.66-.7 2.51-.5-1.02-.404-1.966-1.382-2.75-2.248-.903-.994-1.817-2.06-1.863-3.358 1.704 2.364 3.112 4.43 6.21 5.468 2.345.787 5.083-.36 6.885-1.625.747-.526 1.193-1.36 1.725-2.124 1.988-2.86 2.915-6.94 2.71-10.897-.083-1.63-.08-3.257-.626-4.355-.573-1.148-2.508-2.175-3.64-1.137-.21-1.115.94-1.805 2.295-1.404-.964-1.245-1.977-2.74-3.348-3.515zm4.448 36.816c1.866-.927 5.352-2.496 6.522.004.432.92.938 2.48 1.162 3.43.315 1.342-.343 4.163-1.722 4.613-1.22.398-2.64.374-4.108.08-.173-.145-.365-.395-.5-.657-1.048-.04-2.03.057-2.857.488.08.775-.445.9-.937 1.06-.364 1.443.73 3.33.467 4.647-.186.94-1.34 1.084-2.19 1.26-.027.52.038.956.096 1.397-.194.715-1.065 1.122-1.89 1.222-2.712.325-6.83.472-9.44-.466-.73-1.787-1.303-3.96-1.91-6-2.545.273-4.603-1.097-6.543-1.994-.673-.312-1.602-.483-1.853-1.018-.243-.518-.144-1.51-.204-2.448-.154-2.394-.285-4.703-.917-7.154-.284-1.1-.78-2.07-1.124-3.13-.32-.983-.877-2.198-1.022-3.177-.216-1.452 1.15-1.533 2.026-2.162 1.35-.972 2.412-1.51 3.875-2.388.435-.26 1.742-.918 1.89-1.22.297-.602-.507-1.45-.72-1.92-.34-.746-.518-1.38-.567-2.114-1.227-.194-2.158-.925-2.72-1.75-.93-1.362-1.575-3.885-.77-5.804.063-.15.377-.448.424-.68.09-.457-.173-1.065-.19-1.55-.083-2.495.423-4.644 2.102-5.396.68-2.715 3.12-3.618 5.42-4.968.858-.504 1.805-.826 2.783-1.186 3.51-1.29 8.892-1.048 11.804 1.154 1.235.934 3.21 2.906 3.915 4.334 1.865 3.77 1.732 10.068.428 14.653-.175.616-.43 1.52-.785 2.26-.247.517-1.017 1.55-.923 2.006.096.472 1.754 1.73 2.11 2.074.64.617 1.856 1.437 1.955 2.217.106.83-.366 1.965-.605 2.765-.798 2.67-1.577 5.14-2.482 7.52" fill="#231F20"/>
+  <path d="M20.982 32.137c.102-.135.658-.34 1.437.035 0 0-.924.154-.847 1.693l-.385-.077s-.397-1.395-.206-1.65" fill="#F7E4CD"/>
+  <path d="M27.725 45.362c0 .233-.19.423-.423.423-.233 0-.423-.19-.423-.423 0-.234.19-.423.422-.423.234 0 .423.188.423.422M28.148 47.323c0 .233-.19.423-.423.423-.233 0-.423-.19-.423-.423 0-.234.19-.423.423-.423.234 0 .423.19.423.423" fill="#1D1919"/>
+  <g>
+    <text font-family="'Georgia-Bold', 'Georgia', serif" font-weight="700" font-size="144" transform="matrix(.23072 0 0 .23072 53.563 51.873)">
+      Jenkins
+    </text>
+  </g>
+</svg>
diff --git a/server/sonar-web/src/main/webapp/images/scanner-logos/maven.svg b/server/sonar-web/src/main/webapp/images/scanner-logos/maven.svg
new file mode 100644 (file)
index 0000000..9f7fcaa
--- /dev/null
@@ -0,0 +1,7 @@
+<svg viewBox="0 0 115 80" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41">
+  <path d="M20.4 37.5v14.54h-5.87V41.8c0-1-.02-1.85-.06-2.55-.05-.7-.16-1.26-.36-1.7-.18-.44-.48-.76-.87-.96-.4-.2-.95-.3-1.67-.3-.57 0-1.13.12-1.67.38-.55.26-1.04.54-1.47.83v14.54H2.58v-20.5h5.85v2.27c1-.88 1.97-1.58 2.9-2.07.9-.5 1.93-.75 3.04-.75 1.2 0 2.26.3 3.18.9.92.6 1.64 1.5 2.16 2.66 1.18-1.1 2.32-1.98 3.42-2.6 1.1-.65 2.2-.96 3.25-.96 1.97 0 3.47.66 4.5 2 1 1.3 1.52 3.22 1.52 5.72v13.34H26.5V41.8c0-1-.02-1.86-.06-2.55-.04-.7-.16-1.26-.35-1.7-.17-.44-.47-.76-.87-.96-.4-.2-.96-.3-1.7-.3-.47 0-.95.08-1.4.27-.48.2-1.05.5-1.72.94z" fill-rule="nonzero"/>
+  <g fill-rule="nonzero">
+    <path d="M47.16 47.63v-3.36c-.7.06-1.45.14-2.27.24-.82.1-1.44.23-1.86.36-.5.16-.9.4-1.18.7-.27.32-.4.73-.4 1.24 0 .33.02.6.08.82.05.2.2.4.43.6.22.2.48.33.8.42.3.1.77.14 1.42.14.5 0 1.03-.1 1.56-.32.53-.2 1-.5 1.4-.83zm0 2.5l-1.03.76c-.4.28-.8.52-1.16.7-.5.22-1.04.4-1.58.5-.56.1-1.16.16-1.8.16-1.54 0-2.82-.47-3.85-1.42-1.03-.94-1.55-2.15-1.55-3.63 0-1.16.26-2.12.8-2.87.5-.75 1.26-1.34 2.23-1.77.95-.43 2.14-.73 3.56-.9 1.4-.2 2.87-.33 4.4-.42v-.08c0-.9-.37-1.5-1.1-1.85-.73-.33-1.8-.5-3.2-.5-.87 0-1.77.16-2.74.46-.97.3-1.66.53-2.08.7h-.47v-3.9c.55-.14 1.44-.3 2.67-.5s2.46-.3 3.7-.3c2.93 0 5.05.45 6.36 1.36 1.3.9 1.95 2.32 1.95 4.25v10.96h-5.12v-1.7z" fill="#FF6804"/>
+    <path d="M73.26 35.72l-6.2 16.1h-5.87L55 35.73h5.47L64.2 46.8l3.7-11.08h5.34zM92 44.73H80.18c.07 1.26.55 2.23 1.44 2.9.88.67 2.2 1 3.9 1 1.1 0 2.16-.2 3.18-.58 1.02-.4 1.83-.82 2.43-1.27h.57v4.15c-1.17.47-2.27.8-3.3 1.02-1.03.2-2.18.3-3.43.3-3.23 0-5.7-.7-7.43-2.17-1.72-1.45-2.6-3.52-2.6-6.2 0-2.67.83-4.78 2.46-6.33 1.63-1.55 3.87-2.33 6.7-2.33 2.63 0 4.6.66 5.92 2 1.32 1.3 1.98 3.22 1.98 5.7v1.8zm-5.14-3.03c-.02-1.08-.3-1.9-.8-2.44s-1.3-.8-2.37-.8c-1 0-1.82.24-2.46.76-.64.52-1 1.35-1.08 2.48h6.7zM111.83 51.83h-5.2v-8c0-.64-.03-1.3-.1-1.93-.06-.65-.18-1.12-.34-1.43-.2-.35-.48-.6-.85-.78-.37-.17-.88-.25-1.54-.25-.46 0-.94.08-1.42.23-.48.15-1 .4-1.57.73v11.43h-5.16v-16.1h5.17v1.77c.93-.72 1.8-1.27 2.66-1.65.84-.38 1.78-.57 2.82-.57 1.74 0 3.1.5 4.08 1.52.98 1 1.47 2.53 1.47 4.54v10.5z"/>
+  </g>
+</svg>
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 (file)
index 0000000..a48d84f
--- /dev/null
@@ -0,0 +1,3 @@
+<svg viewBox="0 0 100 80" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414">
+  <path d="M56.88 27.326h.55c.648.083 1.267.424 1.63.972.567.805.472 2.01-.242 2.695-.9.913-2.558.877-3.41-.082-.648-.7-.7-1.84-.163-2.617.36-.55.99-.886 1.634-.967zM20.91 27.415c.44-.003.88 0 1.32 0v5.956c.008 1.436-.017 2.873.013 4.31.342-.492.695-.98 1.13-1.393 1.006-1.022 2.4-1.62 3.822-1.732 1.194-.083 2.43.025 3.53.522 1.016.456 1.903 1.195 2.525 2.12.604.874.995 1.882 1.224 2.917.28 1.217.34 2.474.275 3.718-.07 1.172-.285 2.338-.69 3.44-.564 1.553-1.578 2.976-2.992 3.858-1.042.674-2.274 1.006-3.506 1.07h-.917c-1.138-.06-2.268-.447-3.154-1.172-.492-.39-.883-.886-1.248-1.39-.028.717-.005 1.436-.013 2.154-1.27.002-2.538 0-3.807 0V33.54c0-.08.014-.16.045-.234.817-1.963 1.627-3.928 2.443-5.89m5.136 10.27c-1.147.124-2.225.756-2.89 1.7-.653.914-.953 2.048-.956 3.164.003.834-.004 1.668.003 2.5.043 1.418.81 2.826 2.064 3.522.985.57 2.2.637 3.285.342.867-.24 1.64-.793 2.144-1.537.666-.973.956-2.15 1.07-3.31.104-1.246.09-2.54-.344-3.728-.31-.863-.868-1.662-1.666-2.135-.803-.496-1.785-.62-2.71-.518zM81.13 27.414c1.245 0 2.49-.002 3.734 0v24.393H81.13c-.005-.866.008-1.733-.006-2.6-.453.68-.95 1.348-1.617 1.834-.963.73-2.163 1.093-3.36 1.16h-.904c-.905-.06-1.807-.27-2.617-.685-.778-.388-1.46-.96-2-1.64-.543-.68-.936-1.47-1.22-2.29-.375-1.093-.513-2.253-.534-3.404-.014-1.356.133-2.727.562-4.02.494-1.545 1.408-2.992 2.74-3.945.93-.673 2.034-1.09 3.172-1.23 1.21-.145 2.482-.07 3.602.45.91.412 1.65 1.128 2.177 1.967.013-3.33 0-6.66.006-9.988m-4.284 10.568c-.687.034-1.374.223-1.955.6-.767.477-1.314 1.25-1.634 2.086-.46 1.208-.555 2.52-.498 3.802.046.78.2 1.56.517 2.278.316.727.822 1.386 1.498 1.813.844.528 1.887.698 2.862.53 1.157-.206 2.176-.973 2.76-1.983.518-.883.756-1.91.774-2.928.008-.697.005-1.395 0-2.092-.027-1.292-.646-2.58-1.693-3.35-.75-.56-1.7-.82-2.63-.756zM10.017 27.414c.73-.002 1.46 0 2.19-.002-3.34 8.142-6.688 16.282-10.03 24.424-.726.003-1.45 0-2.177 0V51.8c3.34-8.128 6.68-16.257 10.017-24.386zM5.227 51.837c3.345-8.14 6.686-16.283 10.03-24.425.73.003 1.46 0 2.19.002-3.343 8.14-6.69 16.28-10.03 24.422h-2.19zM62.518 27.414c1.24-.002 2.48 0 3.72 0 0 8.116 0 16.234-.002 24.35h-3.718v-24.35zM86.706 51.837c3.344-8.142 6.687-16.283 10.033-24.423h2.174v.033c-3.342 8.128-6.68 16.26-10.02 24.39h-2.188zM55.254 35.318c1.235-.002 2.47 0 3.705 0v16.446h-3.706V35.318zM36.787 35.317h3.763v9.272c-.016 1.005.07 2.05.54 2.958.355.7 1.017 1.234 1.778 1.426 1.084.29 2.316.143 3.228-.538.687-.495 1.13-1.26 1.374-2.06.19-.636.22-1.306.214-1.966v-9.093h3.734c0 5.484.002 10.966 0 16.448h-3.734c-.003-.83.006-1.66-.004-2.49-.106.07-.152.19-.22.292-.564.873-1.364 1.602-2.308 2.047-.845.405-1.79.59-2.726.546-1.168-.023-2.366-.305-3.325-.996-.87-.614-1.486-1.54-1.83-2.542-.388-1.126-.498-2.33-.483-3.514v-9.79z" fill="#00B0F5" fill-rule="nonzero"/>
+</svg>
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
new file mode 100644 (file)
index 0000000..f0650ba
--- /dev/null
@@ -0,0 +1,7 @@
+<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">
+  <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"/>
+  </g>
+</svg>
diff --git a/server/sonar-web/src/main/webapp/images/understanding-leak-period.svg b/server/sonar-web/src/main/webapp/images/understanding-leak-period.svg
new file mode 100644 (file)
index 0000000..69b9ff0
--- /dev/null
@@ -0,0 +1,13 @@
+<svg viewBox="0 0 500 240" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-miterlimit="10">
+  <path d="M284.45 8v42.5H69.35v113h389.3V8h-174.2z" fill="#F7F7F7" fill-rule="nonzero"/>
+  <path fill="#F6F9FD" d="M55.35 38.5h196v113h-196z"/>
+  <path fill="#FAF3DB" d="M250.65 0h196v151.5h-196z"/>
+  <path fill="none" stroke="#E5E5E5" d="M250.65 0h196v38.8h-196zM55.65 38.9h391v112.8h-391z"/>
+  <path d="M302.25 14.6h1.9v8.7h4.2v1.6h-6.1V14.6zM316.35 20.4h-3.9v3h4.4v1.5h-6.2V14.6h6v1.5h-4.1v2.7h3.9v1.6h-.1zM321.25 22l-.9 2.9h-1.9l3.3-10.3h2.4l3.4 10.3h-2l-.9-2.9h-3.4zm3-1.4l-.8-2.5c-.2-.6-.4-1.3-.5-1.9-.2.6-.3 1.3-.5 1.9l-.8 2.5h2.6zM329.75 14.6h1.9v4.7c.2-.4.5-.8.8-1.1l2.7-3.6h2.3l-3.6 4.4 3.8 5.9h-2.2l-2.9-4.7-.9 1.1v3.6h-1.9V14.6zM343.35 14.8c.7-.1 1.6-.2 2.9-.2 1.4 0 2.4.3 3 .8.6.5 1 1.3 1 2.3 0 1-.3 1.8-.9 2.3-.8.8-1.9 1.1-3.3 1.1-.4 0-.7 0-.9-.1v3.9h-1.9V14.8h.1zm1.9 4.8c.2.1.5.1.9.1 1.4 0 2.3-.7 2.3-1.9 0-1.1-.8-1.8-2.1-1.8-.5 0-.9 0-1.1.1v3.5zM358.45 20.4h-3.9v3h4.4v1.5h-6.3V14.6h6v1.5h-4.1v2.7h3.9v1.6zM361.35 14.8c.7-.1 1.8-.2 2.8-.2 1.5 0 2.5.2 3.2.8.6.5.9 1.2.9 2.1 0 1.3-.9 2.2-1.9 2.6.7.3 1.2 1 1.4 2 .3 1.3.6 2.5.8 2.9h-1.9c-.2-.3-.4-1.1-.7-2.4-.3-1.3-.8-1.8-1.9-1.8h-.9V25h-1.9V14.8h.1zm1.8 4.6h1.1c1.3 0 2.1-.7 2.1-1.7 0-1.1-.8-1.7-2-1.7-.6 0-1 0-1.2.1v3.3zM370.75 14.6h1.9v10.3h-1.9zM384.75 19.7c0 3.5-2.1 5.4-4.9 5.4-2.9 0-4.7-2.2-4.7-5.3 0-3.2 2-5.4 4.9-5.4 2.9.1 4.7 2.4 4.7 5.3zm-7.7.2c0 2.1 1.1 3.8 2.9 3.8 1.8 0 2.8-1.7 2.8-3.8 0-1.9-1-3.8-2.8-3.8-1.9-.1-2.9 1.6-2.9 3.8zM387.15 14.8c.8-.1 1.9-.2 3-.2 1.9 0 3.3.4 4.2 1.2 1 .8 1.6 2 1.6 3.8 0 1.8-.6 3.2-1.6 4.1-1 .9-2.7 1.4-4.7 1.4-1.1 0-1.9-.1-2.5-.1V14.8zm1.9 8.7h1c2.5 0 3.9-1.3 3.9-4 0-2.3-1.3-3.6-3.7-3.6-.6 0-1 0-1.3.1v7.5h.1z" fill-rule="nonzero"/>
+  <path d="M322.85 121.1v-10.3h1.5l3.3 5.2c.8 1.2 1.4 2.3 1.9 3.4-.1-1.4-.2-2.6-.2-4.2v-4.3h1.3v10.3h-1.3l-3.3-5.2c-.7-1.1-1.4-2.3-1.9-3.4.1 1.3.1 2.5.1 4.3v4.4h-1.4v-.2zM333.65 117.6c0 1.8 1.2 2.6 2.5 2.6 1 0 1.5-.2 2.1-.4l.2 1c-.5.2-1.3.5-2.5.5-2.3 0-3.6-1.5-3.6-3.7s1.3-4 3.5-4c2.4 0 3.1 2.1 3.1 3.5v.6h-5.3v-.1zm4-1c0-.9-.4-2.2-1.9-2.2-1.4 0-2 1.3-2.1 2.2h4zM341.15 113.6l1 3.8.6 2.4c.2-.8.4-1.5.7-2.3l1.2-3.8h1.1l1.1 3.7c.3.9.5 1.7.7 2.4.1-.8.3-1.5.6-2.4l1.1-3.7h1.3l-2.4 7.4h-1.2l-1.1-3.5c-.3-.8-.5-1.6-.7-2.4-.2.9-.4 1.7-.7 2.5l-1.2 3.5h-1.2l-2.2-7.4h1.3v-.2zM358.55 119.7c.4.3 1.1.5 1.8.5 1 0 1.4-.5 1.4-1.1 0-.6-.4-1-1.4-1.4-1.3-.5-2-1.2-2-2.1 0-1.2 1-2.2 2.6-2.2.8 0 1.4.2 1.8.5l-.3 1c-.3-.2-.8-.4-1.5-.4-.8 0-1.2.5-1.2 1 0 .6.4.9 1.4 1.3 1.3.5 1.9 1.1 1.9 2.2 0 1.3-1 2.2-2.8 2.2-.8 0-1.6-.2-2.1-.5l.4-1zM364.55 119.7c.4.3 1.1.5 1.8.5 1 0 1.4-.5 1.4-1.1 0-.6-.4-1-1.4-1.4-1.3-.5-2-1.2-2-2.1 0-1.2 1-2.2 2.6-2.2.8 0 1.4.2 1.8.5l-.3 1c-.3-.2-.8-.4-1.5-.4-.8 0-1.2.5-1.2 1 0 .6.4.9 1.4 1.3 1.3.5 1.9 1.1 1.9 2.2 0 1.3-1 2.2-2.8 2.2-.8 0-1.6-.2-2.1-.5l.4-1zM377.05 119c0 .8 0 1.4.1 2h-1.2l-.1-1.2c-.4.6-1.1 1.4-2.5 1.4-1.2 0-2.6-.6-2.6-3.2v-4.3h1.3v4.1c0 1.4.4 2.4 1.7 2.4.9 0 1.5-.6 1.8-1.2.1-.2.1-.4.1-.7v-4.5h1.3v5.2h.1zM380.05 117.6c0 1.8 1.2 2.6 2.5 2.6 1 0 1.5-.2 2.1-.4l.2 1c-.5.2-1.3.5-2.5.5-2.3 0-3.6-1.5-3.6-3.7s1.3-4 3.5-4c2.4 0 3.1 2.1 3.1 3.5v.6h-5.3v-.1zm3.9-1c0-.9-.4-2.2-1.9-2.2-1.4 0-2 1.3-2.1 2.2h4zM386.75 119.7c.4.3 1.1.5 1.8.5 1 0 1.4-.5 1.4-1.1 0-.6-.4-1-1.4-1.4-1.3-.5-2-1.2-2-2.1 0-1.2 1-2.2 2.6-2.2.8 0 1.4.2 1.8.5l-.3 1c-.3-.2-.8-.4-1.5-.4-.8 0-1.2.5-1.2 1 0 .6.4.9 1.4 1.3 1.3.5 1.9 1.1 1.9 2.2 0 1.3-1 2.2-2.8 2.2-.8 0-1.6-.2-2.1-.5l.4-1z" fill="#565656" fill-rule="nonzero"/>
+  <path d="M342.35 73l-4.9 2.6-.7-2.9 6.1-3.2h3.2v27.8h-3.6V73h-.1zM374.45 83c0 9.4-3.5 14.6-9.6 14.6-5.4 0-9.1-5.1-9.2-14.3 0-9.3 4-14.4 9.6-14.4 5.9.1 9.2 5.3 9.2 14.1zm-15 .5c0 7.2 2.2 11.3 5.6 11.3 3.8 0 5.7-4.5 5.7-11.6 0-6.8-1.8-11.3-5.6-11.3-3.3 0-5.7 4-5.7 11.6z" fill="#226B94" fill-rule="nonzero"/>
+  <path d="M56.15 109.6s12.2-.3 17.2-2.3c5-2 18.7-4.3 21-4.7 2.3-.3 12.7-.7 14.7 1s9 5 10.3 6.3c1.3 1.3 4.3 4 9.3 3.3 5-.7 12.7-3 15.3-3.7 2.7-.7 4.7-.7 11.3 1.7 6.7 2.3 16 5.7 16 5.7l17.3-3s8 1 12.7 4c4.7 3 14.7 1.7 14.7 1.7l10 2.7 9 3 15.7-1v27H56.15v-41.7z" fill="#E9F1FC" fill-rule="nonzero"/>
+  <path d="M446.15 123.6s-13.1-1-13.6-1 3.2-.3-8.8.5-16.8 1.5-22.7 2.5c-5.8 1-11.7 2.8-19.3 2.2-7.7-.7-15.8-2.2-15.8-2.2l-12.2-1.5-14.2-1.5s-16.2-2-24.7-1-12 5.2-20 4.5c-8-.7-14.8-1.8-14.8-1.8l-15.5-.7-13.8.7v27h195.5v-27.7h-.1z" fill="#EDE7D0" fill-rule="nonzero"/>
+  <path fill="#565656" fill-rule="nonzero" d="M138.75 110.7h1.3V121h-1.3zM354.75 110.7h1.3V121h-1.3zM142.15 119.7c.4.3 1.1.5 1.8.5 1 0 1.4-.5 1.4-1.1 0-.6-.4-1-1.4-1.4-1.3-.5-2-1.2-2-2.1 0-1.2 1-2.2 2.6-2.2.8 0 1.4.2 1.8.5l-.3 1c-.3-.2-.8-.4-1.5-.4-.8 0-1.2.5-1.2 1 0 .6.4.9 1.4 1.3 1.3.5 1.9 1.1 1.9 2.2 0 1.3-1 2.2-2.8 2.2-.8 0-1.6-.2-2.1-.5l.4-1zM148.25 119.7c.4.3 1.1.5 1.8.5 1 0 1.4-.5 1.4-1.1 0-.6-.4-1-1.4-1.4-1.3-.5-2-1.2-2-2.1 0-1.2 1-2.2 2.6-2.2.8 0 1.4.2 1.8.5l-.3 1c-.3-.2-.8-.4-1.5-.4-.8 0-1.2.5-1.2 1 0 .6.4.9 1.4 1.3 1.3.5 1.9 1.1 1.9 2.2 0 1.3-1 2.2-2.8 2.2-.8 0-1.6-.2-2.1-.5l.4-1zM160.65 119c0 .8 0 1.4.1 2h-1.2l-.1-1.2c-.4.6-1.1 1.4-2.5 1.4-1.2 0-2.6-.6-2.6-3.2v-4.3h1.3v4.1c0 1.4.4 2.4 1.7 2.4.9 0 1.5-.6 1.8-1.2.1-.2.1-.4.1-.7v-4.5h1.3v5.2h.1zM163.65 117.6c0 1.8 1.2 2.6 2.5 2.6 1 0 1.5-.2 2.1-.4l.2 1c-.5.2-1.3.5-2.5.5-2.3 0-3.6-1.5-3.6-3.7s1.3-4 3.5-4c2.4 0 3.1 2.1 3.1 3.5v.6h-5.3v-.1zm4-1c0-.9-.4-2.2-1.9-2.2-1.4 0-2 1.3-2.1 2.2h4zM170.45 119.7c.4.3 1.1.5 1.8.5 1 0 1.4-.5 1.4-1.1 0-.6-.4-1-1.4-1.4-1.3-.5-2-1.2-2-2.1 0-1.2 1-2.2 2.6-2.2.8 0 1.4.2 1.8.5l-.3 1c-.3-.2-.8-.4-1.5-.4-.8 0-1.2.5-1.2 1 0 .6.4.9 1.4 1.3 1.3.5 1.9 1.1 1.9 2.2 0 1.3-1 2.2-2.8 2.2-.8 0-1.6-.2-2.1-.5l.4-1z"/>
+  <path d="M125.65 97.2v-2.3l2.9-2.9c7.1-6.7 10.3-10.3 10.3-14.5 0-2.8-1.4-5.4-5.5-5.4-2.5 0-4.6 1.3-5.9 2.3l-1.2-2.6c1.9-1.6 4.7-2.8 7.9-2.8 6 0 8.5 4.1 8.5 8.1 0 5.1-3.7 9.3-9.6 14.9l-2.2 2v.1h12.5v3.1h-17.7zM164.15 72.6h-10.6l-1.1 7.1c.6-.1 1.2-.2 2.3-.2 2.1 0 4.3.5 6 1.5 2.2 1.2 4 3.6 4 7.1 0 5.4-4.3 9.5-10.3 9.5-3 0-5.6-.9-6.9-1.7l.9-2.9c1.2.7 3.4 1.5 5.9 1.5 3.5 0 6.6-2.3 6.6-6 0-3.6-2.4-6.1-8-6.1-1.6 0-2.8.2-3.8.3l1.8-13.3h13.3v3.2h-.1zM169.05 90.2c0-3.5 2.1-6 5.5-7.4v-.1c-3.1-1.5-4.4-3.8-4.4-6.2 0-4.4 3.7-7.4 8.6-7.4 5.4 0 8.1 3.4 8.1 6.8 0 2.3-1.2 4.9-4.6 6.5v.1c3.5 1.4 5.6 3.8 5.6 7.2 0 4.8-4.1 8.1-9.4 8.1-5.9-.1-9.4-3.6-9.4-7.6zm15-.2c0-3.4-2.3-5-6.1-6.1-3.2.9-5 3.1-5 5.7-.1 2.8 2 5.3 5.6 5.3 3.3.1 5.5-2 5.5-4.9zm-10.3-13.9c0 2.8 2.1 4.3 5.3 5.1 2.4-.8 4.2-2.5 4.2-5 0-2.2-1.3-4.5-4.7-4.5-3.1 0-4.8 2-4.8 4.4z" fill="#226B94" fill-rule="nonzero"/>
+</svg>
diff --git a/server/sonar-web/src/main/webapp/images/understanding-quality-gates.svg b/server/sonar-web/src/main/webapp/images/understanding-quality-gates.svg
new file mode 100644 (file)
index 0000000..2b8322b
--- /dev/null
@@ -0,0 +1,17 @@
+<svg viewBox="0 0 500 240" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41">
+  <path d="M41 175.5L144 273h183s1-143 0-143-72-82-72-82L39 89l47 45-45 41.5z" fill="url(#a)" fill-rule="nonzero" transform="translate(102.336 -34.6)"/>
+  <path d="M332.74 69.6h-163.7c-18.6 0-33.8-15.2-33.8-33.8 0-18.6 15.2-33.8 33.8-33.8h163.7c18.6 0 33.8 15.2 33.8 33.8 0 18.6-15.2 33.8-33.8 33.8z" fill="#C54045" fill-rule="nonzero"/>
+  <path d="M332.74 151.6h-163.7c-18.6 0-33.8-15.2-33.8-33.8 0-18.6 15.2-33.8 33.8-33.8h163.7c18.6 0 33.8 15.2 33.8 33.8 0 18.6-15.2 33.8-33.8 33.8z" fill="#8FB963" fill-rule="nonzero"/>
+  <g fill="#fff" fill-rule="nonzero">
+    <path d="M213.74 107.9c1.6 1.2 2.4 2.9 2.4 5.3 0 2.5-.8 4.3-2.4 5.5-1.6 1.2-3.7 1.8-6.3 1.8h-2.6v7.7h-4.2V106h6.6c2.7.1 4.9.7 6.5 1.9zm-3.2 8.5c.8-.6 1.2-1.7 1.2-3.3 0-2.6-1.5-4-4.6-4h-2.3v8.2h2.3c1.4.1 2.6-.2 3.4-.9zM231.34 125.3c.2.3.5.6 1 .7l-.9 2.7c-1-.1-1.8-.3-2.4-.7-.6-.4-1.1-1-1.4-1.8-.6.9-1.3 1.5-2.2 1.9-.9.4-1.8.6-2.9.6-1.7 0-3-.5-4-1.4-1-1-1.5-2.2-1.5-3.8 0-1.8.7-3.2 2-4.2s3.2-1.5 5.7-1.5h2.1v-1c0-1.1-.3-1.9-.8-2.3-.5-.4-1.3-.7-2.4-.7-1.2 0-2.7.3-4.5.9l-1-2.8c2.1-.8 4.2-1.2 6.2-1.2 4.3 0 6.5 1.9 6.5 5.8v7.1c.1.9.3 1.3.5 1.7zm-4.4-1.6v-3.4h-1.7c-2.7 0-4 1-4 3 0 .8.2 1.4.6 1.9.4.5 1 .7 1.8.7 1.4-.1 2.5-.8 3.3-2.2zM247.34 112.8l-1.6 2.5c-1.4-1-2.8-1.4-4.2-1.4-.9 0-1.5.2-2 .5s-.7.7-.7 1.2c0 .4.1.7.3 1 .2.3.5.5 1 .7.5.2 1.2.5 2.2.8 1.8.5 3.2 1.1 4.1 2 .9.8 1.3 1.9 1.3 3.4 0 1.7-.7 3-2.1 4-1.4 1-3.1 1.4-5.1 1.4-1.4 0-2.7-.2-3.8-.6-1.1-.4-2.1-1-3-1.8l2.1-2.3c1.4 1.1 2.9 1.7 4.6 1.7.9 0 1.7-.2 2.2-.5.6-.4.8-.8.8-1.4 0-.5-.1-.9-.3-1.2-.2-.3-.6-.6-1.1-.8-.5-.2-1.3-.5-2.5-.8-1.7-.5-3-1.1-3.8-2-.8-.9-1.2-1.9-1.2-3.2 0-.9.3-1.8.8-2.5s1.3-1.3 2.3-1.8c1-.4 2.1-.6 3.4-.6 2.6-.3 4.6.4 6.3 1.7zM262.64 112.8l-1.6 2.5c-1.4-1-2.8-1.4-4.2-1.4-.9 0-1.5.2-2 .5s-.7.7-.7 1.2c0 .4.1.7.3 1 .2.3.5.5 1 .7.5.2 1.2.5 2.2.8 1.8.5 3.2 1.1 4.1 2 .9.8 1.3 1.9 1.3 3.4 0 1.7-.7 3-2.1 4-1.4 1-3.1 1.4-5.1 1.4-1.4 0-2.7-.2-3.8-.6-1.1-.4-2.1-1-3-1.8l2.1-2.3c1.4 1.1 2.9 1.7 4.6 1.7.9 0 1.7-.2 2.2-.5.6-.4.8-.8.8-1.4 0-.5-.1-.9-.3-1.2-.2-.3-.6-.6-1.1-.8-.5-.2-1.3-.5-2.5-.8-1.7-.5-3-1.1-3.8-2-.8-.9-1.2-1.9-1.2-3.2 0-.9.3-1.8.8-2.5s1.3-1.3 2.3-1.8c1-.4 2.1-.6 3.4-.6 2.6-.3 4.6.4 6.3 1.7zM280.34 121.1h-10.7c.1 1.6.6 2.8 1.3 3.5.7.7 1.7 1.1 2.9 1.1.7 0 1.5-.1 2.1-.4.7-.2 1.4-.6 2.1-1.1l1.7 2.3c-1.9 1.5-4 2.3-6.3 2.3-2.6 0-4.6-.8-6-2.4-1.4-1.6-2.1-3.7-2.1-6.5 0-1.7.3-3.3.9-4.7.6-1.4 1.5-2.5 2.6-3.2 1.1-.8 2.5-1.2 4-1.2 2.4 0 4.2.8 5.5 2.3 1.3 1.5 2 3.6 2 6.3.1.2.1.8 0 1.7zm-3.9-2.9c0-3-1.1-4.5-3.3-4.5-1 0-1.8.4-2.4 1.1-.6.7-.9 1.9-1 3.5h6.7v-.1zM298.54 128.3h-3.6l-.3-2.2c-.5.8-1.2 1.5-2 1.9-.8.4-1.8.7-2.8.7-2.1 0-3.7-.8-4.8-2.4-1.1-1.6-1.7-3.8-1.7-6.6 0-1.8.3-3.3.8-4.7.5-1.4 1.4-2.4 2.4-3.2 1-.8 2.3-1.1 3.7-1.1 1.6 0 3 .6 4.2 1.8v-8.6l4.1.4v24zm-5.7-3.2c.6-.4 1.1-.9 1.6-1.7v-7.8c-.5-.6-1-1-1.5-1.3-.5-.3-1.1-.4-1.7-.4-1.1 0-2 .5-2.6 1.5-.6 1-.9 2.4-.9 4.4 0 2.1.3 3.6.8 4.5.5.9 1.4 1.4 2.4 1.4.7 0 1.4-.2 1.9-.6z"/>
+  </g>
+  <g fill="#fff" fill-rule="nonzero">
+    <path d="M208.14 26.2v6.6h6.8v3.1h-6.8v9.2h-4.2v-22h12.6l-.5 3.1h-7.9zM231.24 42.3c.2.3.5.6 1 .7l-.9 2.7c-1-.1-1.8-.3-2.4-.7-.6-.4-1.1-1-1.4-1.8-.6.9-1.3 1.5-2.2 1.9-.9.4-1.8.6-2.9.6-1.7 0-3-.5-4-1.4-1-1-1.5-2.2-1.5-3.8 0-1.8.7-3.2 2-4.2s3.2-1.5 5.7-1.5h2.1v-1c0-1.1-.3-1.9-.8-2.3-.5-.4-1.3-.7-2.4-.7-1.2 0-2.7.3-4.5.9l-1-2.8c2.1-.8 4.2-1.2 6.2-1.2 4.3 0 6.5 1.9 6.5 5.8v7.1c.1.9.2 1.3.5 1.7zm-4.4-1.6v-3.4h-1.7c-2.7 0-4 1-4 3 0 .8.2 1.4.6 1.9.4.5 1 .7 1.8.7 1.4-.1 2.5-.8 3.3-2.2zM239.74 20.4c.5.5.7 1.1.7 1.8s-.2 1.3-.7 1.8c-.5.5-1.1.7-1.9.7-.8 0-1.4-.2-1.8-.7-.5-.5-.7-1.1-.7-1.8s.2-1.3.7-1.8c.5-.5 1.1-.7 1.8-.7.8 0 1.4.2 1.9.7zm-3.9 24.9v-17h4.1v17h-4.1zM249.14 42.2c.1.2.4.3.7.3.3 0 .6-.1 1-.2l.9 2.9c-.9.4-1.9.6-2.9.6-1.3 0-2.3-.4-3-1.1-.7-.7-1-1.8-1-3.2v-20l4.1-.4v20.1c-.1.4 0 .8.2 1zM267.94 38.1h-10.7c.1 1.6.6 2.8 1.3 3.5.7.7 1.7 1.1 2.9 1.1.7 0 1.5-.1 2.1-.4.7-.2 1.4-.6 2.1-1.1l1.7 2.3c-1.9 1.5-4 2.3-6.3 2.3-2.6 0-4.6-.8-6-2.4-1.4-1.6-2.1-3.7-2.1-6.5 0-1.7.3-3.3.9-4.7.6-1.4 1.5-2.5 2.6-3.2 1.1-.8 2.5-1.2 4-1.2 2.4 0 4.2.8 5.5 2.3 1.3 1.5 2 3.6 2 6.3.1.2 0 .8 0 1.7zm-4-2.9c0-3-1.1-4.5-3.3-4.5-1 0-1.8.4-2.4 1.1-.6.7-.9 1.9-1 3.5h6.7v-.1zM286.14 45.3h-3.6l-.3-2.2c-.5.8-1.2 1.5-2 1.9-.8.4-1.8.7-2.8.7-2.1 0-3.7-.8-4.8-2.4-1.1-1.6-1.7-3.8-1.7-6.6 0-1.8.3-3.3.8-4.7.5-1.4 1.4-2.4 2.4-3.2 1-.8 2.3-1.1 3.7-1.1 1.6 0 3 .6 4.2 1.8v-8.6l4.1.4v24zm-5.7-3.2c.6-.4 1.1-.9 1.6-1.7v-7.8c-.5-.6-1-1-1.5-1.3-.5-.3-1.1-.4-1.7-.4-1.1 0-2 .5-2.6 1.5-.6 1-.9 2.4-.9 4.4 0 2.1.3 3.6.8 4.5.5.9 1.4 1.4 2.4 1.4.7 0 1.3-.2 1.9-.6z"/>
+  </g>
+  <defs>
+    <linearGradient id="a" x2="1" gradientUnits="userSpaceOnUse" gradientTransform="scale(175.3) rotate(-128 .864 .24)">
+      <stop offset="0%" stop-color="#fff"/>
+      <stop offset="100%" stop-color="#ABABAB"/>
+    </linearGradient>
+  </defs>
+</svg>