remove examples. fixes #149
This commit is contained in:
parent
d3ee1a0ec2
commit
f893198769
1
examples/.gitignore
vendored
1
examples/.gitignore
vendored
@ -1 +0,0 @@
|
|||||||
build
|
|
@ -1,70 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Yjs CodeMirror Example</title>
|
|
||||||
<link rel=stylesheet href="https://codemirror.net/lib/codemirror.css">
|
|
||||||
<style>
|
|
||||||
#container {
|
|
||||||
border: grey;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: thin;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<p>This example shows how to bind a YText type to <a href="https://codemirror.net/">CodeMirror</a> editor.</p>
|
|
||||||
<p>The content of this editor is shared with every client who visits this domain.</p>
|
|
||||||
<div class="code-html">
|
|
||||||
<style>
|
|
||||||
.remote-caret {
|
|
||||||
position: absolute;
|
|
||||||
border-left: black;
|
|
||||||
border-left-style: solid;
|
|
||||||
border-left-width: 2px;
|
|
||||||
height: 1em;
|
|
||||||
}
|
|
||||||
.remote-caret > div {
|
|
||||||
position: relative;
|
|
||||||
top: -1.05em;
|
|
||||||
font-size: 13px;
|
|
||||||
background-color: rgb(250, 129, 0);
|
|
||||||
font-family: serif;
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
line-height: normal;
|
|
||||||
user-select: none;
|
|
||||||
color: white;
|
|
||||||
padding-left: 2px;
|
|
||||||
padding-right: 2px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<div id="container"></div>
|
|
||||||
</div>
|
|
||||||
<!-- The actual source file for the following code is found in ./codemirror.js. Run `npm run watch` to compile the files -->
|
|
||||||
<script class="code-js" src="./build/codemirror.js" type="module">
|
|
||||||
import * as Y from 'yjs'
|
|
||||||
import { WebsocketProvider } from 'yjs/provider/websocket.js'
|
|
||||||
import { CodeMirrorBinding } from 'yjs/bindings/codemirror.js'
|
|
||||||
|
|
||||||
import * as conf from './exampleConfig.js'
|
|
||||||
|
|
||||||
import CodeMirror from 'codemirror'
|
|
||||||
import 'codemirror/mode/javascript/javascript.js'
|
|
||||||
|
|
||||||
const provider = new WebsocketProvider(conf.serverAddress)
|
|
||||||
const ydocument = provider.get('codemirror')
|
|
||||||
const ytext = ydocument.define('codemirror', Y.Text)
|
|
||||||
|
|
||||||
const editor = new CodeMirror(document.querySelector('#container'), {
|
|
||||||
mode: 'javascript',
|
|
||||||
lineNumbers: true
|
|
||||||
})
|
|
||||||
|
|
||||||
const binding = new CodeMirrorBinding(ytext, editor)
|
|
||||||
|
|
||||||
window.codemirrorExample = {
|
|
||||||
binding, editor, ytext, ydocument
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,22 +0,0 @@
|
|||||||
import { WebsocketProvider } from 'y-websocket'
|
|
||||||
import { CodeMirrorBinding } from 'y-codemirror'
|
|
||||||
|
|
||||||
import * as conf from './exampleConfig.js'
|
|
||||||
|
|
||||||
import CodeMirror from 'codemirror'
|
|
||||||
import 'codemirror/mode/javascript/javascript.js'
|
|
||||||
|
|
||||||
const provider = new WebsocketProvider(conf.serverAddress)
|
|
||||||
const ydocument = provider.get('codemirror')
|
|
||||||
const ytext = ydocument.getText('codemirror')
|
|
||||||
|
|
||||||
const editor = new CodeMirror(document.querySelector('#container'), {
|
|
||||||
mode: 'javascript',
|
|
||||||
lineNumbers: true
|
|
||||||
})
|
|
||||||
|
|
||||||
const binding = new CodeMirrorBinding(ytext, editor)
|
|
||||||
|
|
||||||
window.codemirrorExample = {
|
|
||||||
binding, editor, ytext, ydocument
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Yjs Prosemirror Example</title>
|
|
||||||
<link rel=stylesheet href="https://prosemirror.net/css/editor.css">
|
|
||||||
<style>
|
|
||||||
#content {
|
|
||||||
min-height: 500px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<p>This example shows how to bind a YXmlFragment type to an arbitrary DOM element. We set the DOM element to contenteditable so it basically behaves like a very powerful rich-text editor.</p>
|
|
||||||
<p>The content of this editor is shared with every client who visits this domain.</p>
|
|
||||||
<hr>
|
|
||||||
<div class="code-html">
|
|
||||||
|
|
||||||
<div id="content" contenteditable=""></div>
|
|
||||||
</div>
|
|
||||||
<!-- The actual source file for the following code is found in ./dom.js. Run `npm run watch` to compile the files -->
|
|
||||||
<script class="code-js" src="./build/dom.js" type="module">
|
|
||||||
import * as Y from 'yjs/index.js'
|
|
||||||
import { WebsocketProvider } from 'yjs/provider/websocket.js'
|
|
||||||
import { DomBinding } from 'yjs/bindings/dom.js'
|
|
||||||
import * as conf from './exampleConfig.js'
|
|
||||||
|
|
||||||
const provider = new WebsocketProvider(conf.serverAddress)
|
|
||||||
const ydocument = provider.get('dom')
|
|
||||||
const type = ydocument.define('xml', Y.XmlFragment)
|
|
||||||
const binding = new DomBinding(type, document.querySelector('#content'), { scrollingElement: document.scrollingElement })
|
|
||||||
|
|
||||||
window.example = {
|
|
||||||
provider, ydocument, type, binding
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,13 +0,0 @@
|
|||||||
import * as Y from '../src/index.js'
|
|
||||||
import { WebsocketProvider } from 'y-websocket'
|
|
||||||
import { DomBinding } from 'y-dom'
|
|
||||||
import * as conf from './exampleConfig.js'
|
|
||||||
|
|
||||||
const provider = new WebsocketProvider(conf.serverAddress)
|
|
||||||
const ydocument = provider.get('dom')
|
|
||||||
const type = ydocument.define('xml', Y.XmlFragment)
|
|
||||||
const binding = new DomBinding(type, document.querySelector('#content'), { scrollingElement: document.scrollingElement })
|
|
||||||
|
|
||||||
window.example = {
|
|
||||||
provider, ydocument, type, binding
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
/* eslint-env browser */
|
|
||||||
|
|
||||||
const isDeployed = location.hostname === 'yjs.website'
|
|
||||||
|
|
||||||
if (!isDeployed) {
|
|
||||||
console.log('%cYjs: Start your local websocket server by running %c`npm run websocket-server`', 'color:blue', 'color: grey; font-weight: bold')
|
|
||||||
}
|
|
||||||
|
|
||||||
export const serverAddress = isDeployed ? 'wss://api.yjs.website' : 'ws://localhost:1234'
|
|
@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"codemirror": {
|
|
||||||
"title": "CodeMirror Binding"
|
|
||||||
},
|
|
||||||
"prosemirror": {
|
|
||||||
"title": "ProseMirror Binding"
|
|
||||||
},
|
|
||||||
"textarea": {
|
|
||||||
"title": "Textarea Binding"
|
|
||||||
},
|
|
||||||
"quill": {
|
|
||||||
"title": "Quill Binding"
|
|
||||||
},
|
|
||||||
"dom": {
|
|
||||||
"title": "Dom Binding"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,159 +0,0 @@
|
|||||||
|
|
||||||
import { Plugin } from 'prosemirror-state'
|
|
||||||
import crel from 'crel'
|
|
||||||
import * as Y from '../src/index.js'
|
|
||||||
import { prosemirrorPluginKey } from 'y-prosemirror'
|
|
||||||
import * as encoding from 'lib0/encoding.js'
|
|
||||||
import * as decoding from 'lib0/decoding.js'
|
|
||||||
import * as historyProtocol from 'y-protocols/history.js'
|
|
||||||
|
|
||||||
const niceColors = ['#3cb44b', '#4363d8', '#f58231', '#911eb4', '#46f0f0', '#f032e6', '#bcf60c', '#008080', '#9a6324', '#800000', '#808000', '#000075', '#808080']
|
|
||||||
|
|
||||||
const createUserCSS = (userid, username, color = 'rgb(250, 129, 0)', color2 = 'rgba(250, 129, 0, .41)') => `
|
|
||||||
[ychange_state][ychange_user="${userid}"]:hover::before {
|
|
||||||
content: "${username}" !important;
|
|
||||||
background-color: ${color} !important;
|
|
||||||
}
|
|
||||||
[ychange_state="added"][ychange_user="${userid}"] {
|
|
||||||
background-color: ${color2} !important;
|
|
||||||
}
|
|
||||||
[ychange_state="removed"][ychange_user="${userid}"] {
|
|
||||||
color: ${color} !important;
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
export const noteHistoryPlugin = new Plugin({
|
|
||||||
state: {
|
|
||||||
init (initargs, state) {
|
|
||||||
return new NoteHistoryPlugin()
|
|
||||||
},
|
|
||||||
apply (tr, pluginState) {
|
|
||||||
return pluginState
|
|
||||||
}
|
|
||||||
},
|
|
||||||
view (editorView) {
|
|
||||||
const hstate = noteHistoryPlugin.getState(editorView.state)
|
|
||||||
hstate.init(editorView)
|
|
||||||
return {
|
|
||||||
destroy: hstate.destroy.bind(hstate)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const createWrapper = () => {
|
|
||||||
const wrapper = crel('div', { style: 'display: flex;' })
|
|
||||||
const historyContainer = crel('div', { style: 'align-self: baseline; flex-basis: 250px;', class: 'shared-history' })
|
|
||||||
wrapper.insertBefore(historyContainer, null)
|
|
||||||
const userStyleContainer = crel('style')
|
|
||||||
wrapper.insertBefore(userStyleContainer, null)
|
|
||||||
return { wrapper, historyContainer, userStyleContainer }
|
|
||||||
}
|
|
||||||
|
|
||||||
class NoteHistoryPlugin {
|
|
||||||
init (editorView) {
|
|
||||||
this.editorView = editorView
|
|
||||||
const { historyContainer, wrapper, userStyleContainer } = createWrapper()
|
|
||||||
this.userStyleContainer = userStyleContainer
|
|
||||||
this.wrapper = wrapper
|
|
||||||
this.historyContainer = historyContainer
|
|
||||||
const n = editorView.dom.parentNode.parentNode
|
|
||||||
n.parentNode.replaceChild(this.wrapper, n)
|
|
||||||
n.style['flex-grow'] = '1'
|
|
||||||
wrapper.insertBefore(n, this.wrapper.firstChild)
|
|
||||||
this.render()
|
|
||||||
const y = prosemirrorPluginKey.getState(this.editorView.state).y
|
|
||||||
const history = y.define('history', Y.Array)
|
|
||||||
history.observe(this.render.bind(this))
|
|
||||||
}
|
|
||||||
destroy () {
|
|
||||||
this.wrapper.parentNode.replaceChild(this.wrapper.firstChild, this.wrapper)
|
|
||||||
const y = prosemirrorPluginKey.getState(this.editorView.state).y
|
|
||||||
const history = y.define('history', Y.Array)
|
|
||||||
history.unobserve(this.render)
|
|
||||||
}
|
|
||||||
render () {
|
|
||||||
const y = prosemirrorPluginKey.getState(this.editorView.state).y
|
|
||||||
const history = y.define('history', Y.Array).toArray()
|
|
||||||
const fragment = document.createDocumentFragment()
|
|
||||||
const snapshotBtn = crel('button', { type: 'button' }, ['snapshot'])
|
|
||||||
fragment.insertBefore(snapshotBtn, null)
|
|
||||||
let _prevSnap = null // empty
|
|
||||||
snapshotBtn.addEventListener('click', () => {
|
|
||||||
const awareness = y.getAwarenessInfo()
|
|
||||||
const userMap = new Map()
|
|
||||||
const aw = y.getLocalAwarenessInfo()
|
|
||||||
userMap.set(y.userID, aw.name || 'unknown')
|
|
||||||
awareness.forEach((a, userID) => {
|
|
||||||
userMap.set(userID, a.name || 'Unknown')
|
|
||||||
})
|
|
||||||
this.snapshot(userMap)
|
|
||||||
})
|
|
||||||
history.forEach(buf => {
|
|
||||||
const decoder = decoding.createDecoder(buf)
|
|
||||||
const snapshot = historyProtocol.readHistorySnapshot(decoder)
|
|
||||||
const date = new Date(decoding.readUint32(decoder) * 1000)
|
|
||||||
const restoreBtn = crel('button', { type: 'button' }, ['restore'])
|
|
||||||
const a = crel('a', [
|
|
||||||
'• ' + date.toUTCString(), restoreBtn
|
|
||||||
])
|
|
||||||
const el = crel('div', [ a ])
|
|
||||||
let prevSnapshot = _prevSnap // rebind to new variable
|
|
||||||
restoreBtn.addEventListener('click', event => {
|
|
||||||
if (prevSnapshot === null) {
|
|
||||||
prevSnapshot = { ds: snapshot.ds, sm: new Map() }
|
|
||||||
}
|
|
||||||
this.editorView.dispatch(this.editorView.state.tr.setMeta(prosemirrorPluginKey, { snapshot, prevSnapshot, restore: true }))
|
|
||||||
event.stopPropagation()
|
|
||||||
})
|
|
||||||
a.addEventListener('click', () => {
|
|
||||||
console.log('setting snapshot')
|
|
||||||
if (prevSnapshot === null) {
|
|
||||||
prevSnapshot = { ds: snapshot.ds, sm: new Map() }
|
|
||||||
}
|
|
||||||
this.renderSnapshot(snapshot, prevSnapshot)
|
|
||||||
})
|
|
||||||
fragment.insertBefore(el, null)
|
|
||||||
_prevSnap = snapshot
|
|
||||||
})
|
|
||||||
this.historyContainer.innerHTML = ''
|
|
||||||
this.historyContainer.insertBefore(fragment, null)
|
|
||||||
}
|
|
||||||
renderSnapshot (snapshot, prevSnapshot) {
|
|
||||||
this.editorView.dispatch(this.editorView.state.tr.setMeta(prosemirrorPluginKey, { snapshot, prevSnapshot }))
|
|
||||||
/**
|
|
||||||
* @type {Array<string|null>}
|
|
||||||
*/
|
|
||||||
let colors = niceColors.slice()
|
|
||||||
let style = ''
|
|
||||||
snapshot.userMap.forEach((name, userid) => {
|
|
||||||
/**
|
|
||||||
* @type {any}
|
|
||||||
*/
|
|
||||||
const randInt = name.split('').map(s => s.charCodeAt(0)).reduce((a, b) => a + b)
|
|
||||||
let color = null
|
|
||||||
let i = 0
|
|
||||||
for (; i < colors.length && color === null; i++) {
|
|
||||||
color = colors[(randInt + i) % colors.length]
|
|
||||||
}
|
|
||||||
if (color === null) {
|
|
||||||
colors = niceColors.slice()
|
|
||||||
i = 0
|
|
||||||
color = colors[randInt % colors.length]
|
|
||||||
}
|
|
||||||
colors[randInt % colors.length] = null
|
|
||||||
style += createUserCSS(userid, name, color, color + '69')
|
|
||||||
})
|
|
||||||
this.userStyleContainer.innerHTML = style
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @param {Map<number, string>} [updatedUserMap] Maps from userid (yjs model) to account name (e.g. mail address)
|
|
||||||
*/
|
|
||||||
snapshot (updatedUserMap = new Map()) {
|
|
||||||
const y = prosemirrorPluginKey.getState(this.editorView.state).y
|
|
||||||
const history = y.define('history', Y.Array)
|
|
||||||
const encoder = encoding.createEncoder()
|
|
||||||
historyProtocol.writeHistorySnapshot(encoder, y, updatedUserMap)
|
|
||||||
encoding.writeUint32(encoder, Math.floor(Date.now() / 1000))
|
|
||||||
history.push([encoding.toUint8Array(encoder)])
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,197 +0,0 @@
|
|||||||
import { Schema } from 'prosemirror-model'
|
|
||||||
|
|
||||||
const brDOM = ['br']
|
|
||||||
|
|
||||||
const calcYchangeDomAttrs = (attrs, domAttrs = {}) => {
|
|
||||||
domAttrs = Object.assign({}, domAttrs)
|
|
||||||
if (attrs.ychange !== null) {
|
|
||||||
domAttrs.ychange_user = attrs.ychange.user
|
|
||||||
domAttrs.ychange_state = attrs.ychange.state
|
|
||||||
}
|
|
||||||
return domAttrs
|
|
||||||
}
|
|
||||||
|
|
||||||
// :: Object
|
|
||||||
// [Specs](#model.NodeSpec) for the nodes defined in this schema.
|
|
||||||
export const nodes = {
|
|
||||||
// :: NodeSpec The top level document node.
|
|
||||||
doc: {
|
|
||||||
content: 'block+'
|
|
||||||
},
|
|
||||||
|
|
||||||
// :: NodeSpec A plain paragraph textblock. Represented in the DOM
|
|
||||||
// as a `<p>` element.
|
|
||||||
paragraph: {
|
|
||||||
attrs: { ychange: { default: null } },
|
|
||||||
content: 'inline*',
|
|
||||||
group: 'block',
|
|
||||||
parseDOM: [{ tag: 'p' }],
|
|
||||||
toDOM (node) { return ['p', calcYchangeDomAttrs(node.attrs), 0] }
|
|
||||||
},
|
|
||||||
|
|
||||||
// :: NodeSpec A blockquote (`<blockquote>`) wrapping one or more blocks.
|
|
||||||
blockquote: {
|
|
||||||
attrs: { ychange: { default: null } },
|
|
||||||
content: 'block+',
|
|
||||||
group: 'block',
|
|
||||||
defining: true,
|
|
||||||
parseDOM: [{ tag: 'blockquote' }],
|
|
||||||
toDOM (node) { return ['blockquote', calcYchangeDomAttrs(node.attrs), 0] }
|
|
||||||
},
|
|
||||||
|
|
||||||
// :: NodeSpec A horizontal rule (`<hr>`).
|
|
||||||
horizontal_rule: {
|
|
||||||
attrs: { ychange: { default: null } },
|
|
||||||
group: 'block',
|
|
||||||
parseDOM: [{ tag: 'hr' }],
|
|
||||||
toDOM (node) {
|
|
||||||
return ['hr', calcYchangeDomAttrs(node.attrs)]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// :: NodeSpec A heading textblock, with a `level` attribute that
|
|
||||||
// should hold the number 1 to 6. Parsed and serialized as `<h1>` to
|
|
||||||
// `<h6>` elements.
|
|
||||||
heading: {
|
|
||||||
attrs: {
|
|
||||||
level: { default: 1 },
|
|
||||||
ychange: { default: null }
|
|
||||||
},
|
|
||||||
content: 'inline*',
|
|
||||||
group: 'block',
|
|
||||||
defining: true,
|
|
||||||
parseDOM: [{ tag: 'h1', attrs: { level: 1 } },
|
|
||||||
{ tag: 'h2', attrs: { level: 2 } },
|
|
||||||
{ tag: 'h3', attrs: { level: 3 } },
|
|
||||||
{ tag: 'h4', attrs: { level: 4 } },
|
|
||||||
{ tag: 'h5', attrs: { level: 5 } },
|
|
||||||
{ tag: 'h6', attrs: { level: 6 } }],
|
|
||||||
toDOM (node) { return ['h' + node.attrs.level, calcYchangeDomAttrs(node.attrs), 0] }
|
|
||||||
},
|
|
||||||
|
|
||||||
// :: NodeSpec A code listing. Disallows marks or non-text inline
|
|
||||||
// nodes by default. Represented as a `<pre>` element with a
|
|
||||||
// `<code>` element inside of it.
|
|
||||||
code_block: {
|
|
||||||
attrs: { ychange: { default: null } },
|
|
||||||
content: 'text*',
|
|
||||||
marks: '',
|
|
||||||
group: 'block',
|
|
||||||
code: true,
|
|
||||||
defining: true,
|
|
||||||
parseDOM: [{ tag: 'pre', preserveWhitespace: 'full' }],
|
|
||||||
toDOM (node) { return ['pre', calcYchangeDomAttrs(node.attrs), ['code', 0]] }
|
|
||||||
},
|
|
||||||
|
|
||||||
// :: NodeSpec The text node.
|
|
||||||
text: {
|
|
||||||
group: 'inline'
|
|
||||||
},
|
|
||||||
|
|
||||||
// :: NodeSpec An inline image (`<img>`) node. Supports `src`,
|
|
||||||
// `alt`, and `href` attributes. The latter two default to the empty
|
|
||||||
// string.
|
|
||||||
image: {
|
|
||||||
inline: true,
|
|
||||||
attrs: {
|
|
||||||
ychange: { default: null },
|
|
||||||
src: {},
|
|
||||||
alt: { default: null },
|
|
||||||
title: { default: null }
|
|
||||||
},
|
|
||||||
group: 'inline',
|
|
||||||
draggable: true,
|
|
||||||
parseDOM: [{ tag: 'img[src]',
|
|
||||||
getAttrs (dom) {
|
|
||||||
return {
|
|
||||||
src: dom.getAttribute('src'),
|
|
||||||
title: dom.getAttribute('title'),
|
|
||||||
alt: dom.getAttribute('alt')
|
|
||||||
}
|
|
||||||
} }],
|
|
||||||
toDOM (node) {
|
|
||||||
const domAttrs = {
|
|
||||||
src: node.attrs.src,
|
|
||||||
title: node.attrs.title,
|
|
||||||
alt: node.attrs.alt
|
|
||||||
}
|
|
||||||
return ['img', calcYchangeDomAttrs(node.attrs, domAttrs)]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// :: NodeSpec A hard line break, represented in the DOM as `<br>`.
|
|
||||||
hard_break: {
|
|
||||||
inline: true,
|
|
||||||
group: 'inline',
|
|
||||||
selectable: false,
|
|
||||||
parseDOM: [{ tag: 'br' }],
|
|
||||||
toDOM () { return brDOM }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const emDOM = ['em', 0]; const strongDOM = ['strong', 0]; const codeDOM = ['code', 0]
|
|
||||||
|
|
||||||
// :: Object [Specs](#model.MarkSpec) for the marks in the schema.
|
|
||||||
export const marks = {
|
|
||||||
// :: MarkSpec A link. Has `href` and `title` attributes. `title`
|
|
||||||
// defaults to the empty string. Rendered and parsed as an `<a>`
|
|
||||||
// element.
|
|
||||||
link: {
|
|
||||||
attrs: {
|
|
||||||
href: {},
|
|
||||||
title: { default: null }
|
|
||||||
},
|
|
||||||
inclusive: false,
|
|
||||||
parseDOM: [{ tag: 'a[href]',
|
|
||||||
getAttrs (dom) {
|
|
||||||
return { href: dom.getAttribute('href'), title: dom.getAttribute('title') }
|
|
||||||
} }],
|
|
||||||
toDOM (node) { return ['a', node.attrs, 0] }
|
|
||||||
},
|
|
||||||
|
|
||||||
// :: MarkSpec An emphasis mark. Rendered as an `<em>` element.
|
|
||||||
// Has parse rules that also match `<i>` and `font-style: italic`.
|
|
||||||
em: {
|
|
||||||
parseDOM: [{ tag: 'i' }, { tag: 'em' }, { style: 'font-style=italic' }],
|
|
||||||
toDOM () { return emDOM }
|
|
||||||
},
|
|
||||||
|
|
||||||
// :: MarkSpec A strong mark. Rendered as `<strong>`, parse rules
|
|
||||||
// also match `<b>` and `font-weight: bold`.
|
|
||||||
strong: {
|
|
||||||
parseDOM: [{ tag: 'strong' },
|
|
||||||
// This works around a Google Docs misbehavior where
|
|
||||||
// pasted content will be inexplicably wrapped in `<b>`
|
|
||||||
// tags with a font-weight normal.
|
|
||||||
{ tag: 'b', getAttrs: node => node.style.fontWeight !== 'normal' && null },
|
|
||||||
{ style: 'font-weight', getAttrs: value => /^(bold(er)?|[5-9]\d{2,})$/.test(value) && null }],
|
|
||||||
toDOM () { return strongDOM }
|
|
||||||
},
|
|
||||||
|
|
||||||
// :: MarkSpec Code font mark. Represented as a `<code>` element.
|
|
||||||
code: {
|
|
||||||
parseDOM: [{ tag: 'code' }],
|
|
||||||
toDOM () { return codeDOM }
|
|
||||||
},
|
|
||||||
ychange: {
|
|
||||||
attrs: {
|
|
||||||
user: { default: null },
|
|
||||||
state: { default: null }
|
|
||||||
},
|
|
||||||
inclusive: false,
|
|
||||||
parseDOM: [{ tag: 'ychange' }],
|
|
||||||
toDOM (node) {
|
|
||||||
return ['ychange', { ychange_user: node.attrs.user, ychange_state: node.attrs.state }, 0]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// :: Schema
|
|
||||||
// This schema rougly corresponds to the document schema used by
|
|
||||||
// [CommonMark](http://commonmark.org/), minus the list elements,
|
|
||||||
// which are defined in the [`prosemirror-schema-list`](#schema-list)
|
|
||||||
// module.
|
|
||||||
//
|
|
||||||
// To reuse elements from this schema, extend or read from its
|
|
||||||
// `spec.nodes` and `spec.marks` [properties](#model.Schema.spec).
|
|
||||||
export const schema = new Schema({ nodes, marks })
|
|
@ -1,330 +0,0 @@
|
|||||||
.ProseMirror {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror {
|
|
||||||
word-wrap: break-word;
|
|
||||||
white-space: pre-wrap;
|
|
||||||
-webkit-font-variant-ligatures: none;
|
|
||||||
font-variant-ligatures: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror pre {
|
|
||||||
white-space: pre-wrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror li {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-hideselection *::selection { background: transparent; }
|
|
||||||
.ProseMirror-hideselection *::-moz-selection { background: transparent; }
|
|
||||||
.ProseMirror-hideselection { caret-color: transparent; }
|
|
||||||
|
|
||||||
.ProseMirror-selectednode {
|
|
||||||
outline: 2px solid #8cf;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Make sure li selections wrap around markers */
|
|
||||||
|
|
||||||
li.ProseMirror-selectednode {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
li.ProseMirror-selectednode:after {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
left: -32px;
|
|
||||||
right: -2px; top: -2px; bottom: -2px;
|
|
||||||
border: 2px solid #8cf;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
.ProseMirror-textblock-dropdown {
|
|
||||||
min-width: 3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu {
|
|
||||||
margin: 0 -4px;
|
|
||||||
line-height: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-tooltip .ProseMirror-menu {
|
|
||||||
width: -webkit-fit-content;
|
|
||||||
width: fit-content;
|
|
||||||
white-space: pre;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menuitem {
|
|
||||||
margin-right: 3px;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menuseparator {
|
|
||||||
border-right: 1px solid #ddd;
|
|
||||||
margin-right: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-dropdown, .ProseMirror-menu-dropdown-menu {
|
|
||||||
font-size: 90%;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-dropdown {
|
|
||||||
vertical-align: 1px;
|
|
||||||
cursor: pointer;
|
|
||||||
position: relative;
|
|
||||||
padding-right: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-dropdown-wrap {
|
|
||||||
padding: 1px 0 1px 4px;
|
|
||||||
display: inline-block;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-dropdown:after {
|
|
||||||
content: "";
|
|
||||||
border-left: 4px solid transparent;
|
|
||||||
border-right: 4px solid transparent;
|
|
||||||
border-top: 4px solid currentColor;
|
|
||||||
opacity: .6;
|
|
||||||
position: absolute;
|
|
||||||
right: 4px;
|
|
||||||
top: calc(50% - 2px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-dropdown-menu, .ProseMirror-menu-submenu {
|
|
||||||
position: absolute;
|
|
||||||
background: white;
|
|
||||||
color: #666;
|
|
||||||
border: 1px solid #aaa;
|
|
||||||
padding: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-dropdown-menu {
|
|
||||||
z-index: 15;
|
|
||||||
min-width: 6em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-dropdown-item {
|
|
||||||
cursor: pointer;
|
|
||||||
padding: 2px 8px 2px 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-dropdown-item:hover {
|
|
||||||
background: #f2f2f2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-submenu-wrap {
|
|
||||||
position: relative;
|
|
||||||
margin-right: -4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-submenu-label:after {
|
|
||||||
content: "";
|
|
||||||
border-top: 4px solid transparent;
|
|
||||||
border-bottom: 4px solid transparent;
|
|
||||||
border-left: 4px solid currentColor;
|
|
||||||
opacity: .6;
|
|
||||||
position: absolute;
|
|
||||||
right: 4px;
|
|
||||||
top: calc(50% - 4px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-submenu {
|
|
||||||
display: none;
|
|
||||||
min-width: 4em;
|
|
||||||
left: 100%;
|
|
||||||
top: -3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-active {
|
|
||||||
background: #eee;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-active {
|
|
||||||
background: #eee;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-disabled {
|
|
||||||
opacity: .3;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-submenu-wrap:hover .ProseMirror-menu-submenu, .ProseMirror-menu-submenu-wrap-active .ProseMirror-menu-submenu {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menubar {
|
|
||||||
border-top-left-radius: inherit;
|
|
||||||
border-top-right-radius: inherit;
|
|
||||||
position: relative;
|
|
||||||
min-height: 1em;
|
|
||||||
color: #666;
|
|
||||||
padding: 1px 6px;
|
|
||||||
top: 0; left: 0; right: 0;
|
|
||||||
border-bottom: 1px solid silver;
|
|
||||||
background: white;
|
|
||||||
z-index: 10;
|
|
||||||
-moz-box-sizing: border-box;
|
|
||||||
box-sizing: border-box;
|
|
||||||
overflow: visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-icon {
|
|
||||||
display: inline-block;
|
|
||||||
line-height: .8;
|
|
||||||
vertical-align: -2px; /* Compensate for padding */
|
|
||||||
padding: 2px 8px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-menu-disabled.ProseMirror-icon {
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-icon svg {
|
|
||||||
fill: currentColor;
|
|
||||||
height: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-icon span {
|
|
||||||
vertical-align: text-top;
|
|
||||||
}
|
|
||||||
.ProseMirror-gapcursor {
|
|
||||||
display: none;
|
|
||||||
pointer-events: none;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-gapcursor:after {
|
|
||||||
content: "";
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
top: -2px;
|
|
||||||
width: 20px;
|
|
||||||
border-top: 1px solid black;
|
|
||||||
animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes ProseMirror-cursor-blink {
|
|
||||||
to {
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-focused .ProseMirror-gapcursor {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
/* Add space around the hr to make clicking it easier */
|
|
||||||
|
|
||||||
.ProseMirror-example-setup-style hr {
|
|
||||||
padding: 2px 10px;
|
|
||||||
border: none;
|
|
||||||
margin: 1em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-example-setup-style hr:after {
|
|
||||||
content: "";
|
|
||||||
display: block;
|
|
||||||
height: 1px;
|
|
||||||
background-color: silver;
|
|
||||||
line-height: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror ul, .ProseMirror ol {
|
|
||||||
padding-left: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror blockquote {
|
|
||||||
padding-left: 1em;
|
|
||||||
border-left: 3px solid #eee;
|
|
||||||
margin-left: 0; margin-right: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-example-setup-style img {
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-prompt {
|
|
||||||
background: white;
|
|
||||||
padding: 5px 10px 5px 15px;
|
|
||||||
border: 1px solid silver;
|
|
||||||
position: fixed;
|
|
||||||
border-radius: 3px;
|
|
||||||
z-index: 11;
|
|
||||||
box-shadow: -.5px 2px 5px rgba(0, 0, 0, .2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-prompt h5 {
|
|
||||||
margin: 0;
|
|
||||||
font-weight: normal;
|
|
||||||
font-size: 100%;
|
|
||||||
color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-prompt input[type="text"],
|
|
||||||
.ProseMirror-prompt textarea {
|
|
||||||
background: #eee;
|
|
||||||
border: none;
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-prompt input[type="text"] {
|
|
||||||
padding: 0 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-prompt-close {
|
|
||||||
position: absolute;
|
|
||||||
left: 2px; top: 1px;
|
|
||||||
color: #666;
|
|
||||||
border: none; background: transparent; padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-prompt-close:after {
|
|
||||||
content: "✕";
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-invalid {
|
|
||||||
background: #ffc;
|
|
||||||
border: 1px solid #cc7;
|
|
||||||
border-radius: 4px;
|
|
||||||
padding: 5px 10px;
|
|
||||||
position: absolute;
|
|
||||||
min-width: 10em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror-prompt-buttons {
|
|
||||||
margin-top: 5px;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
#editor, .editor {
|
|
||||||
background: white;
|
|
||||||
color: black;
|
|
||||||
background-clip: padding-box;
|
|
||||||
border-radius: 4px;
|
|
||||||
border: 2px solid rgba(0, 0, 0, 0.2);
|
|
||||||
padding: 5px 0;
|
|
||||||
margin-bottom: 23px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror p:first-child,
|
|
||||||
.ProseMirror h1:first-child,
|
|
||||||
.ProseMirror h2:first-child,
|
|
||||||
.ProseMirror h3:first-child,
|
|
||||||
.ProseMirror h4:first-child,
|
|
||||||
.ProseMirror h5:first-child,
|
|
||||||
.ProseMirror h6:first-child {
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror {
|
|
||||||
padding: 4px 8px 4px 14px;
|
|
||||||
line-height: 1.2;
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ProseMirror p { margin-bottom: 1em }
|
|
||||||
|
|
@ -1,123 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Yjs Prosemirror Example</title>
|
|
||||||
<link rel=stylesheet href="./prosemirror.css">
|
|
||||||
<style>
|
|
||||||
placeholder {
|
|
||||||
display: inline;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
color: #ccc;
|
|
||||||
}
|
|
||||||
placeholder:after {
|
|
||||||
content: "☁";
|
|
||||||
font-size: 200%;
|
|
||||||
line-height: 0.1;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.ProseMirror img { max-width: 100px }
|
|
||||||
/* this is a rough fix for the first cursor position when the first paragraph is empty */
|
|
||||||
.ProseMirror > .ProseMirror-yjs-cursor:first-child {
|
|
||||||
margin-top: 16px;
|
|
||||||
}
|
|
||||||
.ProseMirror p:first-child, .ProseMirror h1:first-child, .ProseMirror h2:first-child, .ProseMirror h3:first-child, .ProseMirror h4:first-child, .ProseMirror h5:first-child, .ProseMirror h6:first-child {
|
|
||||||
margin-top: 16px
|
|
||||||
}
|
|
||||||
.ProseMirror-yjs-cursor {
|
|
||||||
position: absolute;
|
|
||||||
border-left: black;
|
|
||||||
border-left-style: solid;
|
|
||||||
border-left-width: 2px;
|
|
||||||
border-color: orange;
|
|
||||||
height: 1em;
|
|
||||||
word-break: normal;
|
|
||||||
}
|
|
||||||
.ProseMirror-yjs-cursor > div {
|
|
||||||
position: relative;
|
|
||||||
top: -1.05em;
|
|
||||||
font-size: 13px;
|
|
||||||
background-color: rgb(250, 129, 0);
|
|
||||||
font-family: serif;
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
line-height: normal;
|
|
||||||
user-select: none;
|
|
||||||
color: white;
|
|
||||||
padding-left: 2px;
|
|
||||||
padding-right: 2px;
|
|
||||||
}
|
|
||||||
[ychange_state] {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
[ychange_state]:hover::before {
|
|
||||||
content: attr(ychange_user);
|
|
||||||
background-color: #fa8100;
|
|
||||||
position: absolute;
|
|
||||||
top: -14px;
|
|
||||||
right: 0;
|
|
||||||
font-size: 12px;
|
|
||||||
padding: 0 2px;
|
|
||||||
border-radius: 3px 3px 0 0;
|
|
||||||
color: #fdfdfe;
|
|
||||||
user-select: none;
|
|
||||||
word-break: normal;
|
|
||||||
}
|
|
||||||
*[ychange_state='added'] {
|
|
||||||
background-color: #fa810069;
|
|
||||||
}
|
|
||||||
ychange[ychange_state='removed'] {
|
|
||||||
color: rgb(250, 129, 0);
|
|
||||||
text-decoration: line-through;
|
|
||||||
}
|
|
||||||
*:not(ychange)[ychange_state='removed'] {
|
|
||||||
background-color: #ff9494c9;
|
|
||||||
text-decoration: line-through;
|
|
||||||
}
|
|
||||||
img[ychange_state='removed'] {
|
|
||||||
padding: 2px;
|
|
||||||
}
|
|
||||||
.y-connect-btn {
|
|
||||||
position: absolute;
|
|
||||||
top: 20px;
|
|
||||||
right: 20px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<button type="button" class="y-connect-btn">Disconnect</button>
|
|
||||||
<p>This example shows how to bind a YXmlFragment to a <a href="http://prosemirror.net">Prosemirror</a> editor using <a href="https://github.com/y-js/y-prosemirror">y-prosemirror</a>.</p>
|
|
||||||
<p>The content of this editor is shared with every client that visits this domain.</p>
|
|
||||||
<div class="code-html">
|
|
||||||
|
|
||||||
<div id="editor" style="margin-bottom: 23px"></div>
|
|
||||||
<div style="display: none" id="content"></div>
|
|
||||||
</div>
|
|
||||||
<!-- The actual source file for the following code is found in ./prosemirror.js. Run `npm run watch` to compile the files -->
|
|
||||||
<script class="code-js" src="./build/prosemirror.js" type="module">
|
|
||||||
import * as Y from 'yjs'
|
|
||||||
import { WebsocketProvider } from 'yjs/provider/websocket.js'
|
|
||||||
import { prosemirrorPlugin, cursorPlugin } from 'yjs/bindings/prosemirror'
|
|
||||||
|
|
||||||
import * as conf from './exampleConfig.js'
|
|
||||||
|
|
||||||
import { EditorState } from 'prosemirror-state'
|
|
||||||
import { EditorView } from 'prosemirror-view'
|
|
||||||
import { DOMParser } from 'prosemirror-model'
|
|
||||||
import { schema } from 'prosemirror-schema-basic'
|
|
||||||
import { exampleSetup } from 'prosemirror-example-setup'
|
|
||||||
|
|
||||||
const provider = new WebsocketProvider(conf.serverAddress)
|
|
||||||
const ydocument = provider.get('prosemirror')
|
|
||||||
const type = ydocument.define('prosemirror', Y.XmlFragment)
|
|
||||||
|
|
||||||
const prosemirrorView = new EditorView(document.querySelector('#editor'), {
|
|
||||||
state: EditorState.create({
|
|
||||||
doc: DOMParser.fromSchema(schema).parse(document.querySelector('#content')),
|
|
||||||
plugins: exampleSetup({schema}).concat([prosemirrorPlugin(type), cursorPlugin])
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
window.example = { provider, ydocument, type, prosemirrorView }
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,36 +0,0 @@
|
|||||||
import * as Y from 'yjs'
|
|
||||||
import { WebsocketProvider } from 'y-websocket'
|
|
||||||
import { prosemirrorPlugin, cursorPlugin } from 'y-prosemirror'
|
|
||||||
|
|
||||||
import * as conf from './exampleConfig.js'
|
|
||||||
|
|
||||||
import { EditorState } from 'prosemirror-state'
|
|
||||||
import { EditorView } from 'prosemirror-view'
|
|
||||||
import { DOMParser } from 'prosemirror-model'
|
|
||||||
import { schema } from './prosemirror-schema.js'
|
|
||||||
import { exampleSetup } from 'prosemirror-example-setup'
|
|
||||||
// import { noteHistoryPlugin } from './prosemirror-history.js'
|
|
||||||
|
|
||||||
const provider = new WebsocketProvider(conf.serverAddress)
|
|
||||||
const ydocument = provider.get('prosemirror' /*, { gc: false } */)
|
|
||||||
const type = ydocument.get('prosemirror', Y.XmlFragment)
|
|
||||||
|
|
||||||
const prosemirrorView = new EditorView(document.querySelector('#editor'), {
|
|
||||||
state: EditorState.create({
|
|
||||||
doc: DOMParser.fromSchema(schema).parse(document.querySelector('#content')),
|
|
||||||
plugins: exampleSetup({ schema }).concat([prosemirrorPlugin(type), cursorPlugin])
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
const connectBtn = document.querySelector('.y-connect-btn')
|
|
||||||
connectBtn.addEventListener('click', () => {
|
|
||||||
if (ydocument.wsconnected) {
|
|
||||||
ydocument.disconnect()
|
|
||||||
connectBtn.textContent = 'Connect'
|
|
||||||
} else {
|
|
||||||
ydocument.connect()
|
|
||||||
connectBtn.textContent = 'Disconnect'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
window.example = { provider, ydocument, type, prosemirrorView }
|
|
@ -1,51 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Yjs Quill Example</title>
|
|
||||||
<link rel="stylesheet" href="https://cdn.quilljs.com/1.3.6/quill.snow.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<p>This example shows how to bind a YText type to <a href="https://quilljs.com">Quill</a> editor.</p>
|
|
||||||
<p>The content of this editor is shared with every client who visits this domain.</p>
|
|
||||||
<div class="code-html">
|
|
||||||
<div id="quill-container">
|
|
||||||
<div id="quill">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- The actual source file for the following code is found in ./quill.js. Run `npm run watch` to compile the files -->
|
|
||||||
<script class="code-js" src="./build/quill.js" type="module">
|
|
||||||
import * as Y from 'yjs'
|
|
||||||
import { WebsocketProvider } from 'yjs/provider/websocket.js'
|
|
||||||
import { QuillBinding } from 'yjs/bindings/quill.js'
|
|
||||||
|
|
||||||
import * as conf from './exampleConfig.js'
|
|
||||||
|
|
||||||
import Quill from 'quill'
|
|
||||||
|
|
||||||
const provider = new WebsocketProvider(conf.serverAddress)
|
|
||||||
const ydocument = provider.get('quill')
|
|
||||||
const ytext = ydocument.define('quill', Y.Text)
|
|
||||||
|
|
||||||
const quill = new Quill('#quill-container', {
|
|
||||||
modules: {
|
|
||||||
toolbar: [
|
|
||||||
[{ header: [1, 2, false] }],
|
|
||||||
['bold', 'italic', 'underline'],
|
|
||||||
['image', 'code-block'],
|
|
||||||
[{ color: [] }, { background: [] }], // Snow theme fills in values
|
|
||||||
[{ script: 'sub' }, { script: 'super' }],
|
|
||||||
['link', 'image'],
|
|
||||||
['link', 'code-block'],
|
|
||||||
[{ list: 'ordered' }, { list: 'bullet' }]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
placeholder: 'Compose an epic...',
|
|
||||||
theme: 'snow' // or 'bubble'
|
|
||||||
})
|
|
||||||
|
|
||||||
window.quillBinding = new QuillBinding(ytext, quill)
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,30 +0,0 @@
|
|||||||
import * as Y from '../src/index.js'
|
|
||||||
import { WebsocketProvider } from 'y-websocket'
|
|
||||||
import { QuillBinding } from 'y-quill'
|
|
||||||
|
|
||||||
import * as conf from './exampleConfig.js'
|
|
||||||
|
|
||||||
import Quill from 'quill'
|
|
||||||
|
|
||||||
const provider = new WebsocketProvider(conf.serverAddress)
|
|
||||||
const ydocument = provider.get('quill')
|
|
||||||
const ytext = ydocument.define('quill', Y.Text)
|
|
||||||
|
|
||||||
const quill = new Quill('#quill-container', {
|
|
||||||
modules: {
|
|
||||||
toolbar: [
|
|
||||||
[{ header: [1, 2, false] }],
|
|
||||||
['bold', 'italic', 'underline'],
|
|
||||||
['image', 'code-block'],
|
|
||||||
[{ color: [] }, { background: [] }], // Snow theme fills in values
|
|
||||||
[{ script: 'sub' }, { script: 'super' }],
|
|
||||||
['link', 'image'],
|
|
||||||
['link', 'code-block'],
|
|
||||||
[{ list: 'ordered' }, { list: 'bullet' }]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
placeholder: 'Compose an epic...',
|
|
||||||
theme: 'snow' // or 'bubble'
|
|
||||||
})
|
|
||||||
|
|
||||||
window.quillBinding = new QuillBinding(ytext, quill)
|
|
@ -1,29 +0,0 @@
|
|||||||
footer img {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
nav .title h1 a {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer {
|
|
||||||
background-color: #b93c1d;
|
|
||||||
}
|
|
||||||
|
|
||||||
#resizer {
|
|
||||||
background-color: #b93c1d;
|
|
||||||
}
|
|
||||||
|
|
||||||
.main section article.readme h1:first-child img {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.main section article.readme h1:first-child {
|
|
||||||
margin-bottom: 16px;
|
|
||||||
margin-top: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.main section article.readme h1:first-child::before {
|
|
||||||
content: "Yjs";
|
|
||||||
font-size: 2em;
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Yjs Textarea Example</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<p>This example shows how to bind a YText type to a DOM Textarea.</p>
|
|
||||||
<p>The content of this textarea is shared with every client who visits this domain.</p>
|
|
||||||
<div class="code-html">
|
|
||||||
|
|
||||||
<textarea style="width:80%;" rows=40 autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"></textarea>
|
|
||||||
</div>
|
|
||||||
<!-- The actual source file for the following code is found in ./textarea.js. Run `npm run watch` to compile the files -->
|
|
||||||
<script class="code-js" src="./build/textarea.js" type="module">
|
|
||||||
import * as Y from 'yjs'
|
|
||||||
import { WebsocketProvider } from 'yjs/provider/websocket.js'
|
|
||||||
import { TextareaBinding } from 'yjs/bindings/textarea.js'
|
|
||||||
|
|
||||||
import * as conf from './exampleConfig.js'
|
|
||||||
|
|
||||||
const provider = new WebsocketProvider(conf.serverAddress)
|
|
||||||
const ydocument = provider.get('textarea')
|
|
||||||
const type = ydocument.define('textarea', Y.Text)
|
|
||||||
const textarea = document.querySelector('textarea')
|
|
||||||
const binding = new TextareaBinding(type, textarea)
|
|
||||||
|
|
||||||
window.textareaExample = {
|
|
||||||
provider, ydocument, type, textarea, binding
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,14 +0,0 @@
|
|||||||
import { WebsocketProvider } from 'y-websocket'
|
|
||||||
import { TextareaBinding } from 'y-textarea'
|
|
||||||
|
|
||||||
import * as conf from './exampleConfig.js'
|
|
||||||
|
|
||||||
const provider = new WebsocketProvider(conf.serverAddress)
|
|
||||||
const ydocument = provider.get('textarea')
|
|
||||||
const type = ydocument.getText('textarea')
|
|
||||||
const textarea = document.querySelector('textarea')
|
|
||||||
const binding = new TextareaBinding(type, textarea)
|
|
||||||
|
|
||||||
window.textareaExample = {
|
|
||||||
provider, ydocument, type, textarea, binding
|
|
||||||
}
|
|
507
package-lock.json
generated
507
package-lock.json
generated
@ -625,24 +625,12 @@
|
|||||||
"integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
|
"integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"clone": {
|
|
||||||
"version": "2.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
|
|
||||||
"integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"co": {
|
"co": {
|
||||||
"version": "4.6.0",
|
"version": "4.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
|
||||||
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
|
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"codemirror": {
|
|
||||||
"version": "5.46.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.46.0.tgz",
|
|
||||||
"integrity": "sha512-3QpMge0vg4QEhHW3hBAtCipJEWjTJrqLLXdIaWptJOblf1vHFeXLNtFhPai/uX2lnFCehWNk4yOdaMR853Z02w==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"collection-visit": {
|
"collection-visit": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
|
||||||
@ -668,12 +656,6 @@
|
|||||||
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
|
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"colors": {
|
|
||||||
"version": "1.3.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
|
|
||||||
"integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"commander": {
|
"commander": {
|
||||||
"version": "2.6.0",
|
"version": "2.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz",
|
||||||
@ -801,22 +783,6 @@
|
|||||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
|
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"cors": {
|
|
||||||
"version": "2.8.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
|
|
||||||
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"object-assign": "^4",
|
|
||||||
"vary": "^1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"crel": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/crel/-/crel-3.1.0.tgz",
|
|
||||||
"integrity": "sha512-VIGY44ERxx8lXVkOEfcB0A49OkjxkQNK+j+fHvoLy7GsGX1KKgAaQ+p9N0YgvQXu+X+ryUWGDeLx/fSI+w7+eg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"cross-spawn": {
|
"cross-spawn": {
|
||||||
"version": "5.1.0",
|
"version": "5.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
|
||||||
@ -873,12 +839,6 @@
|
|||||||
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
|
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"deep-equal": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"deep-is": {
|
"deep-is": {
|
||||||
"version": "0.1.3",
|
"version": "0.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
|
||||||
@ -1487,12 +1447,6 @@
|
|||||||
"through": "~2.3.1"
|
"through": "~2.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"eventemitter3": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
|
|
||||||
"integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"expand-brackets": {
|
"expand-brackets": {
|
||||||
"version": "2.1.4",
|
"version": "2.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
|
||||||
@ -1528,12 +1482,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"extend": {
|
|
||||||
"version": "3.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
|
||||||
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"extend-shallow": {
|
"extend-shallow": {
|
||||||
"version": "3.0.2",
|
"version": "3.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
|
||||||
@ -1643,12 +1591,6 @@
|
|||||||
"integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
|
"integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"fast-diff": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz",
|
|
||||||
"integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"fast-json-stable-stringify": {
|
"fast-json-stable-stringify": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
|
||||||
@ -1818,9 +1760,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"fsevents": {
|
"fsevents": {
|
||||||
"version": "1.2.8",
|
"version": "1.2.9",
|
||||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.8.tgz",
|
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
|
||||||
"integrity": "sha512-tPvHgPGB7m40CZ68xqFGkKuzN+RnpGmSV+hgeKxhRpbxdqKXUFJGC3yonBOLzQBcJyGpdZFDfCsdOC2KFsXzeA==",
|
"integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
@ -1837,7 +1779,8 @@
|
|||||||
"ansi-regex": {
|
"ansi-regex": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"aproba": {
|
"aproba": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
@ -1858,12 +1801,14 @@
|
|||||||
"balanced-match": {
|
"balanced-match": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"brace-expansion": {
|
"brace-expansion": {
|
||||||
"version": "1.1.11",
|
"version": "1.1.11",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"balanced-match": "^1.0.0",
|
"balanced-match": "^1.0.0",
|
||||||
"concat-map": "0.0.1"
|
"concat-map": "0.0.1"
|
||||||
@ -1878,17 +1823,20 @@
|
|||||||
"code-point-at": {
|
"code-point-at": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"concat-map": {
|
"concat-map": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"console-control-strings": {
|
"console-control-strings": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"core-util-is": {
|
"core-util-is": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
@ -2005,7 +1953,8 @@
|
|||||||
"inherits": {
|
"inherits": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"ini": {
|
"ini": {
|
||||||
"version": "1.3.5",
|
"version": "1.3.5",
|
||||||
@ -2017,6 +1966,7 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"number-is-nan": "^1.0.0"
|
"number-is-nan": "^1.0.0"
|
||||||
}
|
}
|
||||||
@ -2031,6 +1981,7 @@
|
|||||||
"version": "3.0.4",
|
"version": "3.0.4",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"brace-expansion": "^1.1.7"
|
"brace-expansion": "^1.1.7"
|
||||||
}
|
}
|
||||||
@ -2038,12 +1989,14 @@
|
|||||||
"minimist": {
|
"minimist": {
|
||||||
"version": "0.0.8",
|
"version": "0.0.8",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"minipass": {
|
"minipass": {
|
||||||
"version": "2.3.5",
|
"version": "2.3.5",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"safe-buffer": "^5.1.2",
|
"safe-buffer": "^5.1.2",
|
||||||
"yallist": "^3.0.0"
|
"yallist": "^3.0.0"
|
||||||
@ -2062,6 +2015,7 @@
|
|||||||
"version": "0.5.1",
|
"version": "0.5.1",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"minimist": "0.0.8"
|
"minimist": "0.0.8"
|
||||||
}
|
}
|
||||||
@ -2142,7 +2096,8 @@
|
|||||||
"number-is-nan": {
|
"number-is-nan": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"object-assign": {
|
"object-assign": {
|
||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
@ -2154,6 +2109,7 @@
|
|||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"wrappy": "1"
|
"wrappy": "1"
|
||||||
}
|
}
|
||||||
@ -2239,7 +2195,8 @@
|
|||||||
"safe-buffer": {
|
"safe-buffer": {
|
||||||
"version": "5.1.2",
|
"version": "5.1.2",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"safer-buffer": {
|
"safer-buffer": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
@ -2275,6 +2232,7 @@
|
|||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"code-point-at": "^1.0.0",
|
"code-point-at": "^1.0.0",
|
||||||
"is-fullwidth-code-point": "^1.0.0",
|
"is-fullwidth-code-point": "^1.0.0",
|
||||||
@ -2294,6 +2252,7 @@
|
|||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"ansi-regex": "^2.0.0"
|
"ansi-regex": "^2.0.0"
|
||||||
}
|
}
|
||||||
@ -2337,12 +2296,14 @@
|
|||||||
"wrappy": {
|
"wrappy": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"yallist": {
|
"yallist": {
|
||||||
"version": "3.0.3",
|
"version": "3.0.3",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"dev": true
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3059,9 +3020,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lib0": {
|
"lib0": {
|
||||||
"version": "0.0.4",
|
"version": "0.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/lib0/-/lib0-0.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/lib0/-/lib0-0.0.5.tgz",
|
||||||
"integrity": "sha512-osSGIxFM0mUuVAclVOQAio4lq0YYk1xFfj6J+1i3u5az8rXAQKDil2skA19aiiG0sfAdasOtr8Mk+9Mrw10cfQ=="
|
"integrity": "sha512-3ElV6/t5Lv0Eczlnh/05q+Uq3RxQ/Q0zdN6LVtaUERQIDDZsP/CUXEGLsV8KZTgZwVFNCPGXNWYE+3WTOo+SHw=="
|
||||||
},
|
},
|
||||||
"linkify-it": {
|
"linkify-it": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
@ -3089,15 +3050,110 @@
|
|||||||
"object-assign": "^4.1.1",
|
"object-assign": "^4.1.1",
|
||||||
"opn": "^6.0.0",
|
"opn": "^6.0.0",
|
||||||
"proxy-middleware": "^0.15.0",
|
"proxy-middleware": "^0.15.0",
|
||||||
"send": "^0.16.2",
|
"send": "^0.17.1",
|
||||||
"serve-index": "^1.9.1"
|
"serve-index": "^1.9.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"colors": {
|
||||||
|
"version": "1.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
|
||||||
|
"integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"cors": {
|
||||||
|
"version": "2.8.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
|
||||||
|
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"object-assign": "^4",
|
||||||
|
"vary": "^1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"http-errors": {
|
||||||
|
"version": "1.7.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
|
||||||
|
"integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"depd": "~1.1.2",
|
||||||
|
"inherits": "2.0.3",
|
||||||
|
"setprototypeof": "1.1.1",
|
||||||
|
"statuses": ">= 1.5.0 < 2",
|
||||||
|
"toidentifier": "1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mime": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
||||||
|
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"object-assign": {
|
"object-assign": {
|
||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
|
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
|
||||||
"dev": true
|
"dev": true
|
||||||
|
},
|
||||||
|
"opn": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"is-wsl": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"proxy-middleware": {
|
||||||
|
"version": "0.15.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz",
|
||||||
|
"integrity": "sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"range-parser": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"send": {
|
||||||
|
"version": "0.17.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
|
||||||
|
"integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"debug": "2.6.9",
|
||||||
|
"depd": "~1.1.2",
|
||||||
|
"destroy": "~1.0.4",
|
||||||
|
"encodeurl": "~1.0.2",
|
||||||
|
"escape-html": "~1.0.3",
|
||||||
|
"etag": "~1.8.1",
|
||||||
|
"fresh": "0.5.2",
|
||||||
|
"http-errors": "~1.7.2",
|
||||||
|
"mime": "1.6.0",
|
||||||
|
"ms": "2.1.1",
|
||||||
|
"on-finished": "~2.3.0",
|
||||||
|
"range-parser": "~1.2.1",
|
||||||
|
"statuses": "~1.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"setprototypeof": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"statuses": {
|
||||||
|
"version": "1.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
|
||||||
|
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
|
||||||
|
"dev": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3327,12 +3383,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mime": {
|
|
||||||
"version": "1.4.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
|
|
||||||
"integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"mime-db": {
|
"mime-db": {
|
||||||
"version": "1.40.0",
|
"version": "1.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
|
||||||
@ -3425,9 +3475,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"nan": {
|
"nan": {
|
||||||
"version": "2.13.2",
|
"version": "2.14.0",
|
||||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz",
|
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
|
||||||
"integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==",
|
"integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
@ -3620,15 +3670,6 @@
|
|||||||
"mimic-fn": "^1.0.0"
|
"mimic-fn": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"opn": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"is-wsl": "^1.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"optionator": {
|
"optionator": {
|
||||||
"version": "0.8.2",
|
"version": "0.8.2",
|
||||||
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
|
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
|
||||||
@ -3651,12 +3692,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"orderedmap": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-2Q/Cuh7QhRkJB9YB3sbmpT+NQbo=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"os-tmpdir": {
|
"os-tmpdir": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
||||||
@ -3687,12 +3722,6 @@
|
|||||||
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
|
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"parchment": {
|
|
||||||
"version": "1.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz",
|
|
||||||
"integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"parse-json": {
|
"parse-json": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
|
||||||
@ -3913,217 +3942,12 @@
|
|||||||
"object-assign": "^4.1.1"
|
"object-assign": "^4.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"prosemirror-commands": {
|
|
||||||
"version": "1.0.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.0.7.tgz",
|
|
||||||
"integrity": "sha512-IR8yMSdw7XlKuF68tydAak1J9P/lLD5ohsrL7pzoLsJAJAQU7mVPDXtGbQrrm0mesddFjcc1zNo/cJQN3lRYnA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"prosemirror-model": "^1.0.0",
|
|
||||||
"prosemirror-state": "^1.0.0",
|
|
||||||
"prosemirror-transform": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prosemirror-dropcursor": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-GeUyMO/tOEf8MXrP7Xb7UIMrfK86OGh0fnyBrHfhav4VjY9cw65mNoqHy87CklE5711AhCP5Qzfp8RL/hVKusg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"prosemirror-state": "^1.0.0",
|
|
||||||
"prosemirror-transform": "^1.1.0",
|
|
||||||
"prosemirror-view": "^1.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prosemirror-example-setup": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/prosemirror-example-setup/-/prosemirror-example-setup-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-4NKWpdmm75Zzgq/dIrypRnkBNPx+ONKyoGF42a9g3VIVv0TWglf1CBNxt5kzCgli9xdfut/xE5B42F9DR6BLHw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"prosemirror-commands": "^1.0.0",
|
|
||||||
"prosemirror-dropcursor": "^1.0.0",
|
|
||||||
"prosemirror-gapcursor": "^1.0.0",
|
|
||||||
"prosemirror-history": "^1.0.0",
|
|
||||||
"prosemirror-inputrules": "^1.0.0",
|
|
||||||
"prosemirror-keymap": "^1.0.0",
|
|
||||||
"prosemirror-menu": "^1.0.0",
|
|
||||||
"prosemirror-schema-list": "^1.0.0",
|
|
||||||
"prosemirror-state": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prosemirror-gapcursor": {
|
|
||||||
"version": "1.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.0.3.tgz",
|
|
||||||
"integrity": "sha512-X+hJhr42PcHWiSWL+lI5f/UeOhXCxlBFb8M6O8aG1hssmaRrW7sS2/Fjg5jFV+pTdS1REFkmm1occh01FMdDIQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"prosemirror-keymap": "^1.0.0",
|
|
||||||
"prosemirror-model": "^1.0.0",
|
|
||||||
"prosemirror-state": "^1.0.0",
|
|
||||||
"prosemirror-view": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prosemirror-history": {
|
|
||||||
"version": "1.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.0.3.tgz",
|
|
||||||
"integrity": "sha512-IfFGbhafSx+R3aq7nLJGkXeu2iaUiP8mkU3aRu2uQcIIjU8Fq7RJfuvhIOJ2RNUoSyqF/ANkdTjnZ74F5eHs1Q==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"prosemirror-state": "^1.2.2",
|
|
||||||
"prosemirror-transform": "^1.0.0",
|
|
||||||
"rope-sequence": "^1.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prosemirror-inputrules": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-UHy22NmwxS5WIMQYkzraDttQAF8mpP82FfbJsmKFfx6jwkR/SZa+ZhbkLY0zKQ5fBdJN7euj36JG/B5iAlrpxA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"prosemirror-state": "^1.0.0",
|
|
||||||
"prosemirror-transform": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prosemirror-keymap": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-e79ApE7PXXZMFtPz7WbjycjAFd1NPjgY1MkecVz98tqwlBSggXWXYQnWFk6x7UkmnBYRHHbXHkR/RXmu2wyBJg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"prosemirror-state": "^1.0.0",
|
|
||||||
"w3c-keyname": "^1.1.8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prosemirror-menu": {
|
|
||||||
"version": "1.0.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.0.5.tgz",
|
|
||||||
"integrity": "sha512-9Vrn7CC191v7FA4QrAkL8W1SrR73V3CRIYCDuk94R8oFVk4VxSFdoKVLHuvGzxZ8b5LCu3DMJfh86YW9uL4RkQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"crel": "^3.0.0",
|
|
||||||
"prosemirror-commands": "^1.0.0",
|
|
||||||
"prosemirror-history": "^1.0.0",
|
|
||||||
"prosemirror-state": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prosemirror-model": {
|
|
||||||
"version": "1.6.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.6.3.tgz",
|
|
||||||
"integrity": "sha512-iqIml664X9MUVGLz2nzK4xfAofX8+o7gs2mi2/k+pVD0qZ7th1Jm5eG3AsqWoEUIZuWeaOWCKpBl/dPnhIIWew==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"orderedmap": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prosemirror-schema-basic": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-LFO/+zr7RSRJ95k6QGHdAwxsTsB3xxSCphU2Xkg6hNroblUV0rYelKe6s5uM5rdyPUdTTRTPjnZWQE28YsGVcA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"prosemirror-model": "^1.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prosemirror-schema-list": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-AiLIX6qm6PEeDtMCKZLcSLi55WXo1ls7DnRK+4hSkoi0IIzNdxGsRlecCd3MzEu//DVz3nAEh+zEmslyW+uk8g==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"prosemirror-model": "^1.0.0",
|
|
||||||
"prosemirror-transform": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prosemirror-state": {
|
|
||||||
"version": "1.2.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.2.3.tgz",
|
|
||||||
"integrity": "sha512-TNFw98jHLcU7JXViozcDHxzIWQj7WfGqTAB05RCrkkUuIleKekW9PbhQGXRZdlSPFkViPlLy/emh+5HtjH1Yzg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"prosemirror-model": "^1.0.0",
|
|
||||||
"prosemirror-transform": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prosemirror-transform": {
|
|
||||||
"version": "1.1.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.1.3.tgz",
|
|
||||||
"integrity": "sha512-1O6Di5lOL1mp4nuCnQNkHY7l2roIW5y8RH4ZG3hMYmkmDEWzTaFFnxxAAHsE5ipGLBSRcTlP7SsDhYBIdSuLpQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"prosemirror-model": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prosemirror-view": {
|
|
||||||
"version": "1.9.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.9.5.tgz",
|
|
||||||
"integrity": "sha512-062RMNDpof3SHgfTbJS6pVycdEaVgP1IGqdVLangZb0iwgb7yNZ8C5BPG+Is8GoEk3H5d9uZ0c6FskAA08gR3g==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"prosemirror-model": "^1.1.0",
|
|
||||||
"prosemirror-state": "^1.0.0",
|
|
||||||
"prosemirror-transform": "^1.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"proxy-middleware": {
|
|
||||||
"version": "0.15.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz",
|
|
||||||
"integrity": "sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"pseudomap": {
|
"pseudomap": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
|
||||||
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
|
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"quill": {
|
|
||||||
"version": "1.3.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/quill/-/quill-1.3.6.tgz",
|
|
||||||
"integrity": "sha512-K0mvhimWZN6s+9OQ249CH2IEPZ9JmkFuCQeHAOQax3EZ2nDJ3wfGh59mnlQaZV2i7u8eFarx6wAtvQKgShojug==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"clone": "^2.1.1",
|
|
||||||
"deep-equal": "^1.0.1",
|
|
||||||
"eventemitter3": "^2.0.3",
|
|
||||||
"extend": "^3.0.1",
|
|
||||||
"parchment": "^1.1.4",
|
|
||||||
"quill-delta": "^3.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"quill-cursors": {
|
|
||||||
"version": "1.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/quill-cursors/-/quill-cursors-1.0.3.tgz",
|
|
||||||
"integrity": "sha512-rS81BZIlHdWXucf00qo5NIp3QrpT/4JHwoHTRlR48fO+k6AzBJvVyGoNrWkO5yzdlwUwHSw3jPoLWfxyzLOoxw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"rangefix": "^0.2.5",
|
|
||||||
"tinycolor2": "^1.4.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"quill-delta": {
|
|
||||||
"version": "3.6.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz",
|
|
||||||
"integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"deep-equal": "^1.0.1",
|
|
||||||
"extend": "^3.0.2",
|
|
||||||
"fast-diff": "1.1.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"range-parser": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
|
|
||||||
"integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"rangefix": {
|
|
||||||
"version": "0.2.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/rangefix/-/rangefix-0.2.5.tgz",
|
|
||||||
"integrity": "sha1-vOeMkhsjWCuuIR9ZdGSlkf0alPk=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"read-pkg": {
|
"read-pkg": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
|
||||||
@ -4387,12 +4211,6 @@
|
|||||||
"micromatch": "^3.1.10"
|
"micromatch": "^3.1.10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rope-sequence": {
|
|
||||||
"version": "1.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.2.2.tgz",
|
|
||||||
"integrity": "sha1-ScTlwvVKSOmQsFCSZ3HihxvLMc4=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"run-async": {
|
"run-async": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
|
||||||
@ -4456,35 +4274,6 @@
|
|||||||
"integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
|
"integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"send": {
|
|
||||||
"version": "0.16.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
|
|
||||||
"integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"debug": "2.6.9",
|
|
||||||
"depd": "~1.1.2",
|
|
||||||
"destroy": "~1.0.4",
|
|
||||||
"encodeurl": "~1.0.2",
|
|
||||||
"escape-html": "~1.0.3",
|
|
||||||
"etag": "~1.8.1",
|
|
||||||
"fresh": "0.5.2",
|
|
||||||
"http-errors": "~1.6.2",
|
|
||||||
"mime": "1.4.1",
|
|
||||||
"ms": "2.0.0",
|
|
||||||
"on-finished": "~2.3.0",
|
|
||||||
"range-parser": "~1.2.0",
|
|
||||||
"statuses": "~1.4.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"statuses": {
|
|
||||||
"version": "1.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
|
|
||||||
"integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"serialize-javascript": {
|
"serialize-javascript": {
|
||||||
"version": "1.6.1",
|
"version": "1.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz",
|
||||||
@ -5001,12 +4790,6 @@
|
|||||||
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
|
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"tinycolor2": {
|
|
||||||
"version": "1.4.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz",
|
|
||||||
"integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"tmp": {
|
"tmp": {
|
||||||
"version": "0.0.33",
|
"version": "0.0.33",
|
||||||
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
|
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
|
||||||
@ -5058,6 +4841,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"toidentifier": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"tree-kill": {
|
"tree-kill": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz",
|
||||||
@ -5263,12 +5052,6 @@
|
|||||||
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
|
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"w3c-keyname": {
|
|
||||||
"version": "1.1.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-1.1.8.tgz",
|
|
||||||
"integrity": "sha512-2HAdug8GTiu3b4NYhssdtY8PXRue3ICnh1IlxvZYl+hiINRq0GfNWei3XOPDg8L0PsxbmYjWVLuLj6BMRR/9vA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"websocket-driver": {
|
"websocket-driver": {
|
||||||
"version": "0.7.0",
|
"version": "0.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
|
||||||
@ -5334,6 +5117,14 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"lib0": "0.0.4"
|
"lib0": "0.0.4"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"lib0": {
|
||||||
|
"version": "0.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/lib0/-/lib0-0.0.4.tgz",
|
||||||
|
"integrity": "sha512-osSGIxFM0mUuVAclVOQAio4lq0YYk1xFfj6J+1i3u5az8rXAQKDil2skA19aiiG0sfAdasOtr8Mk+9Mrw10cfQ==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"yallist": {
|
"yallist": {
|
||||||
|
14
package.json
14
package.json
@ -8,8 +8,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "npm run dist && PRODUCTION=1 node ./dist/tests.js --repitition-time 50 --production",
|
"test": "npm run dist && PRODUCTION=1 node ./dist/tests.js --repitition-time 50 --production",
|
||||||
"test-exhaustive": "npm run lint && npm run dist && node ./dist/tests.js --repitition-time 10000",
|
"test-exhaustive": "npm run lint && npm run dist && node ./dist/tests.js --repitition-time 10000",
|
||||||
"dist": "rm -rf dist examples/build && rollup -c",
|
"dist": "rm -rf dist && rollup -c",
|
||||||
"serve-examples": "concurrently 'npm run watch' 'serve examples'",
|
|
||||||
"watch": "rollup -wc",
|
"watch": "rollup -wc",
|
||||||
"lint": "standard && tsc",
|
"lint": "standard && tsc",
|
||||||
"docs": "rm -rf docs; jsdoc --configure ./.jsdoc.json --verbose --readme ./README.v13.md --package ./package.json || true",
|
"docs": "rm -rf docs; jsdoc --configure ./.jsdoc.json --verbose --readme ./README.v13.md --package ./package.json || true",
|
||||||
@ -28,15 +27,13 @@
|
|||||||
],
|
],
|
||||||
"dictionaries": {
|
"dictionaries": {
|
||||||
"doc": "docs",
|
"doc": "docs",
|
||||||
"example": "examples",
|
|
||||||
"test": "tests"
|
"test": "tests"
|
||||||
},
|
},
|
||||||
"standard": {
|
"standard": {
|
||||||
"ignore": [
|
"ignore": [
|
||||||
"/dist",
|
"/dist",
|
||||||
"/node_modules",
|
"/node_modules",
|
||||||
"/docs",
|
"/docs"
|
||||||
"/examples/build"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
@ -57,16 +54,9 @@
|
|||||||
"lib0": "0.0.5"
|
"lib0": "0.0.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"codemirror": "^5.46.0",
|
|
||||||
"concurrently": "^3.6.1",
|
"concurrently": "^3.6.1",
|
||||||
"jsdoc": "^3.6.2",
|
"jsdoc": "^3.6.2",
|
||||||
"live-server": "^1.2.1",
|
"live-server": "^1.2.1",
|
||||||
"prosemirror-example-setup": "^1.0.1",
|
|
||||||
"prosemirror-schema-basic": "^1.0.1",
|
|
||||||
"prosemirror-state": "^1.2.3",
|
|
||||||
"prosemirror-view": "^1.9.5",
|
|
||||||
"quill": "^1.3.6",
|
|
||||||
"quill-cursors": "^1.0.3",
|
|
||||||
"rollup": "^1.11.3",
|
"rollup": "^1.11.3",
|
||||||
"rollup-cli": "^1.0.9",
|
"rollup-cli": "^1.0.9",
|
||||||
"rollup-plugin-commonjs": "^9.3.4",
|
"rollup-plugin-commonjs": "^9.3.4",
|
||||||
|
@ -84,20 +84,4 @@ export default [{
|
|||||||
})
|
})
|
||||||
// commonjs()
|
// commonjs()
|
||||||
]
|
]
|
||||||
}, {
|
|
||||||
input: ['./examples/prosemirror.js'], // './examples/textarea.js', './examples/quill.js', './examples/dom.js', './examples/codemirror.js'
|
|
||||||
output: {
|
|
||||||
dir: 'examples/build',
|
|
||||||
format: 'esm',
|
|
||||||
sourcemap: true
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
debugResolve,
|
|
||||||
nodeResolve({
|
|
||||||
sourcemap: true,
|
|
||||||
mainFields: ['module', 'browser', 'main']
|
|
||||||
}),
|
|
||||||
commonjs(),
|
|
||||||
...minificationPlugins
|
|
||||||
]
|
|
||||||
}]
|
}]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user