diff --git a/app/embeds/GoogleDrive.js b/app/embeds/GoogleDrive.js new file mode 100644 index 00000000..428de67a --- /dev/null +++ b/app/embeds/GoogleDrive.js @@ -0,0 +1,37 @@ +// @flow +import * as React from "react"; +import Frame from "./components/Frame"; + +const URL_REGEX = new RegExp( + "^https?://drive.google.com/file/d/(.*)/(preview|view).?usp=sharing$" +); + +type Props = {| + attrs: {| + href: string, + matches: string[], + |}, +|}; + +export default class GoogleDrive extends React.Component { + static ENABLED = [URL_REGEX]; + + render() { + return ( + + } + title="Google Drive Embed" + canonicalUrl={this.props.attrs.href} + border + /> + ); + } +} diff --git a/app/embeds/GoogleDrive.test.js b/app/embeds/GoogleDrive.test.js new file mode 100644 index 00000000..d672fe47 --- /dev/null +++ b/app/embeds/GoogleDrive.test.js @@ -0,0 +1,39 @@ +/* eslint-disable flowtype/require-valid-file-annotation */ +import GoogleDrive from "./GoogleDrive"; + +describe("GoogleDrive", () => { + const match = GoogleDrive.ENABLED[0]; + test("to be enabled on share link", () => { + expect( + "https://drive.google.com/file/d/1ohkOgmE8MiNx68u6ynBfYkgjeKu_x3ZK/view?usp=sharing".match( + match + ) + ).toBeTruthy(); + expect( + "https://drive.google.com/file/d/1ohkOgmE8MiNx68u6ynBfYkgjeKu_x3ZK/preview?usp=sharing".match( + match + ) + ).toBeTruthy(); + }); + + test("to not be enabled elsewhere", () => { + expect( + "https://drive.google.com/file/d/1ohkOgmE8MiNx68u6ynBfYkgjeKu_x3ZK/view".match( + match + ) + ).toBe(null); + expect( + "https://drive.google.com/file/d/1ohkOgmE8MiNx68u6ynBfYkgjeKu_x3ZK/preview".match( + match + ) + ).toBe(null); + expect( + "https://drive.google.com/file/d/1ohkOgmE8MiNx68u6ynBfYkgjeKu_x3ZK/view?usp=restricted".match( + match + ) + ).toBeTruthy(); + expect("https://drive.google.com/file".match(match)).toBe(null); + expect("https://drive.google.com".match(match)).toBe(null); + expect("https://www.google.com".match(match)).toBe(null); + }); +}); diff --git a/app/embeds/index.js b/app/embeds/index.js index 939a6d92..2cd0522c 100644 --- a/app/embeds/index.js +++ b/app/embeds/index.js @@ -8,6 +8,7 @@ import Codepen from "./Codepen"; import Figma from "./Figma"; import Framer from "./Framer"; import Gist from "./Gist"; +import GoogleDrive from "./GoogleDrive"; import GoogleDocs from "./GoogleDocs"; import GoogleSheets from "./GoogleSheets"; import GoogleSlides from "./GoogleSlides"; @@ -93,6 +94,13 @@ export default [ component: Gist, matcher: matcher(Gist), }, + { + title: "Google Drive", + keywords: "drive", + icon: () => , + component: GoogleDrive, + matcher: matcher(GoogleDrive), + }, { title: "Google Docs", icon: () => , diff --git a/public/images/google-drive.png b/public/images/google-drive.png new file mode 100644 index 00000000..a28f1875 Binary files /dev/null and b/public/images/google-drive.png differ