From bb8fd936289c4d57486e4c126c017570e5336824 Mon Sep 17 00:00:00 2001 From: Prikshit Singh <99068054+PrikshitSingh24@users.noreply.github.com> Date: Wed, 18 Oct 2023 08:42:20 +0530 Subject: [PATCH] Add LinkedIn embed (#5933) Co-authored-by: Prikshit singh --- public/images/linkedin.png | Bin 0 -> 5616 bytes shared/editor/embeds/Linkedin.test.ts | 39 ++++++++++++++++++++++++++ shared/editor/embeds/Linkedin.tsx | 25 +++++++++++++++++ shared/editor/embeds/index.tsx | 8 ++++++ 4 files changed, 72 insertions(+) create mode 100644 public/images/linkedin.png create mode 100644 shared/editor/embeds/Linkedin.test.ts create mode 100644 shared/editor/embeds/Linkedin.tsx diff --git a/public/images/linkedin.png b/public/images/linkedin.png new file mode 100644 index 0000000000000000000000000000000000000000..ee84c283c33bb197071d24bdfb034de90ea5527a GIT binary patch literal 5616 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 KMNUMnLSTY*Ad-Fn literal 0 HcmV?d00001 diff --git a/shared/editor/embeds/Linkedin.test.ts b/shared/editor/embeds/Linkedin.test.ts new file mode 100644 index 000000000..bb802e030 --- /dev/null +++ b/shared/editor/embeds/Linkedin.test.ts @@ -0,0 +1,39 @@ +import Linkedin from "./Linkedin"; + +describe("Linkedin", () => { + const match = Linkedin.ENABLED[0]; + + test("to be enabled on post link", () => { + expect( + "https://www.linkedin.com/posts/github_highlight-your-expertise-with-github-certifications-activity-7117157514097352704-F4Mz?utm_source=share&utm_medium=member_desktop".match( + match + ) + ).toBeTruthy(); + }); + + test("to be enabled on embed link", () => { + expect( + "https://www.linkedin.com/embed/feed/update/urn:li:share:7117157513422090241".match( + match + ) + ).toBeTruthy(); + }); + + test("to not be enabled elsewhere", () => { + expect("https://www.linkedin.com/".match(match)).toBe(null); + expect("https://www.linkedin.com/posts/".match(match)).toBe(null); + expect("https://www.linkedin.com/embed/".match(match)).toBe(null); + expect("https://www.linkedin.com/embed/feed/update/".match(match)).toBe( + null + ); + expect( + "https://www.linkedin.com/embed/feed/update/urn:li:".match(match) + ).toBe(null); + expect( + "https://www.linkedin.com/embed/feed/update/urn:li:share:".match(match) + ).toBe(null); + expect( + "https://www.linkedin.com/embed/feed/update/urn:li:ugcPost:".match(match) + ).toBe(null); + }); +}); diff --git a/shared/editor/embeds/Linkedin.tsx b/shared/editor/embeds/Linkedin.tsx new file mode 100644 index 000000000..a5f38798b --- /dev/null +++ b/shared/editor/embeds/Linkedin.tsx @@ -0,0 +1,25 @@ +import * as React from "react"; +import Frame from "../components/Frame"; +import { EmbedProps as Props } from "."; + +function Linkedin(props: Props) { + const { matches } = props.attrs; + const objectId = matches[2]; + const postType = matches[1]; + if (matches[3] === "embed") { + return ; + } + return ( + + ); +} + +Linkedin.ENABLED = [ + /^https:\/\/www\.linkedin\.com\/(?:posts\/.*-(ugcPost|activity)-(\d+)-.*|(embed)\/(?:feed\/update\/urn:li:(?:ugcPost|share):(?:\d+)))/, +]; + +export default Linkedin; diff --git a/shared/editor/embeds/index.tsx b/shared/editor/embeds/index.tsx index 5558b8a2b..6353111d0 100644 --- a/shared/editor/embeds/index.tsx +++ b/shared/editor/embeds/index.tsx @@ -33,6 +33,7 @@ import GoogleSlides from "./GoogleSlides"; import Grist from "./Grist"; import InVision from "./InVision"; import JSFiddle from "./JSFiddle"; +import Linkedin from "./Linkedin"; import Loom from "./Loom"; import Lucidchart from "./Lucidchart"; import Marvel from "./Marvel"; @@ -298,6 +299,13 @@ const embeds: EmbedDescriptor[] = [ icon: JSFiddle, component: JSFiddle, }), + new EmbedDescriptor({ + title: "LinkedIn", + keywords: "post", + defaultHidden: true, + icon: LinkedIn, + component: Linkedin, + }), new EmbedDescriptor({ title: "Loom", keywords: "video screencast",