mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-11-03 02:27:57 +09:00
## Description 1. What is this PR about (link the issue and add a short description) ## Steps for reproduction 1. click button 2. expect xyz ## Code Review - [ ] hi @kof, I need you to do - conceptual review (architecture, feature-correctness) - detailed review (read every line) - test it on preview ## Before requesting a review - [ ] made a self-review - [ ] added inline comments where things may be not obvious (the "why", not "what") ## Before merging - [ ] tested locally and on preview environment (preview dev login: 0000) - [ ] updated [test cases](https://github.com/webstudio-is/webstudio/blob/main/apps/builder/docs/test-cases.md) document - [ ] added tests - [ ] if any new env variables are added, added them to `.env` file
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import { gfm, gfmHtml } from "micromark-extension-gfm";
|
|
import { micromark } from "micromark";
|
|
import { insertWebstudioFragmentAt } from "../instance-utils";
|
|
import { denormalizeSrcProps } from "./asset-upload";
|
|
import { generateFragmentFromHtml } from "../html";
|
|
import type { Plugin } from "./init-copy-paste";
|
|
|
|
const parse = (clipboardData: string) => {
|
|
const html = micromark(clipboardData, "utf-8", {
|
|
extensions: [gfm()],
|
|
htmlExtensions: [gfmHtml()],
|
|
});
|
|
const { skippedSelectors: _skipped, ...fragment } =
|
|
generateFragmentFromHtml(html);
|
|
const instances = new Map(fragment.instances.map((item) => [item.id, item]));
|
|
for (const instance of fragment.instances) {
|
|
if (instance.tag === "img") {
|
|
delete instance.tag;
|
|
instance.component = "Image";
|
|
}
|
|
}
|
|
fragment.instances = Array.from(instances.values());
|
|
return fragment;
|
|
};
|
|
|
|
export const markdown: Plugin = {
|
|
name: "markdown",
|
|
mimeType: "text/plain",
|
|
onPaste: async (clipboardData: string) => {
|
|
let fragment = parse(clipboardData);
|
|
if (fragment === undefined) {
|
|
return false;
|
|
}
|
|
fragment = await denormalizeSrcProps(fragment);
|
|
return insertWebstudioFragmentAt(fragment);
|
|
},
|
|
};
|
|
|
|
export const __testing__ = {
|
|
parse,
|
|
};
|