list.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import Block from '../blots/block';
  2. import Container from '../blots/container';
  3. import Quill from '../core/quill';
  4. class ListContainer extends Container {}
  5. ListContainer.blotName = 'list-container';
  6. ListContainer.tagName = 'OL';
  7. class ListItem extends Block {
  8. static create(value) {
  9. const node = super.create();
  10. node.setAttribute('data-list', value);
  11. return node;
  12. }
  13. static formats(domNode) {
  14. return domNode.getAttribute('data-list') || undefined;
  15. }
  16. static register(options) {
  17. Quill.register(ListContainer, options);
  18. }
  19. constructor(scroll, domNode) {
  20. super(scroll, domNode);
  21. const ui = domNode.ownerDocument.createElement('span');
  22. const listEventHandler = e => {
  23. if (!scroll.isEnabled()) return;
  24. const format = this.statics.formats(domNode, scroll);
  25. if (format === 'checked') {
  26. this.format('list', 'unchecked');
  27. e.preventDefault();
  28. } else if (format === 'unchecked') {
  29. this.format('list', 'checked');
  30. e.preventDefault();
  31. }
  32. };
  33. ui.addEventListener('mousedown', listEventHandler);
  34. ui.addEventListener('touchstart', listEventHandler);
  35. this.attachUI(ui);
  36. }
  37. format(name, value) {
  38. if (name === this.statics.blotName && value) {
  39. this.domNode.setAttribute('data-list', value);
  40. } else {
  41. super.format(name, value);
  42. }
  43. }
  44. }
  45. ListItem.blotName = 'list';
  46. ListItem.tagName = 'LI';
  47. ListContainer.allowedChildren = [ListItem];
  48. ListItem.requiredContainer = ListContainer;
  49. export { ListContainer, ListItem as default };