| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | 
							- import Parchment from 'parchment';
 
- import Block from '../blots/block';
 
- import Container from '../blots/container';
 
- class ListItem extends Block {
 
-   static formats(domNode) {
 
-     return domNode.tagName === this.tagName ? undefined : super.formats(domNode);
 
-   }
 
-   format(name, value) {
 
-     if (name === List.blotName && !value) {
 
-       this.replaceWith(Parchment.create(this.statics.scope));
 
-     } else {
 
-       super.format(name, value);
 
-     }
 
-   }
 
-   remove() {
 
-     if (this.prev == null && this.next == null) {
 
-       this.parent.remove();
 
-     } else {
 
-       super.remove();
 
-     }
 
-   }
 
-   replaceWith(name, value) {
 
-     this.parent.isolate(this.offset(this.parent), this.length());
 
-     if (name === this.parent.statics.blotName) {
 
-       this.parent.replaceWith(name, value);
 
-       return this;
 
-     } else {
 
-       this.parent.unwrap();
 
-       return super.replaceWith(name, value);
 
-     }
 
-   }
 
- }
 
- ListItem.blotName = 'list-item';
 
- ListItem.tagName = 'LI';
 
- class List extends Container {
 
-   static create(value) {
 
-     let tagName = value === 'ordered' ? 'OL' : 'UL';
 
-     let node = super.create(tagName);
 
-     if (value === 'checked' || value === 'unchecked') {
 
-       node.setAttribute('data-checked', value === 'checked');
 
-     }
 
-     return node;
 
-   }
 
-   static formats(domNode) {
 
-     if (domNode.tagName === 'OL') return 'ordered';
 
-     if (domNode.tagName === 'UL') {
 
-       if (domNode.hasAttribute('data-checked')) {
 
-         return domNode.getAttribute('data-checked') === 'true' ? 'checked' : 'unchecked';
 
-       } else {
 
-         return 'bullet';
 
-       }
 
-     }
 
-     return undefined;
 
-   }
 
-   constructor(domNode) {
 
-     super(domNode);
 
-     const listEventHandler = (e) => {
 
-       if (e.target.parentNode !== domNode) return;
 
-       let format = this.statics.formats(domNode);
 
-       let blot = Parchment.find(e.target);
 
-       if (format === 'checked') {
 
-         blot.format('list', 'unchecked');
 
-       } else if(format === 'unchecked') {
 
-         blot.format('list', 'checked');
 
-       }
 
-     }
 
-     domNode.addEventListener('touchstart', listEventHandler);
 
-     domNode.addEventListener('mousedown', listEventHandler);
 
-   }
 
-   format(name, value) {
 
-     if (this.children.length > 0) {
 
-       this.children.tail.format(name, value);
 
-     }
 
-   }
 
-   formats() {
 
-     // We don't inherit from FormatBlot
 
-     return { [this.statics.blotName]: this.statics.formats(this.domNode) };
 
-   }
 
-   insertBefore(blot, ref) {
 
-     if (blot instanceof ListItem) {
 
-       super.insertBefore(blot, ref);
 
-     } else {
 
-       let index = ref == null ? this.length() : ref.offset(this);
 
-       let after = this.split(index);
 
-       after.parent.insertBefore(blot, after);
 
-     }
 
-   }
 
-   optimize(context) {
 
-     super.optimize(context);
 
-     let next = this.next;
 
-     if (next != null && next.prev === this &&
 
-         next.statics.blotName === this.statics.blotName &&
 
-         next.domNode.tagName === this.domNode.tagName &&
 
-         next.domNode.getAttribute('data-checked') === this.domNode.getAttribute('data-checked')) {
 
-       next.moveChildren(this);
 
-       next.remove();
 
-     }
 
-   }
 
-   replace(target) {
 
-     if (target.statics.blotName !== this.statics.blotName) {
 
-       let item = Parchment.create(this.statics.defaultChild);
 
-       target.moveChildren(item);
 
-       this.appendChild(item);
 
-     }
 
-     super.replace(target);
 
-   }
 
- }
 
- List.blotName = 'list';
 
- List.scope = Parchment.Scope.BLOCK_BLOT;
 
- List.tagName = ['OL', 'UL'];
 
- List.defaultChild = 'list-item';
 
- List.allowedChildren = [ListItem];
 
- export { ListItem, List as default };
 
 
  |