Stackedit/src/services/optional/taskChange.js
Benoit Schweblin 1d8b67c321 Upgraded eslint
2018-05-06 01:46:33 +01:00

48 lines
1.8 KiB
JavaScript

import editorSvc from '../editorSvc';
import store from '../../store';
editorSvc.$on('inited', () => {
const getPreviewOffset = (elt) => {
let offset = 0;
if (!elt || elt === editorSvc.previewElt) {
return offset;
}
let { previousSibling } = elt;
while (previousSibling) {
offset += previousSibling.textContent.length;
({ previousSibling } = previousSibling);
}
return offset + getPreviewOffset(elt.parentNode);
};
editorSvc.previewElt.addEventListener('click', (evt) => {
if (evt.target.classList.contains('task-list-item-checkbox')) {
evt.preventDefault();
if (store.getters['content/isCurrentEditable']) {
const editorContent = editorSvc.clEditor.getContent();
// Use setTimeout to ensure evt.target.checked has the old value
setTimeout(() => {
// Make sure content has not changed
if (editorContent === editorSvc.clEditor.getContent()) {
const previewOffset = getPreviewOffset(evt.target);
const endOffset = editorSvc.getEditorOffset(previewOffset + 1);
if (endOffset != null) {
const startOffset = editorContent.lastIndexOf('\n', endOffset) + 1;
const line = editorContent.slice(startOffset, endOffset);
const match = line.match(/^([ \t]*(?:[*+-]|\d+\.)[ \t]+\[)[ xX](\] .*)/);
if (match) {
let newContent = editorContent.slice(0, startOffset);
newContent += match[1];
newContent += evt.target.checked ? ' ' : 'x';
newContent += match[2];
newContent += editorContent.slice(endOffset);
editorSvc.clEditor.setContent(newContent, true);
}
}
}
}, 10);
}
}
});
});