diff --git a/public/images/google-forms.png b/public/images/google-forms.png new file mode 100644 index 000000000..512422e00 Binary files /dev/null and b/public/images/google-forms.png differ diff --git a/shared/editor/embeds/GoogleForms.test.ts b/shared/editor/embeds/GoogleForms.test.ts new file mode 100644 index 000000000..24a8a3c0f --- /dev/null +++ b/shared/editor/embeds/GoogleForms.test.ts @@ -0,0 +1,48 @@ +import GoogleForms from "./GoogleForms"; + +describe("GoogleForms", () => { + const match = GoogleForms.ENABLED[0]; + + test("to be enabled on long-form share links", () => { + expect( + "https://docs.google.com/forms/d/e/1FAIpQLSetbCGiE8DhfVQZMtLE_CU2MwpSsrkXi690hkEDREOvMu8VYQ/viewform?usp=sf_link".match( + match + ) + ).toBeTruthy(); + expect( + "https://docs.google.com/forms/d/e/1FAIpQLSetbCGiE8DhfVQZMtLE_CU2MwpSsrkXi690hkEDREOvMu8VYQ/viewform".match( + match + ) + ).toBeTruthy(); + expect( + "https://docs.google.com/forms/d/e/1FAIpQLSetbCGiE8DhfVQZMtLE_CU2MwpSsrkXi690hkEDREOvMu8VYQ/viewform?embedded=true".match( + match + ) + ).toBeTruthy(); + }); + + test("to be enabled on edit links", () => { + expect( + "https://docs.google.com/forms/d/1zG75dmHQGpomQlWB6VtRhWajNer7mKMjtApM_aRAJV8/edit".match( + match + ) + ).toBeTruthy(); + }); + + test("to not be enabled elsewhere", () => { + expect("https://docs.google.com/forms".match(match)).toBe(null); + expect("https://docs.google.com/forms/d/".match(match)).toBe(null); + expect("https://docs.google.com".match(match)).toBe(null); + expect("https://www.google.com".match(match)).toBe(null); + expect( + "https://docssgoogle.com/forms/d/e/1FAIpQLSetbCGiE8DhfVQZMtLE_CU2MwpSsrkXi690hkEDREOvMu8VYQ/viewform?usp=sf_link".match( + match + ) + ).toBe(null); + expect( + "https://docs.googleecom/forms/d/e/1FAIpQLSetbCGiE8DhfVQZMtLE_CU2MwpSsrkXi690hkEDREOvMu8VYQ/viewform".match( + match + ) + ).toBe(null); + }); +}); diff --git a/shared/editor/embeds/GoogleForms.tsx b/shared/editor/embeds/GoogleForms.tsx new file mode 100644 index 000000000..9379836ca --- /dev/null +++ b/shared/editor/embeds/GoogleForms.tsx @@ -0,0 +1,33 @@ +import * as React from "react"; +import Frame from "../components/Frame"; +import Image from "../components/Image"; +import { EmbedProps as Props } from "."; + +function GoogleForms(props: Props) { + return ( + + } + canonicalUrl={props.attrs.href} + title="Google Forms" + border + /> + ); +} + +GoogleForms.ENABLED = [ + new RegExp("^https?://docs\\.google\\.com/forms/d/(.+)$"), +]; + +export default GoogleForms; diff --git a/shared/editor/embeds/index.tsx b/shared/editor/embeds/index.tsx index 329cc1216..e2e1ddc7f 100644 --- a/shared/editor/embeds/index.tsx +++ b/shared/editor/embeds/index.tsx @@ -21,6 +21,7 @@ import GoogleDataStudio from "./GoogleDataStudio"; import GoogleDocs from "./GoogleDocs"; import GoogleDrawings from "./GoogleDrawings"; import GoogleDrive from "./GoogleDrive"; +import GoogleForms from "./GoogleForms"; import GoogleSheets from "./GoogleSheets"; import GoogleSlides from "./GoogleSlides"; import InVision from "./InVision"; @@ -233,6 +234,13 @@ const embeds: EmbedDescriptor[] = [ component: GoogleDataStudio, matcher: matcher(GoogleDataStudio), }, + { + title: "Google Forms", + keywords: "form survey", + icon: () => Google Forms, + component: GoogleForms, + matcher: matcher(GoogleForms), + }, { title: "InVision", keywords: "design prototype",