mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
feat: cleanup svg export and move payload to <metadata>
(#8975)
This commit is contained in:
parent
798c795405
commit
36274f1f3e
10 changed files with 220 additions and 186 deletions
|
@ -1006,14 +1006,14 @@ exports[`contextMenu element > right-clicking on a group should select whole gro
|
|||
"roundness": {
|
||||
"type": 3,
|
||||
},
|
||||
"seed": 1278240551,
|
||||
"seed": 1,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"strokeStyle": "solid",
|
||||
"strokeWidth": 2,
|
||||
"type": "rectangle",
|
||||
"updated": 1,
|
||||
"version": 2,
|
||||
"versionNonce": 453191,
|
||||
"versionNonce": 1278240551,
|
||||
"width": 100,
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
|
@ -1042,14 +1042,14 @@ exports[`contextMenu element > right-clicking on a group should select whole gro
|
|||
"roundness": {
|
||||
"type": 3,
|
||||
},
|
||||
"seed": 449462985,
|
||||
"seed": 1,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"strokeStyle": "solid",
|
||||
"strokeWidth": 2,
|
||||
"type": "rectangle",
|
||||
"updated": 1,
|
||||
"version": 2,
|
||||
"versionNonce": 401146281,
|
||||
"versionNonce": 449462985,
|
||||
"width": 100,
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
|
@ -9792,14 +9792,14 @@ exports[`contextMenu element > shows context menu for element > [end of test] el
|
|||
"roundness": {
|
||||
"type": 3,
|
||||
},
|
||||
"seed": 1278240551,
|
||||
"seed": 1,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"strokeStyle": "solid",
|
||||
"strokeWidth": 2,
|
||||
"type": "rectangle",
|
||||
"updated": 1,
|
||||
"version": 2,
|
||||
"versionNonce": 453191,
|
||||
"versionNonce": 1278240551,
|
||||
"width": 200,
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
|
@ -9826,14 +9826,14 @@ exports[`contextMenu element > shows context menu for element > [end of test] el
|
|||
"roundness": {
|
||||
"type": 3,
|
||||
},
|
||||
"seed": 449462985,
|
||||
"seed": 1,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"strokeStyle": "solid",
|
||||
"strokeWidth": 2,
|
||||
"type": "rectangle",
|
||||
"updated": 1,
|
||||
"version": 2,
|
||||
"versionNonce": 401146281,
|
||||
"versionNonce": 449462985,
|
||||
"width": 200,
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -2,16 +2,17 @@ import React from "react";
|
|||
import { render, waitFor } from "./test-utils";
|
||||
import { Excalidraw } from "../index";
|
||||
import { API } from "./helpers/api";
|
||||
import {
|
||||
encodePngMetadata,
|
||||
encodeSvgMetadata,
|
||||
decodeSvgMetadata,
|
||||
} from "../data/image";
|
||||
import { encodePngMetadata } from "../data/image";
|
||||
import { serializeAsJSON } from "../data/json";
|
||||
import { exportToSvg } from "../scene/export";
|
||||
import {
|
||||
decodeSvgBase64Payload,
|
||||
encodeSvgBase64Payload,
|
||||
exportToSvg,
|
||||
} from "../scene/export";
|
||||
import type { FileId } from "../element/types";
|
||||
import { getDataURL } from "../data/blob";
|
||||
import { getDefaultAppState } from "../appState";
|
||||
import { SVG_NS } from "../constants";
|
||||
|
||||
const { h } = window;
|
||||
|
||||
|
@ -62,15 +63,32 @@ describe("export", () => {
|
|||
});
|
||||
|
||||
it("test encoding/decoding scene for SVG export", async () => {
|
||||
const encoded = encodeSvgMetadata({
|
||||
text: serializeAsJSON(testElements, h.state, {}, "local"),
|
||||
const metadataElement = document.createElementNS(SVG_NS, "metadata");
|
||||
|
||||
encodeSvgBase64Payload({
|
||||
metadataElement,
|
||||
payload: serializeAsJSON(testElements, h.state, {}, "local"),
|
||||
});
|
||||
const decoded = JSON.parse(decodeSvgMetadata({ svg: encoded }));
|
||||
|
||||
const decoded = JSON.parse(
|
||||
decodeSvgBase64Payload({ svg: metadataElement.innerHTML }),
|
||||
);
|
||||
expect(decoded.elements).toEqual([
|
||||
expect.objectContaining({ type: "text", text: "😀" }),
|
||||
]);
|
||||
});
|
||||
|
||||
it("export svg-embedded scene", async () => {
|
||||
const svg = await exportToSvg(
|
||||
testElements,
|
||||
{ ...getDefaultAppState(), exportEmbedScene: true },
|
||||
{},
|
||||
);
|
||||
const svgText = svg.outerHTML;
|
||||
|
||||
expect(svgText).toMatchSnapshot(`svg-embdedded scene export output`);
|
||||
});
|
||||
|
||||
it("import embedded png (legacy v1)", async () => {
|
||||
await API.drop(await API.loadFile("./fixtures/test_embedded_v1.png"));
|
||||
await waitFor(() => {
|
||||
|
|
|
@ -220,7 +220,6 @@ export class API {
|
|||
| "width"
|
||||
| "height"
|
||||
| "type"
|
||||
| "seed"
|
||||
| "version"
|
||||
| "versionNonce"
|
||||
| "isDeleted"
|
||||
|
@ -228,6 +227,7 @@ export class API {
|
|||
| "link"
|
||||
| "updated"
|
||||
> = {
|
||||
seed: 1,
|
||||
x,
|
||||
y,
|
||||
frameId: rest.frameId ?? null,
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue