mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-10-13 13:09:52 +08:00
fix(edit): refuse cut-off cell XML in edit_diagram operations (#960)
While an edit streams, the preview applies the operations received so far. Chrome's DOMParser keeps a cell whose XML is cut off, so a vertex without its geometry reached the canvas. draw.io placed it at the origin, shifted the page layout and compensated the scroll position, and the browser's clamping of that compensation left the diagram out of view once the edit finished. Check each new_xml with getXmlSyntaxError, as the whole document already is, so an incomplete operation is reported instead of applied.
This commit is contained in:
@@ -216,6 +216,20 @@ export function applyDiagramOperations(
|
||||
continue
|
||||
}
|
||||
|
||||
// A cut-off cell (its XML still streaming in a preview) would
|
||||
// parse in Chrome to a cell without its geometry
|
||||
const syntaxError = getXmlSyntaxError(
|
||||
`<wrapper>${op.new_xml}</wrapper>`,
|
||||
)
|
||||
if (syntaxError) {
|
||||
errors.push({
|
||||
type: "update",
|
||||
cellId: op.cell_id,
|
||||
message: `new_xml is not well-formed XML: ${syntaxError}`,
|
||||
})
|
||||
continue
|
||||
}
|
||||
|
||||
// Parse the new XML
|
||||
const newDoc = parser.parseFromString(
|
||||
`<wrapper>${op.new_xml}</wrapper>`,
|
||||
@@ -268,6 +282,20 @@ export function applyDiagramOperations(
|
||||
continue
|
||||
}
|
||||
|
||||
// A cut-off cell (its XML still streaming in a preview) would
|
||||
// parse in Chrome to a cell without its geometry
|
||||
const syntaxError = getXmlSyntaxError(
|
||||
`<wrapper>${op.new_xml}</wrapper>`,
|
||||
)
|
||||
if (syntaxError) {
|
||||
errors.push({
|
||||
type: "add",
|
||||
cellId: op.cell_id,
|
||||
message: `new_xml is not well-formed XML: ${syntaxError}`,
|
||||
})
|
||||
continue
|
||||
}
|
||||
|
||||
// Parse the new XML
|
||||
const newDoc = parser.parseFromString(
|
||||
`<wrapper>${op.new_xml}</wrapper>`,
|
||||
|
||||
Reference in New Issue
Block a user