kopia lustrzana https://gitlab.com/soapbox-pub/soapbox
26 wiersze
986 B
TypeScript
26 wiersze
986 B
TypeScript
/**
|
|
* This source code is derived from code from Meta Platforms, Inc.
|
|
* and affiliates, licensed under the MIT license located in the
|
|
* LICENSE file in the /src/features/compose/editor directory.
|
|
*/
|
|
|
|
import { LinkPlugin as LexicalLinkPlugin } from '@lexical/react/LexicalLinkPlugin';
|
|
import * as React from 'react';
|
|
|
|
// Source: https://stackoverflow.com/a/8234912/2013580
|
|
const urlRegExp = new RegExp(
|
|
/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=+$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=+$,\w]+@)[A-Za-z0-9.-]+)((?:\/[+~%/.\w-_]*)?\??(?:[-+=&;%@.\w_]*)#?(?:[\w]*))?)/,
|
|
);
|
|
|
|
export const validateUrl = (url: string): boolean => {
|
|
// TODO Fix UI for link insertion; it should never default to an invalid URL such as https://.
|
|
// Maybe show a dialog where they user can type the URL before inserting it.
|
|
return url === 'https://' || urlRegExp.test(url);
|
|
};
|
|
|
|
const LinkPlugin = (): JSX.Element => {
|
|
return <LexicalLinkPlugin validateUrl={validateUrl} />;
|
|
};
|
|
|
|
export default LinkPlugin;
|