X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/0dc64d22ef81666a9c522dec8c1bbb0b87db42de..refs/pull/3083/head:/resources/js/editor/commands.js diff --git a/resources/js/editor/commands.js b/resources/js/editor/commands.js index 13fef8330..bbb815b1d 100644 --- a/resources/js/editor/commands.js +++ b/resources/js/editor/commands.js @@ -1,3 +1,8 @@ +/** + * @param {String} attrName + * @param {String} attrValue + * @return {PmCommandHandler} + */ export function setBlockAttr(attrName, attrValue) { return function (state, dispatch) { const ref = state.selection; @@ -26,7 +31,7 @@ export function setBlockAttr(attrName, attrValue) { const nodeAttrs = Object.assign({}, node.attrs); if (node.attrs[attrName] !== undefined) { nodeAttrs[attrName] = attrValue; - tr.setBlockType(pos, pos+1, node.type, nodeAttrs) + tr.setBlockType(pos, pos + 1, node.type, nodeAttrs) } }); @@ -37,6 +42,10 @@ export function setBlockAttr(attrName, attrValue) { } } +/** + * @param {PmNodeType} blockType + * @return {PmCommandHandler} + */ export function insertBlockBefore(blockType) { return function (state, dispatch) { const startPosition = state.selection.$from.before(1); @@ -47,4 +56,47 @@ export function insertBlockBefore(blockType) { return true } +} + +/** + * @param {Number} rows + * @param {Number} columns + * @param {Object} tableAttrs + * @return {PmCommandHandler} + */ +export function insertTable(rows, columns, tableAttrs) { + return function (state, dispatch) { + if (!dispatch) return true; + + const tr = state.tr; + const nodes = state.schema.nodes; + + const rowNodes = []; + for (let y = 0; y < rows; y++) { + const rowCells = []; + for (let x = 0; x < columns; x++) { + const cellText = nodes.paragraph.create(null); + rowCells.push(nodes.table_cell.create(null, cellText)); + } + rowNodes.push(nodes.table_row.create(null, rowCells)); + } + + const table = nodes.table.create(tableAttrs, rowNodes); + tr.replaceSelectionWith(table); + dispatch(tr); + + return true; + } +} + +/** + * @return {PmCommandHandler} + */ +export function removeMarks() { + return function (state, dispatch) { + if (dispatch) { + dispatch(state.tr.removeMark(state.selection.from, state.selection.to, null)); + } + return true; + } } \ No newline at end of file