comment.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import Vditor from '../src/index'
  2. import '../src/assets/scss/index.scss'
  3. const bindCommentEvent = (cmtElement) => {
  4. const inputElement = cmtElement.querySelector('input')
  5. const id = cmtElement.getAttribute('data-id')
  6. inputElement.addEventListener('blur', () => {
  7. if (inputElement.value.trim() === '') {
  8. window.vditor.removeCommentIds([id])
  9. removeComment(cmtElement, id)
  10. }
  11. })
  12. cmtElement.querySelector('button').addEventListener('click', () => {
  13. window.vditor.removeCommentIds([id])
  14. removeComment(cmtElement, id)
  15. })
  16. cmtElement.addEventListener('mouseover', () => {
  17. window.vditor.hlCommentIds([id])
  18. })
  19. cmtElement.addEventListener('mouseout', () => {
  20. window.vditor.unHlCommentIds([id])
  21. })
  22. }
  23. const removeComment = (cmtElement, id) => {
  24. cmtElement.remove()
  25. let cmts = localStorage.getItem('cmts')
  26. if (!cmts) {
  27. return
  28. } else {
  29. cmts = JSON.parse(cmts)
  30. }
  31. cmts.find((item, index) => {
  32. if (item.id === id) {
  33. cmts.splice(index, 1)
  34. return true
  35. }
  36. })
  37. localStorage.setItem('cmts', JSON.stringify(cmts))
  38. }
  39. const renderComments = (ids) => {
  40. let cmts = localStorage.getItem('cmts')
  41. if (!cmts) {
  42. localStorage.setItem('cmts', '[]')
  43. cmts = []
  44. } else {
  45. cmts = JSON.parse(cmts)
  46. }
  47. ids.forEach(id => {
  48. let text = ''
  49. cmts.find((item) => {
  50. if (item.id === id) {
  51. text = item.text
  52. return true
  53. }
  54. })
  55. const cmtElement = document.createElement('div')
  56. cmtElement.setAttribute('data-id', id)
  57. cmtElement.innerHTML = `<div>
  58. ${text}<br>
  59. <button>删除</button><br>
  60. <input>
  61. </div>`
  62. cmtElement.value = text
  63. document.getElementById('comments').
  64. insertAdjacentElement('beforeend', cmtElement)
  65. bindCommentEvent(cmtElement)
  66. })
  67. }
  68. window.vditor = new Vditor('vditor', {
  69. // _lutePath: `http://192.168.0.107:9090/lute.min.js?${new Date().getTime()}`,
  70. _lutePath: 'src/js/lute/lute.min.js',
  71. mode: 'wysiwyg',
  72. height: window.innerHeight + 100,
  73. outline: true,
  74. debugger: true,
  75. typewriterMode: true,
  76. placeholder: 'Hello, Vditor!',
  77. comment: {
  78. enable: true,
  79. add (id, text) {
  80. const cmtElement = document.createElement('div')
  81. cmtElement.setAttribute('data-id', id)
  82. cmtElement.innerHTML = `<div>
  83. ${text}<br>
  84. <button>删除</button><br>
  85. <input>
  86. </div>`
  87. cmtElement.value = text
  88. document.getElementById('comments').
  89. insertAdjacentElement('beforeend', cmtElement)
  90. bindCommentEvent(cmtElement)
  91. cmtElement.querySelector('input').focus()
  92. let cmts = localStorage.getItem('cmts')
  93. if (!cmts) {
  94. localStorage.setItem('cmts', '[]')
  95. cmts = []
  96. } else {
  97. cmts = JSON.parse(cmts)
  98. }
  99. cmts.push({id, text})
  100. localStorage.setItem('cmts', JSON.stringify(cmts))
  101. },
  102. remove (ids) {
  103. ids.forEach((id) => {
  104. removeComment(document.querySelector(`#comments div[data-id="${id}"]`),
  105. id)
  106. })
  107. },
  108. },
  109. after () {
  110. renderComments(window.vditor.getCommentIds())
  111. },
  112. })