diff --git a/packages/editor/src/core/extensions/custom-image/custom-image.ts b/packages/editor/src/core/extensions/custom-image/custom-image.ts index 6dd5f0f19e6..7476c713886 100644 --- a/packages/editor/src/core/extensions/custom-image/custom-image.ts +++ b/packages/editor/src/core/extensions/custom-image/custom-image.ts @@ -1,9 +1,11 @@ import { Editor, mergeAttributes } from "@tiptap/core"; import { Image } from "@tiptap/extension-image"; +import { MarkdownSerializerState } from "@tiptap/pm/markdown"; +import { Node } from "@tiptap/pm/model"; import { ReactNodeViewRenderer } from "@tiptap/react"; import { v4 as uuidv4 } from "uuid"; // extensions -import { CustomImageNode } from "@/extensions/custom-image"; +import { CustomImageNode, ImageAttributes } from "@/extensions/custom-image"; // plugins import { TrackImageDeletionPlugin, TrackImageRestorationPlugin, isFileValid } from "@/plugins/image"; // types @@ -121,6 +123,15 @@ export const CustomImageExtension = (props: TFileHandler) => { deletedImageSet: new Map(), uploadInProgress: false, maxFileSize, + markdown: { + serialize(state: MarkdownSerializerState, node: Node) { + const attrs = node.attrs as ImageAttributes; + const imageSource = state.esc(this?.editor?.commands?.getImageSource?.(attrs.src) || attrs.src); + const imageWidth = state.esc(attrs.width?.toString()); + state.write(``); + state.closeBlock(node); + }, + }, }; }, diff --git a/packages/editor/src/core/extensions/custom-image/read-only-custom-image.ts b/packages/editor/src/core/extensions/custom-image/read-only-custom-image.ts index 76edacbd0c6..07d890cd688 100644 --- a/packages/editor/src/core/extensions/custom-image/read-only-custom-image.ts +++ b/packages/editor/src/core/extensions/custom-image/read-only-custom-image.ts @@ -1,8 +1,10 @@ import { mergeAttributes } from "@tiptap/core"; import { Image } from "@tiptap/extension-image"; +import { MarkdownSerializerState } from "@tiptap/pm/markdown"; +import { Node } from "@tiptap/pm/model"; import { ReactNodeViewRenderer } from "@tiptap/react"; // components -import { CustomImageNode, UploadImageExtensionStorage } from "@/extensions/custom-image"; +import { CustomImageNode, ImageAttributes, UploadImageExtensionStorage } from "@/extensions/custom-image"; // types import { TFileHandler } from "@/types"; @@ -52,6 +54,15 @@ export const CustomReadOnlyImageExtension = (props: Pick`); + state.closeBlock(node); + }, + }, }; }, diff --git a/packages/editor/src/core/extensions/mentions/extension.tsx b/packages/editor/src/core/extensions/mentions/extension.tsx index 5653a3540de..32ad8a720bc 100644 --- a/packages/editor/src/core/extensions/mentions/extension.tsx +++ b/packages/editor/src/core/extensions/mentions/extension.tsx @@ -1,5 +1,7 @@ import { Editor, mergeAttributes } from "@tiptap/core"; import Mention, { MentionOptions } from "@tiptap/extension-mention"; +import { MarkdownSerializerState } from "@tiptap/pm/markdown"; +import { Node } from "@tiptap/pm/model"; import { ReactNodeViewRenderer, ReactRenderer } from "@tiptap/react"; import tippy from "tippy.js"; // extensions @@ -25,8 +27,19 @@ export const CustomMention = ({ addStorage(this) { return { mentionsOpen: false, + markdown: { + serialize(state: MarkdownSerializerState, node: Node) { + const { attrs } = node; + const label = `@${state.esc(attrs.label)}`; + const originUrl = typeof window !== "undefined" && window.location.origin ? window.location.origin : ""; + const safeRedirectionPath = state.esc(attrs.redirect_uri); + const url = `${originUrl}${safeRedirectionPath}`; + state.write(`[${label}](${url})`); + }, + }, }; }, + addAttributes() { return { id: { diff --git a/web/ce/components/pages/editor/embed/issue-embed-upgrade-card.tsx b/web/ce/components/pages/editor/embed/issue-embed-upgrade-card.tsx index ce3db73893e..d9ea1b8a071 100644 --- a/web/ce/components/pages/editor/embed/issue-embed-upgrade-card.tsx +++ b/web/ce/components/pages/editor/embed/issue-embed-upgrade-card.tsx @@ -1,31 +1,34 @@ -// ui -import { Button } from "@plane/ui"; +// plane ui +import { getButtonStyling } from "@plane/ui"; // components import { ProIcon } from "@/components/common"; +// helpers +import { cn } from "@/helpers/common.helper"; export const IssueEmbedUpgradeCard: React.FC = (props) => (
-
- {props.node?.attrs?.project_identifier}-{props?.node?.attrs?.sequence_id} -
-
-
-
-
- -
-
- Embed and access issues in pages seamlessly, upgrade to plane pro now. -
-
- - - +
+
+ +

+ Embed and access issues in pages seamlessly, upgrade to Plane Pro now. +

+ + Upgrade +
);