add setDefaultNodeAttributes

This commit is contained in:
Philipp Kühn 2020-11-02 15:46:56 +01:00
parent 7ef3c04a2f
commit 83ebbf957a
3 changed files with 40 additions and 0 deletions

View File

@ -9,6 +9,9 @@
<button @click="editor.chain().focus().textAlign('right').run()">
right
</button>
<button @click="editor.chain().focus().setDefaultNodeAttributes(['textAlign']).run()">
reset
</button>
<editor-content :editor="editor" />
</div>
</template>

View File

@ -11,6 +11,7 @@ export { RemoveMarks } from './removeMarks'
export { ScrollIntoView } from './scrollIntoView'
export { SelectAll } from './selectAll'
export { SelectParentNode } from './selectParentNode'
export { SetDefaultNodeAttributes } from './setDefaultNodeAttributes'
export { SetNodeAttributes } from './setNodeAttributes'
export { SetBlockType } from './setBlockType'
export { SetContent } from './setContent'

View File

@ -0,0 +1,36 @@
import { Command } from '../Editor'
import { createExtension } from '../Extension'
export const SetDefaultNodeAttributes = createExtension({
addCommands() {
return {
setDefaultNodeAttributes: (attributeNames: string[] = []): Command => ({ tr, state }) => {
const { selection } = tr
const { from, to } = selection
state.doc.nodesBetween(from, to, (node, pos) => {
if (!node.type.isText) {
attributeNames.forEach(name => {
const attribute = node.type.spec.attrs?.[name]
const defaultValue = attribute?.default
if (attribute && defaultValue !== undefined) {
tr.setNodeMarkup(pos, undefined, {
[name]: defaultValue,
})
}
})
}
})
return true
},
}
},
})
declare module '../Editor' {
interface AllExtensions {
SetDefaultNodeAttributes: typeof SetDefaultNodeAttributes,
}
}