ProseMirror is a well-behaved rich semantic content editor based on contentEditable, with support for collaborative editing and custom document schemas. This repository contains a port in Go of prosemirror-model and prosemirror-transform in order to have the server part of the collaborative editing in Go.
Only the code necessary for writing a server for collaborative editing will be ported, not things like translating a document to/from a DOM representation which are only useful on the clients.
In go, the map
s don't preserve the order of the key (and even the JSON
spec doesn't say that there is an order for object fields). OrderedMap
in
the JS schema
needs to be serialized in JSON to an array of tuples
[key, value]
to keep the order:
[
["em", { "inclusive": true, "group": "fontStyle" }],
["strong", { "inclusive": true, "group": "fontStyle" }]
]
// :: (number, number, (node: Node, pos: number, parent: Node, index: number) → ?bool, ?number)
nodesBetween(from, to, f, startPos = 0) {
this.content.nodesBetween(from, to, f, startPos, this)
}
func (n *Node) NodesBetween(from, to int, fn NBCallback, startPos ...int) {
s := 0
if len(startPos) > 0 {
s = startPos[0]
}
n.Content.NodesBetween(from, to, fn, s, n)
}
The port in Go of ProseMirror has been developed by Cozy Cloud and is distributed under the AGPL v3 license.