Merge pull request #210 from Chrissi2812/reactive-plugin-options

Reactive extension options
This commit is contained in:
Philipp Kühn
2019-03-06 06:48:42 +01:00
committed by GitHub
6 changed files with 42 additions and 0 deletions

View File

@@ -15,6 +15,12 @@ export default class Placeholder extends Extension {
}
}
get update() {
return view => {
view.updateState(view.state)
}
}
get plugins() {
return [
new Plugin({

View File

@@ -67,6 +67,9 @@ export default class Editor {
view: this.view,
state: this.state,
})
// give extension manager access to our view
this.extensions.view = this.view
}
setOptions(options) {

View File

@@ -15,6 +15,10 @@ export default class Extension {
return 'extension'
}
get update() {
return () => {}
}
get defaultOptions() {
return {}
}

View File

@@ -15,6 +15,27 @@ export default class ExtensionManager {
}), {})
}
get options() {
const { view } = this
return this.extensions
.reduce((nodes, extension) => ({
...nodes,
[extension.name]: new Proxy(extension.options, {
set(obj, prop, value) {
const changed = (obj[prop] !== value)
Object.assign(obj, { [prop]: value })
if (changed) {
extension.update(view)
}
return true
},
}),
}), {})
}
get marks() {
return this.extensions
.filter(extension => extension.type === 'mark')