feat: Show icon on external links (#3100)

* feat: External links get treatment

* cache decorations
This commit is contained in:
Tom Moor
2022-02-16 18:05:02 -08:00
committed by GitHub
parent 3760a03c44
commit d7ee801fe4
11 changed files with 162 additions and 73 deletions

View File

@@ -1,4 +1,5 @@
import {
ArrowIcon,
DocumentIcon,
CloseIcon,
PlusIcon,
@@ -11,6 +12,7 @@ import { EditorView } from "prosemirror-view";
import * as React from "react";
import styled from "styled-components";
import isUrl from "@shared/editor/lib/isUrl";
import { isInternalUrl } from "@shared/utils/urls";
import Flex from "~/components/Flex";
import { Dictionary } from "~/hooks/useDictionary";
import Input from "./Input";
@@ -299,6 +301,7 @@ class LinkEditor extends React.Component<Props, State> {
const looksLikeUrl = value.match(/^https?:\/\//i);
const suggestedLinkTitle = this.suggestedLinkTitle;
const isInternal = isInternalUrl(value);
const showCreateLink =
!!this.props.onCreateLink &&
@@ -324,9 +327,15 @@ class LinkEditor extends React.Component<Props, State> {
autoFocus={this.href === ""}
/>
<Tooltip tooltip={dictionary.openLink}>
<Tooltip
tooltip={isInternal ? dictionary.goToLink : dictionary.openLink}
>
<ToolbarButton onClick={this.handleOpenLink} disabled={!value}>
<OpenIcon color="currentColor" />
{isInternal ? (
<ArrowIcon color="currentColor" />
) : (
<OpenIcon color="currentColor" />
)}
</ToolbarButton>
</Tooltip>
<Tooltip tooltip={dictionary.removeLink}>

View File

@@ -529,13 +529,16 @@ const EditorStyles = styled.div<{
a {
color: ${(props) => props.theme.text};
border-bottom: 1px solid ${(props) => lighten(0.5, props.theme.text)};
text-decoration: none !important;
text-decoration: underline;
text-decoration-color: ${(props) => lighten(0.5, props.theme.text)};
text-decoration-thickness: 1px;
text-underline-offset: .15em;
font-weight: 500;
&:hover {
border-bottom: 1px solid ${(props) => props.theme.text};
text-decoration: none;
text-decoration: underline;
text-decoration-color: ${(props) => props.theme.text};
text-decoration-thickness: 1px;
}
}
}
@@ -718,6 +721,11 @@ const EditorStyles = styled.div<{
}
}
.external-link {
position: relative;
top: 2px;
}
.code-actions,
.notice-actions {
display: flex;