});
+ editor.on('click', function(event) {
+ const clickedEl = event.originalTarget;
+ if (clickedEl.nodeName === 'LI' && clickedEl.classList.contains('task-list-item')) {
+ handleTaskListItemClick(event, clickedEl, editor);
+ }
+ });
+
+}
+
+/**
+ * @param {MouseEvent} event
+ * @param {Element} clickedEl
+ * @param {Editor} editor
+ */
+function handleTaskListItemClick(event, clickedEl, editor) {
+ const bounds = clickedEl.getBoundingClientRect();
+ const withinBounds = event.clientX <= bounds.right
+ && event.clientX >= bounds.left
+ && event.clientY >= bounds.top
+ && event.clientY <= bounds.bottom;
+
+ // Outside of the task list item bounds mean we're probably clicking the pseudo-element.
+ if (!withinBounds) {
+ editor.undoManager.transact(() => {
+ if (clickedEl.hasAttribute('checked')) {
+ clickedEl.removeAttribute('checked');
+ } else {
+ clickedEl.setAttribute('checked', 'checked');
+ }
+ });
+ }
}
/**
/**
* Fake task list checkboxes
*/
+.page-content.mce-content-body .task-list-item {
+ margin-left: 0;
+ position: relative;
+}
.page-content.mce-content-body .task-list-item > input[type="checkbox"] {
display: none;
}
margin-right: 8px;
vertical-align: text-top;
cursor: pointer;
+ position: absolute;
+ left: -24px;
+ top: 4px;
}
.page-content.mce-content-body .task-list-item[checked]:before {