1
0
mirror of https://github.com/BookStackApp/BookStack.git synced 2025-07-21 09:22:09 +03:00

Started on table editing/resizing

This commit is contained in:
Dan Brown
2022-01-19 16:46:45 +00:00
parent 4b08eef12c
commit 9b4ea368dc
8 changed files with 196 additions and 48 deletions

View File

@ -17,17 +17,6 @@ function getAlignAttrFromDomNode(node) {
return null;
}
/**
* @param {String} className
* @param {Object} attrs
* @return {Object}
*/
function addClassToAttrs(className, attrs) {
return Object.assign({}, attrs, {
class: attrs.class ? attrs.class + ' ' + className : className,
});
}
/**
* @param node
* @param {Object} attrs
@ -49,6 +38,45 @@ function getAttrsParserForAlignment(node) {
};
}
/**
* @param {String} className
* @param {Object} attrs
* @return {Object}
*/
function addClassToAttrs(className, attrs) {
return Object.assign({}, attrs, {
class: attrs.class ? attrs.class + ' ' + className : className,
});
}
/**
* @param {String[]} attrNames
* @return {function(Element): {}}
*/
function domAttrsToAttrsParser(attrNames) {
return function (node) {
const attrs = {};
for (const attr of attrNames) {
attrs[attr] = node.hasAttribute(attr) ? node.getAttribute(attr) : null;
}
return attrs;
};
}
/**
* @param {PmNode} node
* @param {String[]} attrNames
*/
function extractAttrsForDom(node, attrNames) {
const domAttrs = {};
for (const attr of attrNames) {
if (node.attrs[attr]) {
domAttrs[attr] = node.attrs[attr];
}
}
return domAttrs;
}
const doc = {
content: "block+",
};
@ -210,15 +238,29 @@ const bullet_list = Object.assign({}, bulletList, {content: "list_item+", group:
const list_item = Object.assign({}, listItem, {content: 'paragraph block*'});
const {
table,
table_row,
table_cell,
table_header,
} = tableNodes({
tableGroup: "block",
cellContent: "block*"
cellContent: "block+"
});
const table = {
content: "table_row+",
attrs: {
style: {default: null},
},
tableRole: "table",
isolating: true,
group: "block",
parseDOM: [{tag: "table", getAttrs: domAttrsToAttrsParser(['style'])}],
toDOM(node) {
console.log(extractAttrsForDom(node, ['style']));
return ["table", extractAttrsForDom(node, ['style']), ["tbody", 0]]
}
};
const nodes = {
doc,
paragraph,