<div>
<h2 className="spacer-top spacer-bottom">{translate('help.section.links')}</h2>
- <a href="http://www.sonarqube.org">{translate('footer.community')}</a>{' - '}
- <a href="https://redirect.sonarsource.com/doc/home.html">
- {translate('footer.documentation')}
- </a>
- {' - '}
- <a href="https://redirect.sonarsource.com/doc/community.html">
- {translate('footer.support')}
- </a>
- {' - '}
- <a href="https://redirect.sonarsource.com/doc/plugin-library.html">
- {translate('footer.plugins')}
- </a>
- {' - '}
- <Link to="/web_api" onClick={onClose}>{translate('footer.web_api')}</Link>
- {' - '}
- <Link to="/about" onClick={onClose}>{translate('footer.about')}</Link>
+ <p className="spacer-bottom">
+ <a href="http://www.sonarqube.org">{translate('footer.community')}</a>
+ </p>
+
+ <p className="spacer-bottom">
+ <a href="https://redirect.sonarsource.com/doc/home.html">
+ {translate('footer.documentation')}
+ </a>
+ </p>
+
+ <p className="spacer-bottom">
+ <a href="https://redirect.sonarsource.com/doc/community.html">
+ {translate('footer.support')}
+ </a>
+ </p>
+
+ <p className="spacer-bottom">
+ <a href="https://redirect.sonarsource.com/doc/plugin-library.html">
+ {translate('footer.plugins')}
+ </a>
+ </p>
+
+ <p className="spacer-bottom">
+ <Link to="/web_api" onClick={onClose}>{translate('footer.web_api')}</Link>
+ </p>
+
+ <p>
+ <Link to="/about" onClick={onClose}>{translate('footer.about')}</Link>
+ </p>
</div>
);
}
<div>
<h2 className="spacer-top spacer-bottom">{translate('help.section.links')}</h2>
- <a href="https://about.sonarcloud.io/news/">{translate('footer.news')}</a>
- {' - '}
- <a href="https://about.sonarcloud.io/terms.pdf">{translate('footer.terms')}</a>
- {' - '}
- <a href="https://twitter.com/sonarqube">{translate('footer.twitter')}</a>
- {' - '}
- <a href="https://about.sonarcloud.io/get-started/">{translate('footer.get_started')}</a>
- {' - '}
- <a href="https://about.sonarcloud.io/contact/">{translate('footer.help')}</a>
- {' - '}
- <Link to="/about" onClick={onClose}>{translate('footer.about')}</Link>
+ <p className="spacer-bottom">
+ <a href="https://about.sonarcloud.io/news/">{translate('footer.news')}</a>
+ </p>
+
+ <p className="spacer-bottom">
+ <a href="https://about.sonarcloud.io/terms.pdf">{translate('footer.terms')}</a>
+ </p>
+
+ <p className="spacer-bottom">
+ <a href="https://twitter.com/sonarqube">{translate('footer.twitter')}</a>
+ </p>
+
+ <p className="spacer-bottom">
+ <a href="https://about.sonarcloud.io/get-started/">{translate('footer.get_started')}</a>
+ </p>
+
+ <p className="spacer-bottom">
+ <a href="https://about.sonarcloud.io/contact/">{translate('footer.help')}</a>
+ </p>
+
+ <p>
+ <Link to="/about" onClick={onClose}>{translate('footer.about')}</Link>
+ </p>
</div>
);
}
openOnboardingTutorial = () => this.setState({ helpOpen: false, onboardingTutorialOpen: true });
- finishOnboardingTutorial = () => this.setState({ onboardingTutorialOpen: false });
-
- skipOnboardingTutorial = () => {
+ closeOnboardingTutorial = () => {
this.setState({ onboardingTutorialOpen: false, onboardingTutorialTooltip: true });
this.interval = setInterval(() => {
this.setState({ onboardingTutorialTooltip: false });
/>}
{this.state.onboardingTutorialOpen &&
- <OnboardingModal
- onFinish={this.finishOnboardingTutorial}
- onSkip={this.skipOnboardingTutorial}
- />}
+ <OnboardingModal onFinish={this.closeOnboardingTutorial} />}
</nav>
);
}
}
if (!component.analysisDate) {
- return <EmptyOverview {...this.props} />;
+ return <EmptyOverview component={component} />;
}
return <OverviewApp {...this.props} leakPeriodIndex="1" />;
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+// @flow
import React from 'react';
+import { Link } from 'react-router';
import { translate } from '../../../helpers/l10n';
-const EmptyOverview = ({ component }) => {
+type Props = {
+ component: { key: string }
+};
+
+export default function EmptyOverview({ component }: Props) {
+ const rawMessage = translate('provisioning.no_analysis.delete');
+ const head = rawMessage.substr(0, rawMessage.indexOf('{0}'));
+ const tail = rawMessage.substr(rawMessage.indexOf('{0}') + 3);
+
return (
<div className="page page-limited">
<div className="alert alert-warning">
{translate('provisioning.no_analysis')}
</div>
+
+ <div className="big-spacer-top">
+ {head}
+ <Link
+ className="text-danger"
+ to={{ pathname: '/project/deletion', query: { id: component.key } }}>
+ {translate('provisioning.no_analysis.delete_it')}
+ </Link>
+ {tail}
+ </div>
+
<div className="big-spacer-top">
<h4>{translate('key')}</h4>
<code>{component.key}</code>
</div>
</div>
);
-};
-
-export default EmptyOverview;
+}
<LanguageStep
onDone={this.handleLanguageSelect}
onReset={this.handleLanguageReset}
+ organization={this.props.organization}
sonarCloud={this.props.sonarCloud}
/>
</div>
type Props = {|
currentUser: { login: string, isLoggedIn: boolean },
onFinish: () => void,
- onSkip: () => void,
organizationsEnabled: boolean,
sonarCloud: boolean
|};
this.mounted = false;
}
- finishOnboarding = (skipped: boolean = false) => {
+ finishOnboarding = () => {
this.setState({ skipping: true });
skipOnboarding().then(
() => {
if (this.mounted) {
- if (skipped) {
- this.props.onSkip();
- } else {
- this.props.onFinish();
- }
+ this.props.onFinish();
if (this.state.projectKey) {
this.context.router.push(getProjectUrl(this.state.projectKey));
handleSkipClick = (event: Event) => {
event.preventDefault();
- this.finishOnboarding(true);
+ this.finishOnboarding();
};
handleFinish = (projectKey?: string) => this.setState({ finished: true, projectKey });
import { translate } from '../../../helpers/l10n';
type Props = {|
- onFinish: () => void,
- onSkip: () => void
+ onFinish: () => void
|};
type State = {
contentLabel={translate('tutorials.onboarding')}
className="modal modal-large"
overlayClassName="modal-overlay">
- {OnboardingContainer != null &&
- <OnboardingContainer onFinish={this.props.onFinish} onSkip={this.props.onSkip} />}
+ {OnboardingContainer != null && <OnboardingContainer onFinish={this.props.onFinish} />}
</Modal>
);
}
<Onboarding
currentUser={currentUser}
onFinish={jest.fn()}
- onSkip={jest.fn()}
organizationsEnabled={false}
sonarCloud={false}
/>
<Onboarding
currentUser={currentUser}
onFinish={jest.fn()}
- onSkip={jest.fn()}
organizationsEnabled={true}
sonarCloud={true}
/>
expect(wrapper).toMatchSnapshot();
});
-it('skips', () => {
- const onSkip = jest.fn();
+it('finishes', () => {
+ const onFinish = jest.fn();
const wrapper = mount(
<Onboarding
currentUser={currentUser}
- onFinish={jest.fn()}
- onSkip={onSkip}
+ onFinish={onFinish}
organizationsEnabled={false}
sonarCloud={false}
/>
);
click(wrapper.find('.js-skip'));
return doAsync(() => {
- expect(onSkip).toBeCalled();
+ expect(onFinish).toBeCalled();
});
});
|};
export default function JavaGradle(props: Props) {
- const config = 'plugins {\n id "org.sonarqube" version "2.2"\n}';
+ const config = 'plugins {\n id "org.sonarqube" version "2.5"\n}';
const command = [
'./gradlew sonarqube',
className="big-spacer-top markdown"
dangerouslySetInnerHTML={{ __html: translate('onboarding.analysis.java.gradle.docs') }}
/>
+ <p
+ className="big-spacer-top markdown"
+ dangerouslySetInnerHTML={{
+ __html: translate('onboarding.analysis.browse_url_after_analysis')
+ }}
+ />
</div>
);
}
className="big-spacer-top markdown"
dangerouslySetInnerHTML={{ __html: translate('onboarding.analysis.java.maven.docs') }}
/>
+ <p
+ className="big-spacer-top markdown"
+ dangerouslySetInnerHTML={{
+ __html: translate('onboarding.analysis.browse_url_after_analysis')
+ }}
+ />
</div>
);
}
`/d:"sonar.login=${props.token}"`
];
- const command2 = 'build-wrapper-win-x86-64.exe --out-dir bw-output MsBuild.exe /t:Rebuild';
+ const command2 = ['build-wrapper-win-x86-64.exe', '--out-dir bw-output MsBuild.exe /t:Rebuild'];
const command3 = ['SonarQube.Scanner.MSBuild.exe end', `/d:"sonar.login=${props.token}"`];
/>
<Command
command="plugins {
- id \\"org.sonarqube\\" version \\"2.2\\"
+ id \\"org.sonarqube\\" version \\"2.5\\"
}"
/>
<p
}
}
/>
+ <p
+ className="big-spacer-top markdown"
+ dangerouslySetInnerHTML={
+ Object {
+ "__html": "onboarding.analysis.browse_url_after_analysis",
+ }
+ }
+ />
</div>
`;
/>
<Command
command="plugins {
- id \\"org.sonarqube\\" version \\"2.2\\"
+ id \\"org.sonarqube\\" version \\"2.5\\"
}"
/>
<p
}
}
/>
+ <p
+ className="big-spacer-top markdown"
+ dangerouslySetInnerHTML={
+ Object {
+ "__html": "onboarding.analysis.browse_url_after_analysis",
+ }
+ }
+ />
</div>
`;
}
}
/>
+ <p
+ className="big-spacer-top markdown"
+ dangerouslySetInnerHTML={
+ Object {
+ "__html": "onboarding.analysis.browse_url_after_analysis",
+ }
+ }
+ />
</div>
`;
}
}
/>
+ <p
+ className="big-spacer-top markdown"
+ dangerouslySetInnerHTML={
+ Object {
+ "__html": "onboarding.analysis.browse_url_after_analysis",
+ }
+ }
+ />
</div>
`;
}
/>
<Command
- command="build-wrapper-win-x86-64.exe --out-dir bw-output MsBuild.exe /t:Rebuild"
+ command={
+ Array [
+ "build-wrapper-win-x86-64.exe",
+ "--out-dir bw-output MsBuild.exe /t:Rebuild",
+ ]
+ }
/>
<Command
command={
}
/>
<Command
- command="build-wrapper-win-x86-64.exe --out-dir bw-output MsBuild.exe /t:Rebuild"
+ command={
+ Array [
+ "build-wrapper-win-x86-64.exe",
+ "--out-dir bw-output MsBuild.exe /t:Rebuild",
+ ]
+ }
/>
<Command
command={
PropertyDefinition.builder(ONBOARDING_TUTORIAL_SHOW_TO_NEW_USERS)
.name("Show an onboarding tutorial to new users")
.type(BOOLEAN)
- .description("Show an onboarding tutorial to news, that explains how to analyze a first project, after logging in for the fist time.")
+ .description("Show an onboarding tutorial to new users, that explains how to analyze a first project, after logging in for the fist time.")
.category(CoreProperties.CATEGORY_GENERAL)
.defaultValue(String.valueOf(false))
.build(),
provisioning.missing.key=Key is missing
provisioning.missing.name=Name is missing
provisioning.no_analysis=No analysis has been performed since creation. The only available section is the configuration.
+provisioning.no_analysis.delete=Either you should retry to analyze the project, or simply {0}.
+provisioning.no_analysis.delete_it=delete it
#------------------------------------------------------------------------------
onboarding.header.description=Let's analyze a new project.
onboarding.token.header=Generate a token
-onboarding.token.text=We'll use it as a replacement of the user login. This will increase the security of your installation by not letting your analysis user's password going through your network.
+onboarding.token.text=The token is used to identify you when an analysis is performed. If it has been compromised, you can revoke it at any point of time in your user account.
onboarding.token.generate=Generate
onboarding.token.placeholder=Enter a name for your token
onboarding.project_key_requirement=Allowed characters are alphanumeric, '-', '_', '.' and ':', with at least one non-digit. 400 characters max.
onboarding.analysis.header=Run analysis on your project
+onboarding.analysis.browse_url_after_analysis=Once the analysis is completed, you will be able to browse your project at the URL displayed at the end of the logs.
onboarding.language=What is your project's main language?
onboarding.language.java=Java