Merge pull request #210 from Chrissi2812/reactive-plugin-options
Reactive extension options
This commit is contained in:
@@ -15,6 +15,12 @@ export default class Placeholder extends Extension {
|
||||
}
|
||||
}
|
||||
|
||||
get update() {
|
||||
return view => {
|
||||
view.updateState(view.state)
|
||||
}
|
||||
}
|
||||
|
||||
get plugins() {
|
||||
return [
|
||||
new Plugin({
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -15,6 +15,10 @@ export default class Extension {
|
||||
return 'extension'
|
||||
}
|
||||
|
||||
get update() {
|
||||
return () => {}
|
||||
}
|
||||
|
||||
get defaultOptions() {
|
||||
return {}
|
||||
}
|
||||
|
||||
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user