Phew. I just uploaded versions of the new, modular ProseMirror system. The core now consist of four NPM packages (model, view, state, transform), with an additonal 8 extra packages (keymap, inputrules, history, collab, commands, schema-basic, schema-list, schema-table) being fully supported by me. You’ll probably need at least some of those to set up your editor.
The other main change in this release is a move towards a ‘linear data flow’, or ‘reactive’, or whatever you want to call it, architecture. See this thread for more background. This means that you’ll have to set up your editor a little differently, and if you’re not already using that style it might look somewhat weird, but it should be just as powerful as what we used to have, and a lot cleaner.
Some functionality (keymaps, undo history) was moved out of the core into plugins.
Moving to this release might not be immediately viable for you, as it drops a few features:
-
markRange
is temporarily gone. A revised version of this is going to be part of the next release, but I decided not to hold up this release any longer. This is my next focus—I have the new system largely designed already, and it’s going to be a lot better thanmarkRange
. -
The tooltip module is gone. If someone feels like maintaining a tooltip, I recommend forking the old code an putting it somewhere. I’ve realized this kind of UI stuff is too far out of my area of interest to continue maintaining it.
-
The menu functionality, example setup, and Markdown support are still distributed by me, as I need them for my demos, but are no longer fully supported, since they aren’t the main focus of the library (which is big enough already).
Setting this all up was quite a project, and it’s not unlikely that I screwed something up. But now that the mechanisms are in place, subsequent releases should be smaller and faster again.
Here are the release notes:
prosemirror-model 0.11.0 (2016-09-21)
Breaking changes
Moved into a separate module.
The JSON representation of marks has changed from {"_": "type", "attr1": "value"}
to {"type": "type", "attrs": {"attr1": "value"}}
, where attrs
may be omitted when the mark has no attributes.
Mark-related JSON methods now live on the Mark
class.
The way node and mark types in a schema are defined was changed from defining subclasses to passing plain objects (NodeSpec
and MarkSpec
).
DOM serialization and parsing logic is now done through dedicated objects (DOMSerializer
and DOMParser
), rather than through the schema. It is now possible to define alternative parsing and serializing strategies without touching the schema.
New features
The Slice
class now has an eq
method.
The Node.marksAt
method got a second parameter to indicate you’re interested in the marks after the position.
prosemirror-transform 0.11.0 (2016-09-21)
Breaking changes
Moved into a separate module.
The Remapping
class was renamed to Mapping
and works differently (simpler, grows in only one direction, and has provision for mapping through only a part of it).
Transform
objects now build up a Mapping
instead of an array of maps.
PosMap
was renamed to StepMap
to make it clearer that this applies only to a single step (as opposed to Mapping
.
The arguments to canSplit
and split
were changed to make it possible to specify multiple split-off node types for splits with a depth greater than 1.
Rename joinable
to canJoin
.
New features
Steps can now be merged in some circumstances, which can be useful when storing a lot of them.
prosemirror-state 0.11.0 (2016-09-21)
Breaking changes
New module inheriting the Selection
and EditorTransform
abstraction, along with the persistent state value that is now separate from the display logic, and the plugin system.
Selection.findAtStart
/End
was renamed to Selection.atStart
/End
, and Selection.findNear
to Selection.near
.
prosemirror-view 0.11.0 (2016-09-21)
Breaking changes
Moved into a separate module from the old edit
submodule. Completely new approach to managing the editor’s DOM representation and input.
Event handlers and options are now replaced by props. The view’s state is now ‘shallow’, represented entirely by a set of props, one of which holds an editor state value from the state module.
When the user interacts with the editor, it will pass an action to its onAction
prop, which is responsible for triggering an view update.
The markRange
system was dropped, to be replaced in the next release by a ‘decoration’ system.
There is no keymap support in the view module anymore. Use a keymap plugin for that.
The undo history is now a separate plugin.
CSS needed by the editor is no longer injected implicitly into the page. Instead, you should arrange for the style/prosemirror.css
file to be loaded into your page.
New features
The DOM parser and serializer used to interact with the visible DOM and the clipboard can now be customized through props.
You can now provide a catch-all DOM event handler to get a first chance at handling DOM events.
The onUnmountDOM
can be used to be notified when a piece of the document DOM is thrown away (in case cleanup is needed).
prosemirror-keymap 0.11.0 (2016-09-21)
Breaking changes
New module, takes the same role as the old built-in keymap support in the ProseMirror
class.
prosemirror-inputrules 0.11.0 (2016-09-21)
Breaking changes
Moved into a separate module.
You can now add this plugin multiple times to add different sets of rules to an editor (if you want). It is not possible to change the set of rules of an existing plugin instance.
Rules no longer take a filter
argument.
The signature of the handler
callback for a rule changed.
prosemirror-history 0.11.0 (2016-09-21)
Breaking changes
Moved into a separate module. Now acts as a plugin that can be omitted or replaced by a different implementation if desired.
Merging subsequent changes into a single undo ‘event’ is now done by proximity in the document (the changes must touch) rather than in time. This will probably have to be further refined.
prosemirror-collab 0.11.0 (2016-09-21)
Breaking changes
Moved into a separate module.
Interface adjusted to work with the new plugin system.
New features
When receiving changes, the module now generates a regular transform action instead of hard-setting the editor’s document. This solves problematic corner cases for code keeping track of the document by listening to transform actions.
prosemirror-commands 0.11.0 (2016-09-21)
Breaking changes
Moved into a separate module.
The interface for command functions was changed to work with the new state/action abstractions.
prosemirror-schema-basic 0.11.0 (2016-09-21)
Breaking changes
Moved into a separate module.
No longer exports the specs for the nodes and marks separately, since they are now plain objects, not subclasses. They are still exported through nodes and marks objects.
The list-related nodes were moved to the schema-list module.
prosemirror-schema-list 0.11.0 (2016-09-21)
Breaking changes
New module combining the node specs from schema-basic, and the list-related commands from the commands module.
prosemirror-schema-table 0.11.0 (2016-09-21)
Breaking changes
Moved into a separate module.
Node types adjusted to the new node spec interface.
Commands adjusted to the new [command] (http://prosemirror.net/version/2016.09.21.html#commands) interface.