mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-07-21 09:22:09 +03:00
102 lines
2.6 KiB
JavaScript
102 lines
2.6 KiB
JavaScript
/**
|
|
* @param {String} attrName
|
|
* @param {String} attrValue
|
|
* @return {PmCommandHandler}
|
|
*/
|
|
export function setBlockAttr(attrName, attrValue) {
|
|
return function (state, dispatch) {
|
|
const ref = state.selection;
|
|
const from = ref.from;
|
|
const to = ref.to;
|
|
let applicable = false;
|
|
|
|
state.doc.nodesBetween(from, to, function (node, pos) {
|
|
if (applicable) {
|
|
return false
|
|
}
|
|
if (!node.isTextblock || node.attrs[attrName] === attrValue) {
|
|
return
|
|
}
|
|
|
|
applicable = node.attrs[attrName] !== undefined;
|
|
});
|
|
|
|
if (!applicable) {
|
|
return false
|
|
}
|
|
|
|
if (dispatch) {
|
|
const tr = state.tr;
|
|
tr.doc.nodesBetween(from, to, function (node, pos) {
|
|
const nodeAttrs = Object.assign({}, node.attrs);
|
|
if (node.attrs[attrName] !== undefined) {
|
|
nodeAttrs[attrName] = attrValue;
|
|
tr.setBlockType(pos, pos + 1, node.type, nodeAttrs)
|
|
}
|
|
});
|
|
|
|
dispatch(tr);
|
|
}
|
|
|
|
return true
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param {PmNodeType} blockType
|
|
* @return {PmCommandHandler}
|
|
*/
|
|
export function insertBlockBefore(blockType) {
|
|
return function (state, dispatch) {
|
|
const startPosition = state.selection.$from.before(1);
|
|
|
|
if (dispatch) {
|
|
dispatch(state.tr.insert(startPosition, blockType.create()));
|
|
}
|
|
|
|
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;
|
|
}
|
|
} |