aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Schicke <tyler_schicke@brown.edu>2019-01-19 00:27:59 -0500
committerTyler Schicke <tyler_schicke@brown.edu>2019-01-19 00:27:59 -0500
commit87495cce1e23b25312efc56a84b849babf367e82 (patch)
treeb7d0805589d961701b2376415e7372fec0b383ed
parent657b07e5a0a4d73a0b9cd9b82b69178b1658ce8b (diff)
Got basic version of ProseMirror working
-rw-r--r--package-lock.json250
-rw-r--r--package.json16
-rw-r--r--src/documents/Documents.ts2
-rw-r--r--src/views/nodes/FieldTextBox.tsx82
4 files changed, 292 insertions, 58 deletions
diff --git a/package-lock.json b/package-lock.json
index 0ad64517c..15ae9d764 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,13 +7,13 @@
"@types/chai": {
"version": "4.1.7",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.7.tgz",
- "integrity": "sha1-G44zthqMCcvh+FEzBxuqDb+fpxo=",
+ "integrity": "sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA==",
"dev": true
},
"@types/mocha": {
"version": "5.2.5",
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz",
- "integrity": "sha1-ikrM/EA8EkoLr+ip/GGgXsEDIHM=",
+ "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==",
"dev": true
},
"@types/node": {
@@ -21,12 +21,89 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz",
"integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ=="
},
+ "@types/orderedmap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/orderedmap/-/orderedmap-1.0.0.tgz",
+ "integrity": "sha512-dxKo80TqYx3YtBipHwA/SdFmMMyLCnP+5mkEqN0eMjcTBzHkiiX0ES118DsjDBjvD+zeSsSU9jULTZ+frog+Gw=="
+ },
"@types/prop-types": {
"version": "15.5.8",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.8.tgz",
"integrity": "sha512-3AQoUxQcQtLHsK25wtTWIoIpgYjH3vSDroZOUr7PpCHw/jLY1RB9z9E8dBT/OSmwStVgkRNvdh+ZHNiomRieaw==",
"dev": true
},
+ "@types/prosemirror-commands": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/prosemirror-commands/-/prosemirror-commands-1.0.1.tgz",
+ "integrity": "sha512-GeE12m8VT9N1JrzoY//946IX8ZyQOLNmvryJ+BNQs/HvhmXW9EWOcWUE6OBRtxK7Y8SrzSOwx4XmqSgVmK3tGQ==",
+ "requires": {
+ "@types/prosemirror-model": "*",
+ "@types/prosemirror-state": "*",
+ "@types/prosemirror-view": "*"
+ }
+ },
+ "@types/prosemirror-history": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/prosemirror-history/-/prosemirror-history-1.0.1.tgz",
+ "integrity": "sha512-BYyPJlWDo3VEnWS5X2DCHXrrAKEjdbCe1DUjGL6R/8hmwMFe3iMJGYdBkOXU1FfkTpw7Z+PlwY/pMyeelVydmg==",
+ "requires": {
+ "@types/prosemirror-model": "*",
+ "@types/prosemirror-state": "*"
+ }
+ },
+ "@types/prosemirror-keymap": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/prosemirror-keymap/-/prosemirror-keymap-1.0.1.tgz",
+ "integrity": "sha512-8IjM8ySmoZps9Tn+aKfB4ZR6zoNOjeQfAc9YLQujYXHJB6tdGWV0cbTuoT4QmZOR1iecN1EJ6E9RiRUBk796kQ==",
+ "requires": {
+ "@types/prosemirror-state": "*",
+ "@types/prosemirror-view": "*"
+ }
+ },
+ "@types/prosemirror-model": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@types/prosemirror-model/-/prosemirror-model-1.5.1.tgz",
+ "integrity": "sha512-rI7jIK5WCwfrF3bTC+hYEmPOzjgFbSI4r5tkilKEfS043zCMYhn02dXLryUa996G+diMxYB1XWjrb1bZalwhqA==",
+ "requires": {
+ "@types/orderedmap": "*"
+ }
+ },
+ "@types/prosemirror-schema-basic": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/prosemirror-schema-basic/-/prosemirror-schema-basic-1.0.1.tgz",
+ "integrity": "sha512-IOQAYf1urifbH+Zwbq5XfFOUMNCbEnvIqpuSAE8SUt00nDAoH62T/S8Qhu8LuF++KQbyXb7fdMp352zkPW9Hmw==",
+ "requires": {
+ "@types/prosemirror-model": "*"
+ }
+ },
+ "@types/prosemirror-state": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@types/prosemirror-state/-/prosemirror-state-1.2.1.tgz",
+ "integrity": "sha512-tE/p/YSzxCKyNDl2C8pElQiWQH9jLt8zvOnn3ZG5iKNW1XtWnKqXnaM5BU5yVSOQ9f8W9y0T+JB3lYEry9y/8w==",
+ "requires": {
+ "@types/prosemirror-model": "*",
+ "@types/prosemirror-transform": "*",
+ "@types/prosemirror-view": "*"
+ }
+ },
+ "@types/prosemirror-transform": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/prosemirror-transform/-/prosemirror-transform-1.1.0.tgz",
+ "integrity": "sha512-VsPiEj+88Xvw8f0vXHL65z2qHlnrvnybW9GC7w9I9PORcKheDi7hQBgP8JdDwUPG7ttyUYUaSAec0TV6DsdWKg==",
+ "requires": {
+ "@types/prosemirror-model": "*"
+ }
+ },
+ "@types/prosemirror-view": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@types/prosemirror-view/-/prosemirror-view-1.3.0.tgz",
+ "integrity": "sha512-wf64TepBlTX8/iu/7fY6oDfpAArVAXYjJ0sWpuq64lAxSnZyx5bKHM1NChF6ATOdfOpPcsm8oaFZnwhWNF9g8A==",
+ "requires": {
+ "@types/prosemirror-model": "*",
+ "@types/prosemirror-state": "*",
+ "@types/prosemirror-transform": "*"
+ }
+ },
"@types/react": {
"version": "16.7.17",
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.7.17.tgz",
@@ -40,7 +117,7 @@
"@types/react-dom": {
"version": "16.0.11",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.11.tgz",
- "integrity": "sha1-vRDMsNkmA0P0uaSdT3qDMKXB8IE=",
+ "integrity": "sha512-x6zUx9/42B5Kl2Vl9HlopV8JF64wLpX3c+Pst9kc1HgzrsH+mkehe/zmHMQTplIrR48H2gpU7ZqurQolYu8XBA==",
"dev": true,
"requires": {
"@types/react": "*"
@@ -49,7 +126,7 @@
"@types/uuid": {
"version": "3.4.4",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.4.tgz",
- "integrity": "sha1-evaTYPpl7w3stB/RUL9MpcDO/fU=",
+ "integrity": "sha512-tPIgT0GUmdJQNSHxp0X2jnpQfBSTfGxUMc/2CXBU2mnyTFVYVa2ojpoQ74w0U2yn2vw3jnC640+77lkFFpdVDw==",
"requires": {
"@types/node": "*"
}
@@ -502,7 +579,7 @@
"awesome-typescript-loader": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/awesome-typescript-loader/-/awesome-typescript-loader-5.2.1.tgz",
- "integrity": "sha1-pB2veEdRX0klzbqjB11h8onpE/w=",
+ "integrity": "sha512-slv66OAJB8orL+UUaTI3pKlLorwIvS4ARZzYR9iJJyGsEgOqueMfOMdKySWzZ73vIkEe3fcwFgsKMg4d8zyb1g==",
"dev": true,
"requires": {
"chalk": "^2.4.1",
@@ -905,7 +982,7 @@
"chai": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
- "integrity": "sha1-dgqnLPION5XoSxKHfODoNzeqKeU=",
+ "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
"dev": true,
"requires": {
"assertion-error": "^1.1.0",
@@ -1212,7 +1289,7 @@
"copy-webpack-plugin": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz",
- "integrity": "sha1-5/QN2KaEd9QF3Rt6hUquMksVi64=",
+ "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==",
"dev": true,
"requires": {
"cacache": "^10.0.4",
@@ -1311,7 +1388,7 @@
"p-limit": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
"dev": true,
"requires": {
"p-try": "^1.0.0"
@@ -2373,14 +2450,12 @@
"balanced-match": {
"version": "1.0.0",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -2395,20 +2470,17 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"core-util-is": {
"version": "1.0.2",
@@ -2525,8 +2597,7 @@
"inherits": {
"version": "2.0.3",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"ini": {
"version": "1.3.5",
@@ -2538,7 +2609,6 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -2553,7 +2623,6 @@
"version": "3.0.4",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -2561,14 +2630,12 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"minipass": {
"version": "2.2.4",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"safe-buffer": "^5.1.1",
"yallist": "^3.0.0"
@@ -2587,7 +2654,6 @@
"version": "0.5.1",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -2668,8 +2734,7 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
- "dev": true,
- "optional": true
+ "dev": true
},
"object-assign": {
"version": "4.1.1",
@@ -2681,7 +2746,6 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"wrappy": "1"
}
@@ -2803,7 +2867,6 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
- "optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -4102,12 +4165,12 @@
"mobx": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/mobx/-/mobx-5.8.0.tgz",
- "integrity": "sha1-z1nq5Lqi/eQ4f/tkYrfM87SXsDw="
+ "integrity": "sha512-NsZB+9bF5j+nv9Qwk6bNeE3np26a4TbTGkMpOLf6o1zXoM9BtHPQn/00px4uZ2AXJXtQML5P4MEWdMm6icMIfQ=="
},
"mobx-react": {
"version": "5.4.3",
"resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-5.4.3.tgz",
- "integrity": "sha1-Zwm33YlnDEDpgVkUrCyknMAr+0c=",
+ "integrity": "sha512-WC8yFlwvJ91hy8j6CrydAuFteUafcuvdITFQeHl3LRIf5ayfT/4W3M/byhEYD2BcJWejeXr8y4Rh2H26RunCRQ==",
"requires": {
"hoist-non-react-statics": "^3.0.0",
"react-lifecycles-compat": "^3.0.2"
@@ -4116,12 +4179,12 @@
"mobx-react-devtools": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/mobx-react-devtools/-/mobx-react-devtools-6.0.3.tgz",
- "integrity": "sha1-TVNsjN132fS4H16EFde+3MxqKpk="
+ "integrity": "sha512-PY+lG6XeWaC0DFnDaVC7ImrHJQu7XVXNy4z4fmqHzWc3p+fJisKmaZNwgToO2vJGBghz98Mx2yXUBLw1Ba2mPQ=="
},
"mocha": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
- "integrity": "sha1-bYrlCPWRZ/lA8rWzxKYSrlDJCuY=",
+ "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
"dev": true,
"requires": {
"browser-stdout": "1.3.1",
@@ -4140,13 +4203,13 @@
"commander": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
- "integrity": "sha1-30boZ9D8Kuxmo0ZitAapzK//Ww8=",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
"dev": true
},
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": {
"ms": "2.0.0"
@@ -4155,7 +4218,7 @@
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -4169,7 +4232,7 @@
"supports-color": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha1-HGszdALCE3YF7+GfEP7DkPb6q1Q=",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
@@ -4335,7 +4398,7 @@
"node-sass": {
"version": "4.11.0",
"resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz",
- "integrity": "sha1-GD+uw5jpy+k7pDNi4naMqYimNpo=",
+ "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==",
"requires": {
"async-foreach": "^0.1.3",
"chalk": "^1.1.1",
@@ -4559,6 +4622,11 @@
"is-wsl": "^1.1.0"
}
},
+ "orderedmap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-1.0.0.tgz",
+ "integrity": "sha1-2Q/Cuh7QhRkJB9YB3sbmpT+NQbo="
+ },
"original": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
@@ -4920,6 +4988,78 @@
"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==",
+ "requires": {
+ "prosemirror-model": "^1.0.0",
+ "prosemirror-state": "^1.0.0",
+ "prosemirror-transform": "^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==",
+ "requires": {
+ "prosemirror-state": "^1.2.2",
+ "prosemirror-transform": "^1.0.0",
+ "rope-sequence": "^1.2.0"
+ }
+ },
+ "prosemirror-keymap": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.0.1.tgz",
+ "integrity": "sha512-e79ApE7PXXZMFtPz7WbjycjAFd1NPjgY1MkecVz98tqwlBSggXWXYQnWFk6x7UkmnBYRHHbXHkR/RXmu2wyBJg==",
+ "requires": {
+ "prosemirror-state": "^1.0.0",
+ "w3c-keyname": "^1.1.8"
+ }
+ },
+ "prosemirror-model": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.6.4.tgz",
+ "integrity": "sha512-C2ALle8fZsAza+6stUF9Gv28jH9XtpNeczb33bowGlnb2cpNI4FZf1HHUyZjf6ou4cEvOlbt6fAYsT4NCKmlcQ==",
+ "requires": {
+ "orderedmap": "^1.0.0"
+ }
+ },
+ "prosemirror-schema-basic": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.0.0.tgz",
+ "integrity": "sha512-xTFjtuLZgcRS4MoDbUyI9NSk/k/ACLGKZQcDXH18ctM9BOmP4z5rGZcA014fCF2FnMFOU+lKwusL0JjVrEectQ==",
+ "requires": {
+ "prosemirror-model": "^1.0.0"
+ }
+ },
+ "prosemirror-state": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.2.2.tgz",
+ "integrity": "sha512-j8aC/kf9BJSCQau485I/9pj39XQoce+TqH5xzekT7WWFARTsRYFLJtiXBcCKakv1VSeev+sC3bJP0pLfz7Ft8g==",
+ "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==",
+ "requires": {
+ "prosemirror-model": "^1.0.0"
+ }
+ },
+ "prosemirror-view": {
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.6.8.tgz",
+ "integrity": "sha512-YWX3rfji77xsU5EErt4ZoecVytYW9/4oHBYhV1MUHGMYIcppe+QZEBgRlyPMBUuu0lxdZX4m3sq7fCsDvv/MlQ==",
+ "requires": {
+ "prosemirror-model": "^1.1.0",
+ "prosemirror-state": "^1.0.0",
+ "prosemirror-transform": "^1.1.0"
+ }
+ },
"proxy-addr": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
@@ -5061,7 +5201,7 @@
"react": {
"version": "16.7.0",
"resolved": "https://registry.npmjs.org/react/-/react-16.7.0.tgz",
- "integrity": "sha512-ZUj2lkUDLjwJaGu4WD0dYSvsfIyhQt2l/AJDlg4ij+rCDU3fSFKgHWanNovViUoaWHAxgrpft3KGFfvWPZH5LA==",
+ "integrity": "sha512-StCz3QY8lxTb5cl2HJxjwLFOXPIFQp+p+hxQfc8WE0QiLfCtIlKj8/+5tjjKm8uSTlAW+fCPaavGFS06V9Ar3A==",
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1",
@@ -5072,7 +5212,7 @@
"react-dom": {
"version": "16.7.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.7.0.tgz",
- "integrity": "sha512-GfG8Vh/jMcnJKDpv7T6O1pS/WVqiocjPQ9o9cscW8bjR9W36DT3Xb4pDZT70t1xyVvX48/NrTQGz0H7I3fCLhQ==",
+ "integrity": "sha512-D0Ufv1ExCAmF38P2Uh1lwpminZFRXEINJe53zRAbm4KPwSyd6DY/uDoS0Blj9jvPpn1+wivKpZYc8aAAN/nAkg==",
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1",
@@ -5088,7 +5228,7 @@
"react-jsx-parser": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/react-jsx-parser/-/react-jsx-parser-1.13.0.tgz",
- "integrity": "sha1-Dstuus1O41S68+h85SXcJuiPJtQ=",
+ "integrity": "sha512-oypIhM30ESZ8UkU0xDmzSV2Mtb2mVvtVnyNzjDxx2h2PCHpYFdDVLx1c15E3ot6nTIVlIh072tWwS3iJ7VVgmg==",
"requires": {
"acorn-jsx": "^4.1.1",
"react": "^16.4.0"
@@ -5327,6 +5467,11 @@
"inherits": "^2.0.1"
}
},
+ "rope-sequence": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.2.2.tgz",
+ "integrity": "sha1-ScTlwvVKSOmQsFCSZ3HihxvLMc4="
+ },
"run-queue": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
@@ -5468,7 +5613,7 @@
"sass-loader": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz",
- "integrity": "sha1-Fv1ROMuLQkv4p1lSihly1yqtBp0=",
+ "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==",
"dev": true,
"requires": {
"clone-deep": "^2.0.1",
@@ -6171,7 +6316,7 @@
"style-loader": {
"version": "0.23.1",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
- "integrity": "sha1-y5FUYG8+dxq2xKtjcCahBJF02SU=",
+ "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==",
"dev": true,
"requires": {
"loader-utils": "^1.1.0",
@@ -6181,7 +6326,7 @@
"schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
"dev": true,
"requires": {
"ajv": "^6.1.0",
@@ -6375,7 +6520,7 @@
"ts-node": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz",
- "integrity": "sha1-lWLcLR5tJI0kvFX3c+P2FDN9m68=",
+ "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==",
"dev": true,
"requires": {
"arrify": "^1.0.0",
@@ -6625,7 +6770,7 @@
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE="
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"v8-compile-cache": {
"version": "2.0.2",
@@ -6667,6 +6812,11 @@
"indexof": "0.0.1"
}
},
+ "w3c-keyname": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-1.1.8.tgz",
+ "integrity": "sha512-2HAdug8GTiu3b4NYhssdtY8PXRue3ICnh1IlxvZYl+hiINRq0GfNWei3XOPDg8L0PsxbmYjWVLuLj6BMRR/9vA=="
+ },
"watchpack": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
@@ -6770,7 +6920,7 @@
"webpack-dev-server": {
"version": "3.1.14",
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz",
- "integrity": "sha1-YPsim5l/xaCh/GI3QhAwGAlZ1Gk=",
+ "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==",
"dev": true,
"requires": {
"ansi-html": "0.0.7",
@@ -6808,7 +6958,7 @@
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true,
"requires": {
"ms": "^2.1.1"
@@ -6823,7 +6973,7 @@
"schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
"dev": true,
"requires": {
"ajv": "^6.1.0",
@@ -6834,7 +6984,7 @@
"webpack-log": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
- "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=",
+ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
"dev": true,
"requires": {
"ansi-colors": "^3.0.0",
diff --git a/package.json b/package.json
index d4443eff0..f0c5c84c5 100644
--- a/package.json
+++ b/package.json
@@ -27,11 +27,27 @@
"webpack-dev-server": "^3.1.14"
},
"dependencies": {
+ "@types/prosemirror-commands": "^1.0.1",
+ "@types/prosemirror-history": "^1.0.1",
+ "@types/prosemirror-keymap": "^1.0.1",
+ "@types/prosemirror-model": "^1.5.1",
+ "@types/prosemirror-schema-basic": "^1.0.1",
+ "@types/prosemirror-state": "^1.2.1",
+ "@types/prosemirror-transform": "^1.1.0",
+ "@types/prosemirror-view": "^1.3.0",
"@types/uuid": "^3.4.4",
"mobx": "^5.5.2",
"mobx-react": "^5.3.5",
"mobx-react-devtools": "^6.0.3",
"node-sass": "^4.11.0",
+ "prosemirror-commands": "^1.0.7",
+ "prosemirror-history": "^1.0.3",
+ "prosemirror-keymap": "^1.0.1",
+ "prosemirror-model": "^1.6.4",
+ "prosemirror-schema-basic": "^1.0.0",
+ "prosemirror-state": "^1.2.2",
+ "prosemirror-transform": "^1.1.3",
+ "prosemirror-view": "^1.6.8",
"react": "^16.5.2",
"react-dom": "^16.5.2",
"react-jsx-parser": "^1.13.0",
diff --git a/src/documents/Documents.ts b/src/documents/Documents.ts
index bba678bbd..beee44bee 100644
--- a/src/documents/Documents.ts
+++ b/src/documents/Documents.ts
@@ -44,7 +44,7 @@ export namespace Documents {
export function TextDocument(text: string, options:DocumentOptions = {}): Document {
let doc = GetTextPrototype().MakeDelegate();
setupOptions(doc, options);
- doc.SetField(KeyStore.Data, new TextField(text));
+ // doc.SetField(KeyStore.Data, new TextField(text));
return doc;
}
diff --git a/src/views/nodes/FieldTextBox.tsx b/src/views/nodes/FieldTextBox.tsx
index 5df3e6012..dbac3906a 100644
--- a/src/views/nodes/FieldTextBox.tsx
+++ b/src/views/nodes/FieldTextBox.tsx
@@ -1,14 +1,21 @@
-import { Key } from "../../fields/Key";
+import { Key, KeyStore } from "../../fields/Key";
import { Document } from "../../fields/Document";
import { observer } from "mobx-react";
import { TextField } from "../../fields/TextField";
import React = require("react")
-import { action, observable } from "mobx";
+import { action, observable, reaction, IReactionDisposer } from "mobx";
+
+import {schema} from "prosemirror-schema-basic";
+import {EditorState, Transaction} from "prosemirror-state"
+import {EditorView} from "prosemirror-view"
+import {keymap} from "prosemirror-keymap"
+import {baseKeymap} from "prosemirror-commands"
+import {undo, redo, history} from "prosemirror-history"
+import { Opt } from "../../fields/Field";
interface IProps {
fieldKey:Key;
doc:Document;
- test:string;
}
// FieldTextBox: Displays an editable plain text node that maps to a specified Key of a Document
@@ -28,13 +35,76 @@ interface IProps {
// this will edit the document and assign the new value to that field.
//
@observer
-export class FieldTextBox extends React.Component<IProps, IProps> {
+export class FieldTextBox extends React.Component<IProps> {
+ private _ref: React.RefObject<HTMLDivElement>;
+ private _editorView: Opt<EditorView>;
+ private _reactionDisposer: Opt<IReactionDisposer>;
constructor(props:IProps) {
super(props);
+
+ this._ref = React.createRef();
+
this.onChange = this.onChange.bind(this);
}
+ dispatchTransaction = (tx: Transaction) => {
+ if(this._editorView) {
+ const state = this._editorView.state.apply(tx);
+ this._editorView.updateState(state);
+ const {doc, fieldKey} = this.props;
+ doc.SetFieldValue(fieldKey, JSON.stringify(state.toJSON()), TextField);
+ }
+ }
+
+ componentDidMount() {
+ let state:EditorState;
+ const {doc, fieldKey} = this.props;
+ const config = {
+ schema,
+ plugins: [
+ history(),
+ keymap({"Mod-z": undo, "Mod-y": redo}),
+ keymap(baseKeymap)
+ ]
+ };
+
+ let field = doc.GetFieldT(fieldKey, TextField);
+ if(field) {
+ state = EditorState.fromJSON(config, JSON.parse(field.Data));
+ } else {
+ state = EditorState.create(config);
+ }
+ if(this._ref.current) {
+ this._editorView = new EditorView(this._ref.current, {
+ state,
+ dispatchTransaction: this.dispatchTransaction
+ });
+ }
+
+ this._reactionDisposer = reaction(() => {
+ const field = this.props.doc.GetFieldT(this.props.fieldKey, TextField);
+ return field ? field.Data : undefined;
+ }, (field) => {
+ if(field && this._editorView) {
+ this._editorView.updateState(EditorState.fromJSON(config, JSON.parse(field)));
+ }
+ })
+ }
+
+ componentWillUnmount() {
+ if(this._editorView) {
+ this._editorView.destroy();
+ }
+ if(this._reactionDisposer) {
+ this._reactionDisposer();
+ }
+ }
+
+ shouldComponentUpdate() {
+ return false;
+ }
+
@action
onChange(e: React.ChangeEvent<HTMLInputElement>) {
const {fieldKey, doc} = this.props;
@@ -42,8 +112,6 @@ export class FieldTextBox extends React.Component<IProps, IProps> {
}
render() {
- const {fieldKey, doc} = this.props;
- const value = doc.GetFieldValue(fieldKey, TextField, String(""));
- return (<input value={value} onChange={this.onChange} />)
+ return (<div ref={this._ref} />)
}
} \ No newline at end of file