index.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <template>
  2. <ckeditor v-model="editorData" :editor="editor" :config="editorConfig" @ready="onEditorReady" />
  3. </template>
  4. <script>
  5. import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor'
  6. import EssentialsPlugin from '@ckeditor/ckeditor5-essentials/src/essentials'
  7. import BoldPlugin from '@ckeditor/ckeditor5-basic-styles/src/bold'
  8. import ItalicPlugin from '@ckeditor/ckeditor5-basic-styles/src/italic'
  9. import LinkPlugin from '@ckeditor/ckeditor5-link/src/link'
  10. import ParagraphPlugin from '@ckeditor/ckeditor5-paragraph/src/paragraph'
  11. import Highlight from '@ckeditor/ckeditor5-highlight/src/highlight'
  12. import RemoveFormat from '@ckeditor/ckeditor5-remove-format/src/removeformat'
  13. import Indent from '@ckeditor/ckeditor5-indent/src/indent'
  14. import IndentBlock from '@ckeditor/ckeditor5-indent/src/indentblock'
  15. import HorizontalLine from '@ckeditor/ckeditor5-horizontal-line/src/horizontalline'
  16. import Font from '@ckeditor/ckeditor5-font/src/font'
  17. import Alignment from '@ckeditor/ckeditor5-alignment/src/alignment'
  18. import Heading from '@ckeditor/ckeditor5-heading/src/heading'
  19. import BlockQuote from '@ckeditor/ckeditor5-block-quote/src/blockquote'
  20. import Image from '@ckeditor/ckeditor5-image/src/image'
  21. import ImageToolbar from '@ckeditor/ckeditor5-image/src/imagetoolbar'
  22. import ImageCaption from '@ckeditor/ckeditor5-image/src/imagecaption'
  23. import ImageStyle from '@ckeditor/ckeditor5-image/src/imagestyle'
  24. import ImageResize from '@ckeditor/ckeditor5-image/src/imageresize'
  25. import EasyImage from './plugin/imageUpload/easyimage'
  26. import MediaEmbed from '@ckeditor/ckeditor5-media-embed/src/mediaembed'
  27. import TodoList from '@ckeditor/ckeditor5-list/src/todolist'
  28. import List from '@ckeditor/ckeditor5-list/src/list'
  29. import PageBreak from '@ckeditor/ckeditor5-page-break/src/pagebreak'
  30. import Table from '@ckeditor/ckeditor5-table/src/table'
  31. import TableToolbar from '@ckeditor/ckeditor5-table/src/tabletoolbar'
  32. import Autoformat from '@ckeditor/ckeditor5-autoformat/src/autoformat'
  33. import Autosave from '@ckeditor/ckeditor5-autosave/src/autosave'
  34. import WordCount from '@ckeditor/ckeditor5-word-count/src/wordcount'
  35. import CodeBlock from '@ckeditor/ckeditor5-code-block/src/codeblock'
  36. export default {
  37. name: 'Editor',
  38. props: {
  39. content: {
  40. required: true,
  41. type: String
  42. }
  43. },
  44. data() {
  45. return {
  46. editor: ClassicEditor,
  47. editorData: this.content,
  48. editorConfig: {
  49. plugins: [
  50. EssentialsPlugin,
  51. BoldPlugin,
  52. ItalicPlugin,
  53. LinkPlugin,
  54. ParagraphPlugin,
  55. Highlight,
  56. RemoveFormat,
  57. Indent,
  58. IndentBlock,
  59. BlockQuote,
  60. HorizontalLine,
  61. Font,
  62. Alignment,
  63. Heading,
  64. EasyImage,
  65. MediaEmbed,
  66. Image, ImageToolbar, ImageCaption, ImageStyle, ImageResize,
  67. // PasteFromOffice,
  68. Autoformat, WordCount, Autosave,
  69. TodoList, List, PageBreak,
  70. Table, TableToolbar,
  71. CodeBlock
  72. ],
  73. toolbar: {
  74. items: [
  75. 'heading',
  76. 'outdent', 'indent',
  77. 'link',
  78. 'undo',
  79. 'redo',
  80. 'alignment',
  81. 'codeBlock',
  82. 'highlight',
  83. 'blockQuote',
  84. 'imageUpload',
  85. 'mediaEmbed',
  86. 'todoList',
  87. 'numberedList',
  88. 'bulletedList',
  89. 'bold',
  90. 'italic',
  91. 'insertTable',
  92. 'removeFormat',
  93. 'pageBreak',
  94. 'horizontalLine',
  95. 'fontSize', 'fontFamily', 'fontColor', 'fontBackgroundColor'
  96. ]
  97. },
  98. // viewportTopOffset: 50,
  99. codeBlock: {
  100. languages: [
  101. { language: 'java', label: 'java' },
  102. { language: 'shell', label: 'shell' },
  103. { language: 'dart', label: 'dart' },
  104. { language: 'python', label: 'python' },
  105. { language: 'javascript', label: 'js' },
  106. { language: 'sql', label: 'sql' },
  107. { language: 'css', label: 'CSS' },
  108. { language: 'xml', label: 'HTML/XML' },
  109. { language: 'html', label: 'html' },
  110. { language: 'git', label: 'git' },
  111. { language: 'properties', label: 'properties' },
  112. { language: 'json', label: 'json' }
  113. ]
  114. },
  115. fontFamily: {
  116. options: [
  117. 'default',
  118. 'Ubuntu, Arial, sans-serif',
  119. 'Ubuntu Mono, Courier New, Courier, monospace'
  120. ]
  121. },
  122. image: {
  123. toolbar: ['imageTextAlternative', '|', 'imageStyle:full', 'imageStyle:side', 'imageStyle:alignLeft', 'imageStyle:alignCenter', 'imageStyle:alignRight'],
  124. styles: ['full', 'side', 'alignLeft', 'alignCenter', 'alignRight']
  125. },
  126. mediaEmbed: {
  127. },
  128. table: {
  129. contentToolbar: ['tableColumn', 'tableRow', 'mergeTableCells']
  130. },
  131. heading: {
  132. options: [
  133. { model: 'paragraph', title: 'Paragraph', class: 'ck-heading_paragraph' },
  134. { model: 'heading1', view: 'h1', title: 'Heading 1', class: 'ck-heading_heading1' },
  135. { model: 'heading2', view: 'h2', title: 'Heading 2', class: 'ck-heading_heading2' },
  136. { model: 'heading3', view: 'h3', title: 'Heading 3', class: 'ck-heading_heading3' },
  137. { model: 'heading4', view: 'h4', title: 'Heading 4', class: 'ck-heading_heading4' },
  138. { model: 'heading5', view: 'h5', title: 'Heading 5', class: 'ck-heading_heading5' }
  139. ]
  140. },
  141. wordCount: {
  142. onUpdate: stats => {
  143. // console.log(stats)
  144. }
  145. }
  146. // autosave: {
  147. // save(editor) {
  148. // // todo
  149. // console.log(editor)
  150. // }
  151. // },
  152. }
  153. }
  154. },
  155. watch: {
  156. content: function(val) {
  157. this.editorData = val
  158. },
  159. editorData: function() {
  160. this.$emit('getContent', this.editorData)
  161. }
  162. },
  163. methods: {
  164. onEditorReady(editor) {
  165. }
  166. }
  167. }
  168. </script>
  169. <style>
  170. .ck-content{
  171. min-height: 600px !important;
  172. }
  173. .ck.ck-editor__top .ck-sticky-panel .ck-toolbar{
  174. border-bottom-width: 1px;
  175. }
  176. </style>