mirror of
https://github.com/sourcegraph/sourcegraph.git
synced 2026-02-06 17:31:43 +00:00
Wildcard V2: <Link /> Manual migration (#30190)
Co-authored-by: gitstart-sourcegraph <gitstart@users.noreply.github.com>
This commit is contained in:
parent
21cdb17879
commit
0409318994
@ -49,6 +49,11 @@ const config = {
|
||||
importNames: ['animationFrameScheduler'],
|
||||
message: 'Code using animationFrameScheduler breaks in Firefox when using Sentry.',
|
||||
},
|
||||
{
|
||||
name: 'react-router-dom',
|
||||
importNames: ['Link'],
|
||||
message: "Use the Link component from the @sourcegraph/wildcard package instead of react-router-dom's Link",
|
||||
},
|
||||
],
|
||||
patterns: [
|
||||
{
|
||||
|
||||
18
.github/ISSUE_TEMPLATE/flaky_test.md
vendored
Normal file
18
.github/ISSUE_TEMPLATE/flaky_test.md
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
name: Flaky Test
|
||||
about: Capture information about a flaky test that has been disabled.
|
||||
title: 'Flake: $TEST_NAME disabled'
|
||||
labels:
|
||||
- 'testing'
|
||||
- 'flake'
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
- **Name of test:** <!-- Name of the test that was disabled -->
|
||||
- **Example failure:** <!-- Buildkite link to an example faiure -->
|
||||
- **PR**: <!-- Link to PR that disabled the test. E.g., #1234 >
|
||||
|
||||
#### Additional details
|
||||
|
||||
<!-- Notes and/or screenshot describing the problem -->
|
||||
36
.github/ISSUE_TEMPLATE/flaky_test.yaml
vendored
36
.github/ISSUE_TEMPLATE/flaky_test.yaml
vendored
@ -1,36 +0,0 @@
|
||||
name: Flaky test
|
||||
description: Capture information about a flaky test that has been disabled.
|
||||
title: 'ci/flake: $TEST_NAME disabled'
|
||||
labels:
|
||||
- 'dx'
|
||||
- 'ci/flake'
|
||||
- 'testing'
|
||||
body:
|
||||
- type: input
|
||||
id: test
|
||||
attributes:
|
||||
label: Test
|
||||
description: Name of test or link to test that was disabled
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: example
|
||||
attributes:
|
||||
label: Example failure
|
||||
description: Buildkite link to an example faiure
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: pr
|
||||
attributes:
|
||||
label: Disabling PR
|
||||
description: Link to PR that disables the test
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: details
|
||||
attributes:
|
||||
label: Additional details
|
||||
description: Notes and/or screenshot describing the problem, links to log queries indicating repeat occurrences, etc.
|
||||
validations:
|
||||
required: false
|
||||
9
.github/workflows/codenotify.yml
vendored
9
.github/workflows/codenotify.yml
vendored
@ -11,13 +11,6 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
- uses: sourcegraph/codenotify@v0.5.1
|
||||
with:
|
||||
filename: 'CODENOTIFY'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CODENOTIFY_GITHUB_TOKEN }}
|
||||
- uses: sourcegraph/codenotify@v0.5.1
|
||||
with:
|
||||
filename: 'OWNERS'
|
||||
- uses: sourcegraph/codenotify@v0.4
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CODENOTIFY_GITHUB_TOKEN }}
|
||||
|
||||
@ -5,21 +5,5 @@ module.exports = {
|
||||
...baseConfig.parserOptions,
|
||||
project: [__dirname + '/tsconfig.json'],
|
||||
},
|
||||
rules: {
|
||||
'no-restricted-imports': [
|
||||
'error',
|
||||
{
|
||||
paths: [
|
||||
...baseConfig.rules['no-restricted-imports'][1].paths,
|
||||
{
|
||||
name: 'react-router-dom',
|
||||
importNames: ['Link'],
|
||||
message:
|
||||
"Use the shared/src/shared/components/Link component instead of react-router-dom's Link. Reason: Shared branded code runs on platforms that don't use react-router (such as in the browser extension).",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
overrides: baseConfig.overrides,
|
||||
}
|
||||
|
||||
@ -11,7 +11,7 @@ import 'storybook-addon-designs'
|
||||
|
||||
import { registerHighlightContributions } from '@sourcegraph/shared/src/highlight/contributions'
|
||||
import { highlightCodeSafe } from '@sourcegraph/shared/src/util/markdown'
|
||||
import { TextArea, Button } from '@sourcegraph/wildcard'
|
||||
import { TextArea, Button, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { BrandedStory } from '../../components/BrandedStory'
|
||||
import { CodeSnippet } from '../../components/CodeSnippet'
|
||||
@ -149,26 +149,30 @@ export const Layout: Story = () => (
|
||||
<h2>Spacing</h2>
|
||||
<p>
|
||||
Use margin <code>m-*</code> and padding <code>p-*</code> utilities to align with the{' '}
|
||||
<a
|
||||
href="https://builttoadapt.io/intro-to-the-8-point-grid-system-d2573cde8632"
|
||||
<Link
|
||||
to="https://builttoadapt.io/intro-to-the-8-point-grid-system-d2573cde8632"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
8pt grid
|
||||
</a>
|
||||
</Link>
|
||||
. When hand-writing CSS, use <code>rem</code> units in multiples of <code>0.25</code>.
|
||||
</p>
|
||||
|
||||
<h2>One-dimensional layout</h2>
|
||||
<p>
|
||||
Use{' '}
|
||||
<a href="https://css-tricks.com/snippets/css/a-guide-to-flexbox/" target="_blank" rel="noopener noreferrer">
|
||||
<Link
|
||||
to="https://css-tricks.com/snippets/css/a-guide-to-flexbox/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Flexbox
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
for one-dimensional layouts (single rows or columns, with optional wrapping). You can use{' '}
|
||||
<a href="https://getbootstrap.com/docs/4.5/utilities/flex/" target="_blank" rel="noopener noreferrer">
|
||||
<Link to="https://getbootstrap.com/docs/4.5/utilities/flex/" target="_blank" rel="noopener noreferrer">
|
||||
utility classes
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
for simple flexbox layouts.
|
||||
</p>
|
||||
|
||||
@ -207,7 +211,7 @@ export const Layout: Story = () => (
|
||||
|
||||
<h2>Two-dimensional layout</h2>
|
||||
<p>
|
||||
Use <a href="https://learncssgrid.com/">CSS Grid</a> for complex two-dimensional layouts.
|
||||
Use <Link to="https://learncssgrid.com/">CSS Grid</Link> for complex two-dimensional layouts.
|
||||
</p>
|
||||
<div
|
||||
className="p-2 border overflow-hidden"
|
||||
@ -240,7 +244,7 @@ export const ButtonGroups: Story = () => {
|
||||
<h1>Button groups</h1>
|
||||
<p>
|
||||
Group a series of buttons together on a single line with the button group.{' '}
|
||||
<a href="https://getbootstrap.com/docs/4.5/components/buttons/">Bootstrap documentation</a>
|
||||
<Link to="https://getbootstrap.com/docs/4.5/components/buttons/">Bootstrap documentation</Link>
|
||||
</p>
|
||||
|
||||
<h2>Example</h2>
|
||||
@ -369,7 +373,7 @@ export const InputGroups: Story = () => (
|
||||
<p>
|
||||
Easily extend form controls by adding text, buttons, or button groups on either side of textual inputs,
|
||||
custom selects, and custom file inputs.{' '}
|
||||
<a href="https://getbootstrap.com/docs/4.5/components/input-group/">Bootstrap documentation</a>
|
||||
<Link to="https://getbootstrap.com/docs/4.5/components/input-group/">Bootstrap documentation</Link>
|
||||
</p>
|
||||
|
||||
<h2>Example</h2>
|
||||
@ -393,9 +397,9 @@ export const Forms: Story = () => (
|
||||
<h1>Forms</h1>
|
||||
<p>
|
||||
Forms are validated using native HTML validation. Submit the below form with invalid input to try it out.{' '}
|
||||
<a href="https://getbootstrap.com/docs/4.5/components/forms/" target="_blank" rel="noopener noreferrer">
|
||||
<Link to="https://getbootstrap.com/docs/4.5/components/forms/" target="_blank" rel="noopener noreferrer">
|
||||
Bootstrap documentation
|
||||
</a>
|
||||
</Link>
|
||||
</p>
|
||||
<Form onSubmit={preventDefault}>
|
||||
<div className="form-group">
|
||||
@ -570,13 +574,13 @@ export const Meter: Story = () => {
|
||||
<h1>Meter</h1>
|
||||
<p>
|
||||
The HTML{' '}
|
||||
<a
|
||||
href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meter"
|
||||
<Link
|
||||
to="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meter"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<code>{'<meter>'}</code>
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
element represents either a scalar value within a known range or a fractional value.
|
||||
</p>
|
||||
<h2>Examples</h2>
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
import React from 'react'
|
||||
import 'storybook-addon-designs'
|
||||
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { SEMANTIC_COLORS } from './constants'
|
||||
import { TextVariants } from './TextVariants'
|
||||
|
||||
@ -45,7 +47,7 @@ export const TextStory: React.FunctionComponent = () => (
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Text can contain links, which <a href="/">trigger a navigation to a different page</a>.
|
||||
Text can contain links, which <Link to="/">trigger a navigation to a different page</Link>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@ -54,12 +56,12 @@ export const TextStory: React.FunctionComponent = () => (
|
||||
|
||||
<p>
|
||||
Text can be <i>idiomatic</i> with <code>{'<i>'}</code>. See{' '}
|
||||
<a
|
||||
<Link
|
||||
target="__blank"
|
||||
href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/em#%3Ci%3E_vs._%3Cem%3E"
|
||||
to="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/em#%3Ci%3E_vs._%3Cem%3E"
|
||||
>
|
||||
{'<i>'} vs. {'<em>'}
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
for more info.
|
||||
</p>
|
||||
|
||||
|
||||
@ -11,6 +11,7 @@ import React, { VideoHTMLAttributes } from 'react'
|
||||
import { SourcegraphLogo } from '@sourcegraph/branded/src/components/SourcegraphLogo'
|
||||
import { PhabricatorIcon } from '@sourcegraph/shared/src/components/icons'
|
||||
import { ThemeProps } from '@sourcegraph/shared/src/theme'
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { getPlatformName } from '../../shared/util/context'
|
||||
|
||||
@ -53,12 +54,12 @@ export const AfterInstallPageContent: React.FunctionComponent<ThemeProps> = prop
|
||||
return (
|
||||
<div className="after-install-page-content">
|
||||
<div className="d-flex w-100 p-3 justify-content-between align-items-center">
|
||||
<a href="https://sourcegraph.com/search" target="_blank" rel="noopener">
|
||||
<Link to="https://sourcegraph.com/search" target="_blank" rel="noopener">
|
||||
<SourcegraphLogo className={styles.sourcegraphLogo} />
|
||||
</a>
|
||||
<a href="https://docs.sourcegraph.com/integration/browser_extension" target="_blank" rel="noopener">
|
||||
</Link>
|
||||
<Link to="https://docs.sourcegraph.com/integration/browser_extension" target="_blank" rel="noopener">
|
||||
Browser extension docs <ExternalLinkIcon className="icon-inline" />
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<div className="container mt-3">
|
||||
@ -172,20 +173,20 @@ export const AfterInstallPageContent: React.FunctionComponent<ThemeProps> = prop
|
||||
<ol className="m-0 d-flex flex-column justify-content-around">
|
||||
<li>
|
||||
<strong>Install Sourcegraph</strong> (
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/admin/install"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/admin/install"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>
|
||||
visit our docs for instructions
|
||||
</a>
|
||||
</Link>
|
||||
).Skip this step if you already have a private Sourcegraph instance.
|
||||
</li>
|
||||
<li>
|
||||
Click the Sourcegraph extension icon in the browser toolbar to{' '}
|
||||
<a href="./options.html" rel="noopener" target="_blank">
|
||||
<Link to="./options.html" rel="noopener" target="_blank">
|
||||
open the settings page
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</li>
|
||||
<li>
|
||||
@ -212,13 +213,13 @@ export const AfterInstallPageContent: React.FunctionComponent<ThemeProps> = prop
|
||||
</div>
|
||||
<p className="m-0 ml-3">
|
||||
Read the{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/integration/browser_extension"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/integration/browser_extension"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
>
|
||||
Sourcegraph docs
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
to learn more about how we respect your privacy, troubleshooting and extension features.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -12,7 +12,7 @@ import { LoaderInput } from '@sourcegraph/branded/src/components/LoaderInput'
|
||||
import { SourcegraphLogo } from '@sourcegraph/branded/src/components/SourcegraphLogo'
|
||||
import { Toggle } from '@sourcegraph/branded/src/components/Toggle'
|
||||
import { useInputValidation, deriveInputClassName } from '@sourcegraph/shared/src/util/useInputValidation'
|
||||
import { Button } from '@sourcegraph/wildcard'
|
||||
import { Button, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { OptionsPageContainer } from './components/OptionsPageContainer'
|
||||
import styles from './OptionsPage.module.scss'
|
||||
@ -95,9 +95,9 @@ export const OptionsPage: React.FunctionComponent<OptionsPageProps> = ({
|
||||
</section>
|
||||
<section className={styles.section}>
|
||||
Get code intelligence tooltips while browsing and reviewing code on your code host.{' '}
|
||||
<a href="https://docs.sourcegraph.com/integration/browser_extension#features" {...NEW_TAB_LINK_PROPS}>
|
||||
<Link to="https://docs.sourcegraph.com/integration/browser_extension#features" {...NEW_TAB_LINK_PROPS}>
|
||||
Learn more
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
about the extension and compatible code hosts.
|
||||
</section>
|
||||
<section className={classNames('border-0', styles.section)}>
|
||||
@ -120,13 +120,13 @@ export const OptionsPage: React.FunctionComponent<OptionsPageProps> = ({
|
||||
|
||||
{showPrivateRepositoryAlert && <PrivateRepositoryAlert />}
|
||||
<section className={styles.section}>
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/integration/browser_extension#privacy"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/integration/browser_extension#privacy"
|
||||
{...NEW_TAB_LINK_PROPS}
|
||||
className="d-block mb-1"
|
||||
>
|
||||
<small>How do we keep your code private?</small> <OpenInNewIcon size="0.75rem" className="ml-2" />
|
||||
</a>
|
||||
</Link>
|
||||
<p className="mb-0">
|
||||
<Button
|
||||
className="p-0 shadow-none font-weight-normal"
|
||||
@ -143,16 +143,16 @@ export const OptionsPage: React.FunctionComponent<OptionsPageProps> = ({
|
||||
</section>
|
||||
<section className="d-flex">
|
||||
<div className={styles.splitSectionPart}>
|
||||
<a href="https://sourcegraph.com/search" {...NEW_TAB_LINK_PROPS}>
|
||||
<Link to="https://sourcegraph.com/search" {...NEW_TAB_LINK_PROPS}>
|
||||
<EarthIcon className="icon-inline mr-2" />
|
||||
Sourcegraph Cloud
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
<div className={styles.splitSectionPart}>
|
||||
<a href="https://docs.sourcegraph.com" {...NEW_TAB_LINK_PROPS}>
|
||||
<Link to="https://docs.sourcegraph.com" {...NEW_TAB_LINK_PROPS}>
|
||||
<BookOpenPageVariantIcon className="icon-inline mr-2" />
|
||||
Documentation
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
</section>
|
||||
</OptionsPageContainer>
|
||||
@ -195,9 +195,9 @@ const PrivateRepositoryAlert: React.FunctionComponent = () => (
|
||||
</p>
|
||||
<ol>
|
||||
<li className="mb-2">
|
||||
<a href="https://docs.sourcegraph.com/" rel="noopener" target="_blank">
|
||||
<Link to="https://docs.sourcegraph.com/" rel="noopener" target="_blank">
|
||||
Install and configure Sourcegraph
|
||||
</a>
|
||||
</Link>
|
||||
. Skip this step if you already have a private Sourcegraph instance.
|
||||
</li>
|
||||
<li className="mb-2">Click the Sourcegraph icon in the browser toolbar to bring up this popup again.</li>
|
||||
@ -323,9 +323,9 @@ export const SourcegraphURLForm: React.FunctionComponent<SourcegraphURLFormProps
|
||||
) : urlState.reason === URL_AUTH_ERROR ? (
|
||||
<>
|
||||
Authentication to Sourcegraph failed.{' '}
|
||||
<a href={urlState.value} {...NEW_TAB_LINK_PROPS}>
|
||||
<Link to={urlState.value} {...NEW_TAB_LINK_PROPS}>
|
||||
Sign in to your instance
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
to continue
|
||||
</>
|
||||
) : urlInputReference.current?.validity.typeMismatch ? (
|
||||
|
||||
@ -4,6 +4,7 @@ import * as React from 'react'
|
||||
import { Controller as ClientController } from '@sourcegraph/shared/src/extensions/controller'
|
||||
import { ExtensionDevelopmentToolsPopover } from '@sourcegraph/shared/src/extensions/devtools'
|
||||
import { PlatformContextProps } from '@sourcegraph/shared/src/platform/context'
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { ShortcutProvider } from './ShortcutProvider'
|
||||
|
||||
@ -16,7 +17,7 @@ interface Props extends PlatformContextProps<'sideloadedExtensionURL' | 'setting
|
||||
const makeExtensionLink = (sourcegraphURL: string): React.FunctionComponent<{ id: string }> => props => {
|
||||
const extensionURL = new URL(sourcegraphURL)
|
||||
extensionURL.pathname = `extensions/${props.id}`
|
||||
return <a href={extensionURL.href}>{props.id}</a>
|
||||
return <Link to={extensionURL.href}>{props.id}</Link>
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import * as React from 'react'
|
||||
|
||||
import { SourcegraphIcon } from '@sourcegraph/wildcard'
|
||||
import { SourcegraphIcon, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
export interface SourcegraphIconButtonProps
|
||||
extends Pick<JSX.IntrinsicElements['a'], 'href' | 'title' | 'rel' | 'className' | 'onClick' | 'target'> {
|
||||
@ -26,8 +26,8 @@ export const SourcegraphIconButton: React.FunctionComponent<SourcegraphIconButto
|
||||
title,
|
||||
dataTestId,
|
||||
}) => (
|
||||
<a
|
||||
href={href}
|
||||
<Link
|
||||
to={href ?? ''}
|
||||
className={className}
|
||||
target={target ?? '_blank'}
|
||||
rel={rel ?? 'noopener noreferrer'}
|
||||
@ -37,5 +37,5 @@ export const SourcegraphIconButton: React.FunctionComponent<SourcegraphIconButto
|
||||
data-testid={dataTestId}
|
||||
>
|
||||
<SourcegraphIcon className={iconClassName} /> {label}
|
||||
</a>
|
||||
</Link>
|
||||
)
|
||||
|
||||
@ -16,17 +16,17 @@ module.exports = {
|
||||
},
|
||||
rules: {
|
||||
'react/forbid-elements': [
|
||||
'off', // Currently disabled until first `<Button />` component is migrated: https://github.com/sourcegraph/codemod/issues/31
|
||||
'error',
|
||||
{
|
||||
forbid: [
|
||||
{
|
||||
element: 'button',
|
||||
message: 'Use the <Button /> component from @sourcegraph/wildcard instead.',
|
||||
},
|
||||
{
|
||||
element: 'textarea',
|
||||
message: 'Use the <TextArea /> component from @sourcegraph/wildcard instead.',
|
||||
},
|
||||
{
|
||||
element: 'a',
|
||||
message: 'Use the <Link /> component from @sourcegraph/wildcard instead.',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
@ -41,6 +41,18 @@ module.exports = {
|
||||
],
|
||||
},
|
||||
],
|
||||
'no-restricted-imports': [
|
||||
'error',
|
||||
{
|
||||
paths: [
|
||||
{
|
||||
name: 'react-router-dom',
|
||||
importNames: ['Link'],
|
||||
message: 'Use the <Link /> component from @sourcegraph/wildcard instead.',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@ -4,7 +4,7 @@ import React, { useCallback, useState } from 'react'
|
||||
import { DropdownItem, DropdownMenu, DropdownToggle, ButtonDropdown } from 'reactstrap'
|
||||
|
||||
import { TelemetryProps } from '@sourcegraph/shared/src/telemetry/telemetryService'
|
||||
import { Alert } from '@sourcegraph/wildcard'
|
||||
import { Link, Alert } from '@sourcegraph/wildcard'
|
||||
|
||||
interface SearchHelpDropdownButtonProps extends TelemetryProps {
|
||||
isSourcegraphDotCom?: boolean
|
||||
@ -115,15 +115,15 @@ export const SearchHelpDropdownButton: React.FunctionComponent<SearchHelpDropdow
|
||||
</li>
|
||||
</ul>
|
||||
<DropdownItem divider={true} className="mb-0" />
|
||||
<a
|
||||
<Link
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
href={`${documentationUrlPrefix}/code_search/reference/queries`}
|
||||
to={`${documentationUrlPrefix}/code_search/reference/queries`}
|
||||
className="dropdown-item"
|
||||
onClick={onQueryDocumentationLinkClicked}
|
||||
>
|
||||
<ExternalLinkIcon className="icon-inline small" /> All search keywords
|
||||
</a>
|
||||
</Link>
|
||||
{isSourcegraphDotCom && (
|
||||
<Alert className="small rounded-0 mb-0 mt-1" variant="info">
|
||||
On Sourcegraph.com, use a <code>repo:</code> filter to narrow your search to ≤500
|
||||
|
||||
@ -5,6 +5,7 @@ import * as React from 'react'
|
||||
|
||||
import { Progress } from '@sourcegraph/shared/src/search/stream'
|
||||
import { pluralize } from '@sourcegraph/shared/src/util/strings'
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { StreamingProgressProps } from './StreamingProgress'
|
||||
import styles from './StreamingProgressCount.module.scss'
|
||||
@ -53,10 +54,10 @@ export const StreamingProgressCount: React.FunctionComponent<
|
||||
</small>
|
||||
{showTrace && progress.trace && (
|
||||
<small className="d-flex ml-2">
|
||||
<a href={progress.trace}>
|
||||
<Link to={progress.trace}>
|
||||
<ClipboardPulseOutlineIcon className="mr-2 icon-inline" />
|
||||
View trace
|
||||
</a>
|
||||
</Link>
|
||||
</small>
|
||||
)}
|
||||
</>
|
||||
|
||||
@ -149,6 +149,7 @@ exports[`StreamingProgressCount should render correctly when a trace url is prov
|
||||
class="d-flex ml-2"
|
||||
>
|
||||
<a
|
||||
class=""
|
||||
href="https://sourcegraph.test:3443/-/debug/jaeger/trace/abcdefg"
|
||||
>
|
||||
<svg
|
||||
|
||||
@ -5,6 +5,7 @@ import * as H from 'history'
|
||||
import React from 'react'
|
||||
|
||||
import webMainStyles from '@sourcegraph/web/src/SourcegraphWebApp.scss'
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { subtypeOf } from '../../util/types'
|
||||
|
||||
@ -23,7 +24,7 @@ const baseActivation = (): Activation => ({
|
||||
title: 'Search your code',
|
||||
detail: (
|
||||
<span>
|
||||
Head to the <a href="/search">homepage</a> and perform a search query on your code.{' '}
|
||||
Head to the <Link to="/search">homepage</Link> and perform a search query on your code.{' '}
|
||||
<strong>Example:</strong> type 'lang:' and select a language
|
||||
</span>
|
||||
),
|
||||
|
||||
@ -2,7 +2,7 @@ import classNames from 'classnames'
|
||||
import React from 'react'
|
||||
import { HoverAlert } from 'sourcegraph'
|
||||
|
||||
import { Alert } from '@sourcegraph/wildcard'
|
||||
import { Link, Alert } from '@sourcegraph/wildcard'
|
||||
|
||||
import { NotificationType } from '../../api/extension/extensionHostApi'
|
||||
import { renderMarkdown } from '../../util/markdown'
|
||||
@ -77,9 +77,9 @@ export const HoverOverlayAlerts: React.FunctionComponent<HoverOverlayAlertsProps
|
||||
<div className={classNames(hoverOverlayStyle.alertDismiss)}>
|
||||
{/* Ideally this should a <button> but we can't guarantee we have the .btn-link class here. */}
|
||||
{/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
|
||||
<a href="" onClick={createAlertDismissedHandler(type)} role="button">
|
||||
<Link to="" onClick={createAlertDismissedHandler(type)} role="button">
|
||||
<small>Dismiss</small>
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
)}
|
||||
</Alert>
|
||||
|
||||
@ -283,6 +283,7 @@ exports[`HoverOverlay actions, hover and alert present 1`] = `
|
||||
class="alertDismiss"
|
||||
>
|
||||
<a
|
||||
class=""
|
||||
href=""
|
||||
role="button"
|
||||
>
|
||||
|
||||
@ -185,13 +185,13 @@ export const CloudSignUpPage: React.FunctionComponent<Props> = ({
|
||||
|
||||
<small className="text-muted">
|
||||
By registering, you agree to our{' '}
|
||||
<a href="https://about.sourcegraph.com/terms" target="_blank" rel="noopener">
|
||||
<Link to="https://about.sourcegraph.com/terms" target="_blank" rel="noopener">
|
||||
Terms of Service
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
and{' '}
|
||||
<a href="https://about.sourcegraph.com/privacy" target="_blank" rel="noopener">
|
||||
<Link to="https://about.sourcegraph.com/privacy" target="_blank" rel="noopener">
|
||||
Privacy Policy
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</small>
|
||||
|
||||
|
||||
@ -2,6 +2,8 @@ import classNames from 'classnames'
|
||||
import GithubIcon from 'mdi-react/GithubIcon'
|
||||
import React from 'react'
|
||||
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { AuthProvider, SourcegraphContext } from '../jscontext'
|
||||
|
||||
import styles from './CloudSignUpPage.module.scss'
|
||||
@ -68,8 +70,8 @@ const ExternalsAuth: React.FunctionComponent<ExternalsAuthProps> = ({
|
||||
return (
|
||||
<>
|
||||
{githubProvider && (
|
||||
<a
|
||||
href={maybeAddPostSignUpRedirect(githubProvider.authenticationURL)}
|
||||
<Link
|
||||
to={maybeAddPostSignUpRedirect(githubProvider.authenticationURL)}
|
||||
className={classNames(
|
||||
'text-decoration-none',
|
||||
withCenteredText && 'd-flex justify-content-center',
|
||||
@ -79,12 +81,12 @@ const ExternalsAuth: React.FunctionComponent<ExternalsAuthProps> = ({
|
||||
onClick={() => onClick('github')}
|
||||
>
|
||||
<GithubIcon className="mr-3" /> {githubLabel}
|
||||
</a>
|
||||
</Link>
|
||||
)}
|
||||
|
||||
{gitlabProvider && (
|
||||
<a
|
||||
href={maybeAddPostSignUpRedirect(gitlabProvider.authenticationURL)}
|
||||
<Link
|
||||
to={maybeAddPostSignUpRedirect(gitlabProvider.authenticationURL)}
|
||||
className={classNames(
|
||||
'text-decoration-none',
|
||||
withCenteredText && 'd-flex justify-content-center',
|
||||
@ -94,7 +96,7 @@ const ExternalsAuth: React.FunctionComponent<ExternalsAuthProps> = ({
|
||||
onClick={() => onClick('gitlab')}
|
||||
>
|
||||
<GitlabColorIcon className="mr-3" /> {gitlabLabel}
|
||||
</a>
|
||||
</Link>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
|
||||
@ -16,7 +16,7 @@ import {
|
||||
ValidationOptions,
|
||||
deriveInputClassName,
|
||||
} from '@sourcegraph/shared/src/util/useInputValidation'
|
||||
import { Button } from '@sourcegraph/wildcard'
|
||||
import { Button, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { LoaderButton } from '../components/LoaderButton'
|
||||
import { FeatureFlagProps } from '../featureFlags/featureFlags'
|
||||
@ -237,10 +237,10 @@ export const SignUpForm: React.FunctionComponent<SignUpFormProps> = ({
|
||||
/>
|
||||
Try Sourcegraph Enterprise free for{' '}
|
||||
<span className="text-nowrap">
|
||||
30 days {/* eslint-disable-next-line react/jsx-no-target-blank */}
|
||||
<a target="_blank" rel="noopener" href="https://about.sourcegraph.com/pricing">
|
||||
30 days{' '}
|
||||
<Link target="_blank" rel="noopener" to="https://about.sourcegraph.com/pricing">
|
||||
<HelpCircleOutlineIcon className="icon-inline" />
|
||||
</a>
|
||||
</Link>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
@ -285,14 +285,14 @@ export const SignUpForm: React.FunctionComponent<SignUpFormProps> = ({
|
||||
{!experimental && (
|
||||
<p className="mt-3 mb-0">
|
||||
<small className="form-text text-muted">
|
||||
By signing up, you agree to our {/* eslint-disable-next-line react/jsx-no-target-blank */}
|
||||
<a href="https://about.sourcegraph.com/terms" target="_blank" rel="noopener">
|
||||
By signing up, you agree to our{' '}
|
||||
<Link to="https://about.sourcegraph.com/terms" target="_blank" rel="noopener">
|
||||
Terms of Service
|
||||
</a>{' '}
|
||||
and {/* eslint-disable-next-line react/jsx-no-target-blank */}
|
||||
<a href="https://about.sourcegraph.com/privacy" target="_blank" rel="noopener">
|
||||
</Link>{' '}
|
||||
and{' '}
|
||||
<Link to="https://about.sourcegraph.com/privacy" target="_blank" rel="noopener">
|
||||
Privacy Policy
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</small>
|
||||
</p>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { gql, useMutation } from '@apollo/client'
|
||||
import React, { useCallback, useState } from 'react'
|
||||
|
||||
import { Alert } from '@sourcegraph/wildcard'
|
||||
import { Link, Alert } from '@sourcegraph/wildcard'
|
||||
|
||||
import { LoaderButton } from '../components/LoaderButton'
|
||||
|
||||
@ -54,13 +54,13 @@ export const TosConsentModal: React.FunctionComponent<{ afterTosAccepted: () =>
|
||||
<label className="form-check-label">
|
||||
<input type="checkbox" className="form-check-input" onChange={onAgreeChanged} /> I agree
|
||||
to Sourcegraph's{' '}
|
||||
<a href="https://about.sourcegraph.com/terms" target="_blank" rel="noopener">
|
||||
<Link to="https://about.sourcegraph.com/terms" target="_blank" rel="noopener">
|
||||
Terms of Service
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
and{' '}
|
||||
<a href="https://about.sourcegraph.com/privacy" target="_blank" rel="noopener">
|
||||
<Link to="https://about.sourcegraph.com/privacy" target="_blank" rel="noopener">
|
||||
Privacy Policy
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
(required)
|
||||
</label>
|
||||
</div>
|
||||
@ -75,7 +75,7 @@ export const TosConsentModal: React.FunctionComponent<{ afterTosAccepted: () =>
|
||||
/>
|
||||
</form>
|
||||
<p className="mt-5">
|
||||
If you do not agree, <a href="/-/sign-out">sign out</a> and contact your site admin to have your
|
||||
If you do not agree, <Link to="/-/sign-out">sign out</Link> and contact your site admin to have your
|
||||
account deleted.
|
||||
</p>
|
||||
{error && (
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
import classNames from 'classnames'
|
||||
import ChevronLeftIcon from 'mdi-react/ChevronLeftIcon'
|
||||
import React from 'react'
|
||||
import { Link, useLocation } from 'react-router-dom'
|
||||
import { useLocation } from 'react-router-dom'
|
||||
|
||||
import { TelemetryProps } from '@sourcegraph/shared/src/telemetry/telemetryService'
|
||||
import { ThemeProps } from '@sourcegraph/shared/src/theme'
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { BrandLogo } from '../components/branding/BrandLogo'
|
||||
import { FeatureFlagProps } from '../featureFlags/featureFlags'
|
||||
@ -147,13 +148,13 @@ export const VsCodeSignUpPage: React.FunctionComponent<Props> = ({
|
||||
{renderAuthMethod()}
|
||||
<small className="text-muted">
|
||||
By registering, you agree to our{' '}
|
||||
<a href="https://about.sourcegraph.com/terms" target="_blank" rel="noopener">
|
||||
<Link to="https://about.sourcegraph.com/terms" target="_blank" rel="noopener">
|
||||
Terms of Service
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
and{' '}
|
||||
<a href="https://about.sourcegraph.com/privacy" target="_blank" rel="noopener">
|
||||
<Link to="https://about.sourcegraph.com/privacy" target="_blank" rel="noopener">
|
||||
Privacy Policy
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</small>
|
||||
<hr className={styles.separator} />
|
||||
|
||||
@ -93,6 +93,7 @@ exports[`SignUpPage renders sign up page (cloud) 1`] = `
|
||||
>
|
||||
By registering, you agree to our
|
||||
<a
|
||||
class=""
|
||||
href="https://about.sourcegraph.com/terms"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
@ -101,6 +102,7 @@ exports[`SignUpPage renders sign up page (cloud) 1`] = `
|
||||
</a>
|
||||
and
|
||||
<a
|
||||
class=""
|
||||
href="https://about.sourcegraph.com/privacy"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
@ -274,6 +276,7 @@ exports[`SignUpPage renders sign up page (server) 1`] = `
|
||||
>
|
||||
By signing up, you agree to our
|
||||
<a
|
||||
class=""
|
||||
href="https://about.sourcegraph.com/terms"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
@ -282,6 +285,7 @@ exports[`SignUpPage renders sign up page (server) 1`] = `
|
||||
</a>
|
||||
and
|
||||
<a
|
||||
class=""
|
||||
href="https://about.sourcegraph.com/privacy"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import React from 'react'
|
||||
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { CommunitySearchContextPage, CommunitySearchContextPageProps } from './CommunitySearchContextPage'
|
||||
import { CommunitySearchContextMetadata } from './types'
|
||||
|
||||
@ -10,9 +12,9 @@ export const cncf: CommunitySearchContextMetadata = {
|
||||
description: (
|
||||
<>
|
||||
Search the{' '}
|
||||
<a href="https://landscape.cncf.io/project=hosted" target="_blank" rel="noopener noreferrer">
|
||||
<Link to="https://landscape.cncf.io/project=hosted" target="_blank" rel="noopener noreferrer">
|
||||
CNCF projects
|
||||
</a>
|
||||
</Link>
|
||||
</>
|
||||
),
|
||||
examples: [],
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
import { storiesOf } from '@storybook/react'
|
||||
import React from 'react'
|
||||
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { Breadcrumbs } from './Breadcrumbs'
|
||||
import { WebStory } from './WebStory'
|
||||
|
||||
@ -18,20 +20,20 @@ add(
|
||||
breadcrumbs={[
|
||||
{
|
||||
depth: 0,
|
||||
breadcrumb: { key: 'home', element: <a href="/">Home</a>, divider: null },
|
||||
breadcrumb: { key: 'home', element: <Link to="/">Home</Link>, divider: null },
|
||||
},
|
||||
{
|
||||
depth: 1,
|
||||
breadcrumb: { key: 'repo_area', element: <a href="/">Repositories</a> },
|
||||
breadcrumb: { key: 'repo_area', element: <Link to="/">Repositories</Link> },
|
||||
},
|
||||
{
|
||||
depth: 2,
|
||||
breadcrumb: {
|
||||
key: 'repo',
|
||||
element: (
|
||||
<a href="/">
|
||||
<Link to="/">
|
||||
sourcegraph/<span className="font-weight-medium">sourcegraph</span>
|
||||
</a>
|
||||
</Link>
|
||||
),
|
||||
},
|
||||
},
|
||||
@ -45,14 +47,14 @@ add(
|
||||
},
|
||||
{
|
||||
depth: 4,
|
||||
breadcrumb: { key: 'directory1', element: <a href="/">path</a> },
|
||||
breadcrumb: { key: 'directory1', element: <Link to="/">path</Link> },
|
||||
},
|
||||
{
|
||||
depth: 5,
|
||||
breadcrumb: {
|
||||
key: 'directory2',
|
||||
divider: <span className="mx-1">/</span>,
|
||||
element: <a href="/">to</a>,
|
||||
element: <Link to="/">to</Link>,
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -60,7 +62,7 @@ add(
|
||||
breadcrumb: {
|
||||
key: 'fileName',
|
||||
divider: <span className="mx-1">/</span>,
|
||||
element: <a href="/">file.tsx</a>,
|
||||
element: <Link to="/">file.tsx</Link>,
|
||||
},
|
||||
},
|
||||
]}
|
||||
|
||||
@ -37,7 +37,6 @@ export const CtaBanner: React.FunctionComponent<Props> = ({
|
||||
<p className={bodyTextClassName}>{bodyText}</p>
|
||||
<Button
|
||||
href={href}
|
||||
// eslint-disable-next-line react/jsx-no-target-blank
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
onClick={onClick}
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
import { storiesOf } from '@storybook/react'
|
||||
import React from 'react'
|
||||
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { WebStory } from '../WebStory'
|
||||
|
||||
import { DismissibleAlert } from './DismissibleAlert'
|
||||
@ -10,7 +12,7 @@ const { add } = storiesOf('web/DismissibleAlert', module).addDecorator(story =>
|
||||
add('One-line alert', () => (
|
||||
<DismissibleAlert variant="info" partialStorageKey="dismissible-alert-one-line">
|
||||
<span>
|
||||
1 bulk operation has recently failed running. Click the <a href="?">bulk operations tab</a> to view.
|
||||
1 bulk operation has recently failed running. Click the <Link to="?">bulk operations tab</Link> to view.
|
||||
</span>
|
||||
</DismissibleAlert>
|
||||
))
|
||||
|
||||
@ -2,6 +2,8 @@ import { DecoratorFn, Meta } from '@storybook/react'
|
||||
import ArrowRightIcon from 'mdi-react/ArrowRightIcon'
|
||||
import React from 'react'
|
||||
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { WebStory } from '../WebStory'
|
||||
|
||||
import { MarketingBlock } from './MarketingBlock'
|
||||
@ -20,10 +22,10 @@ export const Basic = (): JSX.Element => (
|
||||
<h3 className="pr-3">Need help getting started?</h3>
|
||||
|
||||
<div>
|
||||
<a href="https://sourcegraph.com/search">
|
||||
<Link to="https://sourcegraph.com/search">
|
||||
Speak to an engineer
|
||||
<ArrowRightIcon className="icon-inline ml-2" />
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
</MarketingBlock>
|
||||
)
|
||||
|
||||
@ -4,6 +4,7 @@ import React from 'react'
|
||||
|
||||
import { TelemetryProps } from '@sourcegraph/shared/src/telemetry/telemetryService'
|
||||
import { MarketingBlock } from '@sourcegraph/web/src/components/MarketingBlock'
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
export interface SelfHostedCtaProps extends TelemetryProps {
|
||||
className?: string
|
||||
@ -47,22 +48,22 @@ export const SelfHostedCta: React.FunctionComponent<SelfHostedCtaProps> = ({
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<a
|
||||
<Link
|
||||
onClick={gettingStartedCTAOnClick}
|
||||
href="https://docs.sourcegraph.com/admin/install"
|
||||
to="https://docs.sourcegraph.com/admin/install"
|
||||
{...linkProps}
|
||||
>
|
||||
Learn how to install
|
||||
</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
<Link
|
||||
onClick={selfVsCloudDocumentsLinkOnClick}
|
||||
href="https://docs.sourcegraph.com/code_search/explanations/sourcegraph_cloud#who-is-sourcegraph-cloud-for-why-should-i-use-this-over-sourcegraph-self-hosted"
|
||||
to="https://docs.sourcegraph.com/code_search/explanations/sourcegraph_cloud#who-is-sourcegraph-cloud-for-why-should-i-use-this-over-sourcegraph-self-hosted"
|
||||
{...linkProps}
|
||||
>
|
||||
Self-hosted vs. cloud features
|
||||
</a>
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@ -71,14 +72,14 @@ export const SelfHostedCta: React.FunctionComponent<SelfHostedCtaProps> = ({
|
||||
<h3 className="pr-3">Need help getting started?</h3>
|
||||
|
||||
<div>
|
||||
<a
|
||||
<Link
|
||||
onClick={helpGettingStartedCTAOnClick}
|
||||
href=" https://info.sourcegraph.com/talk-to-a-developer?form_submission_source=inproduct?utm_campaign=inproduct-talktoadev&utm_medium=direct_traffic&utm_source=inproduct-talktoadev&utm_term=null&utm_content=talktoadevform"
|
||||
to=" https://info.sourcegraph.com/talk-to-a-developer?form_submission_source=inproduct?utm_campaign=inproduct-talktoadev&utm_medium=direct_traffic&utm_source=inproduct-talktoadev&utm_term=null&utm_content=talktoadevform"
|
||||
{...linkProps}
|
||||
>
|
||||
Speak to an engineer
|
||||
<ArrowRightIcon className="icon-inline ml-2" />
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
</MarketingBlock>
|
||||
</div>
|
||||
|
||||
@ -2,6 +2,7 @@ import classNames from 'classnames'
|
||||
import React from 'react'
|
||||
|
||||
import { TelemetryProps } from '@sourcegraph/shared/src/telemetry/telemetryService'
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import styles from './SelfHostedCtaLink.module.scss'
|
||||
|
||||
@ -27,9 +28,9 @@ export const SelfHostedCtaLink: React.FunctionComponent<SelfHostedCtaLinkProps>
|
||||
<div className={classNames(styles.container, className)}>
|
||||
<span className={contentClassName}>
|
||||
Get Sourcegraph for teams via our{' '}
|
||||
<a onClick={gettingStartedCTAOnClick} href="https://docs.sourcegraph.com/admin/install" {...linkProps}>
|
||||
<Link onClick={gettingStartedCTAOnClick} to="https://docs.sourcegraph.com/admin/install" {...linkProps}>
|
||||
self-hosted installation
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@ -23,7 +23,7 @@ export const SidebarNavItem: React.FunctionComponent<{
|
||||
|
||||
if (source === 'server') {
|
||||
return (
|
||||
<Button as="a" href={to} className={buttonClassNames}>
|
||||
<Button as="a" href={to} className={classNames(buttonClassNames, className)}>
|
||||
{children}
|
||||
</Button>
|
||||
)
|
||||
|
||||
@ -95,8 +95,7 @@ export const FileDiffNode: React.FunctionComponent<FileDiffNodeProps> = ({
|
||||
return (
|
||||
<>
|
||||
{/* The empty <a> tag is to allow users to anchor links to the top of this file diff node */}
|
||||
{/* eslint-disable-next-line jsx-a11y/anchor-has-content, jsx-a11y/anchor-is-valid */}
|
||||
<a id={anchor} aria-hidden={true} />
|
||||
<Link to="" id={anchor} aria-hidden={true} />
|
||||
<div className={classNames('test-file-diff-node', styles.fileDiffNode, className)}>
|
||||
<div className={styles.header}>
|
||||
<Button className="btn-icon mr-2" onClick={toggleExpand} size="sm">
|
||||
|
||||
@ -3,7 +3,7 @@ import React from 'react'
|
||||
|
||||
import { TelemetryProps } from '@sourcegraph/shared/src/telemetry/telemetryService'
|
||||
import { ThemeProps } from '@sourcegraph/shared/src/theme'
|
||||
import { useLocalStorage, Button, Alert } from '@sourcegraph/wildcard'
|
||||
import { useLocalStorage, Button, Link, Alert } from '@sourcegraph/wildcard'
|
||||
|
||||
import { Scalars } from '../../graphql-operations'
|
||||
import { PageTitle } from '../PageTitle'
|
||||
@ -100,24 +100,24 @@ export const AddExternalServicesPage: React.FunctionComponent<AddExternalService
|
||||
<li>Periodically pulling cloned repositories to ensure search results are current.</li>
|
||||
<li>
|
||||
Fetching{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/admin/repo/permissions"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/admin/repo/permissions"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
user repository access permissions
|
||||
</a>
|
||||
</Link>
|
||||
, if you have enabled this feature.
|
||||
</li>
|
||||
<li>
|
||||
Opening pull requests and syncing their metadata as part of{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/user/batch_changes"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/user/batch_changes"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
batch changes
|
||||
</a>
|
||||
</Link>
|
||||
, if you have enabled this feature.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import React from 'react'
|
||||
|
||||
import { Alert } from '@sourcegraph/wildcard'
|
||||
import { Alert, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { ExternalServiceFields, ExternalServiceKind } from '../../graphql-operations'
|
||||
import { CopyableText } from '../CopyableText'
|
||||
@ -20,22 +20,22 @@ export const ExternalServiceWebhook: React.FunctionComponent<Props> = ({ externa
|
||||
case ExternalServiceKind.BITBUCKETSERVER:
|
||||
description = (
|
||||
<p>
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/admin/external_service/bitbucket_server#webhooks"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/admin/external_service/bitbucket_server#webhooks"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Webhooks
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
will be created automatically on the configured Bitbucket Server instance. In case you don't provide
|
||||
an admin token,{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/admin/external_service/bitbucket_server#manual-configuration"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/admin/external_service/bitbucket_server#manual-configuration"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
follow the docs on how to set up webhooks manually
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
<br />
|
||||
To set up another webhook manually, use the following URL:
|
||||
@ -59,13 +59,13 @@ export const ExternalServiceWebhook: React.FunctionComponent<Props> = ({ externa
|
||||
<CopyableText className="mb-2" text={webhookURL} size={webhookURL.length} />
|
||||
<p className="mb-0">
|
||||
Note that only{' '}
|
||||
<a href="https://docs.sourcegraph.com/user/batch_changes" target="_blank" rel="noopener noreferrer">
|
||||
<Link to="https://docs.sourcegraph.com/user/batch_changes" target="_blank" rel="noopener noreferrer">
|
||||
batch changes
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
make use of this webhook. To enable webhooks to trigger repository updates on Sourcegraph,{' '}
|
||||
<a href="https://docs.sourcegraph.com/admin/repo/webhooks" target="_blank" rel="noopener noreferrer">
|
||||
<Link to="https://docs.sourcegraph.com/admin/repo/webhooks" target="_blank" rel="noopener noreferrer">
|
||||
see the docs on how to use them
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</p>
|
||||
</Alert>
|
||||
@ -76,13 +76,13 @@ function commonDescription(url: string): JSX.Element {
|
||||
return (
|
||||
<p>
|
||||
Point{' '}
|
||||
<a
|
||||
href={`https://docs.sourcegraph.com/admin/external_service/${url}#webhooks`}
|
||||
<Link
|
||||
to={`https://docs.sourcegraph.com/admin/external_service/${url}#webhooks`}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
webhooks
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
for this code host connection at the following URL:
|
||||
</p>
|
||||
)
|
||||
|
||||
@ -10,6 +10,7 @@ import NpmIcon from 'mdi-react/NpmIcon'
|
||||
import React from 'react'
|
||||
|
||||
import { PhabricatorIcon } from '@sourcegraph/shared/src/components/icons'
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import awsCodeCommitSchemaJSON from '../../../../../schema/aws_codecommit.schema.json'
|
||||
import bitbucketCloudSchemaJSON from '../../../../../schema/bitbucket_cloud.schema.json'
|
||||
@ -127,13 +128,13 @@ const githubInstructions = (isEnterprise: boolean): JSX.Element => (
|
||||
)}
|
||||
<li>
|
||||
Create a GitHub access token (
|
||||
<a
|
||||
href="https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line"
|
||||
<Link
|
||||
to="https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
instructions
|
||||
</a>
|
||||
</Link>
|
||||
) with <b>repo</b> scope.
|
||||
<li>
|
||||
Set the value of the <Field>token</Field> field as your access token, in the configuration below.
|
||||
@ -163,13 +164,13 @@ const githubInstructions = (isEnterprise: boolean): JSX.Element => (
|
||||
</ol>
|
||||
<p>
|
||||
See{' '}
|
||||
<a
|
||||
<Link
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
href="https://docs.sourcegraph.com/admin/external_service/github#configuration"
|
||||
to="https://docs.sourcegraph.com/admin/external_service/github#configuration"
|
||||
>
|
||||
the docs for more options
|
||||
</a>
|
||||
</Link>
|
||||
, or try one of the buttons below.
|
||||
</p>
|
||||
</div>
|
||||
@ -185,13 +186,13 @@ const gitlabInstructions = (isSelfManaged: boolean): JSX.Element => (
|
||||
)}
|
||||
<li>
|
||||
Create a GitLab access token (
|
||||
<a
|
||||
href="https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#creating-a-personal-access-token"
|
||||
<Link
|
||||
to="https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#creating-a-personal-access-token"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
instructions
|
||||
</a>
|
||||
</Link>
|
||||
) with{' '}
|
||||
<b>
|
||||
<Field>repo</Field>
|
||||
@ -203,13 +204,13 @@ const gitlabInstructions = (isSelfManaged: boolean): JSX.Element => (
|
||||
<ul>
|
||||
<li>
|
||||
<Field>projectQuery</Field> is a list of calls to{' '}
|
||||
<a
|
||||
<Link
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
href="https://docs.gitlab.com/ee/api/projects.html"
|
||||
to="https://docs.gitlab.com/ee/api/projects.html"
|
||||
>
|
||||
GitLab's REST API
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
that return a list of projects.
|
||||
<br />
|
||||
<Value>"groups/<mygroup>/projects"</Value> selects all projects in a group.
|
||||
@ -231,13 +232,13 @@ const gitlabInstructions = (isSelfManaged: boolean): JSX.Element => (
|
||||
</ol>
|
||||
<p>
|
||||
See{' '}
|
||||
<a
|
||||
<Link
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
href="https://docs.sourcegraph.com/admin/external_service/gitlab#configuration"
|
||||
to="https://docs.sourcegraph.com/admin/external_service/gitlab#configuration"
|
||||
>
|
||||
the docs for more options
|
||||
</a>
|
||||
</Link>
|
||||
, or try one of the buttons below.
|
||||
</p>
|
||||
</div>
|
||||
@ -574,13 +575,13 @@ const AWS_CODE_COMMIT: AddExternalServiceOptions = {
|
||||
</li>
|
||||
<li>
|
||||
Create Git credentials for AWS CodeCommit (
|
||||
<a
|
||||
href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html#setting-up-gc-iam"
|
||||
<Link
|
||||
to="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html#setting-up-gc-iam"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
instructions
|
||||
</a>
|
||||
</Link>
|
||||
) and set these in the <Field>gitCredentials</Field> field.
|
||||
</li>
|
||||
<li>
|
||||
@ -589,13 +590,13 @@ const AWS_CODE_COMMIT: AddExternalServiceOptions = {
|
||||
</ol>
|
||||
<p>
|
||||
See{' '}
|
||||
<a
|
||||
<Link
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
href="https://docs.sourcegraph.com/admin/external_service/aws_codecommit#configuration"
|
||||
to="https://docs.sourcegraph.com/admin/external_service/aws_codecommit#configuration"
|
||||
>
|
||||
the docs for more options
|
||||
</a>
|
||||
</Link>
|
||||
, or try one of the buttons below.
|
||||
</p>
|
||||
</div>
|
||||
@ -697,13 +698,13 @@ const BITBUCKET_CLOUD: AddExternalServiceOptions = {
|
||||
<ol>
|
||||
<li>
|
||||
Create a Bitbucket app password (
|
||||
<a
|
||||
href="https://confluence.atlassian.com/bitbucket/app-passwords-828781300.html"
|
||||
<Link
|
||||
to="https://confluence.atlassian.com/bitbucket/app-passwords-828781300.html"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
instructions
|
||||
</a>
|
||||
</Link>
|
||||
) with <b>read</b> scope over your repositories and teams. Set it to be the value of the{' '}
|
||||
<Field>appPassword</Field> field in the configuration below.
|
||||
</li>
|
||||
@ -718,13 +719,13 @@ const BITBUCKET_CLOUD: AddExternalServiceOptions = {
|
||||
</ol>
|
||||
<p>
|
||||
See{' '}
|
||||
<a
|
||||
<Link
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
href="https://docs.sourcegraph.com/admin/external_service/bitbucket_cloud#configuration"
|
||||
to="https://docs.sourcegraph.com/admin/external_service/bitbucket_cloud#configuration"
|
||||
>
|
||||
the docs for more options
|
||||
</a>
|
||||
</Link>
|
||||
, or try one of the buttons below.
|
||||
</p>
|
||||
</div>
|
||||
@ -752,13 +753,13 @@ const BITBUCKET_SERVER: AddExternalServiceOptions = {
|
||||
</li>
|
||||
<li>
|
||||
Create a personal access token (
|
||||
<a
|
||||
href="https://confluence.atlassian.com/bitbucketserver/personal-access-tokens-939515499.html"
|
||||
<Link
|
||||
to="https://confluence.atlassian.com/bitbucketserver/personal-access-tokens-939515499.html"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
instructions
|
||||
</a>
|
||||
</Link>
|
||||
) with <Field>read</Field> scope.
|
||||
</li>
|
||||
<li>
|
||||
@ -777,13 +778,13 @@ const BITBUCKET_SERVER: AddExternalServiceOptions = {
|
||||
A query string like{' '}
|
||||
<Value>"{'?name=<repo name>&projectname=<project>&visibility=private'}"</Value> that
|
||||
specifies search query parameters. See{' '}
|
||||
<a
|
||||
href="https://docs.atlassian.com/bitbucket-server/rest/6.1.2/bitbucket-rest.html#idp355"
|
||||
<Link
|
||||
to="https://docs.atlassian.com/bitbucket-server/rest/6.1.2/bitbucket-rest.html#idp355"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
the full list of parameters
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</li>
|
||||
<li>
|
||||
@ -807,13 +808,13 @@ const BITBUCKET_SERVER: AddExternalServiceOptions = {
|
||||
</ol>
|
||||
<p>
|
||||
See{' '}
|
||||
<a
|
||||
<Link
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
href="https://docs.sourcegraph.com/admin/external_service/bitbucket_server#configuration"
|
||||
to="https://docs.sourcegraph.com/admin/external_service/bitbucket_server#configuration"
|
||||
>
|
||||
the docs for more options
|
||||
</a>
|
||||
</Link>
|
||||
, or try one of the buttons below.
|
||||
</p>
|
||||
</div>
|
||||
@ -943,9 +944,9 @@ const SRC_SERVE_GIT: AddExternalServiceOptions = {
|
||||
</p>
|
||||
<p>
|
||||
Install the{' '}
|
||||
<a rel="noopener noreferrer" target="_blank" href="https://github.com/sourcegraph/src-cli">
|
||||
<Link rel="noopener noreferrer" target="_blank" to="https://github.com/sourcegraph/src-cli">
|
||||
Sourcegraph CLI (src)
|
||||
</a>
|
||||
</Link>
|
||||
. src serve-git allows you to serve any git repositories that you have on disk.
|
||||
</p>
|
||||
</div>
|
||||
@ -986,13 +987,13 @@ const GITOLITE: AddExternalServiceOptions = {
|
||||
</ol>
|
||||
<p>
|
||||
See{' '}
|
||||
<a
|
||||
<Link
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
href="https://docs.sourcegraph.com/admin/external_service/gitolite#configuration"
|
||||
to="https://docs.sourcegraph.com/admin/external_service/gitolite#configuration"
|
||||
>
|
||||
the docs for more advanced options
|
||||
</a>
|
||||
</Link>
|
||||
, or try one of the buttons below.
|
||||
</p>
|
||||
</div>
|
||||
@ -1091,13 +1092,13 @@ const GENERIC_GIT: AddExternalServiceOptions = {
|
||||
</ol>
|
||||
<p>
|
||||
See{' '}
|
||||
<a
|
||||
<Link
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
href="https://docs.sourcegraph.com/admin/external_service/other#configuration"
|
||||
to="https://docs.sourcegraph.com/admin/external_service/other#configuration"
|
||||
>
|
||||
the docs for more options
|
||||
</a>
|
||||
</Link>
|
||||
, or try one of the buttons below.
|
||||
</p>
|
||||
</div>
|
||||
@ -1150,13 +1151,13 @@ const PERFORCE: AddExternalServiceOptions = {
|
||||
</ol>
|
||||
<p>
|
||||
See{' '}
|
||||
<a
|
||||
<Link
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
href="https://docs.sourcegraph.com/admin/repo/perforce#configuration"
|
||||
to="https://docs.sourcegraph.com/admin/repo/perforce#configuration"
|
||||
>
|
||||
the docs for more advanced options
|
||||
</a>
|
||||
</Link>
|
||||
, or try one of the buttons below.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -61,14 +61,14 @@ interface BatchSpecDownloadLinkProps extends BatchSpecProps, Pick<BatchChangeFie
|
||||
export const BatchSpecDownloadLink: React.FunctionComponent<BatchSpecDownloadLinkProps> = React.memo(
|
||||
function BatchSpecDownloadLink({ children, className, name, originalInput }) {
|
||||
return (
|
||||
<a
|
||||
<Link
|
||||
download={getFileName(name)}
|
||||
href={'data:text/plain;charset=utf-8,' + encodeURIComponent(originalInput)}
|
||||
to={'data:text/plain;charset=utf-8,' + encodeURIComponent(originalInput)}
|
||||
className={className}
|
||||
data-tooltip={`Download ${getFileName(name)}`}
|
||||
>
|
||||
{children}
|
||||
</a>
|
||||
</Link>
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
@ -4,7 +4,7 @@ import { Settings } from '@sourcegraph/shared/src/schema/settings.schema'
|
||||
import { SettingsCascadeProps } from '@sourcegraph/shared/src/settings/settings'
|
||||
import { ThemeProps } from '@sourcegraph/shared/src/theme'
|
||||
import { Page } from '@sourcegraph/web/src/components/Page'
|
||||
import { PageHeader } from '@sourcegraph/wildcard'
|
||||
import { PageHeader, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { isBatchChangesExecutionEnabled } from '../../../batches'
|
||||
import { BatchChangesIcon } from '../../../batches/icons'
|
||||
@ -49,9 +49,9 @@ export const CreateBatchChangePage: React.FunctionComponent<CreateBatchChangePag
|
||||
description={
|
||||
<>
|
||||
Follow these steps to create a Batch Change. Need help? View the{' '}
|
||||
<a href="/help/batch_changes" rel="noopener noreferrer" target="_blank">
|
||||
<Link to="/help/batch_changes" rel="noopener noreferrer" target="_blank">
|
||||
documentation.
|
||||
</a>
|
||||
</Link>
|
||||
</>
|
||||
}
|
||||
className="mb-3"
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import React, { useCallback, useState } from 'react'
|
||||
|
||||
import { CodeSnippet } from '@sourcegraph/branded/src/components/CodeSnippet'
|
||||
import { Container, Button } from '@sourcegraph/wildcard'
|
||||
import { Container, Button, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { SidebarGroup, SidebarGroupHeader } from '../../../components/Sidebar'
|
||||
|
||||
@ -58,13 +58,13 @@ export const OldBatchChangePageContent: React.FunctionComponent<{}> = () => {
|
||||
<Container className="mb-3">
|
||||
<p className="mb-0">
|
||||
The batch spec (
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/batch_changes/references/batch_spec_yaml_reference"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/batch_changes/references/batch_spec_yaml_reference"
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
>
|
||||
syntax reference
|
||||
</a>
|
||||
</Link>
|
||||
) describes what the batch change does. You'll provide it when previewing, creating, and updating
|
||||
batch changes. We recommend committing it to source control.
|
||||
</p>
|
||||
@ -91,9 +91,9 @@ export const OldBatchChangePageContent: React.FunctionComponent<{}> = () => {
|
||||
<Container className="mb-3">
|
||||
<p>
|
||||
Use the{' '}
|
||||
<a href="https://github.com/sourcegraph/src-cli" rel="noopener noreferrer" target="_blank">
|
||||
<Link to="https://github.com/sourcegraph/src-cli" rel="noopener noreferrer" target="_blank">
|
||||
Sourcegraph CLI (src)
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
to preview the commits and changesets that your batch change will make:
|
||||
</p>
|
||||
<CodeSnippet code={`src batch preview -f ${selectedSample.name}`} language="bash" className="mb-3" />
|
||||
|
||||
@ -8,7 +8,7 @@ import { Settings } from '@sourcegraph/shared/src/schema/settings.schema'
|
||||
import { SettingsCascadeProps } from '@sourcegraph/shared/src/settings/settings'
|
||||
import { TelemetryProps } from '@sourcegraph/shared/src/telemetry/telemetryService'
|
||||
import { Page } from '@sourcegraph/web/src/components/Page'
|
||||
import { Container, PageHeader, useObservable, CardBody, Card } from '@sourcegraph/wildcard'
|
||||
import { Container, PageHeader, useObservable, CardBody, Card, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { AuthenticatedUser } from '../../../auth'
|
||||
import { isBatchChangesExecutionEnabled } from '../../../batches'
|
||||
@ -261,8 +261,8 @@ const BatchChangeListTabHeader: React.FunctionComponent<{
|
||||
<ul className="nav nav-tabs d-inline-flex d-sm-flex flex-nowrap text-nowrap">
|
||||
<li className="nav-item">
|
||||
{/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
|
||||
<a
|
||||
href=""
|
||||
<Link
|
||||
to=""
|
||||
onClick={onSelectBatchChanges}
|
||||
className={classNames('nav-link', selectedTab === 'batchChanges' && 'active')}
|
||||
role="button"
|
||||
@ -270,12 +270,12 @@ const BatchChangeListTabHeader: React.FunctionComponent<{
|
||||
<span className="text-content" data-tab-content="All batch changes">
|
||||
All batch changes
|
||||
</span>
|
||||
</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li className="nav-item">
|
||||
{/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
|
||||
<a
|
||||
href=""
|
||||
<Link
|
||||
to=""
|
||||
onClick={onSelectGettingStarted}
|
||||
className={classNames('nav-link', selectedTab === 'gettingStarted' && 'active')}
|
||||
role="button"
|
||||
@ -284,7 +284,7 @@ const BatchChangeListTabHeader: React.FunctionComponent<{
|
||||
<span className="text-content" data-tab-content="Getting started">
|
||||
Getting started
|
||||
</span>
|
||||
</a>
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@ -298,9 +298,9 @@ const GettingStartedFooter: React.FunctionComponent<{}> = () => (
|
||||
<CardBody className="text-center">
|
||||
<p>Create your first batch change</p>
|
||||
<h2 className="mb-0">
|
||||
<a href="https://docs.sourcegraph.com/batch_changes/quickstart" target="_blank" rel="noopener">
|
||||
<Link to="https://docs.sourcegraph.com/batch_changes/quickstart" target="_blank" rel="noopener">
|
||||
Batch Changes quickstart
|
||||
</a>
|
||||
</Link>
|
||||
</h2>
|
||||
</CardBody>
|
||||
</Card>
|
||||
|
||||
@ -2,7 +2,7 @@ import classNames from 'classnames'
|
||||
import React from 'react'
|
||||
|
||||
import { DismissibleAlert } from '@sourcegraph/web/src/components/DismissibleAlert'
|
||||
import { CardBody, Card } from '@sourcegraph/wildcard'
|
||||
import { CardBody, Card, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import styles from './BatchChangesListIntro.module.scss'
|
||||
|
||||
@ -16,13 +16,13 @@ export const BatchChangesChangelogAlert: React.FunctionComponent = () => (
|
||||
<h4>Batch Changes updates in version 3.36</h4>
|
||||
<ul className="mb-0 pl-3">
|
||||
<li>
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/admin/config/batch_changes#forks"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/admin/config/batch_changes#forks"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
>
|
||||
Batch Changes now supports pushing changesets to forked repositories.
|
||||
</a>
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</CardBody>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import classNames from 'classnames'
|
||||
import React from 'react'
|
||||
|
||||
import { CardBody, Card } from '@sourcegraph/wildcard'
|
||||
import { CardBody, Card, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { SourcegraphIcon } from '../../../auth/icons'
|
||||
|
||||
@ -49,7 +49,7 @@ const BatchChangesUnlicensedAlert: React.FunctionComponent = () => (
|
||||
up to five changesets without a license.
|
||||
</p>
|
||||
<p className="mb-0">
|
||||
<a href="https://about.sourcegraph.com/contact/sales/">Contact sales</a> to obtain a trial
|
||||
<Link to="https://about.sourcegraph.com/contact/sales/">Contact sales</Link> to obtain a trial
|
||||
license.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import classNames from 'classnames'
|
||||
import React from 'react'
|
||||
|
||||
import { Container, CardBody, Card } from '@sourcegraph/wildcard'
|
||||
import { Container, CardBody, Card, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import styles from './GettingStarted.module.scss'
|
||||
|
||||
@ -61,12 +61,12 @@ export const GettingStarted: React.FunctionComponent<GettingStartedProps> = ({ f
|
||||
<FindReplaceIcon className="mr-3" />
|
||||
<div>
|
||||
<h4>
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/batch_changes/tutorials/search_and_replace_specific_terms"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/batch_changes/tutorials/search_and_replace_specific_terms"
|
||||
rel="noopener"
|
||||
>
|
||||
Finding and replacing exclusionary terms
|
||||
</a>
|
||||
</Link>
|
||||
</h4>
|
||||
<p className="text-muted mb-0">
|
||||
A Sourcegraph query plus a simple <code>sed</code> command creates changesets required
|
||||
@ -82,18 +82,18 @@ export const GettingStarted: React.FunctionComponent<GettingStartedProps> = ({ f
|
||||
<RefactorCombyIcon className="mr-3" />
|
||||
<div>
|
||||
<h4>
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/batch_changes/tutorials/updating_go_import_statements"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/batch_changes/tutorials/updating_go_import_statements"
|
||||
rel="noopener"
|
||||
>
|
||||
Refactoring with language aware search
|
||||
</a>
|
||||
</Link>
|
||||
</h4>
|
||||
<p className="text-muted mb-0">
|
||||
Using{' '}
|
||||
<a href="https://comby.dev/" rel="noopener">
|
||||
<Link to="https://comby.dev/" rel="noopener">
|
||||
Comby's
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
language-aware structural search to refactor Go statements to a semantically equivalent,
|
||||
but clearer execution.
|
||||
</p>
|
||||
@ -103,9 +103,9 @@ export const GettingStarted: React.FunctionComponent<GettingStartedProps> = ({ f
|
||||
</div>
|
||||
<div className="col-12 mb-4 text-right">
|
||||
<p>
|
||||
<a href="https://docs.sourcegraph.com/batch_changes/tutorials" rel="noopener">
|
||||
<Link to="https://docs.sourcegraph.com/batch_changes/tutorials" rel="noopener">
|
||||
More tutorials
|
||||
</a>
|
||||
</Link>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@ -116,9 +116,9 @@ export const GettingStarted: React.FunctionComponent<GettingStartedProps> = ({ f
|
||||
<strong>Quickstart</strong>
|
||||
</p>
|
||||
<p>Create your first Sourcegraph batch change in 10 minutes or less.</p>
|
||||
<a href="https://docs.sourcegraph.com/batch_changes/quickstart" rel="noopener">
|
||||
<Link to="https://docs.sourcegraph.com/batch_changes/quickstart" rel="noopener">
|
||||
Batch Changes quickstart
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
<div className="col-12 col-md-4 mt-3">
|
||||
<p>
|
||||
@ -126,27 +126,27 @@ export const GettingStarted: React.FunctionComponent<GettingStartedProps> = ({ f
|
||||
</p>
|
||||
<p>
|
||||
Learn about the batch spec{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/batch_changes/references/batch_spec_yaml_reference"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/batch_changes/references/batch_spec_yaml_reference"
|
||||
rel="noopener"
|
||||
>
|
||||
YAML reference
|
||||
</a>
|
||||
</Link>
|
||||
, its powerful{' '}
|
||||
<a href="https://docs.sourcegraph.com/batch_changes/references/batch_spec_templating">
|
||||
<Link to="https://docs.sourcegraph.com/batch_changes/references/batch_spec_templating">
|
||||
templating language
|
||||
</a>
|
||||
</Link>
|
||||
,{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/batch_changes/explanations/permissions_in_batch_changes"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/batch_changes/explanations/permissions_in_batch_changes"
|
||||
rel="noopener"
|
||||
>
|
||||
permissions
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
and more in the{' '}
|
||||
<a href="https://docs.sourcegraph.com/batch_changes" rel="noopener">
|
||||
<Link to="https://docs.sourcegraph.com/batch_changes" rel="noopener">
|
||||
Batch Changes documentation
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</p>
|
||||
</div>
|
||||
@ -160,9 +160,9 @@ export const GettingStarted: React.FunctionComponent<GettingStartedProps> = ({ f
|
||||
View the product marketing page for a high-level overview of benefits and customer use
|
||||
cases.
|
||||
</p>
|
||||
<a href="https://about.sourcegraph.com/batch-changes" rel="noopener">
|
||||
<Link to="https://about.sourcegraph.com/batch-changes" rel="noopener">
|
||||
Batch Changes marketing page
|
||||
</a>
|
||||
</Link>
|
||||
</CardBody>
|
||||
</Card>
|
||||
</div>
|
||||
|
||||
@ -293,8 +293,8 @@ const ExpandedSection: React.FunctionComponent<
|
||||
<ul className="nav nav-tabs d-inline-flex d-sm-flex flex-nowrap text-nowrap">
|
||||
<li className="nav-item">
|
||||
{/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
|
||||
<a
|
||||
href=""
|
||||
<Link
|
||||
to=""
|
||||
role="button"
|
||||
onClick={onSelectDiff}
|
||||
className={classNames(
|
||||
@ -316,12 +316,12 @@ const ExpandedSection: React.FunctionComponent<
|
||||
/>
|
||||
</small>
|
||||
)}
|
||||
</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li className="nav-item">
|
||||
{/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
|
||||
<a
|
||||
href=""
|
||||
<Link
|
||||
to=""
|
||||
role="button"
|
||||
onClick={onSelectDescription}
|
||||
className={classNames(
|
||||
@ -343,12 +343,12 @@ const ExpandedSection: React.FunctionComponent<
|
||||
/>
|
||||
</small>
|
||||
)}
|
||||
</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li className="nav-item">
|
||||
{/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
|
||||
<a
|
||||
href=""
|
||||
<Link
|
||||
to=""
|
||||
role="button"
|
||||
onClick={onSelectCommits}
|
||||
className={classNames(
|
||||
@ -372,7 +372,7 @@ const ExpandedSection: React.FunctionComponent<
|
||||
/>
|
||||
</small>
|
||||
)}
|
||||
</a>
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@ -4,7 +4,7 @@ import React, { useCallback, useState } from 'react'
|
||||
import { ErrorAlert } from '@sourcegraph/branded/src/components/alerts'
|
||||
import { Form } from '@sourcegraph/branded/src/components/Form'
|
||||
import { asError, isErrorLike } from '@sourcegraph/common'
|
||||
import { Button, LoadingSpinner, Modal } from '@sourcegraph/wildcard'
|
||||
import { Button, LoadingSpinner, Modal, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { ExternalServiceKind, Scalars } from '../../../graphql-operations'
|
||||
|
||||
@ -32,26 +32,26 @@ const HELP_TEXT_LINK_URL = 'https://docs.sourcegraph.com/batch_changes/quickstar
|
||||
const helpTexts: Record<ExternalServiceKind, JSX.Element> = {
|
||||
[ExternalServiceKind.GITHUB]: (
|
||||
<>
|
||||
<a href={HELP_TEXT_LINK_URL} rel="noreferrer noopener" target="_blank">
|
||||
<Link to={HELP_TEXT_LINK_URL} rel="noreferrer noopener" target="_blank">
|
||||
Create a new access token
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
with the <code>repo</code>, <code>read:org</code>, <code>user:email</code>, <code>read:discussion</code>,
|
||||
and <code>workflow</code> scopes.
|
||||
</>
|
||||
),
|
||||
[ExternalServiceKind.GITLAB]: (
|
||||
<>
|
||||
<a href={HELP_TEXT_LINK_URL} rel="noreferrer noopener" target="_blank">
|
||||
<Link to={HELP_TEXT_LINK_URL} rel="noreferrer noopener" target="_blank">
|
||||
Create a new access token
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
with <code>api</code>, <code>read_repository</code>, and <code>write_repository</code> scopes.
|
||||
</>
|
||||
),
|
||||
[ExternalServiceKind.BITBUCKETSERVER]: (
|
||||
<>
|
||||
<a href={HELP_TEXT_LINK_URL} rel="noreferrer noopener" target="_blank">
|
||||
<Link to={HELP_TEXT_LINK_URL} rel="noreferrer noopener" target="_blank">
|
||||
Create a new access token
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
with <code>write</code> permissions on the project and repository level.
|
||||
</>
|
||||
),
|
||||
|
||||
@ -2,7 +2,7 @@ import React, { useCallback, useMemo } from 'react'
|
||||
import { RouteComponentProps } from 'react-router'
|
||||
import { Observable, Subject } from 'rxjs'
|
||||
|
||||
import { Container } from '@sourcegraph/wildcard'
|
||||
import { Container, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { FilteredConnection } from '../../../components/FilteredConnection'
|
||||
import {
|
||||
@ -74,9 +74,13 @@ export const CodeHostConnections: React.FunctionComponent<CodeHostConnectionsPro
|
||||
/>
|
||||
<p className="mb-0">
|
||||
Code host not present? Site admins can add a code host in{' '}
|
||||
<a href="https://docs.sourcegraph.com/admin/external_service" target="_blank" rel="noopener noreferrer">
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/admin/external_service"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
the manage repositories settings
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</p>
|
||||
</Container>
|
||||
|
||||
@ -3,7 +3,7 @@ import { noop } from 'lodash'
|
||||
import ContentCopyIcon from 'mdi-react/ContentCopyIcon'
|
||||
import React, { useCallback, useState } from 'react'
|
||||
|
||||
import { Button, TextArea } from '@sourcegraph/wildcard'
|
||||
import { Button, TextArea, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { ExternalServiceKind } from '../../../graphql-operations'
|
||||
|
||||
@ -65,9 +65,9 @@ export const CodeHostSshPublicKey: React.FunctionComponent<CodeHostSshPublicKeyP
|
||||
/>
|
||||
{showInstructionsLink && (
|
||||
<p>
|
||||
<a href={configInstructionLinks[externalServiceKind]} target="_blank" rel="noopener">
|
||||
<Link to={configInstructionLinks[externalServiceKind]} target="_blank" rel="noopener">
|
||||
Configuration instructions
|
||||
</a>
|
||||
</Link>
|
||||
</p>
|
||||
)}
|
||||
</>
|
||||
|
||||
@ -117,7 +117,7 @@ export const CodeMonitorList: React.FunctionComponent<CodeMonitorListProps> = ({
|
||||
</div>
|
||||
</div>
|
||||
<div className="mt-5">
|
||||
We want to hear your feedback! <a href="mailto:feedback@sourcegraph.com">Share your thoughts</a>
|
||||
We want to hear your feedback! <Link to="mailto:feedback@sourcegraph.com">Share your thoughts</Link>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
|
||||
@ -125,9 +125,9 @@ export const CodeMonitoringGettingStarted: React.FunctionComponent<CodeMonitorin
|
||||
Craft searches that will monitor your code and trigger actions such as email
|
||||
notifications.
|
||||
</p>
|
||||
<a href="https://docs.sourcegraph.com/code_monitoring" className="link">
|
||||
<Link to="https://docs.sourcegraph.com/code_monitoring" className="link">
|
||||
Code monitoring documentation
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-4">
|
||||
@ -137,12 +137,12 @@ export const CodeMonitoringGettingStarted: React.FunctionComponent<CodeMonitorin
|
||||
Find specific examples of useful code monitors to keep on top of security and
|
||||
consistency concerns.
|
||||
</p>
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_monitoring/how-tos/starting_points"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_monitoring/how-tos/starting_points"
|
||||
className="link"
|
||||
>
|
||||
Explore starting points
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
{isSignedIn ? (
|
||||
@ -152,9 +152,9 @@ export const CodeMonitoringGettingStarted: React.FunctionComponent<CodeMonitorin
|
||||
<p className="text-muted">
|
||||
Have a question or idea about code monitoring? We want to hear your feedback!
|
||||
</p>
|
||||
<a href="mailto:feedback@sourcegraph.com" className="link">
|
||||
<Link to="mailto:feedback@sourcegraph.com" className="link">
|
||||
Share your thoughts
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
|
||||
@ -121,8 +121,8 @@ export const CodeMonitoringPage: React.FunctionComponent<CodeMonitoringPageProps
|
||||
<div className="nav nav-tabs">
|
||||
<div className="nav-item">
|
||||
{/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
|
||||
<a
|
||||
href=""
|
||||
<Link
|
||||
to=""
|
||||
onClick={event => {
|
||||
event.preventDefault()
|
||||
setCurrentTab('list')
|
||||
@ -133,12 +133,12 @@ export const CodeMonitoringPage: React.FunctionComponent<CodeMonitoringPageProps
|
||||
<span className="text-content" data-tab-content="Code monitors">
|
||||
Code monitors
|
||||
</span>
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
<div className="nav-item">
|
||||
{/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
|
||||
<a
|
||||
href=""
|
||||
<Link
|
||||
to=""
|
||||
onClick={event => {
|
||||
event.preventDefault()
|
||||
setCurrentTab('getting-started')
|
||||
@ -149,7 +149,7 @@ export const CodeMonitoringPage: React.FunctionComponent<CodeMonitoringPageProps
|
||||
<span className="text-content" data-tab-content="Getting started">
|
||||
Getting started
|
||||
</span>
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -2,7 +2,7 @@ import * as H from 'history'
|
||||
import React, { useCallback, useEffect, useMemo } from 'react'
|
||||
import { Observable } from 'rxjs'
|
||||
|
||||
import { PageHeader } from '@sourcegraph/wildcard'
|
||||
import { PageHeader, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { AuthenticatedUser } from '../../auth'
|
||||
import { withAuthenticatedUser } from '../../auth/withAuthenticatedUser'
|
||||
@ -71,13 +71,13 @@ const AuthenticatedCreateCodeMonitorPage: React.FunctionComponent<CreateCodeMoni
|
||||
description={
|
||||
<>
|
||||
Code monitors watch your code for specific triggers and run actions in response.{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_monitoring/how-tos/starting_points"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_monitoring/how-tos/starting_points"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>
|
||||
Learn more
|
||||
</a>
|
||||
</Link>
|
||||
</>
|
||||
}
|
||||
/>
|
||||
|
||||
@ -6,7 +6,7 @@ import { startWith, catchError, tap } from 'rxjs/operators'
|
||||
|
||||
import { asError, isErrorLike } from '@sourcegraph/common'
|
||||
import { Scalars } from '@sourcegraph/shared/src/graphql-operations'
|
||||
import { PageHeader, LoadingSpinner, useObservable } from '@sourcegraph/wildcard'
|
||||
import { PageHeader, Link, LoadingSpinner, useObservable } from '@sourcegraph/wildcard'
|
||||
|
||||
import { AuthenticatedUser } from '../../auth'
|
||||
import { withAuthenticatedUser } from '../../auth/withAuthenticatedUser'
|
||||
@ -95,9 +95,9 @@ const AuthenticatedManageCodeMonitorPage: React.FunctionComponent<ManageCodeMoni
|
||||
description={
|
||||
<>
|
||||
Code monitors watch your code for specific triggers and run actions in response.{' '}
|
||||
<a href="https://docs.sourcegraph.com/code_monitoring" target="_blank" rel="noopener">
|
||||
<Link to="https://docs.sourcegraph.com/code_monitoring" target="_blank" rel="noopener">
|
||||
Learn more
|
||||
</a>
|
||||
</Link>
|
||||
</>
|
||||
}
|
||||
/>
|
||||
|
||||
@ -8,7 +8,7 @@ import { mergeMap, startWith, catchError, tap, filter } from 'rxjs/operators'
|
||||
import { Form } from '@sourcegraph/branded/src/components/Form'
|
||||
import { Toggle } from '@sourcegraph/branded/src/components/Toggle'
|
||||
import { asError, isErrorLike } from '@sourcegraph/common'
|
||||
import { Container, Button, useEventObservable, Alert } from '@sourcegraph/wildcard'
|
||||
import { Container, Button, useEventObservable, Alert, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { AuthenticatedUser } from '../../../auth'
|
||||
import { CodeMonitorFields } from '../../../graphql-operations'
|
||||
@ -168,13 +168,13 @@ export const CodeMonitorForm: React.FunctionComponent<CodeMonitorFormProps> = ({
|
||||
<small className="text-muted">
|
||||
Give it a short, descriptive name to reference events on Sourcegraph and in notifications.
|
||||
Do not include{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_monitoring/explanations/best_practices#do-not-include-confidential-information-in-monitor-names"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_monitoring/explanations/best_practices#do-not-include-confidential-information-in-monitor-names"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>
|
||||
confidential information
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</small>
|
||||
</div>
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
import React, { useEffect, useState } from 'react'
|
||||
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { AuthenticatedUser } from '../../../auth'
|
||||
import { CodeMonitorFields } from '../../../graphql-operations'
|
||||
import { useExperimentalFeatures } from '../../../stores'
|
||||
@ -111,9 +113,9 @@ export const FormActionArea: React.FunctionComponent<ActionAreaProps> = ({
|
||||
|
||||
<small className="text-muted">
|
||||
What other actions would you like to take?{' '}
|
||||
<a href="mailto:feedback@sourcegraph.com" target="_blank" rel="noopener">
|
||||
<Link to="mailto:feedback@sourcegraph.com" target="_blank" rel="noopener">
|
||||
Share feedback.
|
||||
</a>
|
||||
</Link>
|
||||
</small>
|
||||
</>
|
||||
)
|
||||
|
||||
@ -332,9 +332,9 @@ export const FormTriggerArea: React.FunctionComponent<TriggerAreaProps> = ({
|
||||
<small className="text-muted">
|
||||
{' '}
|
||||
What other events would you like to monitor?{' '}
|
||||
<a href="mailto:feedback@sourcegraph.com" target="_blank" rel="noopener">
|
||||
<Link to="mailto:feedback@sourcegraph.com" target="_blank" rel="noopener">
|
||||
Share feedback.
|
||||
</a>
|
||||
</Link>
|
||||
</small>
|
||||
</>
|
||||
)
|
||||
|
||||
@ -126,6 +126,7 @@ exports[`FormActionArea Error is shown if code monitor has empty description 1`]
|
||||
>
|
||||
What other actions would you like to take?
|
||||
<a
|
||||
class=""
|
||||
href="mailto:feedback@sourcegraph.com"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
|
||||
@ -294,6 +294,7 @@ exports[`FormTriggerArea Correct checkboxes shown when query does not fulfill re
|
||||
>
|
||||
What other events would you like to monitor?
|
||||
<a
|
||||
class=""
|
||||
href="mailto:feedback@sourcegraph.com"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import React, { useCallback, useState } from 'react'
|
||||
|
||||
import { Alert, Button, ProductStatusBadge } from '@sourcegraph/wildcard'
|
||||
import { Alert, Button, Link, ProductStatusBadge } from '@sourcegraph/wildcard'
|
||||
|
||||
import { ActionProps } from '../FormActionArea'
|
||||
|
||||
@ -68,9 +68,9 @@ export const SlackWebhookAction: React.FunctionComponent<ActionProps> = ({
|
||||
>
|
||||
<Alert variant="info" className="mt-4">
|
||||
Go to{' '}
|
||||
<a href="https://api.slack.com/" target="_blank" rel="noopener">
|
||||
<Link to="https://api.slack.com/" target="_blank" rel="noopener">
|
||||
Slack
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
to create a webhook URL. If you already have a Slack webhook URL, paste it in the field below.{' '}
|
||||
Documentation coming soon. {/* TODO: Add link to documentation once #27161 is resolved */}
|
||||
</Alert>
|
||||
|
||||
@ -1,18 +1,20 @@
|
||||
import MapSearchIcon from 'mdi-react/MapSearchIcon'
|
||||
import React from 'react'
|
||||
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
export const EmptyPoliciesList: React.FunctionComponent = () => (
|
||||
<p className="text-muted text-center w-100 mb-0 mt-1" data-testid="summary">
|
||||
<MapSearchIcon className="mb-2" />
|
||||
<br />
|
||||
{'No policies have been defined. Enable precise code intelligence by '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_intelligence/how-to/configure_data_retention"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_intelligence/how-to/configure_data_retention"
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
>
|
||||
configuring data retention policies
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</p>
|
||||
)
|
||||
|
||||
@ -1,18 +1,20 @@
|
||||
import MapSearchIcon from 'mdi-react/MapSearchIcon'
|
||||
import React from 'react'
|
||||
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
export const EmptyAutoIndex: React.FunctionComponent = () => (
|
||||
<p className="text-muted text-center w-100 mb-0 mt-1" data-testid="summary">
|
||||
<MapSearchIcon className="mb-2" />
|
||||
<br />
|
||||
{'No indexes yet. Enable precise code intelligence by '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_intelligence/how-to/index_a_go_repository"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_intelligence/how-to/index_a_go_repository"
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
>
|
||||
auto-indexing LSIF data
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</p>
|
||||
)
|
||||
|
||||
@ -1,18 +1,20 @@
|
||||
import MapSearchIcon from 'mdi-react/MapSearchIcon'
|
||||
import React from 'react'
|
||||
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
export const EmptyUploads: React.FunctionComponent = () => (
|
||||
<p className="text-muted text-center w-100 mb-0 mt-1">
|
||||
<MapSearchIcon className="mb-2" />
|
||||
<br />
|
||||
No uploads yet. Enable precise code intelligence by{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_intelligence/explanations/precise_code_intelligence"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_intelligence/explanations/precise_code_intelligence"
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
>
|
||||
uploading LSIF data
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</p>
|
||||
)
|
||||
|
||||
@ -7,7 +7,7 @@ import { ErrorAlert } from '@sourcegraph/branded/src/components/alerts'
|
||||
import { asError, createAggregateError, isErrorLike } from '@sourcegraph/common'
|
||||
import { gql } from '@sourcegraph/http-client'
|
||||
import * as GQL from '@sourcegraph/shared/src/schema'
|
||||
import { RadioButton, LoadingSpinner, useObservable } from '@sourcegraph/wildcard'
|
||||
import { RadioButton, LoadingSpinner, useObservable, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { queryGraphQL } from '../../../backend/graphql'
|
||||
|
||||
@ -105,9 +105,9 @@ export const ProductPlanFormControl: React.FunctionComponent<Props> = ({
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
<a href="https://about.sourcegraph.com/pricing" className="small">
|
||||
<Link to="https://about.sourcegraph.com/pricing" className="small">
|
||||
Compare plans
|
||||
</a>
|
||||
</Link>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@ -2,6 +2,7 @@ import classNames from 'classnames'
|
||||
import React from 'react'
|
||||
|
||||
import * as GQL from '@sourcegraph/shared/src/schema'
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
/**
|
||||
* Displays an inline list of email addresses for an account.
|
||||
@ -15,7 +16,7 @@ export const AccountEmailAddresses: React.FunctionComponent<{
|
||||
key={index}
|
||||
className={classNames('text-nowrap d-inline-block mr-2', !verified && 'text-muted font-italic')}
|
||||
>
|
||||
<a href={`mailto:${email}`}>{email}</a> {verified ? '(verified)' : '(unverified)'}
|
||||
<Link to={`mailto:${email}`}>{email}</Link> {verified ? '(verified)' : '(unverified)'}
|
||||
</span>
|
||||
))}
|
||||
</>
|
||||
|
||||
@ -13,7 +13,7 @@ import {
|
||||
} from '@sourcegraph/web/src/components/FilteredConnection'
|
||||
import { PageTitle } from '@sourcegraph/web/src/components/PageTitle'
|
||||
import { Timestamp } from '@sourcegraph/web/src/components/time/Timestamp'
|
||||
import { Badge, Container, PageHeader } from '@sourcegraph/wildcard'
|
||||
import { Badge, Container, Link, PageHeader } from '@sourcegraph/wildcard'
|
||||
|
||||
import { ExecutorFields } from '../../graphql-operations'
|
||||
import { eventLogger } from '../../tracking/eventLogger'
|
||||
@ -80,17 +80,17 @@ export const ExecutorsListPage: FunctionComponent<ExecutorsListPageProps> = ({
|
||||
<h3>Setting up executors</h3>
|
||||
<p className="mb-0">
|
||||
Executors enable{' '}
|
||||
<a href="https://docs.sourcegraph.com/code_intelligence/explanations/auto_indexing" rel="noopener">
|
||||
<Link to="https://docs.sourcegraph.com/code_intelligence/explanations/auto_indexing" rel="noopener">
|
||||
auto-indexing for Code Intelligence
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
and{' '}
|
||||
<a href="https://docs.sourcegraph.com/batch_changes/explanations/server_side" rel="noopener">
|
||||
<Link to="https://docs.sourcegraph.com/batch_changes/explanations/server_side" rel="noopener">
|
||||
server-side Batch Changes
|
||||
</a>
|
||||
</Link>
|
||||
. In order to use those features,{' '}
|
||||
<a href="https://docs.sourcegraph.com/admin/deploy_executors" rel="noopener">
|
||||
<Link to="https://docs.sourcegraph.com/admin/deploy_executors" rel="noopener">
|
||||
set them up
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</p>
|
||||
</Container>
|
||||
|
||||
@ -16,7 +16,7 @@ import * as GQL from '@sourcegraph/shared/src/schema'
|
||||
import extensionSchemaJSON from '@sourcegraph/shared/src/schema/extension.schema.json'
|
||||
import { TelemetryProps } from '@sourcegraph/shared/src/telemetry/telemetryService'
|
||||
import { ThemeProps } from '@sourcegraph/shared/src/theme'
|
||||
import { Button, LoadingSpinner, useLocalStorage, useEventObservable } from '@sourcegraph/wildcard'
|
||||
import { Button, LoadingSpinner, useLocalStorage, useEventObservable, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { AuthenticatedUser } from '../../../auth'
|
||||
import { withAuthenticatedUser } from '../../../auth/withAuthenticatedUser'
|
||||
@ -133,9 +133,9 @@ export const RegistryExtensionNewReleasePage = withAuthenticatedUser<Props>(
|
||||
<h2>Publish new release</h2>
|
||||
<p>
|
||||
Use the{' '}
|
||||
<a href="https://github.com/sourcegraph/src-cli" target="_blank" rel="noopener noreferrer">
|
||||
<Link to="https://github.com/sourcegraph/src-cli" target="_blank" rel="noopener noreferrer">
|
||||
<code>src</code> CLI tool
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
to publish a new release:
|
||||
</p>
|
||||
<pre>
|
||||
|
||||
@ -14,7 +14,7 @@ import { asError, createAggregateError, ErrorLike, isErrorLike } from '@sourcegr
|
||||
import { gql } from '@sourcegraph/http-client'
|
||||
import { Scalars } from '@sourcegraph/shared/src/graphql-operations'
|
||||
import * as GQL from '@sourcegraph/shared/src/schema'
|
||||
import { LoadingSpinner, Button } from '@sourcegraph/wildcard'
|
||||
import { LoadingSpinner, Button, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { AuthenticatedUser } from '../../../auth'
|
||||
import { withAuthenticatedUser } from '../../../auth/withAuthenticatedUser'
|
||||
@ -168,13 +168,13 @@ export const RegistryNewExtensionPage = withAuthenticatedUser(
|
||||
<PuzzleIcon className="icon-inline" /> New extension
|
||||
</h2>
|
||||
<div className="mb-3">
|
||||
<a target="_blank" rel="noopener" href="https://docs.sourcegraph.com/extensions/authoring">
|
||||
<Link target="_blank" rel="noopener" to="https://docs.sourcegraph.com/extensions/authoring">
|
||||
Learn more
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
about authoring Sourcegraph extensions{' '}
|
||||
<a target="_blank" rel="noopener" href="https://docs.sourcegraph.com/extensions/authoring">
|
||||
<Link target="_blank" rel="noopener" to="https://docs.sourcegraph.com/extensions/authoring">
|
||||
<HelpCircleOutline className="icon-inline" />
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
<Form onSubmit={this.onSubmit}>
|
||||
<RegistryPublisherFormGroup
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import React, { useState } from 'react'
|
||||
|
||||
import { Button, ProductStatusBadge, Popover, PopoverTrigger, PopoverContent } from '@sourcegraph/wildcard'
|
||||
import { Button, ProductStatusBadge, Popover, PopoverTrigger, PopoverContent, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { FeedbackPromptContent } from '../../../../nav/Feedback'
|
||||
|
||||
@ -11,9 +11,9 @@ export const BetaFeedbackPanel: React.FunctionComponent = () => {
|
||||
|
||||
return (
|
||||
<div className="d-flex align-items-center">
|
||||
<a href="https://docs.sourcegraph.com/code_insights#code-insights-beta" target="_blank" rel="noopener">
|
||||
<Link to="https://docs.sourcegraph.com/code_insights#code-insights-beta" target="_blank" rel="noopener">
|
||||
<ProductStatusBadge status="beta" className="text-uppercase" />
|
||||
</a>
|
||||
</Link>
|
||||
|
||||
<Popover isOpen={isVisible} onOpenChange={event => setVisibility(event.isOpen)}>
|
||||
<PopoverTrigger as={Button} variant="link" size="sm">
|
||||
|
||||
@ -4,7 +4,7 @@ import PlusIcon from 'mdi-react/PlusIcon'
|
||||
import React from 'react'
|
||||
|
||||
import { ErrorAlert } from '@sourcegraph/branded/src/components/alerts'
|
||||
import { Button } from '@sourcegraph/wildcard'
|
||||
import { Button, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { LoaderButton } from '../../../../../../../../../../components/LoaderButton'
|
||||
import { FormInput } from '../../../../../../../form/form-input/FormInput'
|
||||
@ -101,14 +101,14 @@ export const DrillDownFiltersForm: React.FunctionComponent<DrillDownFiltersFormP
|
||||
{hasAppliedFilters && (
|
||||
<small className="ml-auto">
|
||||
<span className="text-muted">Default filters applied</span>{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_insights/explanations/code_insights_filters"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_insights/explanations/code_insights_filters"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
className="small"
|
||||
>
|
||||
Learn more.
|
||||
</a>
|
||||
</Link>
|
||||
</small>
|
||||
)}
|
||||
</header>
|
||||
|
||||
@ -2,7 +2,7 @@ import React, { useRef } from 'react'
|
||||
import { useHistory } from 'react-router'
|
||||
|
||||
import { useTemporarySetting } from '@sourcegraph/shared/src/settings/temporary/useTemporarySetting'
|
||||
import { Button, useAutoFocus, Modal } from '@sourcegraph/wildcard'
|
||||
import { Button, useAutoFocus, Modal, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import styles from './BetaConfirmationModal.module.scss'
|
||||
import { FourLineChart, LangStatsInsightChart, ThreeLineChart } from './components/MediaCharts'
|
||||
@ -71,13 +71,13 @@ export const BetaConfirmationModalContent: React.FunctionComponent<BetaConfirmat
|
||||
|
||||
<p>
|
||||
We're still polishing Code Insights and you might find bugs while we’re in beta. Please{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_insights#code-insights-beta"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_insights#code-insights-beta"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>
|
||||
share any bugs 🐛 or feedback
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
to help us make Code Insights better.
|
||||
</p>
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ import { useHistory } from 'react-router-dom'
|
||||
|
||||
import { asError } from '@sourcegraph/common'
|
||||
import { TelemetryProps } from '@sourcegraph/shared/src/telemetry/telemetryService'
|
||||
import { PageHeader, Container, Button, LoadingSpinner, useObservable } from '@sourcegraph/wildcard'
|
||||
import { PageHeader, Container, Button, LoadingSpinner, useObservable, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { LoaderButton } from '../../../../../components/LoaderButton'
|
||||
import { Page } from '../../../../../components/Page'
|
||||
@ -59,13 +59,13 @@ export const InsightsDashboardCreationPage: React.FunctionComponent<InsightsDash
|
||||
|
||||
<span className="text-muted d-block mt-2">
|
||||
Dashboards group your insights and let you share them with others.{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_insights/explanations/viewing_code_insights"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_insights/explanations/viewing_code_insights"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>
|
||||
Learn more.
|
||||
</a>
|
||||
</Link>
|
||||
</span>
|
||||
|
||||
<Container className="mt-4">
|
||||
|
||||
@ -108,13 +108,13 @@ export const EditDashboardPage: React.FunctionComponent<EditDashboardPageProps>
|
||||
|
||||
<span className="text-muted d-block mt-2">
|
||||
Dashboards group your insights and let you share them with others.{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_insights/explanations/viewing_code_insights"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_insights/explanations/viewing_code_insights"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>
|
||||
Learn more.
|
||||
</a>
|
||||
</Link>
|
||||
</span>
|
||||
|
||||
<Container className="mt-4">
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import React, { useEffect } from 'react'
|
||||
|
||||
import { TelemetryProps } from '@sourcegraph/shared/src/telemetry/telemetryService'
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { Page } from '../../../../../../components/Page'
|
||||
import { PageTitle } from '../../../../../../components/PageTitle'
|
||||
@ -64,9 +65,9 @@ export const CaptureGroupCreationPage: React.FunctionComponent<CaptureGroupCreat
|
||||
|
||||
<p className="text-muted">
|
||||
Search-based code insights analyze your code based on any search query.{' '}
|
||||
<a href="https://docs.sourcegraph.com/code_insights" target="_blank" rel="noopener">
|
||||
<Link to="https://docs.sourcegraph.com/code_insights" target="_blank" rel="noopener">
|
||||
Learn more.
|
||||
</a>
|
||||
</Link>
|
||||
</p>
|
||||
</header>
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@ import classNames from 'classnames'
|
||||
import React from 'react'
|
||||
|
||||
import { ErrorAlert } from '@sourcegraph/branded/src/components/alerts'
|
||||
import { Button, Card } from '@sourcegraph/wildcard'
|
||||
import { Button, Card, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { LoaderButton } from '../../../../../../../components/LoaderButton'
|
||||
import { CodeInsightTimeStepPicker } from '../../../../../components/creation-ui-kit'
|
||||
@ -91,13 +91,13 @@ export const CaptureGroupCreationForm: React.FunctionComponent<CaptureGroupCreat
|
||||
|
||||
<small className="w-100 mt-2 text-muted">
|
||||
This feature is actively in development. Read about the{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_insights/explanations/current_limitations_of_code_insights"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_insights/explanations/current_limitations_of_code_insights"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
beta limitations here.
|
||||
</a>
|
||||
</Link>
|
||||
</small>
|
||||
</label>
|
||||
</FormGroup>
|
||||
@ -110,13 +110,13 @@ export const CaptureGroupCreationForm: React.FunctionComponent<CaptureGroupCreat
|
||||
subtitle={
|
||||
<>
|
||||
Generated dynamically for each unique value from the regular expression capture group.{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_insights/explanations/automatically_generated_data_series"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_insights/explanations/automatically_generated_data_series"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>
|
||||
Learn more.
|
||||
</a>
|
||||
</Link>
|
||||
</>
|
||||
}
|
||||
>
|
||||
@ -143,21 +143,21 @@ export const CaptureGroupCreationForm: React.FunctionComponent<CaptureGroupCreat
|
||||
|
||||
<small className="mt-3">
|
||||
Explore{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_insights/references/common_use_cases#automatic-version-and-pattern-tracking"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_insights/references/common_use_cases#automatic-version-and-pattern-tracking"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
example queries
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
and learn more about{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_insights/explanations/automatically_generated_data_series"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_insights/explanations/automatically_generated_data_series"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
automatically generated data series
|
||||
</a>
|
||||
</Link>
|
||||
</small>
|
||||
</Card>
|
||||
</FormGroup>
|
||||
@ -224,13 +224,13 @@ export const CaptureGroupCreationForm: React.FunctionComponent<CaptureGroupCreat
|
||||
const QueryFieldSubtitle: React.FunctionComponent<{ className?: string }> = props => (
|
||||
<small className={classNames(props.className, 'text-muted', 'd-block', 'font-weight-normal')}>
|
||||
Search query must contain a properly formatted regular expression with at least one{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_insights/explanations/automatically_generated_data_series#regular-expression-capture-group-resources"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_insights/explanations/automatically_generated_data_series#regular-expression-capture-group-resources"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>
|
||||
capture group.
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
The capture group cannot match file or repository names, it can match only the file contents.
|
||||
</small>
|
||||
)
|
||||
|
||||
@ -4,7 +4,7 @@ import { useHistory } from 'react-router'
|
||||
import { useLocation } from 'react-router-dom'
|
||||
|
||||
import { TelemetryProps } from '@sourcegraph/shared/src/telemetry/telemetryService'
|
||||
import { PageHeader } from '@sourcegraph/wildcard'
|
||||
import { PageHeader, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { Page } from '../../../../../../components/Page'
|
||||
import { CodeInsightsIcon } from '../../../../../../insights/Icons'
|
||||
@ -64,9 +64,9 @@ export const IntroCreationPage: React.FunctionComponent<IntroCreationPageProps>
|
||||
description={
|
||||
<>
|
||||
Insights analyze your code based on any search query.{' '}
|
||||
<a href="https://docs.sourcegraph.com/code_insights" target="_blank" rel="noopener">
|
||||
<Link to="https://docs.sourcegraph.com/code_insights" target="_blank" rel="noopener">
|
||||
Learn more
|
||||
</a>
|
||||
</Link>
|
||||
</>
|
||||
}
|
||||
className={styles.header}
|
||||
@ -89,13 +89,13 @@ export const IntroCreationPage: React.FunctionComponent<IntroCreationPageProps>
|
||||
|
||||
<div className={styles.info}>
|
||||
Not sure which insight type to choose? Learn more about the{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_insights/references/common_use_cases"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_insights/references/common_use_cases"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>
|
||||
use cases.
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<ExtensionInsightsCard data-testid="explore-extensions" onClick={handleExploreExtensionsClick} />
|
||||
|
||||
@ -3,7 +3,7 @@ import React, { useCallback, useEffect } from 'react'
|
||||
|
||||
import { asError } from '@sourcegraph/common'
|
||||
import { TelemetryProps } from '@sourcegraph/shared/src/telemetry/telemetryService'
|
||||
import { useLocalStorage } from '@sourcegraph/wildcard'
|
||||
import { useLocalStorage, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { Page } from '../../../../../../components/Page'
|
||||
import { PageTitle } from '../../../../../../components/PageTitle'
|
||||
@ -116,9 +116,9 @@ export const LangStatsInsightCreationPage: React.FunctionComponent<LangStatsInsi
|
||||
|
||||
<p className="text-muted">
|
||||
Shows language usage in your repository based on number of lines of code.{' '}
|
||||
<a href="https://docs.sourcegraph.com/code_insights" target="_blank" rel="noopener">
|
||||
<Link to="https://docs.sourcegraph.com/code_insights" target="_blank" rel="noopener">
|
||||
Learn more.
|
||||
</a>
|
||||
</Link>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ import React, { useCallback, useEffect } from 'react'
|
||||
|
||||
import { asError } from '@sourcegraph/common'
|
||||
import { TelemetryProps } from '@sourcegraph/shared/src/telemetry/telemetryService'
|
||||
import { LoadingSpinner } from '@sourcegraph/wildcard'
|
||||
import { LoadingSpinner, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { Page } from '../../../../../../components/Page'
|
||||
import { PageTitle } from '../../../../../../components/PageTitle'
|
||||
@ -126,9 +126,9 @@ export const SearchInsightCreationPage: React.FunctionComponent<SearchInsightCre
|
||||
|
||||
<p className="text-muted">
|
||||
Search-based code insights analyze your code based on any search query.{' '}
|
||||
<a href="https://docs.sourcegraph.com/code_insights" target="_blank" rel="noopener">
|
||||
<Link to="https://docs.sourcegraph.com/code_insights" target="_blank" rel="noopener">
|
||||
Learn more.
|
||||
</a>
|
||||
</Link>
|
||||
</p>
|
||||
</header>
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@ import classNames from 'classnames'
|
||||
import React from 'react'
|
||||
import { noop } from 'rxjs'
|
||||
|
||||
import { Button, Card } from '@sourcegraph/wildcard'
|
||||
import { Button, Card, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { FormInput } from '../../../../../../components/form/form-input/FormInput'
|
||||
import { useField } from '../../../../../../components/form/hooks/useField'
|
||||
@ -189,13 +189,13 @@ const QueryFieldDescription: React.FunctionComponent<{ isSearchQueryDisabled: bo
|
||||
<>
|
||||
We don't yet allow editing queries for insights over all repos. To change the query, make a new insight.
|
||||
This is a known{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_insights/explanations/current_limitations_of_code_insights"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_insights/explanations/current_limitations_of_code_insights"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
beta limitation
|
||||
</a>
|
||||
</Link>
|
||||
</>
|
||||
)}
|
||||
</span>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import React, { FormEventHandler, RefObject, useContext } from 'react'
|
||||
|
||||
import { ErrorAlert } from '@sourcegraph/branded/src/components/alerts'
|
||||
import { Button } from '@sourcegraph/wildcard'
|
||||
import { Button, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { LoaderButton } from '../../../../../../../../components/LoaderButton'
|
||||
import { CodeInsightTimeStepPicker, VisibilityPicker } from '../../../../../../components/creation-ui-kit'
|
||||
@ -135,13 +135,13 @@ export const SearchInsightCreationForm: React.FunctionComponent<CreationSearchIn
|
||||
|
||||
<small className="w-100 mt-2 text-muted">
|
||||
This feature is actively in development. Read about the{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_insights/explanations/current_limitations_of_code_insights"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_insights/explanations/current_limitations_of_code_insights"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
beta limitations here.
|
||||
</a>
|
||||
</Link>
|
||||
</small>
|
||||
</label>
|
||||
|
||||
|
||||
@ -67,9 +67,9 @@ export const EditInsightPage: React.FunctionComponent<EditInsightPageProps> = pr
|
||||
|
||||
<p className="text-muted">
|
||||
Insights analyze your code based on any search query.{' '}
|
||||
<a href="https://docs.sourcegraph.com/code_insights" target="_blank" rel="noopener">
|
||||
<Link to="https://docs.sourcegraph.com/code_insights" target="_blank" rel="noopener">
|
||||
Learn more.
|
||||
</a>
|
||||
</Link>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import React from 'react'
|
||||
|
||||
import { Alert } from '@sourcegraph/wildcard'
|
||||
import { Alert, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
/**
|
||||
* Displays a warning in debug mode (which is on for local dev) that generated license keys aren't
|
||||
@ -15,8 +15,8 @@ export const LicenseGenerationKeyWarning: React.FunctionComponent<{ className?:
|
||||
window.context?.debug ? (
|
||||
<Alert className={className} variant="warning">
|
||||
License keys generated in dev mode are <strong>NOT VALID</strong>.{' '}
|
||||
<a href="https://sourcegraph.com/site-admin/dotcom/product/subscriptions">
|
||||
<Link to="https://sourcegraph.com/site-admin/dotcom/product/subscriptions">
|
||||
Use Sourcegraph.com to generate valid license keys.
|
||||
</a>
|
||||
</Link>
|
||||
</Alert>
|
||||
) : null
|
||||
|
||||
@ -2,6 +2,7 @@ import * as React from 'react'
|
||||
|
||||
import * as GQL from '@sourcegraph/shared/src/schema'
|
||||
import { numberWithCommas } from '@sourcegraph/shared/src/util/strings'
|
||||
import { Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { SingleValueCard } from '../../components/SingleValueCard'
|
||||
import { formatUserCount } from '../../productSubscription/helpers'
|
||||
@ -62,9 +63,9 @@ export const TrueUpStatusSummary: React.FunctionComponent<Props> = ({
|
||||
</div>
|
||||
<small>
|
||||
Learn more about{' '}
|
||||
<a href="https://about.sourcegraph.com/pricing" target="_blank" rel="noopener noreferrer">
|
||||
<Link to="https://about.sourcegraph.com/pricing" target="_blank" rel="noopener noreferrer">
|
||||
Sourcegraph's true-up pricing model
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</small>
|
||||
</div>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import * as H from 'history'
|
||||
import React, { useEffect, useMemo } from 'react'
|
||||
|
||||
import { Container, PageHeader, LoadingSpinner, useObservable, Alert } from '@sourcegraph/wildcard'
|
||||
import { Container, PageHeader, LoadingSpinner, useObservable, Alert, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { PageTitle } from '../../../components/PageTitle'
|
||||
import { Timestamp } from '../../../components/time/Timestamp'
|
||||
@ -41,9 +41,9 @@ export const RepoSettingsPermissionsPage: React.FunctionComponent<RepoSettingsPe
|
||||
description={
|
||||
<>
|
||||
Learn more about{' '}
|
||||
<a href="/help/admin/repo/permissions#background-permissions-syncing">
|
||||
<Link to="/help/admin/repo/permissions#background-permissions-syncing">
|
||||
background permissions syncing
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</>
|
||||
}
|
||||
|
||||
@ -15,7 +15,7 @@ import { TelemetryProps } from '@sourcegraph/shared/src/telemetry/telemetryServi
|
||||
import { ThemeProps } from '@sourcegraph/shared/src/theme'
|
||||
import { Page } from '@sourcegraph/web/src/components/Page'
|
||||
import { PageTitle } from '@sourcegraph/web/src/components/PageTitle'
|
||||
import { PageHeader } from '@sourcegraph/wildcard'
|
||||
import { PageHeader, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { AuthenticatedUser } from '../../auth'
|
||||
import { withAuthenticatedUser } from '../../auth/withAuthenticatedUser'
|
||||
@ -72,13 +72,13 @@ export const AuthenticatedCreateSearchContextPage: React.FunctionComponent<Creat
|
||||
<span className="text-muted">
|
||||
A search context represents a group of repositories at specified branches or revisions
|
||||
that will be targeted by search queries.{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_search/explanations/features#search-contexts"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_search/explanations/features#search-contexts"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Learn more
|
||||
</a>
|
||||
</Link>
|
||||
</span>
|
||||
}
|
||||
className="mb-3"
|
||||
|
||||
@ -85,13 +85,13 @@ export const SearchContextsListPage: React.FunctionComponent<SearchContextsListP
|
||||
description={
|
||||
<span className="text-muted">
|
||||
Search code you care about with search contexts.{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/code_search/explanations/features#search-contexts"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/code_search/explanations/features#search-contexts"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Learn more
|
||||
</a>
|
||||
</Link>
|
||||
</span>
|
||||
}
|
||||
className="mb-3"
|
||||
@ -100,8 +100,8 @@ export const SearchContextsListPage: React.FunctionComponent<SearchContextsListP
|
||||
<div className="nav nav-tabs">
|
||||
<div className="nav-item">
|
||||
{/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
|
||||
<a
|
||||
href=""
|
||||
<Link
|
||||
to=""
|
||||
role="button"
|
||||
onClick={onSelectSearchContextsList}
|
||||
className={classNames('nav-link', selectedTab === 'list' && 'active')}
|
||||
@ -109,7 +109,7 @@ export const SearchContextsListPage: React.FunctionComponent<SearchContextsListP
|
||||
<span className="text-content" data-tab-content="Your search contexts">
|
||||
Your search contexts
|
||||
</span>
|
||||
</a>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -6,7 +6,7 @@ import { map } from 'rxjs/operators'
|
||||
import { createAggregateError } from '@sourcegraph/common'
|
||||
import { gql } from '@sourcegraph/http-client'
|
||||
import * as GQL from '@sourcegraph/shared/src/schema'
|
||||
import { Button, Badge } from '@sourcegraph/wildcard'
|
||||
import { Button, Badge, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { queryGraphQL } from '../../backend/graphql'
|
||||
import { FilteredConnection } from '../../components/FilteredConnection'
|
||||
@ -82,9 +82,9 @@ export class SiteAdminAuthenticationProvidersPage extends React.Component<Props>
|
||||
<h2>Authentication providers</h2>
|
||||
<p>
|
||||
Authentication providers allow users to sign into Sourcegraph. See{' '}
|
||||
<a href="https://docs.sourcegraph.com/admin/auth">authentication documentation</a> about configuring
|
||||
single-sign-on (SSO) via SAML and OpenID Connect. Configure authentication providers in the{' '}
|
||||
<a href="https://docs.sourcegraph.com/admin/config/site_config">site configuration</a>.
|
||||
<Link to="https://docs.sourcegraph.com/admin/auth">authentication documentation</Link> about
|
||||
configuring single-sign-on (SSO) via SAML and OpenID Connect. Configure authentication providers in
|
||||
the <Link to="https://docs.sourcegraph.com/admin/config/site_config">site configuration</Link>.
|
||||
</p>
|
||||
<FilteredAuthProviderConnection
|
||||
className="list-group list-group-flush mt-3"
|
||||
|
||||
@ -7,7 +7,7 @@ import { catchError, map, mapTo, startWith, switchMap, tap } from 'rxjs/operator
|
||||
import { asError, createAggregateError, isErrorLike } from '@sourcegraph/common'
|
||||
import { gql } from '@sourcegraph/http-client'
|
||||
import * as GQL from '@sourcegraph/shared/src/schema'
|
||||
import { Button, useEventObservable } from '@sourcegraph/wildcard'
|
||||
import { Button, useEventObservable, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { requestGraphQL } from '../../../../backend/graphql'
|
||||
import { Scalars, SetCustomerBillingResult, SetCustomerBillingVariables } from '../../../../graphql-operations'
|
||||
@ -64,9 +64,9 @@ export const SiteAdminCustomerBillingLink: React.FunctionComponent<Props> = ({ c
|
||||
<div className="site-admin-customer-billing-link">
|
||||
<div className="d-flex align-items-center">
|
||||
{customer.urlForSiteAdminBilling && (
|
||||
<a href={customer.urlForSiteAdminBilling} className="mr-2 d-flex align-items-center">
|
||||
<Link to={customer.urlForSiteAdminBilling} className="mr-2 d-flex align-items-center">
|
||||
View customer account <ExternalLinkIcon className="icon-inline ml-1" />
|
||||
</a>
|
||||
</Link>
|
||||
)}
|
||||
{isErrorLike(update) && (
|
||||
<AlertCircleIcon className="icon-inline text-danger mr-2" data-tooltip={update.message} />
|
||||
|
||||
@ -10,7 +10,7 @@ import { asError, createAggregateError, isErrorLike } from '@sourcegraph/common'
|
||||
import { gql } from '@sourcegraph/http-client'
|
||||
import { Scalars } from '@sourcegraph/shared/src/graphql-operations'
|
||||
import * as GQL from '@sourcegraph/shared/src/schema'
|
||||
import { Alert, Button, useEventObservable } from '@sourcegraph/wildcard'
|
||||
import { Alert, Button, useEventObservable, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { mutateGraphQL } from '../../../../backend/graphql'
|
||||
import { ExpirationDate } from '../../../productSubscription/ExpirationDate'
|
||||
@ -157,9 +157,9 @@ export const SiteAdminGenerateProductLicenseForSubscriptionForm: React.FunctionC
|
||||
</datalist>
|
||||
<small className="form-text text-muted">
|
||||
Tags restrict a license. Please refer to{' '}
|
||||
<a href="https://handbook.sourcegraph.com/ce/license_keys#how-to-create-a-license-key-for-a-new-prospect-or-new-customer">
|
||||
<Link to="https://handbook.sourcegraph.com/ce/license_keys#how-to-create-a-license-key-for-a-new-prospect-or-new-customer">
|
||||
How to create a license key for a new prospect or new customer
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
for a complete guide.
|
||||
</small>
|
||||
<small className="form-text text-muted mt-2">
|
||||
|
||||
@ -7,7 +7,7 @@ import { catchError, map, mapTo, startWith, switchMap, tap } from 'rxjs/operator
|
||||
import { asError, createAggregateError, isErrorLike } from '@sourcegraph/common'
|
||||
import { gql } from '@sourcegraph/http-client'
|
||||
import * as GQL from '@sourcegraph/shared/src/schema'
|
||||
import { Button, useEventObservable } from '@sourcegraph/wildcard'
|
||||
import { Button, useEventObservable, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { requestGraphQL } from '../../../../backend/graphql'
|
||||
import {
|
||||
@ -71,9 +71,9 @@ export const SiteAdminProductSubscriptionBillingLink: React.FunctionComponent<Pr
|
||||
<div className="site-admin-product-subscription-billing-link">
|
||||
<div className="d-flex align-items-center">
|
||||
{productSubscription.urlForSiteAdminBilling && (
|
||||
<a href={productSubscription.urlForSiteAdminBilling} className="mr-2 d-flex align-items-center">
|
||||
<Link to={productSubscription.urlForSiteAdminBilling} className="mr-2 d-flex align-items-center">
|
||||
View billing subscription <ExternalLinkIcon className="icon-inline ml-1" />
|
||||
</a>
|
||||
</Link>
|
||||
)}
|
||||
{isErrorLike(update) && (
|
||||
<AlertCircleIcon className="icon-inline text-danger mr-2" data-tooltip={update.message} />
|
||||
|
||||
@ -47,6 +47,7 @@ exports[`SiteAdminGenerateProductLicenseForSubscriptionForm renders 1`] = `
|
||||
>
|
||||
Tags restrict a license. Please refer to
|
||||
<a
|
||||
class=""
|
||||
href="https://handbook.sourcegraph.com/ce/license_keys#how-to-create-a-license-key-for-a-new-prospect-or-new-customer"
|
||||
>
|
||||
How to create a license key for a new prospect or new customer
|
||||
|
||||
@ -168,10 +168,9 @@ export const ProductSubscriptionStatus: React.FunctionComponent<Props> = ({ clas
|
||||
<Alert variant="warning">
|
||||
You have exceeded your licensed users.{' '}
|
||||
<Link to="/site-admin/license">View your license details</Link> or{' '}
|
||||
{/* eslint-disable-next-line react/jsx-no-target-blank */}
|
||||
<a href="https://about.sourcegraph.com/pricing" target="_blank" rel="noopener">
|
||||
<Link to="https://about.sourcegraph.com/pricing" target="_blank" rel="noopener">
|
||||
upgrade your license
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
to true up and prevent a retroactive charge.
|
||||
</Alert>
|
||||
)
|
||||
|
||||
@ -11,7 +11,7 @@ import { gql } from '@sourcegraph/http-client'
|
||||
import { Scalars } from '@sourcegraph/shared/src/graphql-operations'
|
||||
import * as GQL from '@sourcegraph/shared/src/schema'
|
||||
import { numberWithCommas } from '@sourcegraph/shared/src/util/strings'
|
||||
import { LoadingSpinner, useObservable, Alert } from '@sourcegraph/wildcard'
|
||||
import { LoadingSpinner, useObservable, Alert, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { queryGraphQL } from '../../../backend/graphql'
|
||||
import { formatUserCount, mailtoSales } from '../../../productSubscription/helpers'
|
||||
@ -119,13 +119,13 @@ export const NewProductSubscriptionPaymentSection: React.FunctionComponent<Props
|
||||
{previewInvoice.isDowngradeRequiringManualIntervention ? (
|
||||
<Alert className="mb-2" variant="danger">
|
||||
Self-service downgrades are not yet supported.{' '}
|
||||
<a
|
||||
href={mailtoSales({
|
||||
<Link
|
||||
to={mailtoSales({
|
||||
subject: `Downgrade subscription ${subscriptionID!}`,
|
||||
})}
|
||||
>
|
||||
Contact sales
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
for help.
|
||||
</Alert>
|
||||
) : (
|
||||
|
||||
@ -2,7 +2,7 @@ import InformationIcon from 'mdi-react/InformationIcon'
|
||||
import KeyIcon from 'mdi-react/KeyIcon'
|
||||
import React, { useState, useCallback } from 'react'
|
||||
|
||||
import { Button, CardFooter } from '@sourcegraph/wildcard'
|
||||
import { Button, CardFooter, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { CopyableText } from '../../../components/CopyableText'
|
||||
import { formatUserCount, mailtoSales } from '../../../productSubscription/helpers'
|
||||
@ -72,13 +72,13 @@ export const UserProductSubscriptionStatus: React.FunctionComponent<Props> = ({
|
||||
) : (
|
||||
<div className="text-muted">
|
||||
No license key found.{' '}
|
||||
<a
|
||||
href={mailtoSales({
|
||||
<Link
|
||||
to={mailtoSales({
|
||||
subject: `No license key for subscription ${subscriptionName}`,
|
||||
})}
|
||||
>
|
||||
Contact sales
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
for help.
|
||||
</div>
|
||||
)}
|
||||
|
||||
@ -108,13 +108,13 @@ export const UserSubscriptionsProductSubscriptionPage: React.FunctionComponent<P
|
||||
<>
|
||||
<ProductSubscriptionBilling productSubscription={productSubscription} />
|
||||
<CardFooter>
|
||||
<a
|
||||
href={mailtoSales({
|
||||
<Link
|
||||
to={mailtoSales({
|
||||
subject: `Change payment method for subscription ${productSubscription.name}`,
|
||||
})}
|
||||
>
|
||||
Contact sales
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
to change your payment method.
|
||||
</CardFooter>
|
||||
</>
|
||||
@ -122,13 +122,13 @@ export const UserSubscriptionsProductSubscriptionPage: React.FunctionComponent<P
|
||||
<CardBody>
|
||||
<span className="text-muted ">
|
||||
No billing information is associated with this subscription.{' '}
|
||||
<a
|
||||
href={mailtoSales({
|
||||
<Link
|
||||
to={mailtoSales({
|
||||
subject: `Billing for subscription ${productSubscription.name}`,
|
||||
})}
|
||||
>
|
||||
Contact sales
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
for help.
|
||||
</span>
|
||||
</CardBody>
|
||||
|
||||
@ -87,7 +87,7 @@ export const UserSubscriptionsProductSubscriptionsPage: React.FunctionComponent<
|
||||
description={
|
||||
<>
|
||||
Purchase a subscription for a self-hosted Sourcegraph instance. See{' '}
|
||||
<a href="https://about.sourcegraph.com/pricing">pricing</a> for more information.
|
||||
<Link to="https://about.sourcegraph.com/pricing">pricing</Link> for more information.
|
||||
</>
|
||||
}
|
||||
className="mb-3"
|
||||
|
||||
@ -31,6 +31,7 @@ exports[`NewProductSubscriptionPaymentSection downgrade to existing subscription
|
||||
>
|
||||
Self-service downgrades are not yet supported.
|
||||
<a
|
||||
class=""
|
||||
href="mailto:sales@sourcegraph.com?subject=Downgrade%20subscription%20s"
|
||||
>
|
||||
Contact sales
|
||||
|
||||
@ -45,6 +45,7 @@ exports[`UserSubscriptionsProductSubscriptionPage renders 1`] = `
|
||||
>
|
||||
No billing information is associated with this subscription.
|
||||
<a
|
||||
class=""
|
||||
href="mailto:sales@sourcegraph.com?subject=Billing%20for%20subscription%20undefined"
|
||||
>
|
||||
Contact sales
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import * as H from 'history'
|
||||
import React, { useEffect, useMemo } from 'react'
|
||||
|
||||
import { Container, PageHeader, LoadingSpinner, useObservable, Alert } from '@sourcegraph/wildcard'
|
||||
import { Container, PageHeader, LoadingSpinner, useObservable, Alert, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { PageTitle } from '../../../../components/PageTitle'
|
||||
import { Timestamp } from '../../../../components/time/Timestamp'
|
||||
@ -35,9 +35,9 @@ export const UserSettingsPermissionsPage: React.FunctionComponent<{
|
||||
description={
|
||||
<>
|
||||
Learn more about{' '}
|
||||
<a href="/help/admin/repo/permissions#background-permissions-syncing">
|
||||
<Link to="/help/admin/repo/permissions#background-permissions-syncing">
|
||||
background permissions syncing
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</>
|
||||
}
|
||||
|
||||
@ -12,7 +12,7 @@ import { ExtensionCategory, EXTENSION_CATEGORIES } from '@sourcegraph/shared/src
|
||||
import { Settings, SettingsCascadeProps, SettingsCascadeOrError } from '@sourcegraph/shared/src/settings/settings'
|
||||
import { ThemeProps } from '@sourcegraph/shared/src/theme'
|
||||
import { buildGetStartedURL } from '@sourcegraph/shared/src/util/url'
|
||||
import { AlertLink, useLocalStorage, useEventObservable, Alert } from '@sourcegraph/wildcard'
|
||||
import { AlertLink, useLocalStorage, useEventObservable, Alert, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { PageTitle } from '../components/PageTitle'
|
||||
import {
|
||||
@ -388,18 +388,22 @@ export const ExtensionRegistry: React.FunctionComponent<Props> = props => {
|
||||
<hr className="mt-5" />
|
||||
<div className="my-4 justify-content-center">
|
||||
You may use the Sourcegraph.com extension registry only with Sourcegraph{' '}
|
||||
<a href="https://about.sourcegraph.com/pricing/">
|
||||
<Link to="https://about.sourcegraph.com/pricing/">
|
||||
self-hosted or managed instances
|
||||
</a>
|
||||
, <a href="http://sourcegraph.com/">Sourcegraph.com</a>, and Sourcegraph's{' '}
|
||||
<a href="https://docs.sourcegraph.com/integration/browser_extension">
|
||||
</Link>
|
||||
, <Link to="http://sourcegraph.com/">Sourcegraph.com</Link>, and Sourcegraph's{' '}
|
||||
<Link to="https://docs.sourcegraph.com/integration/browser_extension">
|
||||
browser extensions
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
and{' '}
|
||||
<a href="https://docs.sourcegraph.com/integration/editor">editor integrations</a>.
|
||||
You may not use the Sourcegraph.com extension registry with Sourcegraph OSS. Learn
|
||||
<Link to="https://docs.sourcegraph.com/integration/editor">
|
||||
editor integrations
|
||||
</Link>
|
||||
. You may not use the Sourcegraph.com extension registry with Sourcegraph OSS. Learn
|
||||
more about the Sourcegraph.com extension registry and administration options in our{' '}
|
||||
<a href="https://docs.sourcegraph.com/admin/extensions">extensions documentation</a>
|
||||
<Link to="https://docs.sourcegraph.com/admin/extensions">
|
||||
extensions documentation
|
||||
</Link>
|
||||
.
|
||||
</div>
|
||||
</>
|
||||
|
||||
@ -3,7 +3,7 @@ import React, { useState } from 'react'
|
||||
import { ButtonDropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'reactstrap'
|
||||
|
||||
import { EXTENSION_CATEGORIES } from '@sourcegraph/shared/src/schema/extensionSchema'
|
||||
import { Button } from '@sourcegraph/wildcard'
|
||||
import { Button, Link } from '@sourcegraph/wildcard'
|
||||
|
||||
import { SidebarGroup, SidebarGroupHeader } from '../components/Sidebar'
|
||||
|
||||
@ -119,14 +119,14 @@ const ExtensionSidenavBanner: React.FunctionComponent = () => (
|
||||
<h4 className="mt-2 font-weight-bold">Create custom extensions!</h4>
|
||||
<small>
|
||||
You can improve your workflow by creating custom extensions. See{' '}
|
||||
<a
|
||||
href="https://docs.sourcegraph.com/extensions/authoring"
|
||||
<Link
|
||||
to="https://docs.sourcegraph.com/extensions/authoring"
|
||||
// eslint-disable-next-line react/jsx-no-target-blank
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
Sourcegraph Docs
|
||||
</a>{' '}
|
||||
</Link>{' '}
|
||||
for details about writing and publishing.
|
||||
</small>
|
||||
</div>
|
||||
|
||||
@ -156,6 +156,7 @@ exports[`ExtensionsQueryInputToolbar renders 1`] = `
|
||||
<small>
|
||||
You can improve your workflow by creating custom extensions. See
|
||||
<a
|
||||
class=""
|
||||
href="https://docs.sourcegraph.com/extensions/authoring"
|
||||
rel="noreferrer"
|
||||
target="_blank"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user