+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
+ }
+}
\ No newline at end of file