From 2b58e4e85e5f48f6a2693ce8aea02d5990c308a8 Mon Sep 17 00:00:00 2001 From: xiongxiaoyang <773861846@qq.com> Date: Wed, 20 Nov 2019 14:20:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0wangEditor=EF=BC=8C=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E6=9B=B4=E6=96=B0=EF=BC=8C=E5=A2=9E=E5=8A=A0sql?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 +- assets/chapter_manager.png | Bin 0 -> 94844 bytes assets/chapter_pub.png | Bin 0 -> 93257 bytes assets/novel_list.png | Bin 0 -> 80553 bytes assets/novel_pub.png | Bin 0 -> 70254 bytes .../src/main/resources/application.yml | 6 +- .../resources/static/wangEditor/.eslintignore | 2 + .../static/wangEditor/.eslintrc.json | 38 + .../static/wangEditor/.gitattributes | 22 + .../resources/static/wangEditor/.gitignore | 51 + .../resources/static/wangEditor/.npmignore | 5 + .../main/resources/static/wangEditor/ISSUE.md | 157 + .../main/resources/static/wangEditor/LICENSE | 22 + .../resources/static/wangEditor/README.md | 70 + .../resources/static/wangEditor/bower.json | 20 + .../static/wangEditor/docs/dev/README.md | 25 + .../docs/usage/01-getstart/01-demo.md | 41 + .../docs/usage/01-getstart/02-use-module.md | 49 + .../docs/usage/01-getstart/03-sperate.md | 48 + .../docs/usage/01-getstart/04-multi.md | 50 + .../docs/usage/02-content/01-set-content.md | 46 + .../docs/usage/02-content/02-get-content.md | 80 + .../docs/usage/02-content/03-use-textarea.md | 25 + .../docs/usage/02-content/04-get-json.md | 82 + .../docs/usage/03-config/01-menu.md | 52 + .../docs/usage/03-config/02-debug.md | 21 + .../docs/usage/03-config/03-onchange.md | 40 + .../docs/usage/03-config/04-z-index.md | 19 + .../docs/usage/03-config/05-lang.md | 30 + .../docs/usage/03-config/06-paste.md | 33 + .../usage/03-config/07-linkImgCallback.md | 12 + .../docs/usage/03-config/08-linkCheck.md | 16 + .../docs/usage/03-config/09-onfocus.md | 19 + .../docs/usage/03-config/10-onblur.md | 20 + .../docs/usage/03-config/11-linkImgCheck.md | 15 + .../docs/usage/03-config/12-colors.md | 29 + .../docs/usage/03-config/13-emot.md | 48 + .../docs/usage/04-uploadimg/01-show-tab.md | 52 + .../docs/usage/04-uploadimg/02-base64.md | 23 + .../usage/04-uploadimg/03-upload-config.md | 188 + .../docs/usage/04-uploadimg/04-qiniu.md | 115 + .../usage/05-other/01-全屏-预览-查看源码.md | 10 + .../docs/usage/05-other/02-上传附件.md | 24 + .../docs/usage/05-other/03-markdown.md | 12 + .../wangEditor/docs/usage/05-other/04-xss.md | 23 + .../docs/usage/05-other/05-react.md | 7 + .../wangEditor/docs/usage/05-other/06-vue.md | 7 + .../wangEditor/docs/usage/05-other/07-ng.md | 3 + .../wangEditor/docs/usage/05-other/08-api.md | 27 + .../static/wangEditor/docs/usage/README.md | 3 + .../static/wangEditor/example/README.md | 1 + .../example/demo/in-react/package.json | 19 + .../example/demo/in-react/public/favicon.ico | Bin 0 -> 24838 bytes .../example/demo/in-react/public/index.html | 40 + .../demo/in-react/public/manifest.json | 15 + .../example/demo/in-react/src/App.css | 24 + .../example/demo/in-react/src/App.js | 48 + .../example/demo/in-react/src/App.test.js | 8 + .../example/demo/in-react/src/index.css | 5 + .../example/demo/in-react/src/index.js | 8 + .../example/demo/in-react/src/logo.svg | 7 + .../in-react/src/registerServiceWorker.js | 51 + .../wangEditor/example/demo/in-vue/.babelrc | 14 + .../example/demo/in-vue/.editorconfig | 9 + .../example/demo/in-vue/.postcssrc.js | 8 + .../example/demo/in-vue/build/build.js | 35 + .../demo/in-vue/build/check-versions.js | 48 + .../example/demo/in-vue/build/dev-client.js | 9 + .../example/demo/in-vue/build/dev-server.js | 89 + .../example/demo/in-vue/build/utils.js | 71 + .../demo/in-vue/build/vue-loader.conf.js | 12 + .../demo/in-vue/build/webpack.base.conf.js | 58 + .../demo/in-vue/build/webpack.dev.conf.js | 35 + .../demo/in-vue/build/webpack.prod.conf.js | 120 + .../example/demo/in-vue/config/dev.env.js | 6 + .../example/demo/in-vue/config/index.js | 38 + .../example/demo/in-vue/config/prod.env.js | 3 + .../wangEditor/example/demo/in-vue/index.html | 11 + .../example/demo/in-vue/package.json | 60 + .../example/demo/in-vue/src/App.vue | 31 + .../example/demo/in-vue/src/assets/logo.png | Bin 0 -> 6849 bytes .../demo/in-vue/src/components/Editor.vue | 34 + .../demo/in-vue/src/components/Hello.vue | 53 + .../example/demo/in-vue/src/main.js | 13 + .../example/demo/in-vue/static/.gitkeep | 0 .../wangEditor/example/demo/test-amd-main.js | 4 + .../wangEditor/example/demo/test-amd.html | 15 + .../example/demo/test-css-reset.html | 66 + .../wangEditor/example/demo/test-emot.html | 84 + .../example/demo/test-fullscreen.html | 114 + .../example/demo/test-get-content.html | 34 + .../wangEditor/example/demo/test-getJSON.html | 30 + .../wangEditor/example/demo/test-lang.html | 31 + .../wangEditor/example/demo/test-menus.html | 26 + .../wangEditor/example/demo/test-mult.html | 44 + .../wangEditor/example/demo/test-onblur.html | 23 + .../example/demo/test-onchange.html | 24 + .../wangEditor/example/demo/test-onfocus.html | 22 + .../wangEditor/example/demo/test-paste.html | 25 + .../example/demo/test-set-content.html | 35 + .../wangEditor/example/demo/test-sperate.html | 35 + .../example/demo/test-textarea.html | 33 + .../example/demo/test-uploadimg.html | 58 + .../static/wangEditor/example/favicon.ico | Bin 0 -> 4286 bytes .../wangEditor/example/icomoon/Read Me.txt | 7 + .../example/icomoon/demo-files/demo.css | 155 + .../example/icomoon/demo-files/demo.js | 30 + .../wangEditor/example/icomoon/demo.html | 505 ++ .../example/icomoon/fonts/icomoon.eot | Bin 0 -> 5656 bytes .../example/icomoon/fonts/icomoon.svg | 37 + .../example/icomoon/fonts/icomoon.ttf | Bin 0 -> 5492 bytes .../example/icomoon/fonts/icomoon.woff | Bin 0 -> 5568 bytes .../wangEditor/example/icomoon/selection.json | 775 +++ .../wangEditor/example/icomoon/style.css | 113 + .../static/wangEditor/example/index.html | 62 + .../static/wangEditor/example/pay.png | Bin 0 -> 95517 bytes .../static/wangEditor/example/server/index.js | 88 + .../static/wangEditor/example/server/util.js | 14 + .../resources/static/wangEditor/gulpfile.js | 122 + .../resources/static/wangEditor/package.json | 60 + .../wangEditor/release/fonts/w-e-icon.woff | Bin 0 -> 5568 bytes .../static/wangEditor/release/wangEditor.css | 405 ++ .../static/wangEditor/release/wangEditor.js | 4679 +++++++++++++++++ .../wangEditor/release/wangEditor.min.css | 1 + .../wangEditor/release/wangEditor.min.js | 4 + .../wangEditor/release/wangEditor.min.js.map | 1 + .../static/wangEditor/src/fonts/w-e-icon.woff | Bin 0 -> 5568 bytes .../static/wangEditor/src/js/.babelrc | 10 + .../static/wangEditor/src/js/command/index.js | 106 + .../static/wangEditor/src/js/config.js | 387 ++ .../static/wangEditor/src/js/editor/index.js | 339 ++ .../src/js/editor/upload/progress.js | 65 + .../src/js/editor/upload/upload-img.js | 316 ++ .../static/wangEditor/src/js/index.js | 24 + .../src/js/menus/backColor/index.js | 46 + .../wangEditor/src/js/menus/bold/index.js | 60 + .../wangEditor/src/js/menus/code/index.js | 150 + .../wangEditor/src/js/menus/droplist.js | 130 + .../wangEditor/src/js/menus/emoticon/index.js | 115 + .../src/js/menus/foreColor/index.js | 46 + .../wangEditor/src/js/menus/head/index.js | 70 + .../wangEditor/src/js/menus/img/index.js | 252 + .../static/wangEditor/src/js/menus/index.js | 125 + .../wangEditor/src/js/menus/italic/index.js | 60 + .../wangEditor/src/js/menus/justify/index.js | 44 + .../wangEditor/src/js/menus/link/index.js | 168 + .../wangEditor/src/js/menus/list/index.js | 82 + .../wangEditor/src/js/menus/menu-list.js | 63 + .../static/wangEditor/src/js/menus/panel.js | 195 + .../wangEditor/src/js/menus/quote/index.js | 75 + .../wangEditor/src/js/menus/redo/index.js | 35 + .../src/js/menus/strikethrough/index.js | 60 + .../wangEditor/src/js/menus/table/index.js | 376 ++ .../src/js/menus/underline/index.js | 60 + .../wangEditor/src/js/menus/undo/index.js | 35 + .../wangEditor/src/js/menus/video/index.js | 86 + .../wangEditor/src/js/selection/index.js | 186 + .../static/wangEditor/src/js/text/index.js | 551 ++ .../static/wangEditor/src/js/util/dom-core.js | 488 ++ .../wangEditor/src/js/util/paste-handle.js | 86 + .../wangEditor/src/js/util/poly-fill.js | 48 + .../wangEditor/src/js/util/replace-lang.js | 21 + .../static/wangEditor/src/js/util/util.js | 71 + .../static/wangEditor/src/less/common.less | 19 + .../static/wangEditor/src/less/droplist.less | 48 + .../static/wangEditor/src/less/icon.less | 102 + .../static/wangEditor/src/less/menus.less | 33 + .../static/wangEditor/src/less/panel.less | 159 + .../static/wangEditor/src/less/text.less | 77 + .../src/main/resources/application.yml | 6 +- sql/2019-11-20.sql | 60 + sql/books.sql | 62 + sql/sql文件说明.txt | 3 + 173 files changed, 16040 insertions(+), 7 deletions(-) create mode 100644 assets/chapter_manager.png create mode 100644 assets/chapter_pub.png create mode 100644 assets/novel_list.png create mode 100644 assets/novel_pub.png create mode 100644 novel-admin/src/main/resources/static/wangEditor/.eslintignore create mode 100644 novel-admin/src/main/resources/static/wangEditor/.eslintrc.json create mode 100644 novel-admin/src/main/resources/static/wangEditor/.gitattributes create mode 100644 novel-admin/src/main/resources/static/wangEditor/.gitignore create mode 100644 novel-admin/src/main/resources/static/wangEditor/.npmignore create mode 100644 novel-admin/src/main/resources/static/wangEditor/ISSUE.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/LICENSE create mode 100644 novel-admin/src/main/resources/static/wangEditor/README.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/bower.json create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/dev/README.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/01-demo.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/02-use-module.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/03-sperate.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/04-multi.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/01-set-content.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/02-get-content.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/03-use-textarea.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/04-get-json.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/01-menu.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/02-debug.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/03-onchange.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/04-z-index.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/05-lang.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/06-paste.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/07-linkImgCallback.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/08-linkCheck.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/09-onfocus.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/10-onblur.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/11-linkImgCheck.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/12-colors.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/13-emot.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/01-show-tab.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/02-base64.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/03-upload-config.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/04-qiniu.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/01-全屏-预览-查看源码.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/02-上传附件.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/03-markdown.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/04-xss.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/05-react.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/06-vue.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/07-ng.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/08-api.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/docs/usage/README.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/README.md create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/package.json create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/public/favicon.ico create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/public/index.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/public/manifest.json create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/App.css create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/App.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/App.test.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/index.css create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/logo.svg create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/registerServiceWorker.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/.babelrc create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/.editorconfig create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/.postcssrc.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/build.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/check-versions.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-client.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-server.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/utils.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/vue-loader.conf.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.base.conf.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.dev.conf.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.prod.conf.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/config/dev.env.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/config/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/config/prod.env.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/index.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/package.json create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/App.vue create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/assets/logo.png create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Editor.vue create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Hello.vue create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/main.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/static/.gitkeep create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-amd-main.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-amd.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-css-reset.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-emot.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-fullscreen.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-get-content.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-getJSON.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-lang.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-menus.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-mult.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-onblur.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-onchange.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-onfocus.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-paste.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-set-content.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-sperate.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-textarea.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/demo/test-uploadimg.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/favicon.ico create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/icomoon/Read Me.txt create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/icomoon/demo-files/demo.css create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/icomoon/demo-files/demo.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/icomoon/demo.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.eot create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.svg create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.ttf create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.woff create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/icomoon/selection.json create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/icomoon/style.css create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/index.html create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/pay.png create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/server/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/example/server/util.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/gulpfile.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/package.json create mode 100644 novel-admin/src/main/resources/static/wangEditor/release/fonts/w-e-icon.woff create mode 100644 novel-admin/src/main/resources/static/wangEditor/release/wangEditor.css create mode 100644 novel-admin/src/main/resources/static/wangEditor/release/wangEditor.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/release/wangEditor.min.css create mode 100644 novel-admin/src/main/resources/static/wangEditor/release/wangEditor.min.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/release/wangEditor.min.js.map create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/fonts/w-e-icon.woff create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/.babelrc create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/command/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/config.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/editor/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/editor/upload/progress.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/editor/upload/upload-img.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/backColor/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/bold/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/code/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/droplist.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/emoticon/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/foreColor/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/head/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/img/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/italic/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/justify/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/link/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/list/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/menu-list.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/panel.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/quote/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/redo/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/strikethrough/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/table/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/underline/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/undo/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/menus/video/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/selection/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/text/index.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/util/dom-core.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/util/paste-handle.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/util/poly-fill.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/util/replace-lang.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/js/util/util.js create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/less/common.less create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/less/droplist.less create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/less/icon.less create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/less/menus.less create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/less/panel.less create mode 100644 novel-admin/src/main/resources/static/wangEditor/src/less/text.less create mode 100644 sql/sql文件说明.txt diff --git a/README.md b/README.md index 1478977..a865287 100644 --- a/README.md +++ b/README.md @@ -66,9 +66,23 @@ novel-admin :平台后台管理系统源码(独立项目,按需安装) ![](./assets/crawl_config.png) - 4.其他功能开发中。。。 + 3.小说管理页面。 + ![](./assets/novel_list.png) + 4.小说发布页面。 + + ![](./assets/novel_pub.png) + + 5.小说章节发布页面 + + ![](./assets/chapter_pub.png) + + 6.小说章节管理页面。 + + ![](./assets/chapter_manager.png) + + #### 微信小程序截图 diff --git a/assets/chapter_manager.png b/assets/chapter_manager.png new file mode 100644 index 0000000000000000000000000000000000000000..80913cef773f64d924978cfdd7f3ac0ddb98998f GIT binary patch literal 94844 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
  • #ds;^dGE18u!rYg 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

    H?~-iV6`d`)!D+*W7m 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 XsHSC65EOF=_^B#uDm_!Y9`Jtv{PLmc literal 0 HcmV?d00001 diff --git a/assets/chapter_pub.png b/assets/chapter_pub.png new file mode 100644 index 0000000000000000000000000000000000000000..8b037c9525bc6536b7560902a64964c04253982d GIT binary patch literal 93257 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 z%0D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 literal 0 HcmV?d00001 diff --git a/novel-admin/src/main/resources/application.yml b/novel-admin/src/main/resources/application.yml index cd945a7..8c22c88 100644 --- a/novel-admin/src/main/resources/application.yml +++ b/novel-admin/src/main/resources/application.yml @@ -35,9 +35,9 @@ spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/books?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai - username: books - password: books + url: jdbc:mysql://127.0.0.1:3306/books?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + username: root + password: test123456 #password: initialSize: 1 minIdle: 3 diff --git a/novel-admin/src/main/resources/static/wangEditor/.eslintignore b/novel-admin/src/main/resources/static/wangEditor/.eslintignore new file mode 100644 index 0000000..c02d109 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/.eslintignore @@ -0,0 +1,2 @@ +src/js/util/ierange.js +src/js/util/poly-fill.js \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/.eslintrc.json b/novel-admin/src/main/resources/static/wangEditor/.eslintrc.json new file mode 100644 index 0000000..0148b38 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/.eslintrc.json @@ -0,0 +1,38 @@ +{ + "env": { + "browser": true, + "commonjs": true, + "es6": true + }, + "globals": { + "ENV": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "sourceType": "module" + }, + "rules": { + "no-console":0, + "indent": [ + "error", + 4 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single", + { + "allowTemplateLiterals": true + } + ], + "semi": [ + "error", + "never" + ], + "no-unused-vars": 0, + "no-debugger": 0 + } +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/.gitattributes b/novel-admin/src/main/resources/static/wangEditor/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/novel-admin/src/main/resources/static/wangEditor/.gitignore b/novel-admin/src/main/resources/static/wangEditor/.gitignore new file mode 100644 index 0000000..481571c --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/.gitignore @@ -0,0 +1,51 @@ + +#忽略 +**/node_modules/* +node_modules/* +npm-debug.log +example/upload-files + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# ========================= +# Operating System Files +# ========================= + +# OSX +# ========================= + +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear on external disk +.Spotlight-V100 +.Trashes + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk diff --git a/novel-admin/src/main/resources/static/wangEditor/.npmignore b/novel-admin/src/main/resources/static/wangEditor/.npmignore new file mode 100644 index 0000000..333dd25 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/.npmignore @@ -0,0 +1,5 @@ +node_modules/* +npm-debug.log +docs/* +src/* +example/* \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/ISSUE.md b/novel-admin/src/main/resources/static/wangEditor/ISSUE.md new file mode 100644 index 0000000..796cbee --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/ISSUE.md @@ -0,0 +1,157 @@ +# 问题记录 + +## 版本修复 + +### v3.0.1 + +- [done] 如何设置自动增加高度(补充文档) +- [done] src/js/editor/Bar 改为 Progress,仅供上传图片使用 +- [done] Panel 在右上角增加一个“关闭”按钮 +- [done] 显示页面 table、quote、code 等样式,说明一下 +- [done] 增加自定义上传回调函数,用以自定义返回图片的格式 +- [done] 上传附带的参数,也加入到 form-data 中一份 +- [done] 编辑器默认情况下,菜单栏不能点击,必须focus了编辑器求之后才能点击 +- [done] 点击菜单弹出panel之后,再点击编辑器区域其他地方,panel不消失 +- [done] 自定义filename,v2版本就有 +- [done] ff 中的 bug +- [done] ff 中粘贴图片和文字出现问题 https://github.com/wangfupeng1988/wangEditor/issues/609 +- [done] 火狐浏览器下,创建表格,编辑表格内容时,会出现两个控制点(有人提供了解决方案) +- [done] 配置最多上传的文件个数 +- [done] 连续给两段内容 添加有/无序列表时,样式会出问题,且其他内容找不到了,并且编辑器不处于编辑状态。 +- [done] onchange +- [done] IE11下面一直报错。并且表格无法正常使用 + +### v3.0.2 + +- [done] 用 onchange 完善 vue react 的 demo +- [done] 插入图片之后,光标移动到图片的前面,然后回车,图片消失,并且不能撤销 +- [done] 修复上传图片 customInsert 无效的bug +- [done] 编辑区域 z-index 可配置 +- [done] 上传图片不应该把状态码限制在 200,而是 2xx +- [done] editor.txt.html() 之后,没有定位光标位置 + +### v3.0.3 + +- [done] 粘贴图片在低版本的谷歌浏览器中无法使用,提示验证图片未通过,undefined不是图片。 +- [done] 动态赋值内容,会自动换行,因为给自动加了`


    ` +- [done] 不选中任何内容,点击“加粗”报错:Failed to execute 'setEnd' on 'Range' +- [done] toolbar 小图标的 z-index 可配置 + +### v3.0.4 + +- [done] 允许使用者通过`replace`实现多语言 +- [done] `_alert()`,可自定义配置提示框 +- [done] 支持用户自定义上传图片的事件,如用户要上传到七牛云、阿里云 + +### v3.0.5 + +- [done] 图片上传中,insertLinkImg 方法中,去掉 img.onload 之后再插入的逻辑吧,这样会打乱多个图片的顺序 +- [done] `` 标签重叠问题,两行文字都是`h2`,然后将第一行选中设置为`h1`,结果是 `

    测试1

    测试2` +- [done] 补充 ng 集成的示例 https://github.com/wangfupeng1988/wangEditor/issues/859 +- [done] 菜单不能折叠的说明,加入到文档中 +- [done] 上传图片 before 函数中,增加一个判断,可以让用户终止图片的上传 + +### v3.0.6 + +- [done] src/fonts 中的字体文件名改一下,用 icomoon 容易发生冲突 +- [done] 将禁用编辑器的操作完善到文档中 https://www.kancloud.cn/wangfupeng/wangeditor3/368562 +- [done] 开放表格中的粘贴功能(之前因不明问题而封闭) +- [done] 代码块中,光标定位到最后位置时,连续两次回车要跳出代码块 + +### v3.0.7 + +- [done] 紧急修复上一个版本导致的菜单图标不显示的 bug + +### v3.0.8 + +- [done] 修复 backColor 和 foreColor 代码文件名混淆的问题 +- [done] 修改 IE 中 “引用” 的功能 +- [done] 增加粘贴过滤样式的可配置 +- [done] 修复 IE 粘贴文字的问题 + +### v3.0.9 + +- [done] config 中,上传图片的 token 注视掉 +- [done] 将一些常见 API 开放,写到文档中 https://www.kancloud.cn/wangfupeng/wangeditor3/404586 +- [done] IE 火狐 插入多行代码有问题 +- [done] 粘贴时,在`

    `中,不能只粘贴纯文本,还得要图片 +- [done] 粘贴内容中,过滤掉``注释 +- [done] **支持上传七牛云存储** + +### v3.0.10 + +- [done] 支持插入网络图片的回调函数 +- [done] 插入链接时候的格式校验 +- [done] 支持拖拽上传 + +### v3.0.11 + +- [done] 如何用 textarea 创建编辑器,完善到文档中,许多人提问 +- [done] 修复`editor.customConfig.customUploadImg`不触发的 bug +- [done] 修复有序列表和无序列表切换时 onchange 不触发的 bug + +### v3.0.12 + +- [done] 增加 onfocus 和 onblur (感谢 [hold-baby](https://github.com/hold-baby) 提交的 [PR](https://github.com/wangfupeng1988/wangEditor/pull/1076)) +- [done] 上传的自定义参数`editor.customConfig.uploadImgParams`是否拼接到 url 中,支持可配置 +- [done] onchange 触发的延迟时间,支持可配置 + +### v3.0.13 + +- [done] 修复图片 选中/取消选中 时,触发 onchange 的问题 +- [done] 修复只通过 length 判断 onchange 是否触发的问题 +- [done] 增加插入网络图片的校验函数 +- [done] 增加自定义处理粘贴文本的事件 +- [done] 修复选中一个图片时点击删除键会误删除其他内容的 bug +- [done] 修复 window chrome 中“复制图片”然后粘贴图片,会粘贴为两张的 bug +- [done] 修复无法撤销“引用”的问题 + +### v3.0.14 + +- [done] 可以配置前景色、背景色 +- [done] 回车时无法从`

    ....

    `中跳出 +- [done] 增加获取 JSON 格式内容的 API + +### v3.0.15 + +- [done] 表情兼容图片和 emoji ,都可自定义配置 + +### v3.0.16 + +- [done] 修复粘贴图片的 bug +- [done] 修复`pasteTextHandle`执行两次的问题 +- [done] 修复插入链接时,文字和链接为空时,`linkCheck`不执行的 bug +- [done] 粘贴 html 时,过滤掉其中的`data-xxx`属性 +- [done] 修复中文输入法输入过程中出发 onchange 的问题,感谢 [github.com/CongAn](https://github.com/CongAn) PR +- [done] `editor.txt.html`和`editor.txt.text`中,替换`​`字符为空字符串 +- [done] 精确图片大小计算,将`maxSize / 1000 / 1000`改为`maxSize / 1024 / 1024` +- [done] 修复 droplist 类型菜单(颜色、背景色等)点击不准确的问题 + +### v3.0.17 + +- [done] 合并 pr [菜单和编辑区域分离 onfocus onblur 失效bug](https://github.com/wangfupeng1988/wangEditor/pull/1174) ,感谢 [hold-baby](https://github.com/hold-baby) 提供 pr +- [done] 使用`document.execCommand("styleWithCSS", null, true)`,这样设置字体颜色就会用 css 而不是用`` + + +### 近期计划解决 + +- 撤销的兼容性问题(会误伤其他编辑器或者 input textarea 等),考虑用 onchange 记录 undo 和 redo 的内容(但是得考虑直接修改 dom 的情况,如 quote code img list table 菜单) + - 列表撤销会删除一行?https://github.com/wangfupeng1988/wangEditor/issues/1131 + - 页面中有 input 等输入标签时,undo redo 会误伤 https://github.com/wangfupeng1988/wangEditor/issues/1024 + - 两个编辑器 undo 的问题 https://github.com/wangfupeng1988/wangEditor/issues/1010 + - list undo redo 有问题。选中几行,先设置有序列表,再设置无序列表,然后撤销,就能复现问题 +- 粘贴文字的样式问题(可暂时配置 `pasteTextHandle` 自行处理) + - 先输入文字,再粘贴 excel 表格,样式丢失 https://github.com/wangfupeng1988/wangEditor/issues/1000 + - IE 11 直接输入文字会空一行在第二行出现内容 https://github.com/wangfupeng1988/wangEditor/issues/919 + - windows 下 word excel 的粘贴,存在垃圾数据 + +## 待排期 + +- 调研 safari、IE 和ff中粘贴图片 https://github.com/wangfupeng1988/wangEditor/issues/831 +- 图片调整大小,表格调整的方式,是否用 toolbar 的方式? +- 删除掉`./release`之后,执行`npm run release`会报错,原因是`fonts`文件没拷贝全,就要去替换`css`中的字体文件为`base64`格式,导致找不到文件。 +- 先点击'B'再输入内容这种形式,前期先支持 webkit 和 IE,火狐的支持后面再加上 +- 图片压缩 canvas https://github.com/think2011/localResizeIMG +- github 徽章 https://github.com/EyreFree/GitHubBadgeIntroduction +- 将代码在进行拆分,做到“每个程序只做一件事”,不要出现过长的代码文件。例如 `src/js/command/index.js` 和 `src/js/selection/index.js` + diff --git a/novel-admin/src/main/resources/static/wangEditor/LICENSE b/novel-admin/src/main/resources/static/wangEditor/LICENSE new file mode 100644 index 0000000..5239660 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2017 王福朋 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/novel-admin/src/main/resources/static/wangEditor/README.md b/novel-admin/src/main/resources/static/wangEditor/README.md new file mode 100644 index 0000000..0ab9445 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/README.md @@ -0,0 +1,70 @@ + +# wangEditor + +## 介绍 + +**wangEditor** —— 轻量级 web 富文本编辑器,配置方便,使用简单。支持 IE10+ 浏览器。 + +- 官网:[www.wangEditor.com](http://www.wangeditor.com/) +- 文档:[www.kancloud.cn/wangfupeng/wangeditor3/332599](http://www.kancloud.cn/wangfupeng/wangeditor3/332599) +- 源码:[github.com/wangfupeng1988/wangEditor](https://github.com/wangfupeng1988/wangEditor) (欢迎 star) + +![图片](http://images2015.cnblogs.com/blog/138012/201705/138012-20170530202905633-1840158981.png) + +*查看 v2 版本的代码和文档点击[这里](https://github.com/wangfupeng1988/wangEditor/tree/v2)* + + +## 下载 + +- 直接下载:[https://github.com/wangfupeng1988/wangEditor/releases](https://github.com/wangfupeng1988/wangEditor/releases) +- 使用`npm`下载:`npm install wangeditor` (注意 `wangeditor` 全部是**小写字母**) +- 使用`bower`下载:`bower install wangEditor` (前提保证电脑已安装了`bower`) +- 使用CDN:[//unpkg.com/wangeditor/release/wangEditor.min.js](https://unpkg.com/wangeditor/release/wangEditor.min.js) + + +## 使用 + +```javascript +var E = window.wangEditor +var editor = new E('#div1') +editor.create() +``` + + +## 运行 demo + +- 下载源码 `git clone git@github.com:wangfupeng1988/wangEditor.git` +- 安装或者升级最新版本 node(最低`v6.x.x`) +- 进入目录,安装依赖包 `cd wangEditor && npm i` +- 安装包完成之后,windows 用户运行`npm run win-example`,Mac 用户运行`npm run example` +- 打开浏览器访问[localhost:3000/index.html](http://localhost:3000/index.html) +- 用于 React、vue 或者 angular 可查阅[文档](http://www.kancloud.cn/wangfupeng/wangeditor3/332599)中[其他](https://www.kancloud.cn/wangfupeng/wangeditor3/335783)章节中的相关介绍 + +## 交流 + +### QQ 群 + +以下 QQ 群欢迎加入交流问题(可能有些群已经满员) + +- 164999061 +- 281268320 + +### 提问 + +注意,作者只受理以下几种提问方式,其他方式直接忽略 + +- 直接在 [github issues](https://github.com/wangfupeng1988/wangEditor/issues) 提交问题 +- 去[知乎](https://www.zhihu.com/)提问,并邀请[作者](https://www.zhihu.com/people/wang-fu-peng-54/activities)来回答 +- 去[segmentfault](https://segmentfault.com)提问,并邀请[作者](https://segmentfault.com/u/wangfupeng1988)来回答 + +每次升级版本修复的问题记录在[这里](./ISSUE.md) + +## 关于作者 + +- 关注作者的博客 - 《[深入理解javascript原型和闭包系列](http://www.cnblogs.com/wangfupeng1988/p/4001284.html)》《[深入理解javascript异步系列](https://github.com/wangfupeng1988/js-async-tutorial)》《[CSS知多少](http://www.cnblogs.com/wangfupeng1988/p/4325007.html)》 +- 学习作者的教程 - 《[前端JS基础面试题](http://coding.imooc.com/class/115.html)》《[React.js模拟大众点评webapp](http://coding.imooc.com/class/99.html)》《[zepto设计与源码分析](http://www.imooc.com/learn/745)》《[用grunt搭建自动化的web前端开发环境](http://study.163.com/course/courseMain.htm?courseId=1103003)》《[json2.js源码解读](http://study.163.com/course/courseMain.htm?courseId=691008)》 + +如果你感觉有收获,欢迎给我打赏 ———— 以激励我更多输出优质开源内容 + +![图片](https://camo.githubusercontent.com/e1558b631931e0a1606c769a61f48770cc0ccb56/687474703a2f2f696d61676573323031352e636e626c6f67732e636f6d2f626c6f672f3133383031322f3230313730322f3133383031322d32303137303232383131323233373739382d313530373139363634332e706e67) + diff --git a/novel-admin/src/main/resources/static/wangEditor/bower.json b/novel-admin/src/main/resources/static/wangEditor/bower.json new file mode 100644 index 0000000..0c4ed0d --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/bower.json @@ -0,0 +1,20 @@ +{ + "name": "wangEditor", + "description": "wangEditor - 基于javascript和css开发的 web 富文本编辑器, 轻量、简洁、易用、开源免费", + "main": "release/wangEditor.js", + "authors": [ + "wangfupeng " + ], + "license": "MIT", + "keywords": [ + "wangEditor", + "web 富文本编辑器" + ], + "homepage": "https://github.com/wangfupeng1988/wangEditor", + "moduleType": [ + "amd", + "cmd", + "node" + ], + "private": true +} diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/dev/README.md b/novel-admin/src/main/resources/static/wangEditor/docs/dev/README.md new file mode 100644 index 0000000..473dbcb --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/dev/README.md @@ -0,0 +1,25 @@ +面向开发者的文档 + + +框架介绍 + +- 下载和运行 +- 目录结构介绍 +- `example`目录 +- `src`目录(`js`目录,`less`目录) +- `package.json` +- `gulpfile.js` + +如何提交 PR + + + +上线 + +- 修改`package.json`版本 +- 提交到github,并创建tag +- 提交到 npm +- 更新 .md 文档 +- 文档同步到 kancloud +- …… + diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/01-demo.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/01-demo.md new file mode 100644 index 0000000..b71612f --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/01-demo.md @@ -0,0 +1,41 @@ +# 简单的 demo + +## 下载 + +- 点击 [https://github.com/wangfupeng1988/wangEditor/releases](https://github.com/wangfupeng1988/wangEditor/releases) 下载最新版。进入`release`文件夹下找到`wangEditor.js`或者`wangEditor.min.js`即可 +- 使用CDN:[//unpkg.com/wangeditor/release/wangEditor.min.js](https://unpkg.com/wangeditor/release/wangEditor.min.js) +- 使用`bower`下载:`bower install wangEditor` (前提保证电脑已安装了`bower`) + +*PS:支持`npm`安装,请参见后面的章节* + +## 制作 demo + +编辑器效果如下。 + +![图片](https://camo.githubusercontent.com/f3d072718d8fcbbacf8cc80465a34cceffcf5b4a/687474703a2f2f696d61676573323031352e636e626c6f67732e636f6d2f626c6f672f3133383031322f3230313730352f3133383031322d32303137303533303230323930353633332d313834303135383938312e706e67) + +代码示例如下。**注意,以下代码中无需引用任何 CSS 文件!!!** + +```html + + + + + wangEditor demo + + +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + + + + +``` diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/02-use-module.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/02-use-module.md new file mode 100644 index 0000000..0356a68 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/02-use-module.md @@ -0,0 +1,49 @@ +# 使用模块定义 + +wangEditor 除了直接使用` + + +``` + +## CommonJS + +可以使用`npm install wangeditor`安装(注意,这里`wangeditor`全是**小写字母**) + +```javascript +// 引用 +var E = require('wangeditor') // 使用 npm 安装 +var E = require('/wangEditor.min.js') // 使用下载的源码 + +// 创建编辑器 +var editor = new E('#editor') +editor.create() +``` diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/03-sperate.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/03-sperate.md new file mode 100644 index 0000000..0fcd276 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/03-sperate.md @@ -0,0 +1,48 @@ +# 菜单和编辑区域分离 + +如果你想要像 知乎专栏、简书、石墨、网易云笔记 这些编辑页面一样,将编辑区域和菜单分离,也可以实现。 + +这样,菜单和编辑器区域就是使用者可自己控制的元素,可自定义样式。例如:将菜单`fixed`、编辑器区域高度自动增加等 + +## 代码示例 + +```html + + + + + wangEditor 菜单和编辑器区域分离 + + + +
    +
    +
    中间隔离带
    +
    +

    请输入内容

    +
    + + + + + +``` + +## 显示效果 + +从上面代码可以看出,菜单和编辑区域其实就是两个单独的`
    `,位置、尺寸都可以随便定义。 + +![](http://images2015.cnblogs.com/blog/138012/201705/138012-20170531224756289-7442240.png) + diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/04-multi.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/04-multi.md new file mode 100644 index 0000000..aee3540 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/01-getstart/04-multi.md @@ -0,0 +1,50 @@ +# 同一个页面创建多个编辑器 + +wangEditor 支持一个页面创建多个编辑器 + +## 代码示例 + +```html + + + + + wangEditor 一个页面多个编辑器 + + + +
    +
    +
    中间隔离带
    +
    +

    第一个 demo(菜单和编辑器区域分开)

    +
    + +
    +

    第二个 demo(常规)

    +
    + + + + + + +``` + diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/01-set-content.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/01-set-content.md new file mode 100644 index 0000000..7631f6f --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/01-set-content.md @@ -0,0 +1,46 @@ +# 设置内容 + +以下方式中,如果条件允许,尽量使用第一种方式,效率最高。 + +## html 初始化内容 + +直接将内容写到要创建编辑器的`
    `标签中 + +```html +
    +

    初始化的内容

    +

    初始化的内容

    +
    + + + +``` + +## js 设置内容 + +创建编辑器之后,使用`editor.txt.html(...)`设置编辑器内容 + +```html +
    +
    + + + +``` + +## 追加内容 + +创建编辑器之后,可使用`editor.txt.append('

    追加的内容

    ')`继续追加内容。 + +## 清空内容 + +可使用`editor.txt.clear()`清空编辑器内容 diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/02-get-content.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/02-get-content.md new file mode 100644 index 0000000..e21c277 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/02-get-content.md @@ -0,0 +1,80 @@ +# 读取内容 + +可以`html`和`text`的方式读取编辑器的内容。 + +```html +
    +

    欢迎使用 wangEditor 编辑器

    +
    + + + + + +``` + +需要注意的是:**从编辑器中获取的 html 代码是不包含任何样式的纯 html**,如果显示的时候需要对其中的`` `` `
    `等标签进行自定义样式(这样既可实现多皮肤功能),下面提供了编辑器中使用的样式供参考 + +```css +/* table 样式 */ +table { + border-top: 1px solid #ccc; + border-left: 1px solid #ccc; +} +table td, +table th { + border-bottom: 1px solid #ccc; + border-right: 1px solid #ccc; + padding: 3px 5px; +} +table th { + border-bottom: 2px solid #ccc; + text-align: center; +} + +/* blockquote 样式 */ +blockquote { + display: block; + border-left: 8px solid #d0e5f2; + padding: 5px 10px; + margin: 10px 0; + line-height: 1.4; + font-size: 100%; + background-color: #f1f1f1; +} + +/* code 样式 */ +code { + display: inline-block; + *display: inline; + *zoom: 1; + background-color: #f1f1f1; + border-radius: 3px; + padding: 3px 5px; + margin: 0 3px; +} +pre code { + display: block; +} + +/* ul ol 样式 */ +ul, ol { + margin: 10px 0 10px 20px; +} +``` + diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/03-use-textarea.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/03-use-textarea.md new file mode 100644 index 0000000..1707e13 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/03-use-textarea.md @@ -0,0 +1,25 @@ +# 使用 textarea + +wangEditor 从`v3`版本开始不支持 textarea ,但是可以通过`onchange`来实现 textarea 中提交富文本内容。 + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + + + +``` \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/04-get-json.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/04-get-json.md new file mode 100644 index 0000000..d623ac4 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/02-content/04-get-json.md @@ -0,0 +1,82 @@ +# 获取 JSON 格式的内容 + +可以通过`editor.txt.getJSON`获取 JSON 格式的编辑器的内容,`v3.0.14`开始支持,示例如下 + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    + +
    + + + + +``` + + +----- + +如果编辑器区域的 html 内容是如下: + +```html +

    欢迎使用 wangEditor 富文本编辑器

    + +``` + +那么获取的 JSON 格式就如下: + +```json +[ + { + "tag": "p", + "attrs": [], + "children": [ + "欢迎使用 ", + { + "tag": "b", + "attrs": [], + "children": [ + "wangEditor" + ] + }, + " 富文本编辑器" + ] + }, + { + "tag": "img", + "attrs": [ + { + "name": "src", + "value": "https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top_ca79a146.png" + }, + { + "name": "style", + "value": "max-width:100%;" + } + ], + "children": [] + }, + { + "tag": "p", + "attrs": [], + "children": [ + { + "tag": "br", + "attrs": [], + "children": [] + } + ] + } +] +``` \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/01-menu.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/01-menu.md new file mode 100644 index 0000000..bce6ba7 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/01-menu.md @@ -0,0 +1,52 @@ +# 自定义菜单 + +编辑器创建之前,可使用`editor.customConfig.menus`定义显示哪些菜单和菜单的顺序。**注意:v3 版本的菜单不支持换行折叠了(因为换行之后菜单栏是在太难看),如果菜单栏宽度不够,建议精简菜单项。** + +## 代码示例 + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + +``` + +## 默认菜单 + +编辑默认的菜单配置如下 + +```javascript +[ + 'head', // 标题 + 'bold', // 粗体 + 'italic', // 斜体 + 'underline', // 下划线 + 'strikeThrough', // 删除线 + 'foreColor', // 文字颜色 + 'backColor', // 背景颜色 + 'link', // 插入链接 + 'list', // 列表 + 'justify', // 对齐方式 + 'quote', // 引用 + 'emoticon', // 表情 + 'image', // 插入图片 + 'table', // 表格 + 'video', // 插入视频 + 'code', // 插入代码 + 'undo', // 撤销 + 'redo' // 重复 +] +``` diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/02-debug.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/02-debug.md new file mode 100644 index 0000000..e94d7a4 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/02-debug.md @@ -0,0 +1,21 @@ +# 定义 debug 模式 + +可通过`editor.customConfig.debug = true`配置`debug`模式,`debug`模式下,有 JS 错误会以`throw Error`方式提示出来。默认值为`false`,即不会抛出异常。 + +但是,在实际开发中不建议直接定义为`true`或者`false`,可通过 url 参数进行干预,示例如下: + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + +``` + diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/03-onchange.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/03-onchange.md new file mode 100644 index 0000000..296091c --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/03-onchange.md @@ -0,0 +1,40 @@ +# 配置 onchange 函数 + +配置`onchange`函数之后,用户操作(鼠标点击、键盘打字等)导致的内容变化之后,会自动触发`onchange`函数执行。 + +但是,**用户自己使用 JS 修改了`div1`的`innerHTML`,不会自动触发`onchange`函数**,此时你可以通过执行`editor.change()`来手动触发`onchange`函数的执行。 + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + +

    手动触发 onchange 函数执行

    + + + + +``` + +----- + +另外,如果需要修改 onchange 触发的延迟时间(onchange 会在用户无任何操作的 xxx 毫秒之后被触发),可通过如下配置 + +```js +// 自定义 onchange 触发的延迟时间,默认为 200 ms +editor.customConfig.onchangeTimeout = 1000 // 单位 ms +``` diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/04-z-index.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/04-z-index.md new file mode 100644 index 0000000..129bf1c --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/04-z-index.md @@ -0,0 +1,19 @@ +# 配置编辑区域的 z-index + +编辑区域的`z-index`默认为`10000`,可自定义修改,代码配置如下。需改之后,编辑区域和菜单的`z-index`会同时生效。 + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + +``` + + diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/05-lang.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/05-lang.md new file mode 100644 index 0000000..01900fe --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/05-lang.md @@ -0,0 +1,30 @@ +# 多语言 + +可以通过`lang`配置项配置多语言,其实就是通过该配置项中的配置,将编辑器显示的文字,替换成你需要的文字。 + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + +``` + +**注意,以上代码中的`链接文字`要写在`链接`前面,`上传图片`要写在`上传`前面,因为前者包含后者。如果不这样做,可能会出现替换不全的问题,切记切记!** diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/06-paste.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/06-paste.md new file mode 100644 index 0000000..a7126c8 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/06-paste.md @@ -0,0 +1,33 @@ +# 粘贴文本 + +**注意,以下配置暂时对 IE 无效。IE 暂时使用系统自带的粘贴功能,没有样式过滤!** + +## 关闭粘贴样式的过滤 + +当从其他网页复制文本内容粘贴到编辑器中,编辑器会默认过滤掉复制文本中自带的样式,目的是让粘贴后的文本变得更加简洁和轻量。用户可通过`editor.customConfig.pasteFilterStyle = false`手动关闭掉粘贴样式的过滤。 + +## 自定义处理粘贴的文本内容 + +使用者可通过`editor.customConfig.pasteTextHandle`对粘贴的文本内容进行自定义的过滤、处理等操作,然后返回处理之后的文本内容。编辑器最终会粘贴用户处理之后并且返回的的内容。 + +## 示例代码 + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + +``` \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/07-linkImgCallback.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/07-linkImgCallback.md new file mode 100644 index 0000000..52169e8 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/07-linkImgCallback.md @@ -0,0 +1,12 @@ +# 插入网络图片的回调 + +插入网络图片时,可通过如下配置获取到图片的信息。`v3.0.10`开始支持。 + +```js +var E = window.wangEditor +var editor = new E('#div1') +editor.customConfig.linkImgCallback = function (url) { + console.log(url) // url 即插入图片的地址 +} +editor.create() +``` diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/08-linkCheck.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/08-linkCheck.md new file mode 100644 index 0000000..b581438 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/08-linkCheck.md @@ -0,0 +1,16 @@ +# 插入链接的校验 + +插入链接时,可通过如下配置对文字和链接进行校验。`v3.0.10`开始支持。 + +```js +var E = window.wangEditor +var editor = new E('#div1') +editor.customConfig.linkCheck = function (text, link) { + console.log(text) // 插入的文字 + console.log(link) // 插入的链接 + + return true // 返回 true 表示校验成功 + // return '验证失败' // 返回字符串,即校验失败的提示信息 +} +editor.create() +``` \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/09-onfocus.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/09-onfocus.md new file mode 100644 index 0000000..7caba6b --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/09-onfocus.md @@ -0,0 +1,19 @@ +# 配置 onfocus 函数 + +配置`onfocus`函数之后,用户点击富文本区域会触发`onfocus`函数执行。 + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + +``` diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/10-onblur.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/10-onblur.md new file mode 100644 index 0000000..f7544bc --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/10-onblur.md @@ -0,0 +1,20 @@ +# 配置 onblur 函数 + +配置`onblur`函数之后,如果当前有手动获取焦点的富文本并且鼠标点击富文本以外的区域,则会触发`onblur`函数执行。 + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + +``` diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/11-linkImgCheck.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/11-linkImgCheck.md new file mode 100644 index 0000000..efb3320 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/11-linkImgCheck.md @@ -0,0 +1,15 @@ +# 插入网络图片的校验 + +插入网络图片时,可对图片地址做自定义校验。`v3.0.13`开始支持。 + +```js +var E = window.wangEditor +var editor = new E('#div1') +editor.customConfig.linkImgCheck = function (src) { + console.log(src) // 图片的链接 + + return true // 返回 true 表示校验成功 + // return '验证失败' // 返回字符串,即校验失败的提示信息 +} +editor.create() +``` \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/12-colors.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/12-colors.md new file mode 100644 index 0000000..e86e57d --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/12-colors.md @@ -0,0 +1,29 @@ +# 配置字体颜色、背景色 + +编辑器的字体颜色和背景色,可以通过`editor.customConfig.colors`自定义配置 + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + +``` \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/13-emot.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/13-emot.md new file mode 100644 index 0000000..5363834 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/03-config/13-emot.md @@ -0,0 +1,48 @@ +# 配置表情 + +`v3.0.15`开始支持配置表情,支持图片格式和 emoji ,可通过`editor.customConfig.emotions`配置。**注意看代码示例中的注释:** + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + +``` + +温馨提示:需要表情图片可以去 https://api.weibo.com/2/emotions.json?source=1362404091 和 http://yuncode.net/code/c_524ba520e58ce30 逛一逛,或者自己搜索。 diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/01-show-tab.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/01-show-tab.md new file mode 100644 index 0000000..8261950 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/01-show-tab.md @@ -0,0 +1,52 @@ +# 隐藏/显示 tab + +## 显示“上传图片”tab + +默认情况下,编辑器不会显示“上传图片”的tab,因为你还没有配置上传图片的信息。 + +![](http://images2015.cnblogs.com/blog/138012/201706/138012-20170601204308039-691571074.png) + +参考一下示例显示“上传图片”tab + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + +``` + +显示效果 + +![](http://images2015.cnblogs.com/blog/138012/201706/138012-20170601204504524-830243744.png) + +## 隐藏“网络图片”tab + +默认情况下,“网络图片”tab是一直存在的。如果不需要,可以参考一下示例来隐藏它。 + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + +``` diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/02-base64.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/02-base64.md new file mode 100644 index 0000000..3a2d71a --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/02-base64.md @@ -0,0 +1,23 @@ +# 使用 base64 保存图片 + +如果需要使用 base64 编码直接将图片插入到内容中,可参考一下示例配置 + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + +``` + +示例效果如下 + +![](http://images2015.cnblogs.com/blog/138012/201706/138012-20170601204759258-1412289899.png) + + diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/03-upload-config.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/03-upload-config.md new file mode 100644 index 0000000..6720ce6 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/03-upload-config.md @@ -0,0 +1,188 @@ +# 上传图片 & 配置 + +将图片上传到服务器上的配置方式 + +## 上传图片 + +参考如下代码 + +```html +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + +``` + +其中`/upload`是上传图片的服务器端接口,接口返回的**数据格式**如下(**实际返回数据时,不要加任何注释!!!**) + +```json +{ + // errno 即错误代码,0 表示没有错误。 + // 如果有错误,errno != 0,可通过下文中的监听函数 fail 拿到该错误码进行自定义处理 + "errno": 0, + + // data 是一个数组,返回若干图片的线上地址 + "data": [ + "图片1地址", + "图片2地址", + "……" + ] +} +``` + +## 限制图片大小 + +默认限制图片大小是 5M + +```javascript +// 将图片大小限制为 3M +editor.customConfig.uploadImgMaxSize = 3 * 1024 * 1024 +``` + +## 限制一次最多能传几张图片 + +默认为 10000 张(即不限制),需要限制可自己配置 + +```javascript +// 限制一次最多上传 5 张图片 +editor.customConfig.uploadImgMaxLength = 5 +``` + +## 自定义上传参数 + +上传图片时可自定义传递一些参数,例如传递验证的`token`等。参数会被添加到`formdata`中。 + +```javascript +editor.customConfig.uploadImgParams = { + token: 'abcdef12345' // 属性值会自动进行 encode ,此处无需 encode +} +``` + +如果**还需要**将参数拼接到 url 中,可再加上如下配置 + +``` +editor.customConfig.uploadImgParamsWithUrl = true +``` + +## 自定义 fileName + +上传图片时,可自定义`filename`,即在使用`formdata.append(name, file)`添加图片文件时,自定义第一个参数。 + +```javascript +editor.customConfig.uploadFileName = 'yourFileName' +``` + +## 自定义 header + +上传图片时刻自定义设置 header + +```javascript +editor.customConfig.uploadImgHeaders = { + 'Accept': 'text/x-json' +} +``` + +## withCredentials(跨域传递 cookie) + +跨域上传中如果需要传递 cookie 需设置 withCredentials + +```javascript +editor.customConfig.withCredentials = true +``` + +## 自定义 timeout 时间 + +默认的 timeout 时间是 10 秒钟 + +```javascript +// 将 timeout 时间改为 3s +editor.customConfig.uploadImgTimeout = 3000 +``` + +## 监听函数 + +可使用监听函数在上传图片的不同阶段做相应处理 + +```javascript +editor.customConfig.uploadImgHooks = { + before: function (xhr, editor, files) { + // 图片上传之前触发 + // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,files 是选择的图片文件 + + // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传 + // return { + // prevent: true, + // msg: '放弃上传' + // } + }, + success: function (xhr, editor, result) { + // 图片上传并返回结果,图片插入成功之后触发 + // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,result 是服务器端返回的结果 + }, + fail: function (xhr, editor, result) { + // 图片上传并返回结果,但图片插入错误时触发 + // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象,result 是服务器端返回的结果 + }, + error: function (xhr, editor) { + // 图片上传出错时触发 + // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象 + }, + timeout: function (xhr, editor) { + // 图片上传超时时触发 + // xhr 是 XMLHttpRequst 对象,editor 是编辑器对象 + }, + + // 如果服务器端返回的不是 {errno:0, data: [...]} 这种格式,可使用该配置 + // (但是,服务器端返回的必须是一个 JSON 格式字符串!!!否则会报错) + customInsert: function (insertImg, result, editor) { + // 图片上传并返回结果,自定义插入图片的事件(而不是编辑器自动插入图片!!!) + // insertImg 是插入图片的函数,editor 是编辑器对象,result 是服务器端返回的结果 + + // 举例:假如上传图片成功后,服务器端返回的是 {url:'....'} 这种格式,即可这样插入图片: + var url = result.url + insertImg(url) + + // result 必须是一个 JSON 格式字符串!!!否则报错 + } +} +``` + +## 自定义提示方法 + +上传图片的错误提示默认使用`alert`弹出,你也可以自定义用户体验更好的提示方式 + +```javascript +editor.customConfig.customAlert = function (info) { + // info 是需要提示的内容 + alert('自定义提示:' + info) +} +``` + +## 自定义上传图片事件 + +如果想完全自己控制图片上传的过程,可以使用如下代码 + +```javascript +editor.customConfig.customUploadImg = function (files, insert) { + // files 是 input 中选中的文件列表 + // insert 是获取图片 url 后,插入到编辑器的方法 + + // 上传代码返回结果之后,将图片插入到编辑器中 + insert(imgUrl) +} +``` diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/04-qiniu.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/04-qiniu.md new file mode 100644 index 0000000..e5c2ca4 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/04-qiniu.md @@ -0,0 +1,115 @@ +# 上传到七牛云存储 + +完整的 demo 请参见 https://github.com/wangfupeng1988/js-sdk ,可下载下来本地运行 demo + +> 注意:配置了上传七牛云存储之后,**无法再使用插入网络图片** + +核心代码如下: + +```js +var E = window.wangEditor +var editor = new E('#div1') +// 允许上传到七牛云存储 +editor.customConfig.qiniu = true +editor.create() + +// 初始化七牛上传 +uploadInit() + +// 初始化七牛上传的方法 +function uploadInit() { + // 获取相关 DOM 节点的 ID + var btnId = editor.imgMenuId; + var containerId = editor.toolbarElemId; + var textElemId = editor.textElemId; + + // 创建上传对象 + var uploader = Qiniu.uploader({ + runtimes: 'html5,flash,html4', //上传模式,依次退化 + browse_button: btnId, //上传选择的点选按钮,**必需** + uptoken_url: '/uptoken', + //Ajax请求upToken的Url,**强烈建议设置**(服务端提供) + // uptoken : '', + //若未指定uptoken_url,则必须指定 uptoken ,uptoken由其他程序生成 + // unique_names: true, + // 默认 false,key为文件名。若开启该选项,SDK会为每个文件自动生成key(文件名) + // save_key: true, + // 默认 false。若在服务端生成uptoken的上传策略中指定了 `sava_key`,则开启,SDK在前端将不对key进行任何处理 + domain: 'http://7xrjl5.com1.z0.glb.clouddn.com/', + //bucket 域名,下载资源时用到,**必需** + container: containerId, //上传区域DOM ID,默认是browser_button的父元素, + max_file_size: '100mb', //最大文件体积限制 + flash_swf_url: '../js/plupload/Moxie.swf', //引入flash,相对路径 + filters: { + mime_types: [ + //只允许上传图片文件 (注意,extensions中,逗号后面不要加空格) + { title: "图片文件", extensions: "jpg,gif,png,bmp" } + ] + }, + max_retries: 3, //上传失败最大重试次数 + dragdrop: true, //开启可拖曳上传 + drop_element: textElemId, //拖曳上传区域元素的ID,拖曳文件或文件夹后可触发上传 + chunk_size: '4mb', //分块上传时,每片的体积 + auto_start: true, //选择文件后自动上传,若关闭需要自己绑定事件触发上传 + init: { + 'FilesAdded': function(up, files) { + plupload.each(files, function(file) { + // 文件添加进队列后,处理相关的事情 + printLog('on FilesAdded'); + }); + }, + 'BeforeUpload': function(up, file) { + // 每个文件上传前,处理相关的事情 + printLog('on BeforeUpload'); + }, + 'UploadProgress': function(up, file) { + // 显示进度 + printLog('进度 ' + file.percent) + }, + 'FileUploaded': function(up, file, info) { + // 每个文件上传成功后,处理相关的事情 + // 其中 info 是文件上传成功后,服务端返回的json,形式如 + // { + // "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98", + // "key": "gogopher.jpg" + // } + printLog(info); + // 参考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html + + var domain = up.getOption('domain'); + var res = $.parseJSON(info); + var sourceLink = domain + res.key; //获取上传成功后的文件的Url + + printLog(sourceLink); + + // 插入图片到editor + editor.cmd.do('insertHtml', '') + }, + 'Error': function(up, err, errTip) { + //上传出错时,处理相关的事情 + printLog('on Error'); + }, + 'UploadComplete': function() { + //队列文件处理完毕后,处理相关的事情 + printLog('on UploadComplete'); + } + // Key 函数如果有需要自行配置,无特殊需要请注释 + //, + // 'Key': function(up, file) { + // // 若想在前端对每个文件的key进行个性化处理,可以配置该函数 + // // 该配置必须要在 unique_names: false , save_key: false 时才生效 + // var key = ""; + // // do something with key here + // return key + // } + } + // domain 为七牛空间(bucket)对应的域名,选择某个空间后,可通过"空间设置->基本设置->域名设置"查看获取 + // uploader 为一个plupload对象,继承了所有plupload的方法,参考http://plupload.com/docs + }); +} + +// 封装 console.log 函数 +function printLog(title, info) { + window.console && console.log(title, info); +} +``` \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/01-全屏-预览-查看源码.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/01-全屏-预览-查看源码.md new file mode 100644 index 0000000..27588c8 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/01-全屏-预览-查看源码.md @@ -0,0 +1,10 @@ +# 全屏 & 预览 & 查看源码 + +## 全屏 + +虽然 wangEditor 没有内置全屏功能,但是你可以通过简单的代码来搞定,作者已经做了一个demo来示范。通过运行 demo(文档一开始就介绍了)即可看到该示例页面,直接查看页面源代码即可。 + +## 预览 & 查看源码 + +如果需要预览和查看源码的功能,也需要跟全屏功能一样,自己定义按钮。点击按钮时通过`editor.txt.html()`获取编辑器内容,然后自定义实现预览和查看源码功能。 + diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/02-上传附件.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/02-上传附件.md new file mode 100644 index 0000000..1f3cc88 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/02-上传附件.md @@ -0,0 +1,24 @@ +# 关于上传附件 + +**有用户问到编辑器能否有上传附件的功能?我的建议是不要把附件做到内容中。** + +原因很简单,如果将附件上传之后再插入到富文本内容中,其实就是一个链接的形式。如下图: + +![](http://box.kancloud.cn/2016-02-19_56c718ec6f9bf.png) + +而用户在用编辑器编辑文本时,操作是非常随意多样的,他把这个链接删了,你服务器要想实时删除上传的附件文件,是难监控到的。 + +还有,用户如果要上传很多个附件,也是很难管理的,还是因为富文本的内容变化多样,用户可以随便在什么地方插入附件,而且形式和链接一样。 + +------- + +反过来,我们想一下平时用附件和编辑器最多的产品是什么——是邮箱。邮箱如何处理附件的,大家应该很清楚。它把文本内容和附件分开,这样附件就可以很轻松、明了的进行管理,绝对不会和编辑内容的链接产生混淆。 + +![](http://box.kancloud.cn/2016-02-19_56c718ec83f7e.png) + +你能看到的所有的邮箱产品,几乎都是这样设计的。 + +------- + +因此,在你提问编辑器能否上传附件这个问题的时候,可以想一下能否参照邮箱的实现来设计? + diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/03-markdown.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/03-markdown.md new file mode 100644 index 0000000..c723347 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/03-markdown.md @@ -0,0 +1,12 @@ +# 关于 markdown + +**好多使用者问到,wangEditor编辑器能否集成markdown?——答案是:富文本编辑器无法和markdown集成到一起。** + +----- + + +你可以参考 [简书](http://www.jianshu.com/) 的实现方式,简书中编辑器也无法实现富文本和`markdown`的自由切换。要么使用富文本编写文章,要么使用`markdown`编写文章,不能公用。 + +本质上,富文本编辑器和`markdown`编辑器是两回事儿。 + + diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/04-xss.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/04-xss.md new file mode 100644 index 0000000..286337f --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/04-xss.md @@ -0,0 +1,23 @@ +# 预防 XSS 攻击 + +> 术业有专攻 + +要想在前端预防 xss 攻击,还得依赖于其他工具,例如[xss.js](http://jsxss.com/zh/index.html)(如果打不开页面,就从百度搜一下) + +代码示例如下 + +```html + + + +``` + diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/05-react.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/05-react.md new file mode 100644 index 0000000..8dcc2d4 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/05-react.md @@ -0,0 +1,7 @@ +# 用于 React + +如果需要将 wangEditor 用于 React 中,可参见如下示例 + +- 下载源码 `git clone git@github.com:wangfupeng1988/wangEditor.git` +- 进入 React 示例目录 `cd wangEditor/example/demo/in-react/`,查看`src/App.js`即可 +- 也可以运行`npm install && npm start`查看在 React 中的效果(`http://localhost:3000/`) diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/06-vue.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/06-vue.md new file mode 100644 index 0000000..47e167a --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/06-vue.md @@ -0,0 +1,7 @@ +# 用于 Vue + +如果需要将 wangEditor 用于 Vue 中,可参见如下示例 + +- 下载源码 `git clone git@github.com:wangfupeng1988/wangEditor.git` +- 进入 vue 示例目录 `cd wangEditor/example/demo/in-vue/`,查看`src/components/Editor.vue`即可 +- 也可以运行`npm install && npm run dev`查看在 vue 中的效果(`http://localhost:8080/`) diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/07-ng.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/07-ng.md new file mode 100644 index 0000000..1d59afc --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/07-ng.md @@ -0,0 +1,3 @@ +# 用于 Angular + +感谢 [@fengnovo](https://github.com/fengnovo) 提供了一个 angular2 的兼容示例,可供参考 https://github.com/fengnovo/wangEditor/tree/master/example/demo/in-ng2 diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/08-api.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/08-api.md new file mode 100644 index 0000000..e8b4f6d --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/05-other/08-api.md @@ -0,0 +1,27 @@ +# 常用 API + +## 属性 + +- 获取编辑器的唯一标识 `editor.id` +- 获取编辑区域 DOM 节点 `editor.$textElem[0]` +- 获取菜单栏 DOM 节点 `editor.$toolbarElem[0]` +- 获取编辑器配置信息 `editor.config` +- 获取编辑区域 DOM 节点 ID `editor.textElemId` +- 获取菜单栏 DOM 节点 ID `editor.toolbarElemId` +- 获取菜单栏中“图片”菜单的 DOM 节点 ID `editor.imgMenuId` + +## 方法 + +### 选取操作 + +- 获取选中的文字 `editor.selection.getSelectionText()` +- 获取选取所在的 DOM 节点 `editor.selection.getSelectionContainerElem()[0]` + - 开始节点 `editor.selection.getSelectionStartElem()[0]` + - 结束节点 `editor.selection.getSelectionEndElem()[0]` +- 折叠选取 `editor.selection.collapseRange()` +- 更多可参见[源码中](https://github.com/wangfupeng1988/wangEditor/blob/master/src/js/selection/index.js)定义的方法 + +### 编辑内容操作 + +- 插入 HTML `editor.cmd.do('insertHTML', '

    ...

    ')` +- 可通过`editor.cmd.do(name, value)`来执行`document.execCommand(name, false, value)`的操作 \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/docs/usage/README.md b/novel-admin/src/main/resources/static/wangEditor/docs/usage/README.md new file mode 100644 index 0000000..4c801e6 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/docs/usage/README.md @@ -0,0 +1,3 @@ +同步[../../README.md](../../README.md)的内容 + +将所有文档跟新到 www.kancloud.cn/wangfupeng/wangeditor3/332599 中 diff --git a/novel-admin/src/main/resources/static/wangEditor/example/README.md b/novel-admin/src/main/resources/static/wangEditor/example/README.md new file mode 100644 index 0000000..6e17ca0 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/README.md @@ -0,0 +1 @@ +wangEditor demo diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/package.json b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/package.json new file mode 100644 index 0000000..054d5cd --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/package.json @@ -0,0 +1,19 @@ +{ + "name": "wangeditor-in-react", + "version": "0.1.0", + "private": true, + "dependencies": { + "react": "^15.5.4", + "react-dom": "^15.5.4", + "wangeditor": ">=3.0.0" + }, + "devDependencies": { + "react-scripts": "1.0.7" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test --env=jsdom", + "eject": "react-scripts eject" + } +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/public/favicon.ico b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5c125de5d897c1ff5692a656485b3216123dcd89 GIT binary patch literal 24838 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 + + + + + + + + + + React App + + + +
    + + + diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/public/manifest.json b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/public/manifest.json new file mode 100644 index 0000000..be607e4 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/public/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "192x192", + "type": "image/png" + } + ], + "start_url": "./index.html", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/App.css b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/App.css new file mode 100644 index 0000000..15adfdc --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/App.css @@ -0,0 +1,24 @@ +.App { + text-align: center; +} + +.App-logo { + animation: App-logo-spin infinite 20s linear; + height: 80px; +} + +.App-header { + background-color: #222; + height: 150px; + padding: 20px; + color: white; +} + +.App-intro { + font-size: large; +} + +@keyframes App-logo-spin { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/App.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/App.js new file mode 100644 index 0000000..95b21fb --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/App.js @@ -0,0 +1,48 @@ +import React, { Component } from 'react'; +import logo from './logo.svg'; +import './App.css'; +import E from 'wangeditor' + +class App extends Component { + constructor(props, context) { + super(props, context); + this.state = { + editorContent: '' + } + } + render() { + return ( +
    +
    + logo +

    Welcome to React

    +
    +

    + To get started, edit src/App.js and save to reload. +

    + + {/* 将生成编辑器 */} +
    +
    + + +
    + ); + } + componentDidMount() { + const elem = this.refs.editorElem + const editor = new E(elem) + // 使用 onchange 函数监听内容的变化,并实时更新到 state 中 + editor.customConfig.onchange = html => { + this.setState({ + editorContent: html + }) + } + editor.create() + } + clickHandle() { + alert(this.state.editorContent) + } +} + +export default App; diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/App.test.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/App.test.js new file mode 100644 index 0000000..b84af98 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/App.test.js @@ -0,0 +1,8 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; + +it('renders without crashing', () => { + const div = document.createElement('div'); + ReactDOM.render(, div); +}); diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/index.css b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/index.css new file mode 100644 index 0000000..b4cc725 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/index.css @@ -0,0 +1,5 @@ +body { + margin: 0; + padding: 0; + font-family: sans-serif; +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/index.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/index.js new file mode 100644 index 0000000..53c7688 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/index.js @@ -0,0 +1,8 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import App from './App'; +import registerServiceWorker from './registerServiceWorker'; +import './index.css'; + +ReactDOM.render(, document.getElementById('root')); +registerServiceWorker(); diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/logo.svg b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/logo.svg new file mode 100644 index 0000000..6b60c10 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/registerServiceWorker.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/registerServiceWorker.js new file mode 100644 index 0000000..9966897 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-react/src/registerServiceWorker.js @@ -0,0 +1,51 @@ +// In production, we register a service worker to serve assets from local cache. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on the "N+1" visit to a page, since previously +// cached resources are updated in the background. + +// To learn more about the benefits of this model, read https://goo.gl/KwvDNy. +// This link also includes instructions on opting out of this behavior. + +export default function register() { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the old content will have been purged and + // the fresh content will have been added to the cache. + // It's the perfect time to display a "New content is + // available; please refresh." message in your web app. + console.log('New content is available; please refresh.'); + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + } + } + }; + }; + }) + .catch(error => { + console.error('Error during service worker registration:', error); + }); + }); + } +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready.then(registration => { + registration.unregister(); + }); + } +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/.babelrc b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/.babelrc new file mode 100644 index 0000000..13f0e47 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/.babelrc @@ -0,0 +1,14 @@ +{ + "presets": [ + ["env", { "modules": false }], + "stage-2" + ], + "plugins": ["transform-runtime"], + "comments": false, + "env": { + "test": { + "presets": ["env", "stage-2"], + "plugins": [ "istanbul" ] + } + } +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/.editorconfig b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/.editorconfig new file mode 100644 index 0000000..9d08a1a --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/.postcssrc.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/.postcssrc.js new file mode 100644 index 0000000..ea9a5ab --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/.postcssrc.js @@ -0,0 +1,8 @@ +// https://github.com/michael-ciniawsky/postcss-load-config + +module.exports = { + "plugins": { + // to edit target browsers: use "browserlist" field in package.json + "autoprefixer": {} + } +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/build.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/build.js new file mode 100644 index 0000000..6b8add1 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/build.js @@ -0,0 +1,35 @@ +require('./check-versions')() + +process.env.NODE_ENV = 'production' + +var ora = require('ora') +var rm = require('rimraf') +var path = require('path') +var chalk = require('chalk') +var webpack = require('webpack') +var config = require('../config') +var webpackConfig = require('./webpack.prod.conf') + +var spinner = ora('building for production...') +spinner.start() + +rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { + if (err) throw err + webpack(webpackConfig, function (err, stats) { + spinner.stop() + if (err) throw err + process.stdout.write(stats.toString({ + colors: true, + modules: false, + children: false, + chunks: false, + chunkModules: false + }) + '\n\n') + + console.log(chalk.cyan(' Build complete.\n')) + console.log(chalk.yellow( + ' Tip: built files are meant to be served over an HTTP server.\n' + + ' Opening index.html over file:// won\'t work.\n' + )) + }) +}) diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/check-versions.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/check-versions.js new file mode 100644 index 0000000..100f3a0 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/check-versions.js @@ -0,0 +1,48 @@ +var chalk = require('chalk') +var semver = require('semver') +var packageConfig = require('../package.json') +var shell = require('shelljs') +function exec (cmd) { + return require('child_process').execSync(cmd).toString().trim() +} + +var versionRequirements = [ + { + name: 'node', + currentVersion: semver.clean(process.version), + versionRequirement: packageConfig.engines.node + }, +] + +if (shell.which('npm')) { + versionRequirements.push({ + name: 'npm', + currentVersion: exec('npm --version'), + versionRequirement: packageConfig.engines.npm + }) +} + +module.exports = function () { + var warnings = [] + for (var i = 0; i < versionRequirements.length; i++) { + var mod = versionRequirements[i] + if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { + warnings.push(mod.name + ': ' + + chalk.red(mod.currentVersion) + ' should be ' + + chalk.green(mod.versionRequirement) + ) + } + } + + if (warnings.length) { + console.log('') + console.log(chalk.yellow('To use this template, you must update following to modules:')) + console.log() + for (var i = 0; i < warnings.length; i++) { + var warning = warnings[i] + console.log(' ' + warning) + } + console.log() + process.exit(1) + } +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-client.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-client.js new file mode 100644 index 0000000..18aa1e2 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-client.js @@ -0,0 +1,9 @@ +/* eslint-disable */ +require('eventsource-polyfill') +var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') + +hotClient.subscribe(function (event) { + if (event.action === 'reload') { + window.location.reload() + } +}) diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-server.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-server.js new file mode 100644 index 0000000..782dc6f --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-server.js @@ -0,0 +1,89 @@ +require('./check-versions')() + +var config = require('../config') +if (!process.env.NODE_ENV) { + process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) +} + +var opn = require('opn') +var path = require('path') +var express = require('express') +var webpack = require('webpack') +var proxyMiddleware = require('http-proxy-middleware') +var webpackConfig = require('./webpack.dev.conf') + +// default port where dev server listens for incoming traffic +var port = process.env.PORT || config.dev.port +// automatically open browser, if not set will be false +var autoOpenBrowser = !!config.dev.autoOpenBrowser +// Define HTTP proxies to your custom API backend +// https://github.com/chimurai/http-proxy-middleware +var proxyTable = config.dev.proxyTable + +var app = express() +var compiler = webpack(webpackConfig) + +var devMiddleware = require('webpack-dev-middleware')(compiler, { + publicPath: webpackConfig.output.publicPath, + quiet: true +}) + +var hotMiddleware = require('webpack-hot-middleware')(compiler, { + log: () => {} +}) +// force page reload when html-webpack-plugin template changes +compiler.plugin('compilation', function (compilation) { + compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { + hotMiddleware.publish({ action: 'reload' }) + cb() + }) +}) + +// proxy api requests +Object.keys(proxyTable).forEach(function (context) { + var options = proxyTable[context] + if (typeof options === 'string') { + options = { target: options } + } + app.use(proxyMiddleware(options.filter || context, options)) +}) + +// handle fallback for HTML5 history API +app.use(require('connect-history-api-fallback')()) + +// serve webpack bundle output +app.use(devMiddleware) + +// enable hot-reload and state-preserving +// compilation error display +app.use(hotMiddleware) + +// serve pure static assets +var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) +app.use(staticPath, express.static('./static')) + +var uri = 'http://localhost:' + port + +var _resolve +var readyPromise = new Promise(resolve => { + _resolve = resolve +}) + +console.log('> Starting dev server...') +devMiddleware.waitUntilValid(() => { + console.log('> Listening at ' + uri + '\n') + // when env is testing, don't need open it + if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { + opn(uri) + } + _resolve() +}) + +var server = app.listen(port) + +module.exports = { + ready: readyPromise, + close: () => { + server.close() + } +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/utils.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/utils.js new file mode 100644 index 0000000..b1d54b4 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/utils.js @@ -0,0 +1,71 @@ +var path = require('path') +var config = require('../config') +var ExtractTextPlugin = require('extract-text-webpack-plugin') + +exports.assetsPath = function (_path) { + var assetsSubDirectory = process.env.NODE_ENV === 'production' + ? config.build.assetsSubDirectory + : config.dev.assetsSubDirectory + return path.posix.join(assetsSubDirectory, _path) +} + +exports.cssLoaders = function (options) { + options = options || {} + + var cssLoader = { + loader: 'css-loader', + options: { + minimize: process.env.NODE_ENV === 'production', + sourceMap: options.sourceMap + } + } + + // generate loader string to be used with extract text plugin + function generateLoaders (loader, loaderOptions) { + var loaders = [cssLoader] + if (loader) { + loaders.push({ + loader: loader + '-loader', + options: Object.assign({}, loaderOptions, { + sourceMap: options.sourceMap + }) + }) + } + + // Extract CSS when that option is specified + // (which is the case during production build) + if (options.extract) { + return ExtractTextPlugin.extract({ + use: loaders, + fallback: 'vue-style-loader' + }) + } else { + return ['vue-style-loader'].concat(loaders) + } + } + + // https://vue-loader.vuejs.org/en/configurations/extract-css.html + return { + css: generateLoaders(), + postcss: generateLoaders(), + less: generateLoaders('less'), + sass: generateLoaders('sass', { indentedSyntax: true }), + scss: generateLoaders('sass'), + stylus: generateLoaders('stylus'), + styl: generateLoaders('stylus') + } +} + +// Generate loaders for standalone style files (outside of .vue) +exports.styleLoaders = function (options) { + var output = [] + var loaders = exports.cssLoaders(options) + for (var extension in loaders) { + var loader = loaders[extension] + output.push({ + test: new RegExp('\\.' + extension + '$'), + use: loader + }) + } + return output +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/vue-loader.conf.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/vue-loader.conf.js new file mode 100644 index 0000000..7aee79b --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/vue-loader.conf.js @@ -0,0 +1,12 @@ +var utils = require('./utils') +var config = require('../config') +var isProduction = process.env.NODE_ENV === 'production' + +module.exports = { + loaders: utils.cssLoaders({ + sourceMap: isProduction + ? config.build.productionSourceMap + : config.dev.cssSourceMap, + extract: isProduction + }) +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.base.conf.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.base.conf.js new file mode 100644 index 0000000..daa3589 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.base.conf.js @@ -0,0 +1,58 @@ +var path = require('path') +var utils = require('./utils') +var config = require('../config') +var vueLoaderConfig = require('./vue-loader.conf') + +function resolve (dir) { + return path.join(__dirname, '..', dir) +} + +module.exports = { + entry: { + app: './src/main.js' + }, + output: { + path: config.build.assetsRoot, + filename: '[name].js', + publicPath: process.env.NODE_ENV === 'production' + ? config.build.assetsPublicPath + : config.dev.assetsPublicPath + }, + resolve: { + extensions: ['.js', '.vue', '.json'], + alias: { + 'vue$': 'vue/dist/vue.esm.js', + '@': resolve('src') + } + }, + module: { + rules: [ + { + test: /\.vue$/, + loader: 'vue-loader', + options: vueLoaderConfig + }, + { + test: /\.js$/, + loader: 'babel-loader', + include: [resolve('src'), resolve('test')] + }, + { + test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: utils.assetsPath('img/[name].[hash:7].[ext]') + } + }, + { + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: utils.assetsPath('fonts/[name].[hash:7].[ext]') + } + } + ] + } +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.dev.conf.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.dev.conf.js new file mode 100644 index 0000000..5470402 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.dev.conf.js @@ -0,0 +1,35 @@ +var utils = require('./utils') +var webpack = require('webpack') +var config = require('../config') +var merge = require('webpack-merge') +var baseWebpackConfig = require('./webpack.base.conf') +var HtmlWebpackPlugin = require('html-webpack-plugin') +var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') + +// add hot-reload related code to entry chunks +Object.keys(baseWebpackConfig.entry).forEach(function (name) { + baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) +}) + +module.exports = merge(baseWebpackConfig, { + module: { + rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) + }, + // cheap-module-eval-source-map is faster for development + devtool: '#cheap-module-eval-source-map', + plugins: [ + new webpack.DefinePlugin({ + 'process.env': config.dev.env + }), + // https://github.com/glenjamin/webpack-hot-middleware#installation--usage + new webpack.HotModuleReplacementPlugin(), + new webpack.NoEmitOnErrorsPlugin(), + // https://github.com/ampedandwired/html-webpack-plugin + new HtmlWebpackPlugin({ + filename: 'index.html', + template: 'index.html', + inject: true + }), + new FriendlyErrorsPlugin() + ] +}) diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.prod.conf.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.prod.conf.js new file mode 100644 index 0000000..da44b65 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.prod.conf.js @@ -0,0 +1,120 @@ +var path = require('path') +var utils = require('./utils') +var webpack = require('webpack') +var config = require('../config') +var merge = require('webpack-merge') +var baseWebpackConfig = require('./webpack.base.conf') +var CopyWebpackPlugin = require('copy-webpack-plugin') +var HtmlWebpackPlugin = require('html-webpack-plugin') +var ExtractTextPlugin = require('extract-text-webpack-plugin') +var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') + +var env = config.build.env + +var webpackConfig = merge(baseWebpackConfig, { + module: { + rules: utils.styleLoaders({ + sourceMap: config.build.productionSourceMap, + extract: true + }) + }, + devtool: config.build.productionSourceMap ? '#source-map' : false, + output: { + path: config.build.assetsRoot, + filename: utils.assetsPath('js/[name].[chunkhash].js'), + chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') + }, + plugins: [ + // http://vuejs.github.io/vue-loader/en/workflow/production.html + new webpack.DefinePlugin({ + 'process.env': env + }), + new webpack.optimize.UglifyJsPlugin({ + compress: { + warnings: false + }, + sourceMap: true + }), + // extract css into its own file + new ExtractTextPlugin({ + filename: utils.assetsPath('css/[name].[contenthash].css') + }), + // Compress extracted CSS. We are using this plugin so that possible + // duplicated CSS from different components can be deduped. + new OptimizeCSSPlugin({ + cssProcessorOptions: { + safe: true + } + }), + // generate dist index.html with correct asset hash for caching. + // you can customize output by editing /index.html + // see https://github.com/ampedandwired/html-webpack-plugin + new HtmlWebpackPlugin({ + filename: config.build.index, + template: 'index.html', + inject: true, + minify: { + removeComments: true, + collapseWhitespace: true, + removeAttributeQuotes: true + // more options: + // https://github.com/kangax/html-minifier#options-quick-reference + }, + // necessary to consistently work with multiple chunks via CommonsChunkPlugin + chunksSortMode: 'dependency' + }), + // split vendor js into its own file + new webpack.optimize.CommonsChunkPlugin({ + name: 'vendor', + minChunks: function (module, count) { + // any required modules inside node_modules are extracted to vendor + return ( + module.resource && + /\.js$/.test(module.resource) && + module.resource.indexOf( + path.join(__dirname, '../node_modules') + ) === 0 + ) + } + }), + // extract webpack runtime and module manifest to its own file in order to + // prevent vendor hash from being updated whenever app bundle is updated + new webpack.optimize.CommonsChunkPlugin({ + name: 'manifest', + chunks: ['vendor'] + }), + // copy custom static assets + new CopyWebpackPlugin([ + { + from: path.resolve(__dirname, '../static'), + to: config.build.assetsSubDirectory, + ignore: ['.*'] + } + ]) + ] +}) + +if (config.build.productionGzip) { + var CompressionWebpackPlugin = require('compression-webpack-plugin') + + webpackConfig.plugins.push( + new CompressionWebpackPlugin({ + asset: '[path].gz[query]', + algorithm: 'gzip', + test: new RegExp( + '\\.(' + + config.build.productionGzipExtensions.join('|') + + ')$' + ), + threshold: 10240, + minRatio: 0.8 + }) + ) +} + +if (config.build.bundleAnalyzerReport) { + var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin + webpackConfig.plugins.push(new BundleAnalyzerPlugin()) +} + +module.exports = webpackConfig diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/config/dev.env.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/config/dev.env.js new file mode 100644 index 0000000..efead7c --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/config/dev.env.js @@ -0,0 +1,6 @@ +var merge = require('webpack-merge') +var prodEnv = require('./prod.env') + +module.exports = merge(prodEnv, { + NODE_ENV: '"development"' +}) diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/config/index.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/config/index.js new file mode 100644 index 0000000..196da1f --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/config/index.js @@ -0,0 +1,38 @@ +// see http://vuejs-templates.github.io/webpack for documentation. +var path = require('path') + +module.exports = { + build: { + env: require('./prod.env'), + index: path.resolve(__dirname, '../dist/index.html'), + assetsRoot: path.resolve(__dirname, '../dist'), + assetsSubDirectory: 'static', + assetsPublicPath: '/', + productionSourceMap: true, + // Gzip off by default as many popular static hosts such as + // Surge or Netlify already gzip all static assets for you. + // Before setting to `true`, make sure to: + // npm install --save-dev compression-webpack-plugin + productionGzip: false, + productionGzipExtensions: ['js', 'css'], + // Run the build command with an extra argument to + // View the bundle analyzer report after build finishes: + // `npm run build --report` + // Set to `true` or `false` to always turn it on or off + bundleAnalyzerReport: process.env.npm_config_report + }, + dev: { + env: require('./dev.env'), + port: 8080, + autoOpenBrowser: true, + assetsSubDirectory: 'static', + assetsPublicPath: '/', + proxyTable: {}, + // CSS Sourcemaps off by default because relative paths are "buggy" + // with this option, according to the CSS-Loader README + // (https://github.com/webpack/css-loader#sourcemaps) + // In our experience, they generally work as expected, + // just be aware of this issue when enabling this option. + cssSourceMap: false + } +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/config/prod.env.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/config/prod.env.js new file mode 100644 index 0000000..773d263 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/config/prod.env.js @@ -0,0 +1,3 @@ +module.exports = { + NODE_ENV: '"production"' +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/index.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/index.html new file mode 100644 index 0000000..47ae14a --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/index.html @@ -0,0 +1,11 @@ + + + + + wangeditor-in-vue + + +
    + + + diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/package.json b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/package.json new file mode 100644 index 0000000..80cf68f --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/package.json @@ -0,0 +1,60 @@ +{ + "name": "wangeditor-in-vue", + "version": "1.0.0", + "description": "A Vue.js project", + "author": "git ", + "private": true, + "scripts": { + "dev": "node build/dev-server.js", + "start": "node build/dev-server.js", + "build": "node build/build.js" + }, + "dependencies": { + "vue": "^2.3.3", + "wangeditor": ">=3.0.0" + }, + "devDependencies": { + "autoprefixer": "^6.7.2", + "babel-core": "^6.22.1", + "babel-loader": "^6.2.10", + "babel-plugin-transform-runtime": "^6.22.0", + "babel-preset-env": "^1.3.2", + "babel-preset-stage-2": "^6.22.0", + "babel-register": "^6.22.0", + "chalk": "^1.1.3", + "connect-history-api-fallback": "^1.3.0", + "copy-webpack-plugin": "^4.0.1", + "css-loader": "^0.28.0", + "eventsource-polyfill": "^0.9.6", + "express": "^4.14.1", + "extract-text-webpack-plugin": "^2.0.0", + "file-loader": "^0.11.1", + "friendly-errors-webpack-plugin": "^1.1.3", + "html-webpack-plugin": "^2.28.0", + "http-proxy-middleware": "^0.17.3", + "webpack-bundle-analyzer": "^2.2.1", + "semver": "^5.3.0", + "shelljs": "^0.7.6", + "opn": "^4.0.2", + "optimize-css-assets-webpack-plugin": "^1.3.0", + "ora": "^1.2.0", + "rimraf": "^2.6.0", + "url-loader": "^0.5.8", + "vue-loader": "^12.1.0", + "vue-style-loader": "^3.0.1", + "vue-template-compiler": "^2.3.3", + "webpack": "^2.6.1", + "webpack-dev-middleware": "^1.10.0", + "webpack-hot-middleware": "^2.18.0", + "webpack-merge": "^4.1.0" + }, + "engines": { + "node": ">= 4.0.0", + "npm": ">= 3.0.0" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not ie <= 8" + ] +} diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/App.vue b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/App.vue new file mode 100644 index 0000000..27d15ff --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/App.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/assets/logo.png b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d2503fc2a44b5053b0837ebea6e87a2d339a43 GIT binary patch literal 6849 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 +
    +
    + +
    + + + + + diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Hello.vue b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Hello.vue new file mode 100644 index 0000000..2d80539 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Hello.vue @@ -0,0 +1,53 @@ + + + + + + diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/main.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/main.js new file mode 100644 index 0000000..7b7fec7 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/src/main.js @@ -0,0 +1,13 @@ +// The Vue build version to load with the `import` command +// (runtime-only or standalone) has been set in webpack.base.conf with an alias. +import Vue from 'vue' +import App from './App' + +Vue.config.productionTip = false + +/* eslint-disable no-new */ +new Vue({ + el: '#app', + template: '', + components: { App } +}) diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/static/.gitkeep b/novel-admin/src/main/resources/static/wangEditor/example/demo/in-vue/static/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-amd-main.js b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-amd-main.js new file mode 100644 index 0000000..444b2da --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-amd-main.js @@ -0,0 +1,4 @@ +require(['/wangEditor.min.js'], function (E) { + var editor2 = new E('#div3') + editor2.create() +}) \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-amd.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-amd.html new file mode 100644 index 0000000..6a3d666 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-amd.html @@ -0,0 +1,15 @@ + + + + + wangEditor 使用 AMD 加载 + + +

    wangEditor 使用 AMD 加载

    +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-css-reset.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-css-reset.html new file mode 100644 index 0000000..c01a10d --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-css-reset.html @@ -0,0 +1,66 @@ + + + + + wangEditor css reset + + + +

    wangEditor css reset

    +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-emot.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-emot.html new file mode 100644 index 0000000..02d8f7f --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-emot.html @@ -0,0 +1,84 @@ + + + + + wangEditor 配置表情 + + +

    wangEditor 配置表情

    +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-fullscreen.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-fullscreen.html new file mode 100644 index 0000000..cbbaa01 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-fullscreen.html @@ -0,0 +1,114 @@ + + + + + wangEditor 全屏 + + + +

    wangEditor 全屏

    + + +
    + +
    +
    +
    + +
    +
    + +
    +

    wangEditor 本身不包含“全屏”功能,不过可以很简单的开发出来

    +

    注意,全屏模式与max-height有冲突,尽量避免一起使用

    +
    +
    + + +
    + + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-get-content.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-get-content.html new file mode 100644 index 0000000..012c81c --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-get-content.html @@ -0,0 +1,34 @@ + + + + + wangEditor 获取内容 + + +

    wangEditor 获取内容

    +
    +

    欢迎使用 wangEditor 富文本编辑器

    +

    欢迎使用 wangEditor 富文本编辑器

    +
    +
    + + +
    + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-getJSON.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-getJSON.html new file mode 100644 index 0000000..68cd155 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-getJSON.html @@ -0,0 +1,30 @@ + + + + + wangEditor demo getJSON + + +

    获取 JSON

    +
    +

    欢迎使用 wangEditor 富文本编辑器

    + +
    + + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-lang.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-lang.html new file mode 100644 index 0000000..6c77826 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-lang.html @@ -0,0 +1,31 @@ + + + + + wangEditor lang test + + +

    多语言测试

    +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-menus.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-menus.html new file mode 100644 index 0000000..4afd45f --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-menus.html @@ -0,0 +1,26 @@ + + + + + wangEditor 菜单配置 + + +

    wangEditor 自定义菜单配置

    +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-mult.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-mult.html new file mode 100644 index 0000000..bd6f7e1 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-mult.html @@ -0,0 +1,44 @@ + + + + + wangEditor 一个页面多个编辑器 + + + + +

    第一个 demo(菜单和编辑器区域分开)

    +
    +
    +
    中间隔离带
    +
    +

    请输入内容

    +
    + +

    第二个 demo(常规)

    +
    +

    请输入内容

    +
    + + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-onblur.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-onblur.html new file mode 100644 index 0000000..a6644bf --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-onblur.html @@ -0,0 +1,23 @@ + + + + + wangEditor test onblur + + +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-onchange.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-onchange.html new file mode 100644 index 0000000..231de10 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-onchange.html @@ -0,0 +1,24 @@ + + + + + wangEditor test onchange + + +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-onfocus.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-onfocus.html new file mode 100644 index 0000000..7d95de0 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-onfocus.html @@ -0,0 +1,22 @@ + + + + + wangEditor test onfocus + + +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-paste.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-paste.html new file mode 100644 index 0000000..a3a7477 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-paste.html @@ -0,0 +1,25 @@ + + + + + wangEditor paste test + + +

    wangEditor paste test

    +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-set-content.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-set-content.html new file mode 100644 index 0000000..42eff3b --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-set-content.html @@ -0,0 +1,35 @@ + + + + + wangEditor 设置内容 + + +

    wangEditor 设置内容

    +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    +
    + + +
    + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-sperate.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-sperate.html new file mode 100644 index 0000000..0d0b857 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-sperate.html @@ -0,0 +1,35 @@ + + + + + wangEditor 菜单和编辑器区域分离 + + + + +

    wangEditor 菜单和编辑器区域分离

    +
    +
    +
    中间隔离带
    +
    +

    请输入内容

    +
    + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-textarea.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-textarea.html new file mode 100644 index 0000000..8e41119 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-textarea.html @@ -0,0 +1,33 @@ + + + + + wangEditor demo textarea + + +

    编辑器

    +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + +
    + +

    textarea

    + + + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/demo/test-uploadimg.html b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-uploadimg.html new file mode 100644 index 0000000..97246ca --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/demo/test-uploadimg.html @@ -0,0 +1,58 @@ + + + + + wangEditor 上传图片 + + +

    wangEditor 上传图片到服务器

    +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + +

    wangEditor 以base64保存图片文件

    +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + +

    wangEditor 自定义上传图片

    +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/favicon.ico b/novel-admin/src/main/resources/static/wangEditor/example/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6075775de436a980a4302ef7aef74de01c41b0c0 GIT binary patch literal 4286 zcmc&&O>B%&6n$7UQqdt=@z*v&Q?bzKLSoUO#6~PE5H>bMLPQ%IVu3WFL~PjjU9e$c zfk;F|M@mb`Y=jVGM%$!C!VrRx);ZI6larS>W7DtNoZk2D-+AwS_uX%%&P~8?eZAvf zcO~UqjdQLMfXb}^s4xD&HobBbqYCHF@12$fJ_32*-8g|<_tqZ#>?|C^uxf~-xLn|oXB z`M3t|{{_H0cm>P`lHUI+aOnQ4F`p02^xQ3w4}p8YBj6%13HaB#=D_DJ&;u}*Ia+}* zF60mGR}o|DGr261Cyd(_iMteuE62~e{}Rb_B9bTM?~25|hmJL`zUBD0OAgk=4?ky} zOa?TMju*rB$NS!deCx+NzYT!;mgB$e<9GOG(=^ zZ@UoK_#XM}ZEqlLZ883R-j8Q^9Z(LAkBNPW*x9QXLu?hj#q%zhoqd=37(e@*`R(z3 zmV>fM?8n7^+Uwaf*gG_a`ESCwPUhS{KL?s!@2SPByd%CAlY@@;K>c*g-fX^4FkT7RKFCkd z{sG|mXlyuM3;P403*ft!bsMW!jpN$R0(`dTfc3yvfSk%dfO$2bu}O@1#&#acKLmZO zzmD}9T1)T`LLa-sW6dA-AAA1ewg0gH7=J(ZZ#{af_pJGvOPoLX8vwpH_#Bb|KZ}+6 z{=q)NXV3?*7Lq^?dBg8t{G4a^VZ0@|vjBTw9 + + + + IcoMoon Demo + + + + + +
    +

    Font Name: icomoon (Glyphs: 27)

    +
    +
    +

    Grid Size: 14

    +
    +
    + + + + icon-close +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-remove +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-times +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-trash-o +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-terminal +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-header +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-paint-brush +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    +

    Grid Size: 16

    +
    +
    + + + + icon-pencil2 +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-image +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-play +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-location +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-undo +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-redo +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-quotes-left +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-list-numbered +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-list2 +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-upload2 +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-link +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-happy +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-cancel-circle +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-bold +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-underline +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-italic +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-strikethrough +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-page-break +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-table2 +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-paragraph-left +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-paragraph-center +
    +
    + + +
    +
    + liga: + +
    +
    +
    +
    + + + + icon-paragraph-right +
    +
    + + +
    +
    + liga: + +
    +
    +
    + + +
    +

    Font Test Drive

    + + +
      +
    +
    + +
    +

    Generated by IcoMoon

    +
    + + + + diff --git a/novel-admin/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.eot b/novel-admin/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.eot new file mode 100644 index 0000000000000000000000000000000000000000..0d144fdfa4924f18e0bb237e911d7b4847e3f4fe GIT binary patch literal 5656 zcma)AeQX@X6`$F;+r2yA*WTUUIX-{f-THhsPW*K~UqT#vLxNKi$2d-62$0rJ;v`0i zoj498DQZ`!t*YjarW7GiRmBo5LTxEU1p=i)TNSlP%^&@vNEJ}wfEv|7LP-P#fp6X4 z?A|43Ck~yxnR)Z(&6_uG-n=(Al~F=w6hbHw$kIf~S;{d3Lrd|T)=utg?e8w{Bg9W8 z$UZVfjv!BwNf7wSFc~KY$q90pjFD+zqGSY^X>uI2oF+lqNegMSXqS%$l22Gcbizp6 zy*pYv0-*pG_K(P;`;Lqq)&3ej4WeqaKRq~h{3z-mAp$aS9Xx#Mz)$2C{*87e(2pG& zAKUNy@O20gdJ_Fzhk%gYVjrM=0qy!jM`lhQl^A%3uAu$c;i-LN?bo^-goF>HtsNOV zd6e8iUPb#iXeTDej*LHZkNYdMF`oY5=+yBU$cd!v^ex1eY2EW_m(7R|j2(;=TVW>4vGnBQ^OgK+f%F;APC93Px z&`j-IY<i0iO#N(UclX4Zq2}%V8>>duk-dl4 zJ^aR*p|W`rIQv|W`4(ufN5J;Qq@*m_N+y+Sw8mYvZK)7vGIS<)mg-Nb!w>DxaV}I} zcX;oJI$E`{e|s|*p}W)S&u0|KP~10)LtRTYV3y(%)KrU*%kZg`lqmVB)I*aicU^25 z-k_=*hFf?|`%XW*M?0~`9h6)lp?~ErQX0YQ#GYqQ_vvjduCPa-D|Qef60LZq7?I$y zWl}?$2uUZEq+HAySctSY6T9zrZhjbY%5PnX% zLnzfFPaoU3@z~QNrMh|7_5szIADQayof^qI)q(B1-bu&fX`ZQGg0ylLoE4ibXTq78 zZm*JvY?>KqZy%Z26iF!F&x@YC==0a|wZa*ctu@Onz+NAB;LFVXwYC7q-;%C@+b9lT zGYzY<4GM2nCmQ?q`>+Q*Nh zsZ+vhejZA5#;tggmEq(q4=DrW2Li^OhaB7!2!_sM2ag$gyt2B#v9Z6pGHw#?ahPt7 zc25khSu;4%O=r!~+O@IDc)T*Uw$_~0u@r)WfeL<&P(`I#9N{cgbMOSFp_`gcHS{7J zYZ?NweOj$J1kVlnT8ee^6KEa4To#cZfgf=njsVw=7AT5~X`f+5MF;K&oG2P|kdKvU zu5IvpBI83DLc4hnS0OE5TK9q#vs`JR{vYLgH;Vd#`Nv0xmCuJCxud=IPut0)|pr8i} zT99$Dpa&sTDG9h%QQW7fzCifhiQgm$@jwnccHfX81}W+wM+TC}Ntx!7N)1isD73F4 z^SENg7vT90Lz@a%6ks3RV=f{hS(Q*kELb&f@rxDH3y@ng3|J8oA`2JaFmP)!AP@Y? zP4W=#yZKj&XuP)EcPVU@+&K(G(-9$H7brQa75T-A{8+KJ_!%XJ#!4JlML>NcHT>Rg-gOEep5{I0HLN@sbrP7o%YgTdiUrVv8rdAo=9+cSPm+k8-{DSYIs@NjuN6+Yp>CZ`}cch$Q@XW^r^ z6qeU2B%C5&fOAwqC=V#3kQ{zgBK_>V@FJ8H>_E z^S`3xa@L6A#fzd?<8(?H_XOZ5Ao6stuL%v}^E3A9f0Gfr=QRi;HJ zw{6P(5BnEv;P~^Yq2uNi<7UD+us^NJc2uqE$gc9aB)7-sm4luT zl@#+kQK-=!3j6)u3Q6+EbGfR@_V!AjB)Q!c-eABTq5>5dEXNg+eLfE-s^Ua#?UjBI zdAz=0&=sLlfS&bBG~$WH0>Jw*-KtgX?W+KLJU(Agc10p?S@zo;h=Am+2*_?XrHnbf zo9DbvUjJjePsD^SS1921SwvpH>~cc_=Jeg2q<lh#3t?M8ASz~Q&)tdwPyT8%dnWIONO@%LF4VhLd3=DjGOIKGi z8I&F2NH7?Z-7!}n6jqd)n%deXc0OL!Sf4eY>4RPL_qWllb%mFj>*{=sr?(AM#amkM zymK=P_$w+ro@hE=CCi=)heLpETIt>PYwm9ax<4Zo4y*mn*dM;j0lQv2@1V>;lb*e`%_-IoU`)jJM0OQ3i9oR@UB826H-|^)ehOhgq8RA`|u|k$_j3 z{o=#pa0LH22gsA;UFyLd?kIg*5QQP(G;^@i>}`kO=yD7?o^$-i+2*|8sXKq={6u_C zydr(*>akW+M_#sL`Sn$ouh36^TU;}R&*7(>C+>eni!hJ=T}9Xd_(TzQ;_jssVG;PP zMc4zM^&^6}B!?RqKYDCf0DQ0rGr${)umkX8Mc9eQ$V3qqfgdiy9=zK8Vq)Lak*TT4 zr7xNz63`ZYw^?!oOpcw@v>8N>Z literal 0 HcmV?d00001 diff --git a/novel-admin/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.svg b/novel-admin/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.svg new file mode 100644 index 0000000..21be016 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.svg @@ -0,0 +1,37 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.ttf b/novel-admin/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..80be9ad27182d62f562b8181714691ace353524a GIT binary patch literal 5492 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 literal 0 HcmV?d00001 diff --git a/novel-admin/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.woff b/novel-admin/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.woff new file mode 100644 index 0000000000000000000000000000000000000000..fa64c4d86cef0bd3aadc1906f25b2c0ce6bf96da GIT binary patch literal 5568 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 QY+$Fm0gCU~ + + + + wangEditor demo list + + + +
    +

    可访问 wangEditor 官网 了解更多内容

    +
    +

    欢迎使用 wangEditor 富文本编辑器

    +
    + +

    wangEditor demo list(demo页面直接查看网页源代码即可)

    + + +

    其他链接

    +
    + +
    + +

    向我捐赠

    + +
    + + + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/pay.png b/novel-admin/src/main/resources/static/wangEditor/example/pay.png new file mode 100644 index 0000000000000000000000000000000000000000..98efb8d042abe0e0dc1e3db9581ce383304f572f GIT binary patch literal 95517 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 literal 0 HcmV?d00001 diff --git a/novel-admin/src/main/resources/static/wangEditor/example/server/index.js b/novel-admin/src/main/resources/static/wangEditor/example/server/index.js new file mode 100644 index 0000000..28d8a60 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/server/index.js @@ -0,0 +1,88 @@ +const fs = require('fs') +const path = require('path') +const formidable = require('formidable') +const util = require('./util.js') + +const koa = require('koa') +const app = koa() + +// 捕获错误 +const onerror = require('koa-onerror') +onerror(app) + +// post body 解析 +const bodyParser = require('koa-bodyparser') +app.use(bodyParser()) + +// 静态文件服务,针对 html js css fonts 文件 +const staticCache = require('koa-static-cache') +function setStaticCache() { + const exampleDir = path.join(__dirname, '..', '..', 'example') + const releaseDir = path.join(__dirname, '..', '..', 'release') + app.use(staticCache(exampleDir)) + app.use(staticCache(releaseDir)) +} +setStaticCache() + +// 配置路由 +const router = require('koa-router')() + +// 保存上传的文件 +function saveFiles(req) { + return new Promise((resolve, reject) => { + const imgLinks = [] + const form = new formidable.IncomingForm() + form.parse(req, function (err, fields, files) { + if (err) { + reject('formidable, form.parse err', err.stack) + } + // 存储图片的文件夹 + const storePath = path.resolve(__dirname, '..', 'upload-files') + if (!fs.existsSync(storePath)) { + fs.mkdirSync(storePath) + } + + // 遍历所有上传来的图片 + util.objForEach(files, (name, file) => { + // 图片临时位置 + const tempFilePath = file.path + // 图片名称和路径 + const fileName = file.name + const fullFileName = path.join(storePath, fileName) + // 将临时文件保存为正式文件 + fs.renameSync(tempFilePath, fullFileName) + // 存储链接 + imgLinks.push('/upload-files/' + fileName) + }) + + // 重新设置静态文件缓存 + setStaticCache() + + // 返回结果 + resolve({ + errno: 0, + data: imgLinks + }) + }) + }) +} + +// 上传图片 +router.post('/upload-img', function* () { + const ctx = this + const req = ctx.req + const res = ctx.res + + // 获取数据 + const data = yield saveFiles(req) + + // 返回结果 + this.body = JSON.stringify(data) +}) +app.use(router.routes()).use(router.allowedMethods()); + +// 启动服务 +app.listen(3000) +console.log('listening on port %s', 3000) + +module.exports = app \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/example/server/util.js b/novel-admin/src/main/resources/static/wangEditor/example/server/util.js new file mode 100644 index 0000000..62477f2 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/example/server/util.js @@ -0,0 +1,14 @@ +module.exports = { + // 遍历对象 + objForEach: function (obj, fn) { + let key, result + for (key in obj) { + if (obj.hasOwnProperty(key)) { + result = fn.call(obj, key, obj[key]) + if (result === false) { + break + } + } + } + } +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/wangEditor/gulpfile.js b/novel-admin/src/main/resources/static/wangEditor/gulpfile.js new file mode 100644 index 0000000..171e7e5 --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/gulpfile.js @@ -0,0 +1,122 @@ +const path = require('path') +const fs = require('fs') +const gulp = require('gulp') +const rollup = require('rollup') +const uglify = require('gulp-uglify') +const sourcemaps = require('gulp-sourcemaps') +const rename = require('gulp-rename') +const less = require('gulp-less') +const concat = require('gulp-concat') +const cssmin = require('gulp-cssmin') +const eslint = require('rollup-plugin-eslint') +const postcss = require('gulp-postcss') +const autoprefixer = require('autoprefixer') +const cssgrace = require('cssgrace') +const resolve = require('rollup-plugin-node-resolve') +const babel = require('rollup-plugin-babel') +const gulpReplace = require('gulp-replace') + +// 拷贝 fonts 文件 +gulp.task('copy-fonts', () => { + gulp.src('./src/fonts/*') + .pipe(gulp.dest('./release/fonts')) +}) + +// 处理 css +gulp.task('css', () => { + gulp.src('./src/less/**/*.less') + .pipe(less()) + // 产出的未压缩的文件名 + .pipe(concat('wangEditor.css')) + // 配置 postcss + .pipe(postcss([ + autoprefixer, + cssgrace + ])) + // 将 css 引用的字体文件转换为 base64 格式 + .pipe(gulpReplace( /'fonts\/w-e-icon\..+?'/gm, function (fontFile) { + // fontFile 例如 'fonts/w-e-icon.eot?paxlku' + fontFile = fontFile.slice(0, -1).slice(1) + fontFile = fontFile.split('?')[0] + var ext = fontFile.split('.')[1] + // 读取文件内容,转换为 base64 格式 + var filePath = path.resolve(__dirname, 'release', fontFile) + var content = fs.readFileSync(filePath) + var base64 = content.toString('base64') + // 返回 + return 'data:application/x-font-' + ext + ';charset=utf-8;base64,' + base64 + })) + // 产出文件的位置 + .pipe(gulp.dest('./release')) + // 产出的压缩后的文件名 + .pipe(rename('wangEditor.min.css')) + .pipe(cssmin()) + .pipe(gulp.dest('./release')) +}) + +// 处理 JS +gulp.task('script', () => { + // rollup 打包 js 模块 + return rollup.rollup({ + // 入口文件 + entry: './src/js/index.js', + plugins: [ + // 对原始文件启动 eslint 检查,配置参见 ./.eslintrc.json + eslint(), + resolve(), + babel({ + exclude: 'node_modules/**' // only transpile our source code + }) + ] + }).then(bundle => { + bundle.write({ + // 产出文件使用 umd 规范(即兼容 amd cjs 和 iife) + format: 'umd', + // iife 规范下的全局变量名称 + moduleName: 'wangEditor', + // 产出的未压缩的文件名 + dest: './release/wangEditor.js' + }).then(() => { + // 待 rollup 打包 js 完毕之后,再进行如下的处理: + gulp.src('./release/wangEditor.js') + // inline css + .pipe(gulpReplace(/__INLINE_CSS__/gm, function () { + // 读取 css 文件内容 + var filePath = path.resolve(__dirname, 'release', 'wangEditor.css') + var content = fs.readFileSync(filePath).toString('utf-8') + // 替换 \n \ ' 三个字符 + content = content.replace(/\n/g, '').replace(/\\/g, '\\\\').replace(/'/g, '\\\'') + return content + })) + .pipe(gulp.dest('./release')) + .pipe(sourcemaps.init()) + // 压缩 + .pipe(uglify()) + // 产出的压缩的文件名 + .pipe(rename('wangEditor.min.js')) + // 生成 sourcemap + .pipe(sourcemaps.write('')) + .pipe(gulp.dest('./release')) + }) + }) +}) + + +// 默认任务配置 +gulp.task('default', () => { + gulp.run('copy-fonts', 'css', 'script') + + // 监听 js 原始文件的变化 + gulp.watch('./src/js/**/*.js', () => { + gulp.run('script') + }) + // 监听 css 原始文件的变化 + gulp.watch('./src/less/**/*.less', () => { + gulp.run('css', 'script') + }) + // 监听 icon.less 的变化,变化时重新拷贝 fonts 文件 + gulp.watch('./src/less/icon.less', () => { + gulp.run('copy-fonts') + }) +}) + diff --git a/novel-admin/src/main/resources/static/wangEditor/package.json b/novel-admin/src/main/resources/static/wangEditor/package.json new file mode 100644 index 0000000..b42d94d --- /dev/null +++ b/novel-admin/src/main/resources/static/wangEditor/package.json @@ -0,0 +1,60 @@ +{ + "name": "wangeditor", + "title": "wangEditor", + "version": "3.0.17", + "description": "wangEditor - 基于javascript和css开发的 web 富文本编辑器, 轻量、简洁、易用、开源免费", + "homepage": "http://wangeditor.github.io/", + "author": { + "name": "wangfupeng1988", + "url": "https://github.com/wangfupeng1988" + }, + "keywords": [ + "wangEditor", + "web 富文本编辑器" + ], + "main": "release/wangEditor.js", + "maintainers": [ + { + "name": "wangfupeng1988", + "web": "http://www.cnblogs.com/wangfupeng1988/default.html?OnlyTitle=1", + "mail": "wangfupeng1988@163.com" + } + ], + "repositories": [ + { + "type": "git", + "url": "https://github.com/wangfupeng1988/wangEditor" + } + ], + "scripts": { + "release": "gulp", + "win-example": "node ./example/server/index.js", + "example": "/bin/rm -rf ./example/upload-files && mkdir ./example/upload-files && npm run win-example" + }, + "devDependencies": { + "autoprefixer": "^6.7.7", + "babel-plugin-external-helpers": "^6.22.0", + "babel-preset-latest": "^6.24.0", + "cssgrace": "^3.0.0", + "formidable": "^1.1.1", + "gulp": "^3.9.1", + "gulp-concat": "^2.6.1", + "gulp-cssmin": "^0.1.7", + "gulp-less": "^3.3.0", + "gulp-postcss": "^6.4.0", + "gulp-rename": "^1.2.2", + "gulp-replace": "^0.5.4", + "gulp-sourcemaps": "^2.5.0", + "gulp-uglify": "^2.1.2", + "koa": "^1.2.4", + "koa-bodyparser": "^2.3.0", + "koa-onerror": "^3.1.0", + "koa-router": "^5.4.0", + "koa-static-cache": "^4.0.0", + "rollup": "^0.41.6", + "rollup-plugin-babel": "^2.7.1", + "rollup-plugin-eslint": "^3.0.0", + "rollup-plugin-node-resolve": "^3.0.0" + }, + "dependencies": {} +} diff --git a/novel-admin/src/main/resources/static/wangEditor/release/fonts/w-e-icon.woff b/novel-admin/src/main/resources/static/wangEditor/release/fonts/w-e-icon.woff new file mode 100644 index 0000000000000000000000000000000000000000..fa64c4d86cef0bd3aadc1906f25b2c0ce6bf96da GIT binary patch literal 5568 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 QY+$Fm0gCU~= 0 && matches.item(i) !== this) {} + return i > -1; + }; + } +}; + +/* + DOM 操作 API +*/ + +// 根据 html 代码片段创建 dom 对象 +function createElemByHTML(html) { + var div = void 0; + div = document.createElement('div'); + div.innerHTML = html; + return div.children; +} + +// 是否是 DOM List +function isDOMList(selector) { + if (!selector) { + return false; + } + if (selector instanceof HTMLCollection || selector instanceof NodeList) { + return true; + } + return false; +} + +// 封装 document.querySelectorAll +function querySelectorAll(selector) { + var result = document.querySelectorAll(selector); + if (isDOMList(result)) { + return result; + } else { + return [result]; + } +} + +// 记录所有的事件绑定 +var eventList = []; + +// 创建构造函数 +function DomElement(selector) { + if (!selector) { + return; + } + + // selector 本来就是 DomElement 对象,直接返回 + if (selector instanceof DomElement) { + return selector; + } + + this.selector = selector; + var nodeType = selector.nodeType; + + // 根据 selector 得出的结果(如 DOM,DOM List) + var selectorResult = []; + if (nodeType === 9) { + // document 节点 + selectorResult = [selector]; + } else if (nodeType === 1) { + // 单个 DOM 节点 + selectorResult = [selector]; + } else if (isDOMList(selector) || selector instanceof Array) { + // DOM List 或者数组 + selectorResult = selector; + } else if (typeof selector === 'string') { + // 字符串 + selector = selector.replace('/\n/mg', '').trim(); + if (selector.indexOf('<') === 0) { + // 如
    + selectorResult = createElemByHTML(selector); + } else { + // 如 #id .class + selectorResult = querySelectorAll(selector); + } + } + + var length = selectorResult.length; + if (!length) { + // 空数组 + return this; + } + + // 加入 DOM 节点 + var i = void 0; + for (i = 0; i < length; i++) { + this[i] = selectorResult[i]; + } + this.length = length; +} + +// 修改原型 +DomElement.prototype = { + constructor: DomElement, + + // 类数组,forEach + forEach: function forEach(fn) { + var i = void 0; + for (i = 0; i < this.length; i++) { + var elem = this[i]; + var result = fn.call(elem, elem, i); + if (result === false) { + break; + } + } + return this; + }, + + // clone + clone: function clone(deep) { + var cloneList = []; + this.forEach(function (elem) { + cloneList.push(elem.cloneNode(!!deep)); + }); + return $(cloneList); + }, + + // 获取第几个元素 + get: function get(index) { + var length = this.length; + if (index >= length) { + index = index % length; + } + return $(this[index]); + }, + + // 第一个 + first: function first() { + return this.get(0); + }, + + // 最后一个 + last: function last() { + var length = this.length; + return this.get(length - 1); + }, + + // 绑定事件 + on: function on(type, selector, fn) { + // selector 不为空,证明绑定事件要加代理 + if (!fn) { + fn = selector; + selector = null; + } + + // type 是否有多个 + var types = []; + types = type.split(/\s+/); + + return this.forEach(function (elem) { + types.forEach(function (type) { + if (!type) { + return; + } + + // 记录下,方便后面解绑 + eventList.push({ + elem: elem, + type: type, + fn: fn + }); + + if (!selector) { + // 无代理 + elem.addEventListener(type, fn); + return; + } + + // 有代理 + elem.addEventListener(type, function (e) { + var target = e.target; + if (target.matches(selector)) { + fn.call(target, e); + } + }); + }); + }); + }, + + // 取消事件绑定 + off: function off(type, fn) { + return this.forEach(function (elem) { + elem.removeEventListener(type, fn); + }); + }, + + // 获取/设置 属性 + attr: function attr(key, val) { + if (val == null) { + // 获取值 + return this[0].getAttribute(key); + } else { + // 设置值 + return this.forEach(function (elem) { + elem.setAttribute(key, val); + }); + } + }, + + // 添加 class + addClass: function addClass(className) { + if (!className) { + return this; + } + return this.forEach(function (elem) { + var arr = void 0; + if (elem.className) { + // 解析当前 className 转换为数组 + arr = elem.className.split(/\s/); + arr = arr.filter(function (item) { + return !!item.trim(); + }); + // 添加 class + if (arr.indexOf(className) < 0) { + arr.push(className); + } + // 修改 elem.class + elem.className = arr.join(' '); + } else { + elem.className = className; + } + }); + }, + + // 删除 class + removeClass: function removeClass(className) { + if (!className) { + return this; + } + return this.forEach(function (elem) { + var arr = void 0; + if (elem.className) { + // 解析当前 className 转换为数组 + arr = elem.className.split(/\s/); + arr = arr.filter(function (item) { + item = item.trim(); + // 删除 class + if (!item || item === className) { + return false; + } + return true; + }); + // 修改 elem.class + elem.className = arr.join(' '); + } + }); + }, + + // 修改 css + css: function css(key, val) { + var currentStyle = key + ':' + val + ';'; + return this.forEach(function (elem) { + var style = (elem.getAttribute('style') || '').trim(); + var styleArr = void 0, + resultArr = []; + if (style) { + // 将 style 按照 ; 拆分为数组 + styleArr = style.split(';'); + styleArr.forEach(function (item) { + // 对每项样式,按照 : 拆分为 key 和 value + var arr = item.split(':').map(function (i) { + return i.trim(); + }); + if (arr.length === 2) { + resultArr.push(arr[0] + ':' + arr[1]); + } + }); + // 替换或者新增 + resultArr = resultArr.map(function (item) { + if (item.indexOf(key) === 0) { + return currentStyle; + } else { + return item; + } + }); + if (resultArr.indexOf(currentStyle) < 0) { + resultArr.push(currentStyle); + } + // 结果 + elem.setAttribute('style', resultArr.join('; ')); + } else { + // style 无值 + elem.setAttribute('style', currentStyle); + } + }); + }, + + // 显示 + show: function show() { + return this.css('display', 'block'); + }, + + // 隐藏 + hide: function hide() { + return this.css('display', 'none'); + }, + + // 获取子节点 + children: function children() { + var elem = this[0]; + if (!elem) { + return null; + } + + return $(elem.children); + }, + + // 获取子节点(包括文本节点) + childNodes: function childNodes() { + var elem = this[0]; + if (!elem) { + return null; + } + + return $(elem.childNodes); + }, + + // 增加子节点 + append: function append($children) { + return this.forEach(function (elem) { + $children.forEach(function (child) { + elem.appendChild(child); + }); + }); + }, + + // 移除当前节点 + remove: function remove() { + return this.forEach(function (elem) { + if (elem.remove) { + elem.remove(); + } else { + var parent = elem.parentElement; + parent && parent.removeChild(elem); + } + }); + }, + + // 是否包含某个子节点 + isContain: function isContain($child) { + var elem = this[0]; + var child = $child[0]; + return elem.contains(child); + }, + + // 尺寸数据 + getSizeData: function getSizeData() { + var elem = this[0]; + return elem.getBoundingClientRect(); // 可得到 bottom height left right top width 的数据 + }, + + // 封装 nodeName + getNodeName: function getNodeName() { + var elem = this[0]; + return elem.nodeName; + }, + + // 从当前元素查找 + find: function find(selector) { + var elem = this[0]; + return $(elem.querySelectorAll(selector)); + }, + + // 获取当前元素的 text + text: function text(val) { + if (!val) { + // 获取 text + var elem = this[0]; + return elem.innerHTML.replace(/<.*?>/g, function () { + return ''; + }); + } else { + // 设置 text + return this.forEach(function (elem) { + elem.innerHTML = val; + }); + } + }, + + // 获取 html + html: function html(value) { + var elem = this[0]; + if (value == null) { + return elem.innerHTML; + } else { + elem.innerHTML = value; + return this; + } + }, + + // 获取 value + val: function val() { + var elem = this[0]; + return elem.value.trim(); + }, + + // focus + focus: function focus() { + return this.forEach(function (elem) { + elem.focus(); + }); + }, + + // parent + parent: function parent() { + var elem = this[0]; + return $(elem.parentElement); + }, + + // parentUntil 找到符合 selector 的父节点 + parentUntil: function parentUntil(selector, _currentElem) { + var results = document.querySelectorAll(selector); + var length = results.length; + if (!length) { + // 传入的 selector 无效 + return null; + } + + var elem = _currentElem || this[0]; + if (elem.nodeName === 'BODY') { + return null; + } + + var parent = elem.parentElement; + var i = void 0; + for (i = 0; i < length; i++) { + if (parent === results[i]) { + // 找到,并返回 + return $(parent); + } + } + + // 继续查找 + return this.parentUntil(selector, parent); + }, + + // 判断两个 elem 是否相等 + equal: function equal($elem) { + if ($elem.nodeType === 1) { + return this[0] === $elem; + } else { + return this[0] === $elem[0]; + } + }, + + // 将该元素插入到某个元素前面 + insertBefore: function insertBefore(selector) { + var $referenceNode = $(selector); + var referenceNode = $referenceNode[0]; + if (!referenceNode) { + return this; + } + return this.forEach(function (elem) { + var parent = referenceNode.parentNode; + parent.insertBefore(elem, referenceNode); + }); + }, + + // 将该元素插入到某个元素后面 + insertAfter: function insertAfter(selector) { + var $referenceNode = $(selector); + var referenceNode = $referenceNode[0]; + if (!referenceNode) { + return this; + } + return this.forEach(function (elem) { + var parent = referenceNode.parentNode; + if (parent.lastChild === referenceNode) { + // 最后一个元素 + parent.appendChild(elem); + } else { + // 不是最后一个元素 + parent.insertBefore(elem, referenceNode.nextSibling); + } + }); + } +}; + +// new 一个对象 +function $(selector) { + return new DomElement(selector); +} + +// 解绑所有事件,用于销毁编辑器 +$.offAll = function () { + eventList.forEach(function (item) { + var elem = item.elem; + var type = item.type; + var fn = item.fn; + // 解绑 + elem.removeEventListener(type, fn); + }); +}; + +/* + 配置信息 +*/ + +var config = { + + // 默认菜单配置 + menus: ['head', 'bold', 'italic', 'underline', 'strikeThrough', 'foreColor', 'backColor', 'link', 'list', 'justify', 'quote', 'emoticon', 'image', 'table', 'video', 'code', 'undo', 'redo'], + + colors: ['#000000', '#eeece0', '#1c487f', '#4d80bf', '#c24f4a', '#8baa4a', '#7b5ba1', '#46acc8', '#f9963b', '#ffffff'], + + // // 语言配置 + // lang: { + // '设置标题': 'title', + // '正文': 'p', + // '链接文字': 'link text', + // '链接': 'link', + // '插入': 'insert', + // '创建': 'init' + // }, + + // 表情 + emotions: [{ + // tab 的标题 + title: '默认', + // type -> 'emoji' / 'image' + type: 'image', + // content -> 数组 + content: [{ + alt: '[坏笑]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/pcmoren_huaixiao_org.png' + }, { + alt: '[舔屏]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/pcmoren_tian_org.png' + }, { + alt: '[污]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/pcmoren_wu_org.png' + }, { + alt: '[允悲]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/moren_yunbei_org.png' + }, { + alt: '[笑而不语]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3a/moren_xiaoerbuyu_org.png' + }, { + alt: '[费解]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/moren_feijie_org.png' + }, { + alt: '[憧憬]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/moren_chongjing_org.png' + }, { + alt: '[并不简单]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/moren_bbjdnew_org.png' + }, { + alt: '[微笑]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/huanglianwx_org.gif' + }, { + alt: '[酷]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/pcmoren_cool2017_org.png' + }, { + alt: '[嘻嘻]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/tootha_org.gif' + }, { + alt: '[哈哈]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/laugh.gif' + }, { + alt: '[可爱]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/tza_org.gif' + }, { + alt: '[可怜]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/kl_org.gif' + }, { + alt: '[挖鼻]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/wabi_org.gif' + }, { + alt: '[吃惊]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/cj_org.gif' + }, { + alt: '[害羞]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/shamea_org.gif' + }, { + alt: '[挤眼]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c3/zy_org.gif' + }, { + alt: '[闭嘴]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/bz_org.gif' + }, { + alt: '[鄙视]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/bs2_org.gif' + }, { + alt: '[爱你]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/lovea_org.gif' + }, { + alt: '[泪]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/sada_org.gif' + }, { + alt: '[偷笑]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/heia_org.gif' + }, { + alt: '[亲亲]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/qq_org.gif' + }, { + alt: '[生病]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/sb_org.gif' + }, { + alt: '[太开心]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/58/mb_org.gif' + }, { + alt: '[白眼]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/landeln_org.gif' + }, { + alt: '[右哼哼]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/yhh_org.gif' + }, { + alt: '[左哼哼]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/zhh_org.gif' + }, { + alt: '[嘘]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/x_org.gif' + }, { + alt: '[衰]', + src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/cry.gif' + }] + }, { + // tab 的标题 + title: '新浪', + // type -> 'emoji' / 'image' + type: 'image', + // content -> 数组 + content: [{ + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/7a/shenshou_thumb.gif', + alt: '[草泥马]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/60/horse2_thumb.gif', + alt: '[神马]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/bc/fuyun_thumb.gif', + alt: '[浮云]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/c9/geili_thumb.gif', + alt: '[给力]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/f2/wg_thumb.gif', + alt: '[围观]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/70/vw_thumb.gif', + alt: '[威武]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/6e/panda_thumb.gif', + alt: '[熊猫]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/81/rabbit_thumb.gif', + alt: '[兔子]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/bc/otm_thumb.gif', + alt: '[奥特曼]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/15/j_thumb.gif', + alt: '[囧]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/89/hufen_thumb.gif', + alt: '[互粉]' + }, { + src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/c4/liwu_thumb.gif', + alt: '[礼物]' + }] + }, { + // tab 的标题 + title: 'emoji', + // type -> 'emoji' / 'image' + type: 'emoji', + // content -> 数组 + content: '😀 😃 😄 😁 😆 😅 😂 😊 😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 😜 😝 😛 🤑 🤗 🤓 😎 😏 😒 😞 😔 😟 😕 🙁 😣 😖 😫 😩 😤 😠 😡 😶 😐 😑 😯 😦 😧 😮 😲 😵 😳 😱 😨 😰 😢 😥 😭 😓 😪 😴 🙄 🤔 😬 🤐'.split(/\s/) + }], + + // 编辑区域的 z-index + zIndex: 10000, + + // 是否开启 debug 模式(debug 模式下错误会 throw error 形式抛出) + debug: false, + + // 插入链接时候的格式校验 + linkCheck: function linkCheck(text, link) { + // text 是插入的文字 + // link 是插入的链接 + return true; // 返回 true 即表示成功 + // return '校验失败' // 返回字符串即表示失败的提示信息 + }, + + // 插入网络图片的校验 + linkImgCheck: function linkImgCheck(src) { + // src 即图片的地址 + return true; // 返回 true 即表示成功 + // return '校验失败' // 返回字符串即表示失败的提示信息 + }, + + // 粘贴过滤样式,默认开启 + pasteFilterStyle: true, + + // 对粘贴的文字进行自定义处理,返回处理后的结果。编辑器会将处理后的结果粘贴到编辑区域中。 + // IE 暂时不支持 + pasteTextHandle: function pasteTextHandle(content) { + // content 即粘贴过来的内容(html 或 纯文本),可进行自定义处理然后返回 + return content; + }, + + // onchange 事件 + // onchange: function (html) { + // // html 即变化之后的内容 + // console.log(html) + // }, + + // 是否显示添加网络图片的 tab + showLinkImg: true, + + // 插入网络图片的回调 + linkImgCallback: function linkImgCallback(url) { + // console.log(url) // url 即插入图片的地址 + }, + + // 默认上传图片 max size: 5M + uploadImgMaxSize: 5 * 1024 * 1024, + + // 配置一次最多上传几个图片 + // uploadImgMaxLength: 5, + + // 上传图片,是否显示 base64 格式 + uploadImgShowBase64: false, + + // 上传图片,server 地址(如果有值,则 base64 格式的配置则失效) + // uploadImgServer: '/upload', + + // 自定义配置 filename + uploadFileName: '', + + // 上传图片的自定义参数 + uploadImgParams: { + // token: 'abcdef12345' + }, + + // 上传图片的自定义header + uploadImgHeaders: { + // 'Accept': 'text/x-json' + }, + + // 配置 XHR withCredentials + withCredentials: false, + + // 自定义上传图片超时时间 ms + uploadImgTimeout: 10000, + + // 上传图片 hook + uploadImgHooks: { + // customInsert: function (insertLinkImg, result, editor) { + // console.log('customInsert') + // // 图片上传并返回结果,自定义插入图片的事件,而不是编辑器自动插入图片 + // const data = result.data1 || [] + // data.forEach(link => { + // insertLinkImg(link) + // }) + // }, + before: function before(xhr, editor, files) { + // 图片上传之前触发 + + // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传 + // return { + // prevent: true, + // msg: '放弃上传' + // } + }, + success: function success(xhr, editor, result) { + // 图片上传并返回结果,图片插入成功之后触发 + }, + fail: function fail(xhr, editor, result) { + // 图片上传并返回结果,但图片插入错误时触发 + }, + error: function error(xhr, editor) { + // 图片上传出错时触发 + }, + timeout: function timeout(xhr, editor) { + // 图片上传超时时触发 + } + }, + + // 是否上传七牛云,默认为 false + qiniu: false + +}; + +/* + 工具 +*/ + +// 和 UA 相关的属性 +var UA = { + _ua: navigator.userAgent, + + // 是否 webkit + isWebkit: function isWebkit() { + var reg = /webkit/i; + return reg.test(this._ua); + }, + + // 是否 IE + isIE: function isIE() { + return 'ActiveXObject' in window; + } +}; + +// 遍历对象 +function objForEach(obj, fn) { + var key = void 0, + result = void 0; + for (key in obj) { + if (obj.hasOwnProperty(key)) { + result = fn.call(obj, key, obj[key]); + if (result === false) { + break; + } + } + } +} + +// 遍历类数组 +function arrForEach(fakeArr, fn) { + var i = void 0, + item = void 0, + result = void 0; + var length = fakeArr.length || 0; + for (i = 0; i < length; i++) { + item = fakeArr[i]; + result = fn.call(fakeArr, item, i); + if (result === false) { + break; + } + } +} + +// 获取随机数 +function getRandom(prefix) { + return prefix + Math.random().toString().slice(2); +} + +// 替换 html 特殊字符 +function replaceHtmlSymbol(html) { + if (html == null) { + return ''; + } + return html.replace(//gm, '>').replace(/"/gm, '"'); +} + +// 返回百分比的格式 + + +// 判断是不是 function +function isFunction(fn) { + return typeof fn === 'function'; +} + +/* + bold-menu +*/ +// 构造函数 +function Bold(editor) { + this.editor = editor; + this.$elem = $('
    \n \n
    '); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Bold.prototype = { + constructor: Bold, + + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 + + var editor = this.editor; + var isSeleEmpty = editor.selection.isSelectionEmpty(); + + if (isSeleEmpty) { + // 选区是空的,插入并选中一个“空白” + editor.selection.createEmptyRange(); + } + + // 执行 bold 命令 + editor.cmd.do('bold'); + + if (isSeleEmpty) { + // 需要将选取折叠起来 + editor.selection.collapseRange(); + editor.selection.restoreSelection(); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('bold')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + 替换多语言 + */ + +var replaceLang = function (editor, str) { + var langArgs = editor.config.langArgs || []; + var result = str; + + langArgs.forEach(function (item) { + var reg = item.reg; + var val = item.val; + + if (reg.test(result)) { + result = result.replace(reg, function () { + return val; + }); + } + }); + + return result; +}; + +/* + droplist +*/ +var _emptyFn = function _emptyFn() {}; + +// 构造函数 +function DropList(menu, opt) { + var _this = this; + + // droplist 所依附的菜单 + var editor = menu.editor; + this.menu = menu; + this.opt = opt; + // 容器 + var $container = $('
    '); + + // 标题 + var $title = opt.$title; + var titleHtml = void 0; + if ($title) { + // 替换多语言 + titleHtml = $title.html(); + titleHtml = replaceLang(editor, titleHtml); + $title.html(titleHtml); + + $title.addClass('w-e-dp-title'); + $container.append($title); + } + + var list = opt.list || []; + var type = opt.type || 'list'; // 'list' 列表形式(如“标题”菜单) / 'inline-block' 块状形式(如“颜色”菜单) + var onClick = opt.onClick || _emptyFn; + + // 加入 DOM 并绑定事件 + var $list = $('
      '); + $container.append($list); + list.forEach(function (item) { + var $elem = item.$elem; + + // 替换多语言 + var elemHtml = $elem.html(); + elemHtml = replaceLang(editor, elemHtml); + $elem.html(elemHtml); + + var value = item.value; + var $li = $('
    • '); + if ($elem) { + $li.append($elem); + $list.append($li); + $li.on('click', function (e) { + onClick(value); + + // 隐藏 + _this.hideTimeoutId = setTimeout(function () { + _this.hide(); + }, 0); + }); + } + }); + + // 绑定隐藏事件 + $container.on('mouseleave', function (e) { + _this.hideTimeoutId = setTimeout(function () { + _this.hide(); + }, 0); + }); + + // 记录属性 + this.$container = $container; + + // 基本属性 + this._rendered = false; + this._show = false; +} + +// 原型 +DropList.prototype = { + constructor: DropList, + + // 显示(插入DOM) + show: function show() { + if (this.hideTimeoutId) { + // 清除之前的定时隐藏 + clearTimeout(this.hideTimeoutId); + } + + var menu = this.menu; + var $menuELem = menu.$elem; + var $container = this.$container; + if (this._show) { + return; + } + if (this._rendered) { + // 显示 + $container.show(); + } else { + // 加入 DOM 之前先定位位置 + var menuHeight = $menuELem.getSizeData().height || 0; + var width = this.opt.width || 100; // 默认为 100 + $container.css('margin-top', menuHeight + 'px').css('width', width + 'px'); + + // 加入到 DOM + $menuELem.append($container); + this._rendered = true; + } + + // 修改属性 + this._show = true; + }, + + // 隐藏(移除DOM) + hide: function hide() { + if (this.showTimeoutId) { + // 清除之前的定时显示 + clearTimeout(this.showTimeoutId); + } + + var $container = this.$container; + if (!this._show) { + return; + } + // 隐藏并需改属性 + $container.hide(); + this._show = false; + } +}; + +/* + menu - header +*/ +// 构造函数 +function Head(editor) { + var _this = this; + + this.editor = editor; + this.$elem = $('
      '); + this.type = 'droplist'; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 100, + $title: $('

      设置标题

      '), + type: 'list', // droplist 以列表形式展示 + list: [{ $elem: $('

      H1

      '), value: '

      ' }, { $elem: $('

      H2

      '), value: '

      ' }, { $elem: $('

      H3

      '), value: '

      ' }, { $elem: $('

      H4

      '), value: '

      ' }, { $elem: $('

      H5
      '), value: '
      ' }, { $elem: $('

      正文

      '), value: '

      ' }], + onClick: function onClick(value) { + // 注意 this 是指向当前的 Head 对象 + _this._command(value); + } + }); +} + +// 原型 +Head.prototype = { + constructor: Head, + + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (editor.$textElem.equal($selectionElem)) { + // 不能选中多行来设置标题,否则会出现问题 + // 例如选中的是

      xxx

      yyy

      来设置标题,设置之后会成为

      xxx
      yyy

      不符合预期 + return; + } + + editor.cmd.do('formatBlock', value); + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var reg = /^h/i; + var cmdValue = editor.cmd.queryCommandValue('formatBlock'); + if (reg.test(cmdValue)) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + panel +*/ + +var emptyFn = function emptyFn() {}; + +// 记录已经显示 panel 的菜单 +var _isCreatedPanelMenus = []; + +// 构造函数 +function Panel(menu, opt) { + this.menu = menu; + this.opt = opt; +} + +// 原型 +Panel.prototype = { + constructor: Panel, + + // 显示(插入DOM) + show: function show() { + var _this = this; + + var menu = this.menu; + if (_isCreatedPanelMenus.indexOf(menu) >= 0) { + // 该菜单已经创建了 panel 不能再创建 + return; + } + + var editor = menu.editor; + var $body = $('body'); + var $textContainerElem = editor.$textContainerElem; + var opt = this.opt; + + // panel 的容器 + var $container = $('
      '); + var width = opt.width || 300; // 默认 300px + $container.css('width', width + 'px').css('margin-left', (0 - width) / 2 + 'px'); + + // 添加关闭按钮 + var $closeBtn = $(''); + $container.append($closeBtn); + $closeBtn.on('click', function () { + _this.hide(); + }); + + // 准备 tabs 容器 + var $tabTitleContainer = $('
        '); + var $tabContentContainer = $('
        '); + $container.append($tabTitleContainer).append($tabContentContainer); + + // 设置高度 + var height = opt.height; + if (height) { + $tabContentContainer.css('height', height + 'px').css('overflow-y', 'auto'); + } + + // tabs + var tabs = opt.tabs || []; + var tabTitleArr = []; + var tabContentArr = []; + tabs.forEach(function (tab, tabIndex) { + if (!tab) { + return; + } + var title = tab.title || ''; + var tpl = tab.tpl || ''; + + // 替换多语言 + title = replaceLang(editor, title); + tpl = replaceLang(editor, tpl); + + // 添加到 DOM + var $title = $('
      • ' + title + '
      • '); + $tabTitleContainer.append($title); + var $content = $(tpl); + $tabContentContainer.append($content); + + // 记录到内存 + $title._index = tabIndex; + tabTitleArr.push($title); + tabContentArr.push($content); + + // 设置 active 项 + if (tabIndex === 0) { + $title._active = true; + $title.addClass('w-e-active'); + } else { + $content.hide(); + } + + // 绑定 tab 的事件 + $title.on('click', function (e) { + if ($title._active) { + return; + } + // 隐藏所有的 tab + tabTitleArr.forEach(function ($title) { + $title._active = false; + $title.removeClass('w-e-active'); + }); + tabContentArr.forEach(function ($content) { + $content.hide(); + }); + + // 显示当前的 tab + $title._active = true; + $title.addClass('w-e-active'); + $content.show(); + }); + }); + + // 绑定关闭事件 + $container.on('click', function (e) { + // 点击时阻止冒泡 + e.stopPropagation(); + }); + $body.on('click', function (e) { + _this.hide(); + }); + + // 添加到 DOM + $textContainerElem.append($container); + + // 绑定 opt 的事件,只有添加到 DOM 之后才能绑定成功 + tabs.forEach(function (tab, index) { + if (!tab) { + return; + } + var events = tab.events || []; + events.forEach(function (event) { + var selector = event.selector; + var type = event.type; + var fn = event.fn || emptyFn; + var $content = tabContentArr[index]; + $content.find(selector).on(type, function (e) { + e.stopPropagation(); + var needToHide = fn(e); + // 执行完事件之后,是否要关闭 panel + if (needToHide) { + _this.hide(); + } + }); + }); + }); + + // focus 第一个 elem + var $inputs = $container.find('input[type=text],textarea'); + if ($inputs.length) { + $inputs.get(0).focus(); + } + + // 添加到属性 + this.$container = $container; + + // 隐藏其他 panel + this._hideOtherPanels(); + // 记录该 menu 已经创建了 panel + _isCreatedPanelMenus.push(menu); + }, + + // 隐藏(移除DOM) + hide: function hide() { + var menu = this.menu; + var $container = this.$container; + if ($container) { + $container.remove(); + } + + // 将该 menu 记录中移除 + _isCreatedPanelMenus = _isCreatedPanelMenus.filter(function (item) { + if (item === menu) { + return false; + } else { + return true; + } + }); + }, + + // 一个 panel 展示时,隐藏其他 panel + _hideOtherPanels: function _hideOtherPanels() { + if (!_isCreatedPanelMenus.length) { + return; + } + _isCreatedPanelMenus.forEach(function (menu) { + var panel = menu.panel || {}; + if (panel.hide) { + panel.hide(); + } + }); + } +}; + +/* + menu - link +*/ +// 构造函数 +function Link(editor) { + this.editor = editor; + this.$elem = $('
        '); + this.type = 'panel'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Link.prototype = { + constructor: Link, + + // 点击事件 + onClick: function onClick(e) { + var editor = this.editor; + var $linkelem = void 0; + + if (this._active) { + // 当前选区在链接里面 + $linkelem = editor.selection.getSelectionContainerElem(); + if (!$linkelem) { + return; + } + // 将该元素都包含在选取之内,以便后面整体替换 + editor.selection.createRangeByElem($linkelem); + editor.selection.restoreSelection(); + // 显示 panel + this._createPanel($linkelem.text(), $linkelem.attr('href')); + } else { + // 当前选区不在链接里面 + if (editor.selection.isSelectionEmpty()) { + // 选区是空的,未选中内容 + this._createPanel('', ''); + } else { + // 选中内容了 + this._createPanel(editor.selection.getSelectionText(), ''); + } + } + }, + + // 创建 panel + _createPanel: function _createPanel(text, link) { + var _this = this; + + // panel 中需要用到的id + var inputLinkId = getRandom('input-link'); + var inputTextId = getRandom('input-text'); + var btnOkId = getRandom('btn-ok'); + var btnDelId = getRandom('btn-del'); + + // 是否显示“删除链接” + var delBtnDisplay = this._active ? 'inline-block' : 'none'; + + // 初始化并显示 panel + var panel = new Panel(this, { + width: 300, + // panel 中可包含多个 tab + tabs: [{ + // tab 的标题 + title: '链接', + // 模板 + tpl: '
        \n \n \n
        \n \n \n
        \n
        ', + // 事件绑定 + events: [ + // 插入链接 + { + selector: '#' + btnOkId, + type: 'click', + fn: function fn() { + // 执行插入链接 + var $link = $('#' + inputLinkId); + var $text = $('#' + inputTextId); + var link = $link.val(); + var text = $text.val(); + _this._insertLink(text, link); + + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, + // 删除链接 + { + selector: '#' + btnDelId, + type: 'click', + fn: function fn() { + // 执行删除链接 + _this._delLink(); + + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + } // tab end + ] // tabs end + }); + + // 显示 panel + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 删除当前链接 + _delLink: function _delLink() { + if (!this._active) { + return; + } + var editor = this.editor; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var selectionText = editor.selection.getSelectionText(); + editor.cmd.do('insertHTML', '' + selectionText + ''); + }, + + // 插入链接 + _insertLink: function _insertLink(text, link) { + var editor = this.editor; + var config = editor.config; + var linkCheck = config.linkCheck; + var checkResult = true; // 默认为 true + if (linkCheck && typeof linkCheck === 'function') { + checkResult = linkCheck(text, link); + } + if (checkResult === true) { + editor.cmd.do('insertHTML', '' + text + ''); + } else { + alert(checkResult); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + if ($selectionELem.getNodeName() === 'A') { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + italic-menu +*/ +// 构造函数 +function Italic(editor) { + this.editor = editor; + this.$elem = $('
        \n \n
        '); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Italic.prototype = { + constructor: Italic, + + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 + + var editor = this.editor; + var isSeleEmpty = editor.selection.isSelectionEmpty(); + + if (isSeleEmpty) { + // 选区是空的,插入并选中一个“空白” + editor.selection.createEmptyRange(); + } + + // 执行 italic 命令 + editor.cmd.do('italic'); + + if (isSeleEmpty) { + // 需要将选取折叠起来 + editor.selection.collapseRange(); + editor.selection.restoreSelection(); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('italic')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + redo-menu +*/ +// 构造函数 +function Redo(editor) { + this.editor = editor; + this.$elem = $('
        \n \n
        '); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Redo.prototype = { + constructor: Redo, + + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 + + var editor = this.editor; + + // 执行 redo 命令 + editor.cmd.do('redo'); + } +}; + +/* + strikeThrough-menu +*/ +// 构造函数 +function StrikeThrough(editor) { + this.editor = editor; + this.$elem = $('
        \n \n
        '); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +StrikeThrough.prototype = { + constructor: StrikeThrough, + + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 + + var editor = this.editor; + var isSeleEmpty = editor.selection.isSelectionEmpty(); + + if (isSeleEmpty) { + // 选区是空的,插入并选中一个“空白” + editor.selection.createEmptyRange(); + } + + // 执行 strikeThrough 命令 + editor.cmd.do('strikeThrough'); + + if (isSeleEmpty) { + // 需要将选取折叠起来 + editor.selection.collapseRange(); + editor.selection.restoreSelection(); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('strikeThrough')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + underline-menu +*/ +// 构造函数 +function Underline(editor) { + this.editor = editor; + this.$elem = $('
        \n \n
        '); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Underline.prototype = { + constructor: Underline, + + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 + + var editor = this.editor; + var isSeleEmpty = editor.selection.isSelectionEmpty(); + + if (isSeleEmpty) { + // 选区是空的,插入并选中一个“空白” + editor.selection.createEmptyRange(); + } + + // 执行 underline 命令 + editor.cmd.do('underline'); + + if (isSeleEmpty) { + // 需要将选取折叠起来 + editor.selection.collapseRange(); + editor.selection.restoreSelection(); + } + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('underline')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + undo-menu +*/ +// 构造函数 +function Undo(editor) { + this.editor = editor; + this.$elem = $('
        \n \n
        '); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Undo.prototype = { + constructor: Undo, + + // 点击事件 + onClick: function onClick(e) { + // 点击菜单将触发这里 + + var editor = this.editor; + + // 执行 undo 命令 + editor.cmd.do('undo'); + } +}; + +/* + menu - list +*/ +// 构造函数 +function List(editor) { + var _this = this; + + this.editor = editor; + this.$elem = $('
        '); + this.type = 'droplist'; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 120, + $title: $('

        设置列表

        '), + type: 'list', // droplist 以列表形式展示 + list: [{ $elem: $(' 有序列表'), value: 'insertOrderedList' }, { $elem: $(' 无序列表'), value: 'insertUnorderedList' }], + onClick: function onClick(value) { + // 注意 this 是指向当前的 List 对象 + _this._command(value); + } + }); +} + +// 原型 +List.prototype = { + constructor: List, + + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + var $textElem = editor.$textElem; + editor.selection.restoreSelection(); + if (editor.cmd.queryCommandState(value)) { + return; + } + editor.cmd.do(value); + + // 验证列表是否被包裹在

        之内 + var $selectionElem = editor.selection.getSelectionContainerElem(); + if ($selectionElem.getNodeName() === 'LI') { + $selectionElem = $selectionElem.parent(); + } + if (/^ol|ul$/i.test($selectionElem.getNodeName()) === false) { + return; + } + if ($selectionElem.equal($textElem)) { + // 证明是顶级标签,没有被

        包裹 + return; + } + var $parent = $selectionElem.parent(); + if ($parent.equal($textElem)) { + // $parent 是顶级标签,不能删除 + return; + } + + $selectionElem.insertAfter($parent); + $parent.remove(); + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor.cmd.queryCommandState('insertUnOrderedList') || editor.cmd.queryCommandState('insertOrderedList')) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + menu - justify +*/ +// 构造函数 +function Justify(editor) { + var _this = this; + + this.editor = editor; + this.$elem = $('

        '); + this.type = 'droplist'; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 100, + $title: $('

        对齐方式

        '), + type: 'list', // droplist 以列表形式展示 + list: [{ $elem: $(' 靠左'), value: 'justifyLeft' }, { $elem: $(' 居中'), value: 'justifyCenter' }, { $elem: $(' 靠右'), value: 'justifyRight' }], + onClick: function onClick(value) { + // 注意 this 是指向当前的 List 对象 + _this._command(value); + } + }); +} + +// 原型 +Justify.prototype = { + constructor: Justify, + + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + editor.cmd.do(value); + } +}; + +/* + menu - Forecolor +*/ +// 构造函数 +function ForeColor(editor) { + var _this = this; + + this.editor = editor; + this.$elem = $('
        '); + this.type = 'droplist'; + + // 获取配置的颜色 + var config = editor.config; + var colors = config.colors || []; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 120, + $title: $('

        文字颜色

        '), + type: 'inline-block', // droplist 内容以 block 形式展示 + list: colors.map(function (color) { + return { $elem: $(''), value: color }; + }), + onClick: function onClick(value) { + // 注意 this 是指向当前的 ForeColor 对象 + _this._command(value); + } + }); +} + +// 原型 +ForeColor.prototype = { + constructor: ForeColor, + + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + editor.cmd.do('foreColor', value); + } +}; + +/* + menu - BackColor +*/ +// 构造函数 +function BackColor(editor) { + var _this = this; + + this.editor = editor; + this.$elem = $('
        '); + this.type = 'droplist'; + + // 获取配置的颜色 + var config = editor.config; + var colors = config.colors || []; + + // 当前是否 active 状态 + this._active = false; + + // 初始化 droplist + this.droplist = new DropList(this, { + width: 120, + $title: $('

        背景色

        '), + type: 'inline-block', // droplist 内容以 block 形式展示 + list: colors.map(function (color) { + return { $elem: $(''), value: color }; + }), + onClick: function onClick(value) { + // 注意 this 是指向当前的 BackColor 对象 + _this._command(value); + } + }); +} + +// 原型 +BackColor.prototype = { + constructor: BackColor, + + // 执行命令 + _command: function _command(value) { + var editor = this.editor; + editor.cmd.do('backColor', value); + } +}; + +/* + menu - quote +*/ +// 构造函数 +function Quote(editor) { + this.editor = editor; + this.$elem = $('
        \n \n
        '); + this.type = 'click'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Quote.prototype = { + constructor: Quote, + + onClick: function onClick(e) { + var editor = this.editor; + var $selectionElem = editor.selection.getSelectionContainerElem(); + var nodeName = $selectionElem.getNodeName(); + + if (!UA.isIE()) { + if (nodeName === 'BLOCKQUOTE') { + // 撤销 quote + editor.cmd.do('formatBlock', '

        '); + } else { + // 转换为 quote + editor.cmd.do('formatBlock', '

        '); + } + return; + } + + // IE 中不支持 formatBlock
        ,要用其他方式兼容 + var content = void 0, + $targetELem = void 0; + if (nodeName === 'P') { + // 将 P 转换为 quote + content = $selectionElem.text(); + $targetELem = $('
        ' + content + '
        '); + $targetELem.insertAfter($selectionElem); + $selectionElem.remove(); + return; + } + if (nodeName === 'BLOCKQUOTE') { + // 撤销 quote + content = $selectionElem.text(); + $targetELem = $('

        ' + content + '

        '); + $targetELem.insertAfter($selectionElem); + $selectionElem.remove(); + } + }, + + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var reg = /^BLOCKQUOTE$/i; + var cmdValue = editor.cmd.queryCommandValue('formatBlock'); + if (reg.test(cmdValue)) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + menu - code +*/ +// 构造函数 +function Code(editor) { + this.editor = editor; + this.$elem = $('
        \n \n
        '); + this.type = 'panel'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Code.prototype = { + constructor: Code, + + onClick: function onClick(e) { + var editor = this.editor; + var $startElem = editor.selection.getSelectionStartElem(); + var $endElem = editor.selection.getSelectionEndElem(); + var isSeleEmpty = editor.selection.isSelectionEmpty(); + var selectionText = editor.selection.getSelectionText(); + var $code = void 0; + + if (!$startElem.equal($endElem)) { + // 跨元素选择,不做处理 + editor.selection.restoreSelection(); + return; + } + if (!isSeleEmpty) { + // 选取不是空,用 包裹即可 + $code = $('' + selectionText + ''); + editor.cmd.do('insertElem', $code); + editor.selection.createRangeByElem($code, false); + editor.selection.restoreSelection(); + return; + } + + // 选取是空,且没有夸元素选择,则插入
        
        +        if (this._active) {
        +            // 选中状态,将编辑内容
        +            this._createPanel($startElem.html());
        +        } else {
        +            // 未选中状态,将创建内容
        +            this._createPanel();
        +        }
        +    },
        +
        +    _createPanel: function _createPanel(value) {
        +        var _this = this;
        +
        +        // value - 要编辑的内容
        +        value = value || '';
        +        var type = !value ? 'new' : 'edit';
        +        var textId = getRandom('texxt');
        +        var btnId = getRandom('btn');
        +
        +        var panel = new Panel(this, {
        +            width: 500,
        +            // 一个 Panel 包含多个 tab
        +            tabs: [{
        +                // 标题
        +                title: '插入代码',
        +                // 模板
        +                tpl: '
        \n \n
        \n \n
        \n
        ', + // 事件绑定 + events: [ + // 插入代码 + { + selector: '#' + btnId, + type: 'click', + fn: function fn() { + var $text = $('#' + textId); + var text = $text.val() || $text.html(); + text = replaceHtmlSymbol(text); + if (type === 'new') { + // 新插入 + _this._insertCode(text); + } else { + // 编辑更新 + _this._updateCode(text); + } + + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + } // first tab end + ] // tabs end + }); // new Panel end + + // 显示 panel + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 插入代码 + _insertCode: function _insertCode(value) { + var editor = this.editor; + editor.cmd.do('insertHTML', '
        ' + value + '


        '); + }, + + // 更新代码 + _updateCode: function _updateCode(value) { + var editor = this.editor; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + $selectionELem.html(value); + editor.selection.restoreSelection(); + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var $parentElem = $selectionELem.parent(); + if ($selectionELem.getNodeName() === 'CODE' && $parentElem.getNodeName() === 'PRE') { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + menu - emoticon +*/ +// 构造函数 +function Emoticon(editor) { + this.editor = editor; + this.$elem = $('
        \n \n
        '); + this.type = 'panel'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Emoticon.prototype = { + constructor: Emoticon, + + onClick: function onClick() { + this._createPanel(); + }, + + _createPanel: function _createPanel() { + var _this = this; + + var editor = this.editor; + var config = editor.config; + // 获取表情配置 + var emotions = config.emotions || []; + + // 创建表情 dropPanel 的配置 + var tabConfig = []; + emotions.forEach(function (emotData) { + var emotType = emotData.type; + var content = emotData.content || []; + + // 这一组表情最终拼接出来的 html + var faceHtml = ''; + + // emoji 表情 + if (emotType === 'emoji') { + content.forEach(function (item) { + if (item) { + faceHtml += '' + item + ''; + } + }); + } + // 图片表情 + if (emotType === 'image') { + content.forEach(function (item) { + var src = item.src; + var alt = item.alt; + if (src) { + // 加一个 data-w-e 属性,点击图片的时候不再提示编辑图片 + faceHtml += '' + alt + ''; + } + }); + } + + tabConfig.push({ + title: emotData.title, + tpl: '
        ' + faceHtml + '
        ', + events: [{ + selector: 'span.w-e-item', + type: 'click', + fn: function fn(e) { + var target = e.target; + var $target = $(target); + var nodeName = $target.getNodeName(); + + var insertHtml = void 0; + if (nodeName === 'IMG') { + // 插入图片 + insertHtml = $target.parent().html(); + } else { + // 插入 emoji + insertHtml = '' + $target.html() + ''; + } + + _this._insert(insertHtml); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + }); + }); + + var panel = new Panel(this, { + width: 300, + height: 200, + // 一个 Panel 包含多个 tab + tabs: tabConfig + }); + + // 显示 panel + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 插入表情 + _insert: function _insert(emotHtml) { + var editor = this.editor; + editor.cmd.do('insertHTML', emotHtml); + } +}; + +/* + menu - table +*/ +// 构造函数 +function Table(editor) { + this.editor = editor; + this.$elem = $('
        '); + this.type = 'panel'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Table.prototype = { + constructor: Table, + + onClick: function onClick() { + if (this._active) { + // 编辑现有表格 + this._createEditPanel(); + } else { + // 插入新表格 + this._createInsertPanel(); + } + }, + + // 创建插入新表格的 panel + _createInsertPanel: function _createInsertPanel() { + var _this = this; + + // 用到的 id + var btnInsertId = getRandom('btn'); + var textRowNum = getRandom('row'); + var textColNum = getRandom('col'); + + var panel = new Panel(this, { + width: 250, + // panel 包含多个 tab + tabs: [{ + // 标题 + title: '插入表格', + // 模板 + tpl: '
        \n

        \n \u521B\u5EFA\n \n \u884C\n \n \u5217\u7684\u8868\u683C\n

        \n
        \n \n
        \n
        ', + // 事件绑定 + events: [{ + // 点击按钮,插入表格 + selector: '#' + btnInsertId, + type: 'click', + fn: function fn() { + var rowNum = parseInt($('#' + textRowNum).val()); + var colNum = parseInt($('#' + textColNum).val()); + + if (rowNum && colNum && rowNum > 0 && colNum > 0) { + // form 数据有效 + _this._insert(rowNum, colNum); + } + + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + } // first tab end + ] // tabs end + }); // panel end + + // 展示 panel + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 插入表格 + _insert: function _insert(rowNum, colNum) { + // 拼接 table 模板 + var r = void 0, + c = void 0; + var html = '
        '; + for (r = 0; r < rowNum; r++) { + html += ''; + if (r === 0) { + for (c = 0; c < colNum; c++) { + html += ''; + } + } else { + for (c = 0; c < colNum; c++) { + html += ''; + } + } + html += ''; + } + html += '
          


        '; + + // 执行命令 + var editor = this.editor; + editor.cmd.do('insertHTML', html); + + // 防止 firefox 下出现 resize 的控制点 + editor.cmd.do('enableObjectResizing', false); + editor.cmd.do('enableInlineTableEditing', false); + }, + + // 创建编辑表格的 panel + _createEditPanel: function _createEditPanel() { + var _this2 = this; + + // 可用的 id + var addRowBtnId = getRandom('add-row'); + var addColBtnId = getRandom('add-col'); + var delRowBtnId = getRandom('del-row'); + var delColBtnId = getRandom('del-col'); + var delTableBtnId = getRandom('del-table'); + + // 创建 panel 对象 + var panel = new Panel(this, { + width: 320, + // panel 包含多个 tab + tabs: [{ + // 标题 + title: '编辑表格', + // 模板 + tpl: '
        \n
        \n \n \n \n \n
        \n
        \n \n \n
        ', + // 事件绑定 + events: [{ + // 增加行 + selector: '#' + addRowBtnId, + type: 'click', + fn: function fn() { + _this2._addRow(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + // 增加列 + selector: '#' + addColBtnId, + type: 'click', + fn: function fn() { + _this2._addCol(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + // 删除行 + selector: '#' + delRowBtnId, + type: 'click', + fn: function fn() { + _this2._delRow(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + // 删除列 + selector: '#' + delColBtnId, + type: 'click', + fn: function fn() { + _this2._delCol(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + // 删除表格 + selector: '#' + delTableBtnId, + type: 'click', + fn: function fn() { + _this2._delTable(); + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + }] + }); + // 显示 panel + panel.show(); + }, + + // 获取选中的单元格的位置信息 + _getLocationData: function _getLocationData() { + var result = {}; + var editor = this.editor; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var nodeName = $selectionELem.getNodeName(); + if (nodeName !== 'TD' && nodeName !== 'TH') { + return; + } + + // 获取 td index + var $tr = $selectionELem.parent(); + var $tds = $tr.children(); + var tdLength = $tds.length; + $tds.forEach(function (td, index) { + if (td === $selectionELem[0]) { + // 记录并跳出循环 + result.td = { + index: index, + elem: td, + length: tdLength + }; + return false; + } + }); + + // 获取 tr index + var $tbody = $tr.parent(); + var $trs = $tbody.children(); + var trLength = $trs.length; + $trs.forEach(function (tr, index) { + if (tr === $tr[0]) { + // 记录并跳出循环 + result.tr = { + index: index, + elem: tr, + length: trLength + }; + return false; + } + }); + + // 返回结果 + return result; + }, + + // 增加行 + _addRow: function _addRow() { + // 获取当前单元格的位置信息 + var locationData = this._getLocationData(); + if (!locationData) { + return; + } + var trData = locationData.tr; + var $currentTr = $(trData.elem); + var tdData = locationData.td; + var tdLength = tdData.length; + + // 拼接即将插入的字符串 + var newTr = document.createElement('tr'); + var tpl = '', + i = void 0; + for (i = 0; i < tdLength; i++) { + tpl += ' '; + } + newTr.innerHTML = tpl; + // 插入 + $(newTr).insertAfter($currentTr); + }, + + // 增加列 + _addCol: function _addCol() { + // 获取当前单元格的位置信息 + var locationData = this._getLocationData(); + if (!locationData) { + return; + } + var trData = locationData.tr; + var tdData = locationData.td; + var tdIndex = tdData.index; + var $currentTr = $(trData.elem); + var $trParent = $currentTr.parent(); + var $trs = $trParent.children(); + + // 遍历所有行 + $trs.forEach(function (tr) { + var $tr = $(tr); + var $tds = $tr.children(); + var $currentTd = $tds.get(tdIndex); + var name = $currentTd.getNodeName().toLowerCase(); + + // new 一个 td,并插入 + var newTd = document.createElement(name); + $(newTd).insertAfter($currentTd); + }); + }, + + // 删除行 + _delRow: function _delRow() { + // 获取当前单元格的位置信息 + var locationData = this._getLocationData(); + if (!locationData) { + return; + } + var trData = locationData.tr; + var $currentTr = $(trData.elem); + $currentTr.remove(); + }, + + // 删除列 + _delCol: function _delCol() { + // 获取当前单元格的位置信息 + var locationData = this._getLocationData(); + if (!locationData) { + return; + } + var trData = locationData.tr; + var tdData = locationData.td; + var tdIndex = tdData.index; + var $currentTr = $(trData.elem); + var $trParent = $currentTr.parent(); + var $trs = $trParent.children(); + + // 遍历所有行 + $trs.forEach(function (tr) { + var $tr = $(tr); + var $tds = $tr.children(); + var $currentTd = $tds.get(tdIndex); + // 删除 + $currentTd.remove(); + }); + }, + + // 删除表格 + _delTable: function _delTable() { + var editor = this.editor; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var $table = $selectionELem.parentUntil('table'); + if (!$table) { + return; + } + $table.remove(); + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + var $selectionELem = editor.selection.getSelectionContainerElem(); + if (!$selectionELem) { + return; + } + var nodeName = $selectionELem.getNodeName(); + if (nodeName === 'TD' || nodeName === 'TH') { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + menu - video +*/ +// 构造函数 +function Video(editor) { + this.editor = editor; + this.$elem = $('
        '); + this.type = 'panel'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Video.prototype = { + constructor: Video, + + onClick: function onClick() { + this._createPanel(); + }, + + _createPanel: function _createPanel() { + var _this = this; + + // 创建 id + var textValId = getRandom('text-val'); + var btnId = getRandom('btn'); + + // 创建 panel + var panel = new Panel(this, { + width: 350, + // 一个 panel 多个 tab + tabs: [{ + // 标题 + title: '插入视频', + // 模板 + tpl: '
        \n \n
        \n \n
        \n
        ', + // 事件绑定 + events: [{ + selector: '#' + btnId, + type: 'click', + fn: function fn() { + var $text = $('#' + textValId); + var val = $text.val().trim(); + + // 测试用视频地址 + // + + if (val) { + // 插入视频 + _this._insert(val); + } + + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + } // first tab end + ] // tabs end + }); // panel end + + // 显示 panel + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 插入视频 + _insert: function _insert(val) { + var editor = this.editor; + editor.cmd.do('insertHTML', val + '


        '); + } +}; + +/* + menu - img +*/ +// 构造函数 +function Image(editor) { + this.editor = editor; + var imgMenuId = getRandom('w-e-img'); + this.$elem = $('
        '); + editor.imgMenuId = imgMenuId; + this.type = 'panel'; + + // 当前是否 active 状态 + this._active = false; +} + +// 原型 +Image.prototype = { + constructor: Image, + + onClick: function onClick() { + var editor = this.editor; + var config = editor.config; + if (config.qiniu) { + return; + } + if (this._active) { + this._createEditPanel(); + } else { + this._createInsertPanel(); + } + }, + + _createEditPanel: function _createEditPanel() { + var editor = this.editor; + + // id + var width30 = getRandom('width-30'); + var width50 = getRandom('width-50'); + var width100 = getRandom('width-100'); + var delBtn = getRandom('del-btn'); + + // tab 配置 + var tabsConfig = [{ + title: '编辑图片', + tpl: '
        \n
        \n \u6700\u5927\u5BBD\u5EA6\uFF1A\n \n \n \n
        \n
        \n \n \n
        ', + events: [{ + selector: '#' + width30, + type: 'click', + fn: function fn() { + var $img = editor._selectedImg; + if ($img) { + $img.css('max-width', '30%'); + } + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + selector: '#' + width50, + type: 'click', + fn: function fn() { + var $img = editor._selectedImg; + if ($img) { + $img.css('max-width', '50%'); + } + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + selector: '#' + width100, + type: 'click', + fn: function fn() { + var $img = editor._selectedImg; + if ($img) { + $img.css('max-width', '100%'); + } + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }, { + selector: '#' + delBtn, + type: 'click', + fn: function fn() { + var $img = editor._selectedImg; + if ($img) { + $img.remove(); + } + // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 + return true; + } + }] + }]; + + // 创建 panel 并显示 + var panel = new Panel(this, { + width: 300, + tabs: tabsConfig + }); + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + _createInsertPanel: function _createInsertPanel() { + var editor = this.editor; + var uploadImg = editor.uploadImg; + var config = editor.config; + + // id + var upTriggerId = getRandom('up-trigger'); + var upFileId = getRandom('up-file'); + var linkUrlId = getRandom('link-url'); + var linkBtnId = getRandom('link-btn'); + + // tabs 的配置 + var tabsConfig = [{ + title: '上传图片', + tpl: '
        \n
        \n \n
        \n
        \n \n
        \n
        ', + events: [{ + // 触发选择图片 + selector: '#' + upTriggerId, + type: 'click', + fn: function fn() { + var $file = $('#' + upFileId); + var fileElem = $file[0]; + if (fileElem) { + fileElem.click(); + } else { + // 返回 true 可关闭 panel + return true; + } + } + }, { + // 选择图片完毕 + selector: '#' + upFileId, + type: 'change', + fn: function fn() { + var $file = $('#' + upFileId); + var fileElem = $file[0]; + if (!fileElem) { + // 返回 true 可关闭 panel + return true; + } + + // 获取选中的 file 对象列表 + var fileList = fileElem.files; + if (fileList.length) { + uploadImg.uploadImg(fileList); + } + + // 返回 true 可关闭 panel + return true; + } + }] + }, // first tab end + { + title: '网络图片', + tpl: '
        \n \n
        \n \n
        \n
        ', + events: [{ + selector: '#' + linkBtnId, + type: 'click', + fn: function fn() { + var $linkUrl = $('#' + linkUrlId); + var url = $linkUrl.val().trim(); + + if (url) { + uploadImg.insertLinkImg(url); + } + + // 返回 true 表示函数执行结束之后关闭 panel + return true; + } + }] + } // second tab end + ]; // tabs end + + // 判断 tabs 的显示 + var tabsConfigResult = []; + if ((config.uploadImgShowBase64 || config.uploadImgServer || config.customUploadImg) && window.FileReader) { + // 显示“上传图片” + tabsConfigResult.push(tabsConfig[0]); + } + if (config.showLinkImg) { + // 显示“网络图片” + tabsConfigResult.push(tabsConfig[1]); + } + + // 创建 panel 并显示 + var panel = new Panel(this, { + width: 300, + tabs: tabsConfigResult + }); + panel.show(); + + // 记录属性 + this.panel = panel; + }, + + // 试图改变 active 状态 + tryChangeActive: function tryChangeActive(e) { + var editor = this.editor; + var $elem = this.$elem; + if (editor._selectedImg) { + this._active = true; + $elem.addClass('w-e-active'); + } else { + this._active = false; + $elem.removeClass('w-e-active'); + } + } +}; + +/* + 所有菜单的汇总 +*/ + +// 存储菜单的构造函数 +var MenuConstructors = {}; + +MenuConstructors.bold = Bold; + +MenuConstructors.head = Head; + +MenuConstructors.link = Link; + +MenuConstructors.italic = Italic; + +MenuConstructors.redo = Redo; + +MenuConstructors.strikeThrough = StrikeThrough; + +MenuConstructors.underline = Underline; + +MenuConstructors.undo = Undo; + +MenuConstructors.list = List; + +MenuConstructors.justify = Justify; + +MenuConstructors.foreColor = ForeColor; + +MenuConstructors.backColor = BackColor; + +MenuConstructors.quote = Quote; + +MenuConstructors.code = Code; + +MenuConstructors.emoticon = Emoticon; + +MenuConstructors.table = Table; + +MenuConstructors.video = Video; + +MenuConstructors.image = Image; + +/* + 菜单集合 +*/ +// 构造函数 +function Menus(editor) { + this.editor = editor; + this.menus = {}; +} + +// 修改原型 +Menus.prototype = { + constructor: Menus, + + // 初始化菜单 + init: function init() { + var _this = this; + + var editor = this.editor; + var config = editor.config || {}; + var configMenus = config.menus || []; // 获取配置中的菜单 + + // 根据配置信息,创建菜单 + configMenus.forEach(function (menuKey) { + var MenuConstructor = MenuConstructors[menuKey]; + if (MenuConstructor && typeof MenuConstructor === 'function') { + // 创建单个菜单 + _this.menus[menuKey] = new MenuConstructor(editor); + } + }); + + // 添加到菜单栏 + this._addToToolbar(); + + // 绑定事件 + this._bindEvent(); + }, + + // 添加到菜单栏 + _addToToolbar: function _addToToolbar() { + var editor = this.editor; + var $toolbarElem = editor.$toolbarElem; + var menus = this.menus; + var config = editor.config; + // config.zIndex 是配置的编辑区域的 z-index,菜单的 z-index 得在其基础上 +1 + var zIndex = config.zIndex + 1; + objForEach(menus, function (key, menu) { + var $elem = menu.$elem; + if ($elem) { + // 设置 z-index + $elem.css('z-index', zIndex); + $toolbarElem.append($elem); + } + }); + }, + + // 绑定菜单 click mouseenter 事件 + _bindEvent: function _bindEvent() { + var menus = this.menus; + var editor = this.editor; + objForEach(menus, function (key, menu) { + var type = menu.type; + if (!type) { + return; + } + var $elem = menu.$elem; + var droplist = menu.droplist; + var panel = menu.panel; + + // 点击类型,例如 bold + if (type === 'click' && menu.onClick) { + $elem.on('click', function (e) { + if (editor.selection.getRange() == null) { + return; + } + menu.onClick(e); + }); + } + + // 下拉框,例如 head + if (type === 'droplist' && droplist) { + $elem.on('mouseenter', function (e) { + if (editor.selection.getRange() == null) { + return; + } + // 显示 + droplist.showTimeoutId = setTimeout(function () { + droplist.show(); + }, 200); + }).on('mouseleave', function (e) { + // 隐藏 + droplist.hideTimeoutId = setTimeout(function () { + droplist.hide(); + }, 0); + }); + } + + // 弹框类型,例如 link + if (type === 'panel' && menu.onClick) { + $elem.on('click', function (e) { + e.stopPropagation(); + if (editor.selection.getRange() == null) { + return; + } + // 在自定义事件中显示 panel + menu.onClick(e); + }); + } + }); + }, + + // 尝试修改菜单状态 + changeActive: function changeActive() { + var menus = this.menus; + objForEach(menus, function (key, menu) { + if (menu.tryChangeActive) { + setTimeout(function () { + menu.tryChangeActive(); + }, 100); + } + }); + } +}; + +/* + 粘贴信息的处理 +*/ + +// 获取粘贴的纯文本 +function getPasteText(e) { + var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData; + var pasteText = void 0; + if (clipboardData == null) { + pasteText = window.clipboardData && window.clipboardData.getData('text'); + } else { + pasteText = clipboardData.getData('text/plain'); + } + + return replaceHtmlSymbol(pasteText); +} + +// 获取粘贴的html +function getPasteHtml(e, filterStyle) { + var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData; + var pasteText = void 0, + pasteHtml = void 0; + if (clipboardData == null) { + pasteText = window.clipboardData && window.clipboardData.getData('text'); + } else { + pasteText = clipboardData.getData('text/plain'); + pasteHtml = clipboardData.getData('text/html'); + } + if (!pasteHtml && pasteText) { + pasteHtml = '

        ' + replaceHtmlSymbol(pasteText) + '

        '; + } + if (!pasteHtml) { + return; + } + + // 过滤word中状态过来的无用字符 + var docSplitHtml = pasteHtml.split(''); + if (docSplitHtml.length === 2) { + pasteHtml = docSplitHtml[0]; + } + + // 过滤无用标签 + pasteHtml = pasteHtml.replace(/<(meta|script|link).+?>/igm, ''); + // 去掉注释 + pasteHtml = pasteHtml.replace(//mg, ''); + // 过滤 data-xxx 属性 + pasteHtml = pasteHtml.replace(/\s?data-.+?=('|").+?('|")/igm, ''); + + if (filterStyle) { + // 过滤样式 + pasteHtml = pasteHtml.replace(/\s?(class|style)=('|").+?('|")/igm, ''); + } else { + // 保留样式 + pasteHtml = pasteHtml.replace(/\s?class=('|").+?('|")/igm, ''); + } + + return pasteHtml; +} + +// 获取粘贴的图片文件 +function getPasteImgs(e) { + var result = []; + var txt = getPasteText(e); + if (txt) { + // 有文字,就忽略图片 + return result; + } + + var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData || {}; + var items = clipboardData.items; + if (!items) { + return result; + } + + objForEach(items, function (key, value) { + var type = value.type; + if (/image/i.test(type)) { + result.push(value.getAsFile()); + } + }); + + return result; +} + +/* + 编辑区域 +*/ + +// 获取一个 elem.childNodes 的 JSON 数据 +function getChildrenJSON($elem) { + var result = []; + var $children = $elem.childNodes() || []; // 注意 childNodes() 可以获取文本节点 + $children.forEach(function (curElem) { + var elemResult = void 0; + var nodeType = curElem.nodeType; + + // 文本节点 + if (nodeType === 3) { + elemResult = curElem.textContent; + } + + // 普通 DOM 节点 + if (nodeType === 1) { + elemResult = {}; + + // tag + elemResult.tag = curElem.nodeName.toLowerCase(); + // attr + var attrData = []; + var attrList = curElem.attributes || {}; + var attrListLength = attrList.length || 0; + for (var i = 0; i < attrListLength; i++) { + var attr = attrList[i]; + attrData.push({ + name: attr.name, + value: attr.value + }); + } + elemResult.attrs = attrData; + // children(递归) + elemResult.children = getChildrenJSON($(curElem)); + } + + result.push(elemResult); + }); + return result; +} + +// 构造函数 +function Text(editor) { + this.editor = editor; +} + +// 修改原型 +Text.prototype = { + constructor: Text, + + // 初始化 + init: function init() { + // 绑定事件 + this._bindEvent(); + }, + + // 清空内容 + clear: function clear() { + this.html('


        '); + }, + + // 获取 设置 html + html: function html(val) { + var editor = this.editor; + var $textElem = editor.$textElem; + var html = void 0; + if (val == null) { + html = $textElem.html(); + // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮,就得需要一个空的占位符 ​ ,这里替换掉 + html = html.replace(/\u200b/gm, ''); + return html; + } else { + $textElem.html(val); + + // 初始化选取,将光标定位到内容尾部 + editor.initSelection(); + } + }, + + // 获取 JSON + getJSON: function getJSON() { + var editor = this.editor; + var $textElem = editor.$textElem; + return getChildrenJSON($textElem); + }, + + // 获取 设置 text + text: function text(val) { + var editor = this.editor; + var $textElem = editor.$textElem; + var text = void 0; + if (val == null) { + text = $textElem.text(); + // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮,就得需要一个空的占位符 ​ ,这里替换掉 + text = text.replace(/\u200b/gm, ''); + return text; + } else { + $textElem.text('

        ' + val + '

        '); + + // 初始化选取,将光标定位到内容尾部 + editor.initSelection(); + } + }, + + // 追加内容 + append: function append(html) { + var editor = this.editor; + var $textElem = editor.$textElem; + $textElem.append($(html)); + + // 初始化选取,将光标定位到内容尾部 + editor.initSelection(); + }, + + // 绑定事件 + _bindEvent: function _bindEvent() { + // 实时保存选取 + this._saveRangeRealTime(); + + // 按回车建时的特殊处理 + this._enterKeyHandle(); + + // 清空时保留


        + this._clearHandle(); + + // 粘贴事件(粘贴文字,粘贴图片) + this._pasteHandle(); + + // tab 特殊处理 + this._tabHandle(); + + // img 点击 + this._imgHandle(); + + // 拖拽事件 + this._dragHandle(); + }, + + // 实时保存选取 + _saveRangeRealTime: function _saveRangeRealTime() { + var editor = this.editor; + var $textElem = editor.$textElem; + + // 保存当前的选区 + function saveRange(e) { + // 随时保存选区 + editor.selection.saveRange(); + // 更新按钮 ative 状态 + editor.menus.changeActive(); + } + // 按键后保存 + $textElem.on('keyup', saveRange); + $textElem.on('mousedown', function (e) { + // mousedown 状态下,鼠标滑动到编辑区域外面,也需要保存选区 + $textElem.on('mouseleave', saveRange); + }); + $textElem.on('mouseup', function (e) { + saveRange(); + // 在编辑器区域之内完成点击,取消鼠标滑动到编辑区外面的事件 + $textElem.off('mouseleave', saveRange); + }); + }, + + // 按回车键时的特殊处理 + _enterKeyHandle: function _enterKeyHandle() { + var editor = this.editor; + var $textElem = editor.$textElem; + + function insertEmptyP($selectionElem) { + var $p = $('


        '); + $p.insertBefore($selectionElem); + editor.selection.createRangeByElem($p, true); + editor.selection.restoreSelection(); + $selectionElem.remove(); + } + + // 将回车之后生成的非

        的顶级标签,改为

        + function pHandle(e) { + var $selectionElem = editor.selection.getSelectionContainerElem(); + var $parentElem = $selectionElem.parent(); + + if ($parentElem.html() === '
        ') { + // 回车之前光标所在一个

        .....

        ,忽然回车生成一个空的


        + // 而且继续回车跳不出去,因此只能特殊处理 + insertEmptyP($selectionElem); + return; + } + + if (!$parentElem.equal($textElem)) { + // 不是顶级标签 + return; + } + + var nodeName = $selectionElem.getNodeName(); + if (nodeName === 'P') { + // 当前的标签是 P ,不用做处理 + return; + } + + if ($selectionElem.text()) { + // 有内容,不做处理 + return; + } + + // 插入

        ,并将选取定位到

        ,删除当前标签 + insertEmptyP($selectionElem); + } + + $textElem.on('keyup', function (e) { + if (e.keyCode !== 13) { + // 不是回车键 + return; + } + // 将回车之后生成的非

        的顶级标签,改为

        + pHandle(e); + }); + + //

        回车时 特殊处理 + function codeHandle(e) { + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (!$selectionElem) { + return; + } + var $parentElem = $selectionElem.parent(); + var selectionNodeName = $selectionElem.getNodeName(); + var parentNodeName = $parentElem.getNodeName(); + + if (selectionNodeName !== 'CODE' || parentNodeName !== 'PRE') { + // 不符合要求 忽略 + return; + } + + if (!editor.cmd.queryCommandSupported('insertHTML')) { + // 必须原生支持 insertHTML 命令 + return; + } + + // 处理:光标定位到代码末尾,联系点击两次回车,即跳出代码块 + if (editor._willBreakCode === true) { + // 此时可以跳出代码块 + // 插入

        ,并将选取定位到

        + var $p = $('


        '); + $p.insertAfter($parentElem); + editor.selection.createRangeByElem($p, true); + editor.selection.restoreSelection(); + + // 修改状态 + editor._willBreakCode = false; + + e.preventDefault(); + return; + } + + var _startOffset = editor.selection.getRange().startOffset; + + // 处理:回车时,不能插入
        而是插入 \n ,因为是在 pre 标签里面 + editor.cmd.do('insertHTML', '\n'); + editor.selection.saveRange(); + if (editor.selection.getRange().startOffset === _startOffset) { + // 没起作用,再来一遍 + editor.cmd.do('insertHTML', '\n'); + } + + var codeLength = $selectionElem.html().length; + if (editor.selection.getRange().startOffset + 1 === codeLength) { + // 说明光标在代码最后的位置,执行了回车操作 + // 记录下来,以便下次回车时候跳出 code + editor._willBreakCode = true; + } + + // 阻止默认行为 + e.preventDefault(); + } + + $textElem.on('keydown', function (e) { + if (e.keyCode !== 13) { + // 不是回车键 + // 取消即将跳转代码块的记录 + editor._willBreakCode = false; + return; + } + //
        回车时 特殊处理 + codeHandle(e); + }); + }, + + // 清空时保留


        + _clearHandle: function _clearHandle() { + var editor = this.editor; + var $textElem = editor.$textElem; + + $textElem.on('keydown', function (e) { + if (e.keyCode !== 8) { + return; + } + var txtHtml = $textElem.html().toLowerCase().trim(); + if (txtHtml === '


        ') { + // 最后剩下一个空行,就不再删除了 + e.preventDefault(); + return; + } + }); + + $textElem.on('keyup', function (e) { + if (e.keyCode !== 8) { + return; + } + var $p = void 0; + var txtHtml = $textElem.html().toLowerCase().trim(); + + // firefox 时用 txtHtml === '
        ' 判断,其他用 !txtHtml 判断 + if (!txtHtml || txtHtml === '
        ') { + // 内容空了 + $p = $('


        '); + $textElem.html(''); // 一定要先清空,否则在 firefox 下有问题 + $textElem.append($p); + editor.selection.createRangeByElem($p, false, true); + editor.selection.restoreSelection(); + } + }); + }, + + // 粘贴事件(粘贴文字 粘贴图片) + _pasteHandle: function _pasteHandle() { + var editor = this.editor; + var config = editor.config; + var pasteFilterStyle = config.pasteFilterStyle; + var pasteTextHandle = config.pasteTextHandle; + var $textElem = editor.$textElem; + + // 粘贴图片、文本的事件,每次只能执行一个 + // 判断该次粘贴事件是否可以执行 + var pasteTime = 0; + function canDo() { + var now = Date.now(); + var flag = false; + if (now - pasteTime >= 500) { + // 间隔大于 500 ms ,可以执行 + flag = true; + } + pasteTime = now; + return flag; + } + function resetTime() { + pasteTime = 0; + } + + // 粘贴文字 + $textElem.on('paste', function (e) { + if (UA.isIE()) { + return; + } else { + // 阻止默认行为,使用 execCommand 的粘贴命令 + e.preventDefault(); + } + + // 粘贴图片和文本,只能同时使用一个 + if (!canDo()) { + return; + } + + // 获取粘贴的文字 + var pasteHtml = getPasteHtml(e, pasteFilterStyle); + var pasteText = getPasteText(e); + pasteText = pasteText.replace(/\n/gm, '
        '); + + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (!$selectionElem) { + return; + } + var nodeName = $selectionElem.getNodeName(); + + // code 中只能粘贴纯文本 + if (nodeName === 'CODE' || nodeName === 'PRE') { + if (pasteTextHandle && isFunction(pasteTextHandle)) { + // 用户自定义过滤处理粘贴内容 + pasteText = '' + (pasteTextHandle(pasteText) || ''); + } + editor.cmd.do('insertHTML', '

        ' + pasteText + '

        '); + return; + } + + // 先放开注释,有问题再追查 ———— + // // 表格中忽略,可能会出现异常问题 + // if (nodeName === 'TD' || nodeName === 'TH') { + // return + // } + + if (!pasteHtml) { + // 没有内容,可继续执行下面的图片粘贴 + resetTime(); + return; + } + try { + // firefox 中,获取的 pasteHtml 可能是没有
          包裹的
        • + // 因此执行 insertHTML 会报错 + if (pasteTextHandle && isFunction(pasteTextHandle)) { + // 用户自定义过滤处理粘贴内容 + pasteHtml = '' + (pasteTextHandle(pasteHtml) || ''); + } + editor.cmd.do('insertHTML', pasteHtml); + } catch (ex) { + // 此时使用 pasteText 来兼容一下 + if (pasteTextHandle && isFunction(pasteTextHandle)) { + // 用户自定义过滤处理粘贴内容 + pasteText = '' + (pasteTextHandle(pasteText) || ''); + } + editor.cmd.do('insertHTML', '

          ' + pasteText + '

          '); + } + }); + + // 粘贴图片 + $textElem.on('paste', function (e) { + if (UA.isIE()) { + return; + } else { + e.preventDefault(); + } + + // 粘贴图片和文本,只能同时使用一个 + if (!canDo()) { + return; + } + + // 获取粘贴的图片 + var pasteFiles = getPasteImgs(e); + if (!pasteFiles || !pasteFiles.length) { + return; + } + + // 获取当前的元素 + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (!$selectionElem) { + return; + } + var nodeName = $selectionElem.getNodeName(); + + // code 中粘贴忽略 + if (nodeName === 'CODE' || nodeName === 'PRE') { + return; + } + + // 上传图片 + var uploadImg = editor.uploadImg; + uploadImg.uploadImg(pasteFiles); + }); + }, + + // tab 特殊处理 + _tabHandle: function _tabHandle() { + var editor = this.editor; + var $textElem = editor.$textElem; + + $textElem.on('keydown', function (e) { + if (e.keyCode !== 9) { + return; + } + if (!editor.cmd.queryCommandSupported('insertHTML')) { + // 必须原生支持 insertHTML 命令 + return; + } + var $selectionElem = editor.selection.getSelectionContainerElem(); + if (!$selectionElem) { + return; + } + var $parentElem = $selectionElem.parent(); + var selectionNodeName = $selectionElem.getNodeName(); + var parentNodeName = $parentElem.getNodeName(); + + if (selectionNodeName === 'CODE' && parentNodeName === 'PRE') { + //
           里面
          +                editor.cmd.do('insertHTML', '    ');
          +            } else {
          +                // 普通文字
          +                editor.cmd.do('insertHTML', '    ');
          +            }
          +
          +            e.preventDefault();
          +        });
          +    },
          +
          +    // img 点击
          +    _imgHandle: function _imgHandle() {
          +        var editor = this.editor;
          +        var $textElem = editor.$textElem;
          +
          +        // 为图片增加 selected 样式
          +        $textElem.on('click', 'img', function (e) {
          +            var img = this;
          +            var $img = $(img);
          +
          +            if ($img.attr('data-w-e') === '1') {
          +                // 是表情图片,忽略
          +                return;
          +            }
          +
          +            // 记录当前点击过的图片
          +            editor._selectedImg = $img;
          +
          +            // 修改选区并 restore ,防止用户此时点击退格键,会删除其他内容
          +            editor.selection.createRangeByElem($img);
          +            editor.selection.restoreSelection();
          +        });
          +
          +        // 去掉图片的 selected 样式
          +        $textElem.on('click  keyup', function (e) {
          +            if (e.target.matches('img')) {
          +                // 点击的是图片,忽略
          +                return;
          +            }
          +            // 删除记录
          +            editor._selectedImg = null;
          +        });
          +    },
          +
          +    // 拖拽事件
          +    _dragHandle: function _dragHandle() {
          +        var editor = this.editor;
          +
          +        // 禁用 document 拖拽事件
          +        var $document = $(document);
          +        $document.on('dragleave drop dragenter dragover', function (e) {
          +            e.preventDefault();
          +        });
          +
          +        // 添加编辑区域拖拽事件
          +        var $textElem = editor.$textElem;
          +        $textElem.on('drop', function (e) {
          +            e.preventDefault();
          +            var files = e.dataTransfer && e.dataTransfer.files;
          +            if (!files || !files.length) {
          +                return;
          +            }
          +
          +            // 上传图片
          +            var uploadImg = editor.uploadImg;
          +            uploadImg.uploadImg(files);
          +        });
          +    }
          +};
          +
          +/*
          +    命令,封装 document.execCommand
          +*/
          +
          +// 构造函数
          +function Command(editor) {
          +    this.editor = editor;
          +}
          +
          +// 修改原型
          +Command.prototype = {
          +    constructor: Command,
          +
          +    // 执行命令
          +    do: function _do(name, value) {
          +        var editor = this.editor;
          +
          +        // 使用 styleWithCSS
          +        if (!editor._useStyleWithCSS) {
          +            document.execCommand('styleWithCSS', null, true);
          +            editor._useStyleWithCSS = true;
          +        }
          +
          +        // 如果无选区,忽略
          +        if (!editor.selection.getRange()) {
          +            return;
          +        }
          +
          +        // 恢复选取
          +        editor.selection.restoreSelection();
          +
          +        // 执行
          +        var _name = '_' + name;
          +        if (this[_name]) {
          +            // 有自定义事件
          +            this[_name](value);
          +        } else {
          +            // 默认 command
          +            this._execCommand(name, value);
          +        }
          +
          +        // 修改菜单状态
          +        editor.menus.changeActive();
          +
          +        // 最后,恢复选取保证光标在原来的位置闪烁
          +        editor.selection.saveRange();
          +        editor.selection.restoreSelection();
          +
          +        // 触发 onchange
          +        editor.change && editor.change();
          +    },
          +
          +    // 自定义 insertHTML 事件
          +    _insertHTML: function _insertHTML(html) {
          +        var editor = this.editor;
          +        var range = editor.selection.getRange();
          +
          +        if (this.queryCommandSupported('insertHTML')) {
          +            // W3C
          +            this._execCommand('insertHTML', html);
          +        } else if (range.insertNode) {
          +            // IE
          +            range.deleteContents();
          +            range.insertNode($(html)[0]);
          +        } else if (range.pasteHTML) {
          +            // IE <= 10
          +            range.pasteHTML(html);
          +        }
          +    },
          +
          +    // 插入 elem
          +    _insertElem: function _insertElem($elem) {
          +        var editor = this.editor;
          +        var range = editor.selection.getRange();
          +
          +        if (range.insertNode) {
          +            range.deleteContents();
          +            range.insertNode($elem[0]);
          +        }
          +    },
          +
          +    // 封装 execCommand
          +    _execCommand: function _execCommand(name, value) {
          +        document.execCommand(name, false, value);
          +    },
          +
          +    // 封装 document.queryCommandValue
          +    queryCommandValue: function queryCommandValue(name) {
          +        return document.queryCommandValue(name);
          +    },
          +
          +    // 封装 document.queryCommandState
          +    queryCommandState: function queryCommandState(name) {
          +        return document.queryCommandState(name);
          +    },
          +
          +    // 封装 document.queryCommandSupported
          +    queryCommandSupported: function queryCommandSupported(name) {
          +        return document.queryCommandSupported(name);
          +    }
          +};
          +
          +/*
          +    selection range API
          +*/
          +
          +// 构造函数
          +function API(editor) {
          +    this.editor = editor;
          +    this._currentRange = null;
          +}
          +
          +// 修改原型
          +API.prototype = {
          +    constructor: API,
          +
          +    // 获取 range 对象
          +    getRange: function getRange() {
          +        return this._currentRange;
          +    },
          +
          +    // 保存选区
          +    saveRange: function saveRange(_range) {
          +        if (_range) {
          +            // 保存已有选区
          +            this._currentRange = _range;
          +            return;
          +        }
          +
          +        // 获取当前的选区
          +        var selection = window.getSelection();
          +        if (selection.rangeCount === 0) {
          +            return;
          +        }
          +        var range = selection.getRangeAt(0);
          +
          +        // 判断选区内容是否在编辑内容之内
          +        var $containerElem = this.getSelectionContainerElem(range);
          +        if (!$containerElem) {
          +            return;
          +        }
          +        var editor = this.editor;
          +        var $textElem = editor.$textElem;
          +        if ($textElem.isContain($containerElem)) {
          +            // 是编辑内容之内的
          +            this._currentRange = range;
          +        }
          +    },
          +
          +    // 折叠选区
          +    collapseRange: function collapseRange(toStart) {
          +        if (toStart == null) {
          +            // 默认为 false
          +            toStart = false;
          +        }
          +        var range = this._currentRange;
          +        if (range) {
          +            range.collapse(toStart);
          +        }
          +    },
          +
          +    // 选中区域的文字
          +    getSelectionText: function getSelectionText() {
          +        var range = this._currentRange;
          +        if (range) {
          +            return this._currentRange.toString();
          +        } else {
          +            return '';
          +        }
          +    },
          +
          +    // 选区的 $Elem
          +    getSelectionContainerElem: function getSelectionContainerElem(range) {
          +        range = range || this._currentRange;
          +        var elem = void 0;
          +        if (range) {
          +            elem = range.commonAncestorContainer;
          +            return $(elem.nodeType === 1 ? elem : elem.parentNode);
          +        }
          +    },
          +    getSelectionStartElem: function getSelectionStartElem(range) {
          +        range = range || this._currentRange;
          +        var elem = void 0;
          +        if (range) {
          +            elem = range.startContainer;
          +            return $(elem.nodeType === 1 ? elem : elem.parentNode);
          +        }
          +    },
          +    getSelectionEndElem: function getSelectionEndElem(range) {
          +        range = range || this._currentRange;
          +        var elem = void 0;
          +        if (range) {
          +            elem = range.endContainer;
          +            return $(elem.nodeType === 1 ? elem : elem.parentNode);
          +        }
          +    },
          +
          +    // 选区是否为空
          +    isSelectionEmpty: function isSelectionEmpty() {
          +        var range = this._currentRange;
          +        if (range && range.startContainer) {
          +            if (range.startContainer === range.endContainer) {
          +                if (range.startOffset === range.endOffset) {
          +                    return true;
          +                }
          +            }
          +        }
          +        return false;
          +    },
          +
          +    // 恢复选区
          +    restoreSelection: function restoreSelection() {
          +        var selection = window.getSelection();
          +        selection.removeAllRanges();
          +        selection.addRange(this._currentRange);
          +    },
          +
          +    // 创建一个空白(即 ​ 字符)选区
          +    createEmptyRange: function createEmptyRange() {
          +        var editor = this.editor;
          +        var range = this.getRange();
          +        var $elem = void 0;
          +
          +        if (!range) {
          +            // 当前无 range
          +            return;
          +        }
          +        if (!this.isSelectionEmpty()) {
          +            // 当前选区必须没有内容才可以
          +            return;
          +        }
          +
          +        try {
          +            // 目前只支持 webkit 内核
          +            if (UA.isWebkit()) {
          +                // 插入 ​
          +                editor.cmd.do('insertHTML', '​');
          +                // 修改 offset 位置
          +                range.setEnd(range.endContainer, range.endOffset + 1);
          +                // 存储
          +                this.saveRange(range);
          +            } else {
          +                $elem = $('​');
          +                editor.cmd.do('insertElem', $elem);
          +                this.createRangeByElem($elem, true);
          +            }
          +        } catch (ex) {
          +            // 部分情况下会报错,兼容一下
          +        }
          +    },
          +
          +    // 根据 $Elem 设置选区
          +    createRangeByElem: function createRangeByElem($elem, toStart, isContent) {
          +        // $elem - 经过封装的 elem
          +        // toStart - true 开始位置,false 结束位置
          +        // isContent - 是否选中Elem的内容
          +        if (!$elem.length) {
          +            return;
          +        }
          +
          +        var elem = $elem[0];
          +        var range = document.createRange();
          +
          +        if (isContent) {
          +            range.selectNodeContents(elem);
          +        } else {
          +            range.selectNode(elem);
          +        }
          +
          +        if (typeof toStart === 'boolean') {
          +            range.collapse(toStart);
          +        }
          +
          +        // 存储 range
          +        this.saveRange(range);
          +    }
          +};
          +
          +/*
          +    上传进度条
          +*/
          +
          +function Progress(editor) {
          +    this.editor = editor;
          +    this._time = 0;
          +    this._isShow = false;
          +    this._isRender = false;
          +    this._timeoutId = 0;
          +    this.$textContainer = editor.$textContainerElem;
          +    this.$bar = $('
          '); +} + +Progress.prototype = { + constructor: Progress, + + show: function show(progress) { + var _this = this; + + // 状态处理 + if (this._isShow) { + return; + } + this._isShow = true; + + // 渲染 + var $bar = this.$bar; + if (!this._isRender) { + var $textContainer = this.$textContainer; + $textContainer.append($bar); + } else { + this._isRender = true; + } + + // 改变进度(节流,100ms 渲染一次) + if (Date.now() - this._time > 100) { + if (progress <= 1) { + $bar.css('width', progress * 100 + '%'); + this._time = Date.now(); + } + } + + // 隐藏 + var timeoutId = this._timeoutId; + if (timeoutId) { + clearTimeout(timeoutId); + } + timeoutId = setTimeout(function () { + _this._hide(); + }, 500); + }, + + _hide: function _hide() { + var $bar = this.$bar; + $bar.remove(); + + // 修改状态 + this._time = 0; + this._isShow = false; + this._isRender = false; + } +}; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + +/* + 上传图片 +*/ + +// 构造函数 +function UploadImg(editor) { + this.editor = editor; +} + +// 原型 +UploadImg.prototype = { + constructor: UploadImg, + + // 根据 debug 弹出不同的信息 + _alert: function _alert(alertInfo, debugInfo) { + var editor = this.editor; + var debug = editor.config.debug; + var customAlert = editor.config.customAlert; + + if (debug) { + throw new Error('wangEditor: ' + (debugInfo || alertInfo)); + } else { + if (customAlert && typeof customAlert === 'function') { + customAlert(alertInfo); + } else { + alert(alertInfo); + } + } + }, + + // 根据链接插入图片 + insertLinkImg: function insertLinkImg(link) { + var _this2 = this; + + if (!link) { + return; + } + var editor = this.editor; + var config = editor.config; + + // 校验格式 + var linkImgCheck = config.linkImgCheck; + var checkResult = void 0; + if (linkImgCheck && typeof linkImgCheck === 'function') { + checkResult = linkImgCheck(link); + if (typeof checkResult === 'string') { + // 校验失败,提示信息 + alert(checkResult); + return; + } + } + + editor.cmd.do('insertHTML', ''); + + // 验证图片 url 是否有效,无效的话给出提示 + var img = document.createElement('img'); + img.onload = function () { + var callback = config.linkImgCallback; + if (callback && typeof callback === 'function') { + callback(link); + } + + img = null; + }; + img.onerror = function () { + img = null; + // 无法成功下载图片 + _this2._alert('插入图片错误', 'wangEditor: \u63D2\u5165\u56FE\u7247\u51FA\u9519\uFF0C\u56FE\u7247\u94FE\u63A5\u662F "' + link + '"\uFF0C\u4E0B\u8F7D\u8BE5\u94FE\u63A5\u5931\u8D25'); + return; + }; + img.onabort = function () { + img = null; + }; + img.src = link; + }, + + // 上传图片 + uploadImg: function uploadImg(files) { + var _this3 = this; + + if (!files || !files.length) { + return; + } + + // ------------------------------ 获取配置信息 ------------------------------ + var editor = this.editor; + var config = editor.config; + var uploadImgServer = config.uploadImgServer; + var uploadImgShowBase64 = config.uploadImgShowBase64; + + var maxSize = config.uploadImgMaxSize; + var maxSizeM = maxSize / 1024 / 1024; + var maxLength = config.uploadImgMaxLength || 10000; + var uploadFileName = config.uploadFileName || ''; + var uploadImgParams = config.uploadImgParams || {}; + var uploadImgParamsWithUrl = config.uploadImgParamsWithUrl; + var uploadImgHeaders = config.uploadImgHeaders || {}; + var hooks = config.uploadImgHooks || {}; + var timeout = config.uploadImgTimeout || 3000; + var withCredentials = config.withCredentials; + if (withCredentials == null) { + withCredentials = false; + } + var customUploadImg = config.customUploadImg; + + if (!customUploadImg) { + // 没有 customUploadImg 的情况下,需要如下两个配置才能继续进行图片上传 + if (!uploadImgServer && !uploadImgShowBase64) { + return; + } + } + + // ------------------------------ 验证文件信息 ------------------------------ + var resultFiles = []; + var errInfo = []; + arrForEach(files, function (file) { + var name = file.name; + var size = file.size; + + // chrome 低版本 name === undefined + if (!name || !size) { + return; + } + + if (/\.(jpg|jpeg|png|bmp|gif)$/i.test(name) === false) { + // 后缀名不合法,不是图片 + errInfo.push('\u3010' + name + '\u3011\u4E0D\u662F\u56FE\u7247'); + return; + } + if (maxSize < size) { + // 上传图片过大 + errInfo.push('\u3010' + name + '\u3011\u5927\u4E8E ' + maxSizeM + 'M'); + return; + } + + // 验证通过的加入结果列表 + resultFiles.push(file); + }); + // 抛出验证信息 + if (errInfo.length) { + this._alert('图片验证未通过: \n' + errInfo.join('\n')); + return; + } + if (resultFiles.length > maxLength) { + this._alert('一次最多上传' + maxLength + '张图片'); + return; + } + + // ------------------------------ 自定义上传 ------------------------------ + if (customUploadImg && typeof customUploadImg === 'function') { + customUploadImg(resultFiles, this.insertLinkImg.bind(this)); + + // 阻止以下代码执行 + return; + } + + // 添加图片数据 + var formdata = new FormData(); + arrForEach(resultFiles, function (file) { + var name = uploadFileName || file.name; + formdata.append(name, file); + }); + + // ------------------------------ 上传图片 ------------------------------ + if (uploadImgServer && typeof uploadImgServer === 'string') { + // 添加参数 + var uploadImgServerArr = uploadImgServer.split('#'); + uploadImgServer = uploadImgServerArr[0]; + var uploadImgServerHash = uploadImgServerArr[1] || ''; + objForEach(uploadImgParams, function (key, val) { + val = encodeURIComponent(val); + + // 第一,将参数拼接到 url 中 + if (uploadImgParamsWithUrl) { + if (uploadImgServer.indexOf('?') > 0) { + uploadImgServer += '&'; + } else { + uploadImgServer += '?'; + } + uploadImgServer = uploadImgServer + key + '=' + val; + } + + // 第二,将参数添加到 formdata 中 + formdata.append(key, val); + }); + if (uploadImgServerHash) { + uploadImgServer += '#' + uploadImgServerHash; + } + + // 定义 xhr + var xhr = new XMLHttpRequest(); + xhr.open('POST', uploadImgServer); + + // 设置超时 + xhr.timeout = timeout; + xhr.ontimeout = function () { + // hook - timeout + if (hooks.timeout && typeof hooks.timeout === 'function') { + hooks.timeout(xhr, editor); + } + + _this3._alert('上传图片超时'); + }; + + // 监控 progress + if (xhr.upload) { + xhr.upload.onprogress = function (e) { + var percent = void 0; + // 进度条 + var progressBar = new Progress(editor); + if (e.lengthComputable) { + percent = e.loaded / e.total; + progressBar.show(percent); + } + }; + } + + // 返回数据 + xhr.onreadystatechange = function () { + var result = void 0; + if (xhr.readyState === 4) { + if (xhr.status < 200 || xhr.status >= 300) { + // hook - error + if (hooks.error && typeof hooks.error === 'function') { + hooks.error(xhr, editor); + } + + // xhr 返回状态错误 + _this3._alert('上传图片发生错误', '\u4E0A\u4F20\u56FE\u7247\u53D1\u751F\u9519\u8BEF\uFF0C\u670D\u52A1\u5668\u8FD4\u56DE\u72B6\u6001\u662F ' + xhr.status); + return; + } + + result = xhr.responseText; + if ((typeof result === 'undefined' ? 'undefined' : _typeof(result)) !== 'object') { + try { + result = JSON.parse(result); + } catch (ex) { + // hook - fail + if (hooks.fail && typeof hooks.fail === 'function') { + hooks.fail(xhr, editor, result); + } + + _this3._alert('上传图片失败', '上传图片返回结果错误,返回结果是: ' + result); + return; + } + } + if (!hooks.customInsert && result.errno != '0') { + // hook - fail + if (hooks.fail && typeof hooks.fail === 'function') { + hooks.fail(xhr, editor, result); + } + + // 数据错误 + _this3._alert('上传图片失败', '上传图片返回结果错误,返回结果 errno=' + result.errno); + } else { + if (hooks.customInsert && typeof hooks.customInsert === 'function') { + // 使用者自定义插入方法 + hooks.customInsert(_this3.insertLinkImg.bind(_this3), result, editor); + } else { + // 将图片插入编辑器 + var data = result.data || []; + data.forEach(function (link) { + _this3.insertLinkImg(link); + }); + } + + // hook - success + if (hooks.success && typeof hooks.success === 'function') { + hooks.success(xhr, editor, result); + } + } + } + }; + + // hook - before + if (hooks.before && typeof hooks.before === 'function') { + var beforeResult = hooks.before(xhr, editor, resultFiles); + if (beforeResult && (typeof beforeResult === 'undefined' ? 'undefined' : _typeof(beforeResult)) === 'object') { + if (beforeResult.prevent) { + // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传 + this._alert(beforeResult.msg); + return; + } + } + } + + // 自定义 headers + objForEach(uploadImgHeaders, function (key, val) { + xhr.setRequestHeader(key, val); + }); + + // 跨域传 cookie + xhr.withCredentials = withCredentials; + + // 发送请求 + xhr.send(formdata); + + // 注意,要 return 。不去操作接下来的 base64 显示方式 + return; + } + + // ------------------------------ 显示 base64 格式 ------------------------------ + if (uploadImgShowBase64) { + arrForEach(files, function (file) { + var _this = _this3; + var reader = new FileReader(); + reader.readAsDataURL(file); + reader.onload = function () { + _this.insertLinkImg(this.result); + }; + }); + } + } +}; + +/* + 编辑器构造函数 +*/ + +// id,累加 +var editorId = 1; + +// 构造函数 +function Editor(toolbarSelector, textSelector) { + if (toolbarSelector == null) { + // 没有传入任何参数,报错 + throw new Error('错误:初始化编辑器时候未传入任何参数,请查阅文档'); + } + // id,用以区分单个页面不同的编辑器对象 + this.id = 'wangEditor-' + editorId++; + + this.toolbarSelector = toolbarSelector; + this.textSelector = textSelector; + + // 自定义配置 + this.customConfig = {}; +} + +// 修改原型 +Editor.prototype = { + constructor: Editor, + + // 初始化配置 + _initConfig: function _initConfig() { + // _config 是默认配置,this.customConfig 是用户自定义配置,将它们 merge 之后再赋值 + var target = {}; + this.config = Object.assign(target, config, this.customConfig); + + // 将语言配置,生成正则表达式 + var langConfig = this.config.lang || {}; + var langArgs = []; + objForEach(langConfig, function (key, val) { + // key 即需要生成正则表达式的规则,如“插入链接” + // val 即需要被替换成的语言,如“insert link” + langArgs.push({ + reg: new RegExp(key, 'img'), + val: val + + }); + }); + this.config.langArgs = langArgs; + }, + + // 初始化 DOM + _initDom: function _initDom() { + var _this = this; + + var toolbarSelector = this.toolbarSelector; + var $toolbarSelector = $(toolbarSelector); + var textSelector = this.textSelector; + + var config$$1 = this.config; + var zIndex = config$$1.zIndex; + + // 定义变量 + var $toolbarElem = void 0, + $textContainerElem = void 0, + $textElem = void 0, + $children = void 0; + + if (textSelector == null) { + // 只传入一个参数,即是容器的选择器或元素,toolbar 和 text 的元素自行创建 + $toolbarElem = $('
          '); + $textContainerElem = $('
          '); + + // 将编辑器区域原有的内容,暂存起来 + $children = $toolbarSelector.children(); + + // 添加到 DOM 结构中 + $toolbarSelector.append($toolbarElem).append($textContainerElem); + + // 自行创建的,需要配置默认的样式 + $toolbarElem.css('background-color', '#f1f1f1').css('border', '1px solid #ccc'); + $textContainerElem.css('border', '1px solid #ccc').css('border-top', 'none').css('height', '300px'); + } else { + // toolbar 和 text 的选择器都有值,记录属性 + $toolbarElem = $toolbarSelector; + $textContainerElem = $(textSelector); + // 将编辑器区域原有的内容,暂存起来 + $children = $textContainerElem.children(); + } + + // 编辑区域 + $textElem = $('
          '); + $textElem.attr('contenteditable', 'true').css('width', '100%').css('height', '100%'); + + // 初始化编辑区域内容 + if ($children && $children.length) { + $textElem.append($children); + } else { + $textElem.append($('


          ')); + } + + // 编辑区域加入DOM + $textContainerElem.append($textElem); + + // 设置通用的 class + $toolbarElem.addClass('w-e-toolbar'); + $textContainerElem.addClass('w-e-text-container'); + $textContainerElem.css('z-index', zIndex); + $textElem.addClass('w-e-text'); + + // 添加 ID + var toolbarElemId = getRandom('toolbar-elem'); + $toolbarElem.attr('id', toolbarElemId); + var textElemId = getRandom('text-elem'); + $textElem.attr('id', textElemId); + + // 记录属性 + this.$toolbarElem = $toolbarElem; + this.$textContainerElem = $textContainerElem; + this.$textElem = $textElem; + this.toolbarElemId = toolbarElemId; + this.textElemId = textElemId; + + // 记录输入法的开始和结束 + var compositionEnd = true; + $textContainerElem.on('compositionstart', function () { + // 输入法开始输入 + compositionEnd = false; + }); + $textContainerElem.on('compositionend', function () { + // 输入法结束输入 + compositionEnd = true; + }); + + // 绑定 onchange + $textContainerElem.on('click keyup', function () { + // 输入法结束才出发 onchange + compositionEnd && _this.change && _this.change(); + }); + $toolbarElem.on('click', function () { + this.change && this.change(); + }); + + //绑定 onfocus 与 onblur 事件 + if (config$$1.onfocus || config$$1.onblur) { + // 当前编辑器是否是焦点状态 + this.isFocus = false; + + $(document).on('click', function (e) { + //判断当前点击元素是否在编辑器内 + var isChild = $textElem.isContain($(e.target)); + + //判断当前点击元素是否为工具栏 + var isToolbar = $toolbarElem.isContain($(e.target)); + var isMenu = $toolbarElem[0] == e.target ? true : false; + + if (!isChild) { + //若为选择工具栏中的功能,则不视为成blur操作 + if (isToolbar && !isMenu) { + return; + } + + if (_this.isFocus) { + _this.onblur && _this.onblur(); + } + _this.isFocus = false; + } else { + if (!_this.isFocus) { + _this.onfocus && _this.onfocus(); + } + _this.isFocus = true; + } + }); + } + }, + + // 封装 command + _initCommand: function _initCommand() { + this.cmd = new Command(this); + }, + + // 封装 selection range API + _initSelectionAPI: function _initSelectionAPI() { + this.selection = new API(this); + }, + + // 添加图片上传 + _initUploadImg: function _initUploadImg() { + this.uploadImg = new UploadImg(this); + }, + + // 初始化菜单 + _initMenus: function _initMenus() { + this.menus = new Menus(this); + this.menus.init(); + }, + + // 添加 text 区域 + _initText: function _initText() { + this.txt = new Text(this); + this.txt.init(); + }, + + // 初始化选区,将光标定位到内容尾部 + initSelection: function initSelection(newLine) { + var $textElem = this.$textElem; + var $children = $textElem.children(); + if (!$children.length) { + // 如果编辑器区域无内容,添加一个空行,重新设置选区 + $textElem.append($('


          ')); + this.initSelection(); + return; + } + + var $last = $children.last(); + + if (newLine) { + // 新增一个空行 + var html = $last.html().toLowerCase(); + var nodeName = $last.getNodeName(); + if (html !== '
          ' && html !== '' || nodeName !== 'P') { + // 最后一个元素不是


          ,添加一个空行,重新设置选区 + $textElem.append($('


          ')); + this.initSelection(); + return; + } + } + + this.selection.createRangeByElem($last, false, true); + this.selection.restoreSelection(); + }, + + // 绑定事件 + _bindEvent: function _bindEvent() { + // -------- 绑定 onchange 事件 -------- + var onChangeTimeoutId = 0; + var beforeChangeHtml = this.txt.html(); + var config$$1 = this.config; + + // onchange 触发延迟时间 + var onchangeTimeout = config$$1.onchangeTimeout; + onchangeTimeout = parseInt(onchangeTimeout, 10); + if (!onchangeTimeout || onchangeTimeout <= 0) { + onchangeTimeout = 200; + } + + var onchange = config$$1.onchange; + if (onchange && typeof onchange === 'function') { + // 触发 change 的有三个场景: + // 1. $textContainerElem.on('click keyup') + // 2. $toolbarElem.on('click') + // 3. editor.cmd.do() + this.change = function () { + // 判断是否有变化 + var currentHtml = this.txt.html(); + + if (currentHtml.length === beforeChangeHtml.length) { + // 需要比较每一个字符 + if (currentHtml === beforeChangeHtml) { + return; + } + } + + // 执行,使用节流 + if (onChangeTimeoutId) { + clearTimeout(onChangeTimeoutId); + } + onChangeTimeoutId = setTimeout(function () { + // 触发配置的 onchange 函数 + onchange(currentHtml); + beforeChangeHtml = currentHtml; + }, onchangeTimeout); + }; + } + + // -------- 绑定 onblur 事件 -------- + var onblur = config$$1.onblur; + if (onblur && typeof onblur === 'function') { + this.onblur = function () { + var currentHtml = this.txt.html(); + onblur(currentHtml); + }; + } + + // -------- 绑定 onfocus 事件 -------- + var onfocus = config$$1.onfocus; + if (onfocus && typeof onfocus === 'function') { + this.onfocus = function () { + onfocus(); + }; + } + }, + + // 创建编辑器 + create: function create() { + // 初始化配置信息 + this._initConfig(); + + // 初始化 DOM + this._initDom(); + + // 封装 command API + this._initCommand(); + + // 封装 selection range API + this._initSelectionAPI(); + + // 添加 text + this._initText(); + + // 初始化菜单 + this._initMenus(); + + // 添加 图片上传 + this._initUploadImg(); + + // 初始化选区,将光标定位到内容尾部 + this.initSelection(true); + + // 绑定事件 + this._bindEvent(); + }, + + // 解绑所有事件(暂时不对外开放) + _offAllEvent: function _offAllEvent() { + $.offAll(); + } +}; + +// 检验是否浏览器环境 +try { + document; +} catch (ex) { + throw new Error('请在浏览器环境下运行'); +} + +// polyfill +polyfill(); + +// 这里的 `inlinecss` 将被替换成 css 代码的内容,详情可去 ./gulpfile.js 中搜索 `inlinecss` 关键字 +var inlinecss = '.w-e-toolbar,.w-e-text-container,.w-e-menu-panel { padding: 0; margin: 0; box-sizing: border-box;}.w-e-toolbar *,.w-e-text-container *,.w-e-menu-panel * { padding: 0; margin: 0; box-sizing: border-box;}.w-e-clear-fix:after { content: ""; display: table; clear: both;}.w-e-toolbar .w-e-droplist { position: absolute; left: 0; top: 0; background-color: #fff; border: 1px solid #f1f1f1; border-right-color: #ccc; border-bottom-color: #ccc;}.w-e-toolbar .w-e-droplist .w-e-dp-title { text-align: center; color: #999; line-height: 2; border-bottom: 1px solid #f1f1f1; font-size: 13px;}.w-e-toolbar .w-e-droplist ul.w-e-list { list-style: none; line-height: 1;}.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item { color: #333; padding: 5px 0;}.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item:hover { background-color: #f1f1f1;}.w-e-toolbar .w-e-droplist ul.w-e-block { list-style: none; text-align: left; padding: 5px;}.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item { display: inline-block; *display: inline; *zoom: 1; padding: 3px 5px;}.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item:hover { background-color: #f1f1f1;}@font-face { font-family: \'w-e-icon\'; src: url(data:application/x-font-woff;charset=utf-8;base64,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) format(\'truetype\'); font-weight: normal; font-style: normal;}[class^="w-e-icon-"],[class*=" w-e-icon-"] { /* use !important to prevent issues with browser extensions that change fonts */ font-family: \'w-e-icon\' !important; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; line-height: 1; /* Better Font Rendering =========== */ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;}.w-e-icon-close:before { content: "\\f00d";}.w-e-icon-upload2:before { content: "\\e9c6";}.w-e-icon-trash-o:before { content: "\\f014";}.w-e-icon-header:before { content: "\\f1dc";}.w-e-icon-pencil2:before { content: "\\e906";}.w-e-icon-paint-brush:before { content: "\\f1fc";}.w-e-icon-image:before { content: "\\e90d";}.w-e-icon-play:before { content: "\\e912";}.w-e-icon-location:before { content: "\\e947";}.w-e-icon-undo:before { content: "\\e965";}.w-e-icon-redo:before { content: "\\e966";}.w-e-icon-quotes-left:before { content: "\\e977";}.w-e-icon-list-numbered:before { content: "\\e9b9";}.w-e-icon-list2:before { content: "\\e9bb";}.w-e-icon-link:before { content: "\\e9cb";}.w-e-icon-happy:before { content: "\\e9df";}.w-e-icon-bold:before { content: "\\ea62";}.w-e-icon-underline:before { content: "\\ea63";}.w-e-icon-italic:before { content: "\\ea64";}.w-e-icon-strikethrough:before { content: "\\ea65";}.w-e-icon-table2:before { content: "\\ea71";}.w-e-icon-paragraph-left:before { content: "\\ea77";}.w-e-icon-paragraph-center:before { content: "\\ea78";}.w-e-icon-paragraph-right:before { content: "\\ea79";}.w-e-icon-terminal:before { content: "\\f120";}.w-e-icon-page-break:before { content: "\\ea68";}.w-e-icon-cancel-circle:before { content: "\\ea0d";}.w-e-toolbar { display: -webkit-box; display: -ms-flexbox; display: flex; padding: 0 5px; /* flex-wrap: wrap; */ /* 单个菜单 */}.w-e-toolbar .w-e-menu { position: relative; text-align: center; padding: 5px 10px; cursor: pointer;}.w-e-toolbar .w-e-menu i { color: #999;}.w-e-toolbar .w-e-menu:hover i { color: #333;}.w-e-toolbar .w-e-active i { color: #1e88e5;}.w-e-toolbar .w-e-active:hover i { color: #1e88e5;}.w-e-text-container .w-e-panel-container { position: absolute; top: 0; left: 50%; border: 1px solid #ccc; border-top: 0; box-shadow: 1px 1px 2px #ccc; color: #333; background-color: #fff; /* 为 emotion panel 定制的样式 */ /* 上传图片的 panel 定制样式 */}.w-e-text-container .w-e-panel-container .w-e-panel-close { position: absolute; right: 0; top: 0; padding: 5px; margin: 2px 5px 0 0; cursor: pointer; color: #999;}.w-e-text-container .w-e-panel-container .w-e-panel-close:hover { color: #333;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title { list-style: none; display: -webkit-box; display: -ms-flexbox; display: flex; font-size: 14px; margin: 2px 10px 0 10px; border-bottom: 1px solid #f1f1f1;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title .w-e-item { padding: 3px 5px; color: #999; cursor: pointer; margin: 0 3px; position: relative; top: 1px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title .w-e-active { color: #333; border-bottom: 1px solid #333; cursor: default; font-weight: 700;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content { padding: 10px 15px 10px 15px; font-size: 16px; /* 输入框的样式 */ /* 按钮的样式 */}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input:focus,.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea:focus,.w-e-text-container .w-e-panel-container .w-e-panel-tab-content button:focus { outline: none;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea { width: 100%; border: 1px solid #ccc; padding: 5px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea:focus { border-color: #1e88e5;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text] { border: none; border-bottom: 1px solid #ccc; font-size: 14px; height: 20px; color: #333; text-align: left;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text].small { width: 30px; text-align: center;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text].block { display: block; width: 100%; margin: 10px 0;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text]:focus { border-bottom: 2px solid #1e88e5;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button { font-size: 14px; color: #1e88e5; border: none; padding: 5px 10px; background-color: #fff; cursor: pointer; border-radius: 3px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.left { float: left; margin-right: 10px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.right { float: right; margin-left: 10px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.gray { color: #999;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.red { color: #c24f4a;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button:hover { background-color: #f1f1f1;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container:after { content: ""; display: table; clear: both;}.w-e-text-container .w-e-panel-container .w-e-emoticon-container .w-e-item { cursor: pointer; font-size: 18px; padding: 0 3px; display: inline-block; *display: inline; *zoom: 1;}.w-e-text-container .w-e-panel-container .w-e-up-img-container { text-align: center;}.w-e-text-container .w-e-panel-container .w-e-up-img-container .w-e-up-btn { display: inline-block; *display: inline; *zoom: 1; color: #999; cursor: pointer; font-size: 60px; line-height: 1;}.w-e-text-container .w-e-panel-container .w-e-up-img-container .w-e-up-btn:hover { color: #333;}.w-e-text-container { position: relative;}.w-e-text-container .w-e-progress { position: absolute; background-color: #1e88e5; bottom: 0; left: 0; height: 1px;}.w-e-text { padding: 0 10px; overflow-y: scroll;}.w-e-text p,.w-e-text h1,.w-e-text h2,.w-e-text h3,.w-e-text h4,.w-e-text h5,.w-e-text table,.w-e-text pre { margin: 10px 0; line-height: 1.5;}.w-e-text ul,.w-e-text ol { margin: 10px 0 10px 20px;}.w-e-text blockquote { display: block; border-left: 8px solid #d0e5f2; padding: 5px 10px; margin: 10px 0; line-height: 1.4; font-size: 100%; background-color: #f1f1f1;}.w-e-text code { display: inline-block; *display: inline; *zoom: 1; background-color: #f1f1f1; border-radius: 3px; padding: 3px 5px; margin: 0 3px;}.w-e-text pre code { display: block;}.w-e-text table { border-top: 1px solid #ccc; border-left: 1px solid #ccc;}.w-e-text table td,.w-e-text table th { border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; padding: 3px 5px;}.w-e-text table th { border-bottom: 2px solid #ccc; text-align: center;}.w-e-text:focus { outline: none;}.w-e-text img { cursor: pointer;}.w-e-text img:hover { box-shadow: 0 0 5px #333;}'; + +// 将 css 代码添加到