prosemirror: преобразование вывода JSON в HTML - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь преобразовать вывод JSON ProseMirror обратно в HTML (чтобы сохранить его из одной БД в другую). Я новичок в ProseMirror и не уверен, что полностью понимаю связь между моделью, состоянием и схемой.

Судя по тому, что я прочитал https://github.com/ProseMirror/prosemirror/issues/455 и https://discuss.prosemirror.net/t/example-of-converting-between-formats-for-the-purpose-of-saving/424,

Сначала я должен создать новое состояние на основе базовой схемы, затем использовать DOMSerializer и присоединить вывод к временному элементу (затем получить innerHtml). Звучит ли это правильно? Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 14 сентября 2018

После некоторого копания вот как я заставил это работать:

  1. Создать узел, используя .fromJSON
  2. Создание DOMSerializer на основе схемы, используемой редактором
  3. Передача узла в сериализатор

Мой код указан ниже.

const { schema } = require("prosemirror-schema-basic")
const { Node, DOMSerializer } = require("prosemirror-model")
const jsdom = require("jsdom").JSDOM

let dom = new jsdom('<!DOCTYPE html><div id="content"></div>')
let doc = dom.window.document
let target = doc.querySelector("div")
//Demo JSON output from ProseMirror
let content = {
  "doc": {
    "type": "doc",
    "content": [{
      "type": "paragraph",
      "attrs": {
        "align": "left"
      },
      "content": [{
        "type": "text",
        "text": "My sample text"
      }]
    }]
  },
  "selection": {
    "type": "text",
    "anchor": 16,
    "head": 16
  }
}

let contentNode = Node.fromJSON(schema, content.doc)

DOMSerializer
  .fromSchema(schema)
  .serializeFragment(contentNode.content, {
    "document": doc
  }, target)

console.log(doc.getElementById("content").innerHTML)
//<p>My sample text</p>
...