gitlab-org--gitlab-foss/app/assets/javascripts/content_editor/services/markdown_sourcemap.js

41 lines
1.1 KiB
JavaScript

const getFullSource = (element) => {
const commentNode = element.ownerDocument.body.lastChild;
if (commentNode.nodeName === '#comment') {
return commentNode.textContent.split('\n');
}
return [];
};
const getRangeFromSourcePos = (sourcePos) => {
const [start, end] = sourcePos.split('-');
const [startRow, startCol] = start.split(':');
const [endRow, endCol] = end.split(':');
return {
start: { row: Number(startRow) - 1, col: Number(startCol) - 1 },
end: { row: Number(endRow) - 1, col: Number(endCol) - 1 },
};
};
export const getMarkdownSource = (element) => {
if (!element.dataset.sourcepos) return undefined;
const source = getFullSource(element);
const range = getRangeFromSourcePos(element.dataset.sourcepos);
let elSource = '';
for (let i = range.start.row; i <= range.end.row; i += 1) {
if (i === range.start.row) {
elSource += source[i]?.substring(range.start.col);
} else if (i === range.end.row) {
elSource += `\n${source[i]?.substring(0, range.start.col)}`;
} else {
elSource += `\n${source[i]}` || '';
}
}
return elSource.trim();
};