edit_online.html 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>文本编辑器示例</title>
  6. <!-- 引入Quill样式 -->
  7. <link rel="stylesheet" href="css/quill.snow.css">
  8. <style>
  9. #editor {
  10. height: calc(100vh - 20px); /* 假设其他元素的高度是100px */
  11. }
  12. .ql-editor ol, .ql-editor ul {
  13. padding-left: 0em;
  14. }
  15. .ql-editor li.ql-indent-1:not(.ql-direction-rtl) {
  16. padding-left: 3.5em;
  17. }
  18. .ql-editor li.ql-indent-2:not(.ql-direction-rtl) {
  19. padding-left: 5em;
  20. }
  21. .ql-editor li.ql-indent-3:not(.ql-direction-rtl) {
  22. padding-left: 6.5em;
  23. }
  24. .ql-editor li.ql-indent-4:not(.ql-direction-rtl) {
  25. padding-left: 8em;
  26. }
  27. .ql-editor li.ql-indent-5:not(.ql-direction-rtl) {
  28. padding-left: 9.5em;
  29. }
  30. .ql-editor li.ql-indent-6:not(.ql-direction-rtl) {
  31. padding-left: 11em;
  32. }
  33. .ql-editor li.ql-indent-7:not(.ql-direction-rtl) {
  34. padding-left: 12.5em;
  35. }
  36. .ql-editor li.ql-indent-8:not(.ql-direction-rtl) {
  37. padding-left: 14em;
  38. }
  39. .ql-editor li.ql-indent-9:not(.ql-direction-rtl) {
  40. padding-left: 15.5em;
  41. }
  42. .ql-editor li.ql-indent-10:not(.ql-direction-rtl) {
  43. padding-left: 17em;
  44. }
  45. </style>
  46. <script src="js/axios.min.js"></script>
  47. <script src="https://web.tianyunperfect.cn/simple/js/lodash.min.js"></script>
  48. <script src="https://do.tianyunperfect.cn/js/axios.min.js"></script>
  49. <script src="js/util.js"></script>
  50. <script src="https://map.tianyunperfect.cn/common-page.js"></script>
  51. </head>
  52. <body>
  53. <!-- 创建一个用于编辑的容器 -->
  54. <div id="editor"></div>
  55. <!-- 引入Quill库 -->
  56. <script src="js/quill.js"></script>
  57. <script>
  58. const quill = new Quill('#editor', {
  59. theme: 'snow', // 指定使用的主题
  60. modules: {
  61. // toolbar: false
  62. toolbar: [
  63. [{'header': [1, 2, false]}, 'bold', 'italic', 'blockquote', 'code-block', 'link'],
  64. [{'list': 'ordered'}, {'list': 'bullet'}, {'indent': '-1'}, {'indent': '+1'}, 'image', 'video'],
  65. ]
  66. }
  67. });
  68. let all_data = {};
  69. let pageManager = new PageManager();
  70. pageManager.type='html';
  71. const updateData = _.debounce(pageManager.updateData, 1000)
  72. pageManager.init().then(res => {
  73. all_data = res;
  74. console.log(res)
  75. if (res && res.content) {
  76. // 初始化数据
  77. let showContent = res.content;
  78. if (pageManager.isBackup){
  79. // 如果是备份
  80. showContent = res.content_back;
  81. }
  82. quill.setContents(quill.clipboard.convert(showContent));
  83. }
  84. if (pageManager.isReadOnly()) {
  85. // 备份页面或分享页面,设置为只读
  86. quill.enable(false);
  87. }
  88. });
  89. pageManager.setNameCallBack(() => {
  90. let title = localStorage.getItem("title");
  91. document.title = title + " - 问答";
  92. all_data.title = title;
  93. })
  94. // 监听编辑器内容变化
  95. quill.on('text-change', function (delta, oldDelta, source) {
  96. // delta - 表示变化的内容
  97. // oldDelta - 表示变化前的内容
  98. // source - 表示触发变化的原因,如'user'(用户输入)或'silent'(编程方式修改)
  99. if (pageManager.isReadOnly()) {
  100. // 处理只读的情况 todo
  101. return;
  102. }
  103. all_data.content = quill.root.innerHTML;
  104. updateData(all_data);
  105. });
  106. </script>
  107. </body>
  108. </html>