From 401d23871d4ad6a44f57a49fff2a07562ca75c5d Mon Sep 17 00:00:00 2001 From: xxy <773861846@qq.com> Date: Wed, 13 May 2020 19:45:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=9C=E5=AE=B6=E4=B8=93=E5=8C=BA=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- novel-admin/logs/debug.log | 3 + .../controller/AuthorCodeController.java | 135 + .../novel/controller/AuthorController.java | 135 + .../com/java2nb/novel/dao/AuthorCodeDao.java | 32 + .../java/com/java2nb/novel/dao/AuthorDao.java | 32 + .../java2nb/novel/domain/AuthorCodeDO.java | 121 + .../com/java2nb/novel/domain/AuthorDO.java | 176 + .../novel/service/AuthorCodeService.java | 30 + .../java2nb/novel/service/AuthorService.java | 30 + .../service/impl/AuthorCodeServiceImpl.java | 60 + .../novel/service/impl/AuthorServiceImpl.java | 55 + .../src/main/resources/application-dev.yml | 4 +- .../src/main/resources/application.yml | 2 +- .../mybatis/novel/AuthorCodeMapper.xml | 108 + .../resources/mybatis/novel/AuthorMapper.xml | 136 + .../static/js/appjs/novel/author/add.js | 107 + .../static/js/appjs/novel/author/author.js | 244 + .../static/js/appjs/novel/author/edit.js | 103 + .../static/js/appjs/novel/authorCode/add.js | 115 + .../js/appjs/novel/authorCode/authorCode.js | 212 + .../static/js/appjs/novel/authorCode/edit.js | 115 + .../resources/static/sql/novel/author/menu.js | 18 + .../static/sql/novel/authorCode/menu.js | 18 + .../resources/templates/novel/author/add.html | 114 + .../templates/novel/author/author.html | 57 + .../templates/novel/author/detail.html | 111 + .../templates/novel/author/edit.html | 116 + .../templates/novel/authorCode/add.html | 48 + .../novel/authorCode/authorCode.html | 66 + .../templates/novel/authorCode/detail.html | 70 + .../templates/novel/authorCode/edit.html | 79 + .../novel/core/enums/ResponseStatus.java | 9 + .../java/com/java2nb/novel/entity/Author.java | 136 + .../com/java2nb/novel/entity/AuthorCode.java | 84 + .../mapper/AuthorCodeDynamicSqlSupport.java | 49 + .../novel/mapper/AuthorCodeMapper.java | 200 + .../novel/mapper/AuthorDynamicSqlSupport.java | 69 + .../java2nb/novel/mapper/AuthorMapper.java | 232 + .../main/resources/application-common-dev.yml | 2 +- .../resources/mybatis/generatorConfig.xml | 4 +- .../novel/controller/AuthorController.java | 121 + .../novel/controller/PageController.java | 59 +- .../java2nb/novel/service/AuthorService.java | 42 + .../java2nb/novel/service/BookService.java | 33 + .../novel/service/impl/AuthorServiceImpl.java | 92 + .../novel/service/impl/BookServiceImpl.java | 108 +- .../resources/mybatis/mapping/BookMapper.xml | 57 +- .../src/main/resources/static/css/easyui.css | 3243 ++++ .../src/main/resources/static/css/public.css | 1402 ++ .../main/resources/static/javascript/YT.js | 617 + .../resources/static/javascript/common.js | 4 +- .../static/javascript/easyui-lang-zh_CN.js | 70 + .../static/javascript/jquery.easyui.min.js | 16103 ++++++++++++++++ .../resources/static/javascript/ycUtils.js | 58 + .../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 + .../resources/templates/about/contact.html | 3 + .../resources/templates/author/book_add.html | 186 + .../templates/author/content_add.html | 197 + .../resources/templates/author/index.html | 237 + .../resources/templates/author/register.html | 178 + .../templates/book/book_content.html | 37 +- .../resources/templates/book/book_index.html | 6 +- .../main/resources/templates/common/top.html | 2 +- 225 files changed, 42138 insertions(+), 48 deletions(-) create mode 100644 novel-admin/logs/debug.log create mode 100644 novel-admin/src/main/java/com/java2nb/novel/controller/AuthorCodeController.java create mode 100644 novel-admin/src/main/java/com/java2nb/novel/controller/AuthorController.java create mode 100644 novel-admin/src/main/java/com/java2nb/novel/dao/AuthorCodeDao.java create mode 100644 novel-admin/src/main/java/com/java2nb/novel/dao/AuthorDao.java create mode 100644 novel-admin/src/main/java/com/java2nb/novel/domain/AuthorCodeDO.java create mode 100644 novel-admin/src/main/java/com/java2nb/novel/domain/AuthorDO.java create mode 100644 novel-admin/src/main/java/com/java2nb/novel/service/AuthorCodeService.java create mode 100644 novel-admin/src/main/java/com/java2nb/novel/service/AuthorService.java create mode 100644 novel-admin/src/main/java/com/java2nb/novel/service/impl/AuthorCodeServiceImpl.java create mode 100644 novel-admin/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java create mode 100644 novel-admin/src/main/resources/mybatis/novel/AuthorCodeMapper.xml create mode 100644 novel-admin/src/main/resources/mybatis/novel/AuthorMapper.xml create mode 100644 novel-admin/src/main/resources/static/js/appjs/novel/author/add.js create mode 100644 novel-admin/src/main/resources/static/js/appjs/novel/author/author.js create mode 100644 novel-admin/src/main/resources/static/js/appjs/novel/author/edit.js create mode 100644 novel-admin/src/main/resources/static/js/appjs/novel/authorCode/add.js create mode 100644 novel-admin/src/main/resources/static/js/appjs/novel/authorCode/authorCode.js create mode 100644 novel-admin/src/main/resources/static/js/appjs/novel/authorCode/edit.js create mode 100644 novel-admin/src/main/resources/static/sql/novel/author/menu.js create mode 100644 novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js create mode 100644 novel-admin/src/main/resources/templates/novel/author/add.html create mode 100644 novel-admin/src/main/resources/templates/novel/author/author.html create mode 100644 novel-admin/src/main/resources/templates/novel/author/detail.html create mode 100644 novel-admin/src/main/resources/templates/novel/author/edit.html create mode 100644 novel-admin/src/main/resources/templates/novel/authorCode/add.html create mode 100644 novel-admin/src/main/resources/templates/novel/authorCode/authorCode.html create mode 100644 novel-admin/src/main/resources/templates/novel/authorCode/detail.html create mode 100644 novel-admin/src/main/resources/templates/novel/authorCode/edit.html create mode 100644 novel-common/src/main/java/com/java2nb/novel/entity/Author.java create mode 100644 novel-common/src/main/java/com/java2nb/novel/entity/AuthorCode.java create mode 100644 novel-common/src/main/java/com/java2nb/novel/mapper/AuthorCodeDynamicSqlSupport.java create mode 100644 novel-common/src/main/java/com/java2nb/novel/mapper/AuthorCodeMapper.java create mode 100644 novel-common/src/main/java/com/java2nb/novel/mapper/AuthorDynamicSqlSupport.java create mode 100644 novel-common/src/main/java/com/java2nb/novel/mapper/AuthorMapper.java create mode 100644 novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java create mode 100644 novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java create mode 100644 novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java create mode 100644 novel-front/src/main/resources/static/css/easyui.css create mode 100644 novel-front/src/main/resources/static/css/public.css create mode 100644 novel-front/src/main/resources/static/javascript/YT.js create mode 100644 novel-front/src/main/resources/static/javascript/easyui-lang-zh_CN.js create mode 100644 novel-front/src/main/resources/static/javascript/jquery.easyui.min.js create mode 100644 novel-front/src/main/resources/static/javascript/ycUtils.js create mode 100644 novel-front/src/main/resources/static/wangEditor/.eslintignore create mode 100644 novel-front/src/main/resources/static/wangEditor/.eslintrc.json create mode 100644 novel-front/src/main/resources/static/wangEditor/.gitattributes create mode 100644 novel-front/src/main/resources/static/wangEditor/.gitignore create mode 100644 novel-front/src/main/resources/static/wangEditor/.npmignore create mode 100644 novel-front/src/main/resources/static/wangEditor/ISSUE.md create mode 100644 novel-front/src/main/resources/static/wangEditor/LICENSE create mode 100644 novel-front/src/main/resources/static/wangEditor/README.md create mode 100644 novel-front/src/main/resources/static/wangEditor/bower.json create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/dev/README.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/01-demo.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/02-use-module.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/03-sperate.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/04-multi.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/01-set-content.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/02-get-content.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/03-use-textarea.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/04-get-json.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/01-menu.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/02-debug.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/03-onchange.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/04-z-index.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/05-lang.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/06-paste.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/07-linkImgCallback.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/08-linkCheck.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/09-onfocus.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/10-onblur.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/11-linkImgCheck.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/12-colors.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/13-emot.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/01-show-tab.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/02-base64.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/03-upload-config.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/04-qiniu.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/01-全屏-预览-查看源码.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/02-上传附件.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/03-markdown.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/04-xss.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/05-react.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/06-vue.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/07-ng.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/08-api.md create mode 100644 novel-front/src/main/resources/static/wangEditor/docs/usage/README.md create mode 100644 novel-front/src/main/resources/static/wangEditor/example/README.md create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-react/package.json create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-react/public/favicon.ico create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-react/public/index.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-react/public/manifest.json create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.css create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.test.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/index.css create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/logo.svg create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/registerServiceWorker.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.babelrc create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.editorconfig create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.postcssrc.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/build.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/check-versions.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-client.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-server.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/utils.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/vue-loader.conf.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.base.conf.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.dev.conf.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.prod.conf.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/dev.env.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/prod.env.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/index.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/package.json create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/App.vue create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/assets/logo.png create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Editor.vue create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Hello.vue create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/main.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/static/.gitkeep create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-amd-main.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-amd.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-css-reset.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-emot.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-fullscreen.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-get-content.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-getJSON.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-lang.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-menus.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-mult.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-onblur.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-onchange.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-onfocus.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-paste.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-set-content.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-sperate.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-textarea.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/demo/test-uploadimg.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/favicon.ico create mode 100644 novel-front/src/main/resources/static/wangEditor/example/icomoon/Read Me.txt create mode 100644 novel-front/src/main/resources/static/wangEditor/example/icomoon/demo-files/demo.css create mode 100644 novel-front/src/main/resources/static/wangEditor/example/icomoon/demo-files/demo.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/icomoon/demo.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.eot create mode 100644 novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.svg create mode 100644 novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.ttf create mode 100644 novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.woff create mode 100644 novel-front/src/main/resources/static/wangEditor/example/icomoon/selection.json create mode 100644 novel-front/src/main/resources/static/wangEditor/example/icomoon/style.css create mode 100644 novel-front/src/main/resources/static/wangEditor/example/index.html create mode 100644 novel-front/src/main/resources/static/wangEditor/example/pay.png create mode 100644 novel-front/src/main/resources/static/wangEditor/example/server/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/example/server/util.js create mode 100644 novel-front/src/main/resources/static/wangEditor/gulpfile.js create mode 100644 novel-front/src/main/resources/static/wangEditor/package.json create mode 100644 novel-front/src/main/resources/static/wangEditor/release/fonts/w-e-icon.woff create mode 100644 novel-front/src/main/resources/static/wangEditor/release/wangEditor.css create mode 100644 novel-front/src/main/resources/static/wangEditor/release/wangEditor.js create mode 100644 novel-front/src/main/resources/static/wangEditor/release/wangEditor.min.css create mode 100644 novel-front/src/main/resources/static/wangEditor/release/wangEditor.min.js create mode 100644 novel-front/src/main/resources/static/wangEditor/release/wangEditor.min.js.map create mode 100644 novel-front/src/main/resources/static/wangEditor/src/fonts/w-e-icon.woff create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/.babelrc create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/command/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/config.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/editor/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/editor/upload/progress.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/editor/upload/upload-img.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/backColor/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/bold/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/code/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/droplist.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/emoticon/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/foreColor/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/head/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/img/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/italic/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/justify/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/link/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/list/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/menu-list.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/panel.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/quote/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/redo/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/strikethrough/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/table/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/underline/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/undo/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/menus/video/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/selection/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/text/index.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/util/dom-core.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/util/paste-handle.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/util/poly-fill.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/util/replace-lang.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/js/util/util.js create mode 100644 novel-front/src/main/resources/static/wangEditor/src/less/common.less create mode 100644 novel-front/src/main/resources/static/wangEditor/src/less/droplist.less create mode 100644 novel-front/src/main/resources/static/wangEditor/src/less/icon.less create mode 100644 novel-front/src/main/resources/static/wangEditor/src/less/menus.less create mode 100644 novel-front/src/main/resources/static/wangEditor/src/less/panel.less create mode 100644 novel-front/src/main/resources/static/wangEditor/src/less/text.less create mode 100644 novel-front/src/main/resources/templates/author/book_add.html create mode 100644 novel-front/src/main/resources/templates/author/content_add.html create mode 100644 novel-front/src/main/resources/templates/author/index.html create mode 100644 novel-front/src/main/resources/templates/author/register.html diff --git a/novel-admin/logs/debug.log b/novel-admin/logs/debug.log new file mode 100644 index 0000000..f79869e --- /dev/null +++ b/novel-admin/logs/debug.log @@ -0,0 +1,3 @@ +2020-05-07 04:15:36,250 INFO (StartupInfoLogger.java:50)- Starting TestDemo on USER-20180729KA with PID 9748 (started by Administrator in E:\baseprojectparent\novel-plus\novel-admin) +2020-05-07 04:15:36,253 DEBUG (StartupInfoLogger.java:53)- Running with Spring Boot v2.0.1.RELEASE, Spring v5.0.5.RELEASE +2020-05-07 04:15:36,260 INFO (SpringApplication.java:663)- The following profiles are active: dev diff --git a/novel-admin/src/main/java/com/java2nb/novel/controller/AuthorCodeController.java b/novel-admin/src/main/java/com/java2nb/novel/controller/AuthorCodeController.java new file mode 100644 index 0000000..2120952 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/controller/AuthorCodeController.java @@ -0,0 +1,135 @@ +package com.java2nb.novel.controller; + +import java.util.List; +import java.util.Map; + +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import io.swagger.annotations.ApiOperation; + + +import com.java2nb.novel.domain.AuthorCodeDO; +import com.java2nb.novel.service.AuthorCodeService; +import com.java2nb.common.utils.PageBean; +import com.java2nb.common.utils.Query; +import com.java2nb.common.utils.R; + +/** + * 作家邀请码表 + * + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:29:15 + */ + +@Controller +@RequestMapping("/novel/authorCode") +public class AuthorCodeController { + @Autowired + private AuthorCodeService authorCodeService; + + @GetMapping() + @RequiresPermissions("novel:authorCode:authorCode") + String AuthorCode() { + return "novel/authorCode/authorCode"; + } + + @ApiOperation(value = "获取作家邀请码表列表", notes = "获取作家邀请码表列表") + @ResponseBody + @GetMapping("/list") + @RequiresPermissions("novel:authorCode:authorCode") + public R list(@RequestParam Map params) { + //查询列表数据 + Query query = new Query(params); + List authorCodeList = authorCodeService.list(query); + int total = authorCodeService.count(query); + PageBean pageBean = new PageBean(authorCodeList, total); + return R.ok().put("data", pageBean); + } + + @ApiOperation(value = "新增作家邀请码表页面", notes = "新增作家邀请码表页面") + @GetMapping("/add") + @RequiresPermissions("novel:authorCode:add") + String add() { + return "novel/authorCode/add"; + } + + @ApiOperation(value = "修改作家邀请码表页面", notes = "修改作家邀请码表页面") + @GetMapping("/edit/{id}") + @RequiresPermissions("novel:authorCode:edit") + String edit(@PathVariable("id") Long id, Model model) { + AuthorCodeDO authorCode = authorCodeService.get(id); + model.addAttribute("authorCode", authorCode); + return "novel/authorCode/edit"; + } + + @ApiOperation(value = "查看作家邀请码表页面", notes = "查看作家邀请码表页面") + @GetMapping("/detail/{id}") + @RequiresPermissions("novel:authorCode:detail") + String detail(@PathVariable("id") Long id, Model model) { + AuthorCodeDO authorCode = authorCodeService.get(id); + model.addAttribute("authorCode", authorCode); + return "novel/authorCode/detail"; + } + + /** + * 保存 + */ + @ApiOperation(value = "新增作家邀请码表", notes = "新增作家邀请码表") + @ResponseBody + @PostMapping("/save") + @RequiresPermissions("novel:authorCode:add") + public R save( AuthorCodeDO authorCode) { + if (authorCodeService.save(authorCode) > 0) { + return R.ok(); + } + return R.error(); + } + + /** + * 修改 + */ + @ApiOperation(value = "修改作家邀请码表", notes = "修改作家邀请码表") + @ResponseBody + @RequestMapping("/update") + @RequiresPermissions("novel:authorCode:edit") + public R update( AuthorCodeDO authorCode) { + authorCodeService.update(authorCode); + return R.ok(); + } + + /** + * 删除 + */ + @ApiOperation(value = "删除作家邀请码表", notes = "删除作家邀请码表") + @PostMapping("/remove") + @ResponseBody + @RequiresPermissions("novel:authorCode:remove") + public R remove( Long id) { + if (authorCodeService.remove(id) > 0) { + return R.ok(); + } + return R.error(); + } + + /** + * 删除 + */ + @ApiOperation(value = "批量删除作家邀请码表", notes = "批量删除作家邀请码表") + @PostMapping("/batchRemove") + @ResponseBody + @RequiresPermissions("novel:authorCode:batchRemove") + public R remove(@RequestParam("ids[]") Long[] ids) { + authorCodeService.batchRemove(ids); + return R.ok(); + } + +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/controller/AuthorController.java b/novel-admin/src/main/java/com/java2nb/novel/controller/AuthorController.java new file mode 100644 index 0000000..abec1e4 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/controller/AuthorController.java @@ -0,0 +1,135 @@ +package com.java2nb.novel.controller; + +import java.util.List; +import java.util.Map; + +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import io.swagger.annotations.ApiOperation; + + +import com.java2nb.novel.domain.AuthorDO; +import com.java2nb.novel.service.AuthorService; +import com.java2nb.common.utils.PageBean; +import com.java2nb.common.utils.Query; +import com.java2nb.common.utils.R; + +/** + * 作者表 + * + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:16:51 + */ + +@Controller +@RequestMapping("/novel/author") +public class AuthorController { + @Autowired + private AuthorService authorService; + + @GetMapping() + @RequiresPermissions("novel:author:author") + String Author() { + return "novel/author/author"; + } + + @ApiOperation(value = "获取作者表列表", notes = "获取作者表列表") + @ResponseBody + @GetMapping("/list") + @RequiresPermissions("novel:author:author") + public R list(@RequestParam Map params) { + //查询列表数据 + Query query = new Query(params); + List authorList = authorService.list(query); + int total = authorService.count(query); + PageBean pageBean = new PageBean(authorList, total); + return R.ok().put("data", pageBean); + } + + @ApiOperation(value = "新增作者表页面", notes = "新增作者表页面") + @GetMapping("/add") + @RequiresPermissions("novel:author:add") + String add() { + return "novel/author/add"; + } + + @ApiOperation(value = "修改作者表页面", notes = "修改作者表页面") + @GetMapping("/edit/{id}") + @RequiresPermissions("novel:author:edit") + String edit(@PathVariable("id") Long id, Model model) { + AuthorDO author = authorService.get(id); + model.addAttribute("author", author); + return "novel/author/edit"; + } + + @ApiOperation(value = "查看作者表页面", notes = "查看作者表页面") + @GetMapping("/detail/{id}") + @RequiresPermissions("novel:author:detail") + String detail(@PathVariable("id") Long id, Model model) { + AuthorDO author = authorService.get(id); + model.addAttribute("author", author); + return "novel/author/detail"; + } + + /** + * 保存 + */ + @ApiOperation(value = "新增作者表", notes = "新增作者表") + @ResponseBody + @PostMapping("/save") + @RequiresPermissions("novel:author:add") + public R save( AuthorDO author) { + if (authorService.save(author) > 0) { + return R.ok(); + } + return R.error(); + } + + /** + * 修改 + */ + @ApiOperation(value = "修改作者表", notes = "修改作者表") + @ResponseBody + @RequestMapping("/update") + @RequiresPermissions("novel:author:edit") + public R update( AuthorDO author) { + authorService.update(author); + return R.ok(); + } + + /** + * 删除 + */ + @ApiOperation(value = "删除作者表", notes = "删除作者表") + @PostMapping("/remove") + @ResponseBody + @RequiresPermissions("novel:author:remove") + public R remove( Long id) { + if (authorService.remove(id) > 0) { + return R.ok(); + } + return R.error(); + } + + /** + * 删除 + */ + @ApiOperation(value = "批量删除作者表", notes = "批量删除作者表") + @PostMapping("/batchRemove") + @ResponseBody + @RequiresPermissions("novel:author:batchRemove") + public R remove(@RequestParam("ids[]") Long[] ids) { + authorService.batchRemove(ids); + return R.ok(); + } + +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/dao/AuthorCodeDao.java b/novel-admin/src/main/java/com/java2nb/novel/dao/AuthorCodeDao.java new file mode 100644 index 0000000..3300858 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/dao/AuthorCodeDao.java @@ -0,0 +1,32 @@ +package com.java2nb.novel.dao; + +import com.java2nb.novel.domain.AuthorCodeDO; + +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.annotations.Mapper; + +/** + * 作家邀请码表 + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:29:15 + */ +@Mapper +public interface AuthorCodeDao { + + AuthorCodeDO get(Long id); + + List list(Map map); + + int count(Map map); + + int save(AuthorCodeDO authorCode); + + int update(AuthorCodeDO authorCode); + + int remove(Long id); + + int batchRemove(Long[] ids); +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/dao/AuthorDao.java b/novel-admin/src/main/java/com/java2nb/novel/dao/AuthorDao.java new file mode 100644 index 0000000..cafdce8 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/dao/AuthorDao.java @@ -0,0 +1,32 @@ +package com.java2nb.novel.dao; + +import com.java2nb.novel.domain.AuthorDO; + +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.annotations.Mapper; + +/** + * 作者表 + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:16:51 + */ +@Mapper +public interface AuthorDao { + + AuthorDO get(Long id); + + List list(Map map); + + int count(Map map); + + int save(AuthorDO author); + + int update(AuthorDO author); + + int remove(Long id); + + int batchRemove(Long[] ids); +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/domain/AuthorCodeDO.java b/novel-admin/src/main/java/com/java2nb/novel/domain/AuthorCodeDO.java new file mode 100644 index 0000000..ea9872f --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/domain/AuthorCodeDO.java @@ -0,0 +1,121 @@ +package com.java2nb.novel.domain; + +import java.io.Serializable; + + +import java.math.BigDecimal; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.java2nb.common.jsonserializer.LongToStringSerializer; + + +import org.springframework.format.annotation.DateTimeFormat; +import java.util.Date; + + + +/** + * 作家邀请码表 + * + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:29:15 + */ +public class AuthorCodeDO implements Serializable { + private static final long serialVersionUID = 1L; + + + //主键 + //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值) + //所以通过序列化成字符串来解决 + @JsonSerialize(using = LongToStringSerializer.class) + private Long id; + //邀请码 + private String inviteCode; + //有效时间 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date validityTime; + //是否使用过,0:未使用,1:使用过 + private Integer isUse; + //创建时间 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + //创建人ID + //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值) + //所以通过序列化成字符串来解决 + @JsonSerialize(using = LongToStringSerializer.class) + private Long createUserId; + + /** + * 设置:主键 + */ + public void setId(Long id) { + this.id = id; + } + /** + * 获取:主键 + */ + public Long getId() { + return id; + } + /** + * 设置:邀请码 + */ + public void setInviteCode(String inviteCode) { + this.inviteCode = inviteCode; + } + /** + * 获取:邀请码 + */ + public String getInviteCode() { + return inviteCode; + } + /** + * 设置:有效时间 + */ + public void setValidityTime(Date validityTime) { + this.validityTime = validityTime; + } + /** + * 获取:有效时间 + */ + public Date getValidityTime() { + return validityTime; + } + /** + * 设置:是否使用过,0:未使用,1:使用过 + */ + public void setIsUse(Integer isUse) { + this.isUse = isUse; + } + /** + * 获取:是否使用过,0:未使用,1:使用过 + */ + public Integer getIsUse() { + return isUse; + } + /** + * 设置:创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + /** + * 获取:创建时间 + */ + public Date getCreateTime() { + return createTime; + } + /** + * 设置:创建人ID + */ + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + /** + * 获取:创建人ID + */ + public Long getCreateUserId() { + return createUserId; + } +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/domain/AuthorDO.java b/novel-admin/src/main/java/com/java2nb/novel/domain/AuthorDO.java new file mode 100644 index 0000000..bc2ea5d --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/domain/AuthorDO.java @@ -0,0 +1,176 @@ +package com.java2nb.novel.domain; + +import java.io.Serializable; + + +import java.math.BigDecimal; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.java2nb.common.jsonserializer.LongToStringSerializer; + + +import org.springframework.format.annotation.DateTimeFormat; +import java.util.Date; + + + +/** + * 作者表 + * + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:16:51 + */ +public class AuthorDO implements Serializable { + private static final long serialVersionUID = 1L; + + + //主键 + //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值) + //所以通过序列化成字符串来解决 + @JsonSerialize(using = LongToStringSerializer.class) + private Long id; + //用户ID + //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值) + //所以通过序列化成字符串来解决 + @JsonSerialize(using = LongToStringSerializer.class) + private Long userId; + //邀请码 + private String inviteCode; + //笔名 + private String penName; + //手机号码 + private String telPhone; + //QQ或微信账号 + private String chatAccount; + //电子邮箱 + private String email; + //作品方向,0:男频,1:女频 + private Integer workDirection; + //创建时间 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + //0:正常,1:封禁 + private Integer status; + + /** + * 设置:主键 + */ + public void setId(Long id) { + this.id = id; + } + /** + * 获取:主键 + */ + public Long getId() { + return id; + } + /** + * 设置:用户ID + */ + public void setUserId(Long userId) { + this.userId = userId; + } + /** + * 获取:用户ID + */ + public Long getUserId() { + return userId; + } + /** + * 设置:邀请码 + */ + public void setInviteCode(String inviteCode) { + this.inviteCode = inviteCode; + } + /** + * 获取:邀请码 + */ + public String getInviteCode() { + return inviteCode; + } + /** + * 设置:笔名 + */ + public void setPenName(String penName) { + this.penName = penName; + } + /** + * 获取:笔名 + */ + public String getPenName() { + return penName; + } + /** + * 设置:手机号码 + */ + public void setTelPhone(String telPhone) { + this.telPhone = telPhone; + } + /** + * 获取:手机号码 + */ + public String getTelPhone() { + return telPhone; + } + /** + * 设置:QQ或微信账号 + */ + public void setChatAccount(String chatAccount) { + this.chatAccount = chatAccount; + } + /** + * 获取:QQ或微信账号 + */ + public String getChatAccount() { + return chatAccount; + } + /** + * 设置:电子邮箱 + */ + public void setEmail(String email) { + this.email = email; + } + /** + * 获取:电子邮箱 + */ + public String getEmail() { + return email; + } + /** + * 设置:作品方向,0:男频,1:女频 + */ + public void setWorkDirection(Integer workDirection) { + this.workDirection = workDirection; + } + /** + * 获取:作品方向,0:男频,1:女频 + */ + public Integer getWorkDirection() { + return workDirection; + } + /** + * 设置:创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + /** + * 获取:创建时间 + */ + public Date getCreateTime() { + return createTime; + } + /** + * 设置:0:正常,1:封禁 + */ + public void setStatus(Integer status) { + this.status = status; + } + /** + * 获取:0:正常,1:封禁 + */ + public Integer getStatus() { + return status; + } +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/AuthorCodeService.java b/novel-admin/src/main/java/com/java2nb/novel/service/AuthorCodeService.java new file mode 100644 index 0000000..c3ed03c --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/service/AuthorCodeService.java @@ -0,0 +1,30 @@ +package com.java2nb.novel.service; + +import com.java2nb.novel.domain.AuthorCodeDO; + +import java.util.List; +import java.util.Map; + +/** + * 作家邀请码表 + * + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:29:15 + */ +public interface AuthorCodeService { + + AuthorCodeDO get(Long id); + + List list(Map map); + + int count(Map map); + + int save(AuthorCodeDO authorCode); + + int update(AuthorCodeDO authorCode); + + int remove(Long id); + + int batchRemove(Long[] ids); +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/AuthorService.java b/novel-admin/src/main/java/com/java2nb/novel/service/AuthorService.java new file mode 100644 index 0000000..15d73ef --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/service/AuthorService.java @@ -0,0 +1,30 @@ +package com.java2nb.novel.service; + +import com.java2nb.novel.domain.AuthorDO; + +import java.util.List; +import java.util.Map; + +/** + * 作者表 + * + * @author xiongxy + * @email 1179705413@qq.com + * @date 2020-05-13 11:16:51 + */ +public interface AuthorService { + + AuthorDO get(Long id); + + List list(Map map); + + int count(Map map); + + int save(AuthorDO author); + + int update(AuthorDO author); + + int remove(Long id); + + int batchRemove(Long[] ids); +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/impl/AuthorCodeServiceImpl.java b/novel-admin/src/main/java/com/java2nb/novel/service/impl/AuthorCodeServiceImpl.java new file mode 100644 index 0000000..6528ef2 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/service/impl/AuthorCodeServiceImpl.java @@ -0,0 +1,60 @@ +package com.java2nb.novel.service.impl; + +import com.java2nb.common.utils.ShiroUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +import com.java2nb.novel.dao.AuthorCodeDao; +import com.java2nb.novel.domain.AuthorCodeDO; +import com.java2nb.novel.service.AuthorCodeService; + + + +@Service +public class AuthorCodeServiceImpl implements AuthorCodeService { + @Autowired + private AuthorCodeDao authorCodeDao; + + @Override + public AuthorCodeDO get(Long id){ + return authorCodeDao.get(id); + } + + @Override + public List list(Map map){ + return authorCodeDao.list(map); + } + + @Override + public int count(Map map){ + return authorCodeDao.count(map); + } + + @Override + public int save(AuthorCodeDO authorCode){ + authorCode.setIsUse(0); + authorCode.setCreateTime(new Date()); + authorCode.setCreateUserId(ShiroUtils.getUserId()); + return authorCodeDao.save(authorCode); + } + + @Override + public int update(AuthorCodeDO authorCode){ + return authorCodeDao.update(authorCode); + } + + @Override + public int remove(Long id){ + return authorCodeDao.remove(id); + } + + @Override + public int batchRemove(Long[] ids){ + return authorCodeDao.batchRemove(ids); + } + +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java b/novel-admin/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java new file mode 100644 index 0000000..ef3d020 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java @@ -0,0 +1,55 @@ +package com.java2nb.novel.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +import com.java2nb.novel.dao.AuthorDao; +import com.java2nb.novel.domain.AuthorDO; +import com.java2nb.novel.service.AuthorService; + + + +@Service +public class AuthorServiceImpl implements AuthorService { + @Autowired + private AuthorDao authorDao; + + @Override + public AuthorDO get(Long id){ + return authorDao.get(id); + } + + @Override + public List list(Map map){ + return authorDao.list(map); + } + + @Override + public int count(Map map){ + return authorDao.count(map); + } + + @Override + public int save(AuthorDO author){ + return authorDao.save(author); + } + + @Override + public int update(AuthorDO author){ + return authorDao.update(author); + } + + @Override + public int remove(Long id){ + return authorDao.remove(id); + } + + @Override + public int batchRemove(Long[] ids){ + return authorDao.batchRemove(ids); + } + +} diff --git a/novel-admin/src/main/resources/application-dev.yml b/novel-admin/src/main/resources/application-dev.yml index 876ac5f..29c4d50 100644 --- a/novel-admin/src/main/resources/application-dev.yml +++ b/novel-admin/src/main/resources/application-dev.yml @@ -10,9 +10,9 @@ spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.jdbc.Driver - url: jdbc:mysql://128.0.0.1:3306/novel_biz?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai + url: jdbc:mysql://127.0.0.1:3306/novel_plus?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root - password: test123456 + password: #password: initialSize: 1 minIdle: 3 diff --git a/novel-admin/src/main/resources/application.yml b/novel-admin/src/main/resources/application.yml index a247363..dc32079 100644 --- a/novel-admin/src/main/resources/application.yml +++ b/novel-admin/src/main/resources/application.yml @@ -3,7 +3,7 @@ server: # tomcat: # max-threads: 1000 # min-spare-threads: 30 - port: 8082 + port: 80 # uri-encoding: utf-8 #security: # basic: diff --git a/novel-admin/src/main/resources/mybatis/novel/AuthorCodeMapper.xml b/novel-admin/src/main/resources/mybatis/novel/AuthorCodeMapper.xml new file mode 100644 index 0000000..c920531 --- /dev/null +++ b/novel-admin/src/main/resources/mybatis/novel/AuthorCodeMapper.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + insert into author_code + ( + `invite_code`, + `validity_time`, + `is_use`, + `create_time`, + `create_user_id` + ) + values + ( + #{inviteCode}, + #{validityTime}, + #{isUse}, + #{createTime}, + #{createUserId} + ) + + + + insert into author_code + ( + `id`, + `invite_code`, + `validity_time`, + `is_use`, + `create_time`, + `create_user_id` + ) + values + ( + #{id}, + #{inviteCode}, + #{validityTime}, + #{isUse}, + #{createTime}, + #{createUserId} + ) + + + + update author_code + + `invite_code` = #{inviteCode}, + `validity_time` = #{validityTime}, + `is_use` = #{isUse}, + `create_time` = #{createTime}, + `create_user_id` = #{createUserId} + + where id = #{id} + + + + delete from author_code where id = #{value} + + + + delete from author_code where id in + + #{id} + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/mybatis/novel/AuthorMapper.xml b/novel-admin/src/main/resources/mybatis/novel/AuthorMapper.xml new file mode 100644 index 0000000..42b5712 --- /dev/null +++ b/novel-admin/src/main/resources/mybatis/novel/AuthorMapper.xml @@ -0,0 +1,136 @@ + + + + + + + + + + + + + insert into author + ( + `user_id`, + `invite_code`, + `pen_name`, + `tel_phone`, + `chat_account`, + `email`, + `work_direction`, + `create_time`, + `status` + ) + values + ( + #{userId}, + #{inviteCode}, + #{penName}, + #{telPhone}, + #{chatAccount}, + #{email}, + #{workDirection}, + #{createTime}, + #{status} + ) + + + + insert into author + ( + `id`, + `user_id`, + `invite_code`, + `pen_name`, + `tel_phone`, + `chat_account`, + `email`, + `work_direction`, + `create_time`, + `status` + ) + values + ( + #{id}, + #{userId}, + #{inviteCode}, + #{penName}, + #{telPhone}, + #{chatAccount}, + #{email}, + #{workDirection}, + #{createTime}, + #{status} + ) + + + + update author + + `user_id` = #{userId}, + `invite_code` = #{inviteCode}, + `pen_name` = #{penName}, + `tel_phone` = #{telPhone}, + `chat_account` = #{chatAccount}, + `email` = #{email}, + `work_direction` = #{workDirection}, + `create_time` = #{createTime}, + `status` = #{status} + + where id = #{id} + + + + delete from author where id = #{value} + + + + delete from author where id in + + #{id} + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/js/appjs/novel/author/add.js b/novel-admin/src/main/resources/static/js/appjs/novel/author/add.js new file mode 100644 index 0000000..7bc975e --- /dev/null +++ b/novel-admin/src/main/resources/static/js/appjs/novel/author/add.js @@ -0,0 +1,107 @@ +var E = window.wangEditor; +$("[id^='contentEditor']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(13); + var editor = new E('#contentEditor' + relName); +// 自定义菜单配置 + editor.customConfig.menus = [ + 'head', // 标题 + 'bold', // 粗体 + 'fontSize', // 字号 + 'fontName', // 字体 + 'italic', // 斜体 + 'underline', // 下划线 + 'strikeThrough', // 删除线 + 'foreColor', // 文字颜色 + //'backColor', // 背景颜色 + //'link', // 插入链接 + 'list', // 列表 + 'justify', // 对齐方式 + 'quote', // 引用 + 'emoticon', // 表情 + 'image', // 插入图片 + //'table', // 表格 + //'video', // 插入视频 + //'code', // 插入代码 + 'undo', // 撤销 + 'redo' // 重复 + ]; + editor.customConfig.onchange = function (html) { + // html 即变化之后的内容 + $("#" + relName).val(html); + } + editor.customConfig.uploadImgShowBase64 = true; + editor.create(); + +}) + +$("[id^='picImage']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(8); + layui.use('upload', function () { + var upload = layui.upload; + //执行实例 + var uploadInst = upload.render({ + elem: '#picImage' + relName, //绑定元素 + url: '/common/sysFile/upload', //上传接口 + size: 1000, + accept: 'file', + done: function (r) { + $("#picImage" + relName).attr("src", r.fileName); + $("#" + relName).val(r.fileName); + }, + error: function (r) { + layer.msg(r.msg); + } + }); + }); + +}); + + + + + + +$().ready(function () { + validateRule(); +}); + +$.validator.setDefaults({ + submitHandler: function () { + save(); + } +}); +function save() { + $.ajax({ + cache: true, + type: "POST", + url: "/novel/author/save", + data: $('#signupForm').serialize(),// 你的formid + async: false, + error: function (request) { + parent.layer.alert("Connection error"); + }, + success: function (data) { + if (data.code == 0) { + parent.layer.msg("操作成功"); + parent.reLoad(); + var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引 + parent.layer.close(index); + + } else { + parent.layer.alert(data.msg) + } + + } + }); + +} +function validateRule() { + var icon = " "; + $("#signupForm").validate({ + ignore: "", + rules: { + }, + messages: { + } +}) +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/js/appjs/novel/author/author.js b/novel-admin/src/main/resources/static/js/appjs/novel/author/author.js new file mode 100644 index 0000000..cdf3497 --- /dev/null +++ b/novel-admin/src/main/resources/static/js/appjs/novel/author/author.js @@ -0,0 +1,244 @@ +var prefix = "/novel/author" +$(function () { + load(); +}); + +function load() { + $('#exampleTable') + .bootstrapTable( + { + method: 'get', // 服务器数据的请求方式 get or post + url: prefix + "/list", // 服务器数据的加载地址 + // showRefresh : true, + // showToggle : true, + // showColumns : true, + iconSize: 'outline', + toolbar: '#exampleToolbar', + striped: true, // 设置为true会有隔行变色效果 + dataType: "json", // 服务器返回的数据类型 + pagination: true, // 设置为true会在底部显示分页条 + // queryParamsType : "limit", + // //设置为limit则会发送符合RESTFull格式的参数 + singleSelect: false, // 设置为true将禁止多选 + // contentType : "application/x-www-form-urlencoded", + // //发送到服务器的数据编码类型 + pageSize: 10, // 如果设置了分页,每页数据条数 + pageNumber: 1, // 如果设置了分布,首页页码 + //search : true, // 是否显示搜索框 + showColumns: false, // 是否显示内容下拉框(选择显示的列) + sidePagination: "server", // 设置在哪里进行分页,可选值为"client" 或者 "server" + queryParams: function (params) { + //说明:传入后台的参数包括offset开始索引,limit步长,sort排序列,order:desc或者,以及所有列的键值对 + var queryParams = getFormJson("searchForm"); + queryParams.limit = params.limit; + queryParams.offset = params.offset; + return queryParams; + }, + // //请求服务器数据时,你可以通过重写参数的方式添加一些额外的参数,例如 toolbar 中的参数 如果 + // queryParamsType = 'limit' ,返回参数必须包含 + // limit, offset, search, sort, order 否则, 需要包含: + // pageSize, pageNumber, searchText, sortName, + // sortOrder. + // 返回false将会终止请求 + responseHandler: function (rs) { + + if (rs.code == 0) { + return rs.data; + } else { + parent.layer.alert(rs.msg) + return {total: 0, rows: []}; + } + }, + columns: [ + { + checkbox: true + }, + { + title: '序号', + formatter: function () { + return arguments[2] + 1; + } + }, + + + { + field: 'inviteCode', + title: '邀请码' + }, + + + { + field: 'penName', + title: '笔名' + }, + + + { + field: 'telPhone', + title: '手机号码' + }, + + + { + field: 'chatAccount', + title: 'QQ或微信账号' + }, + + + { + field: 'email', + title: '电子邮箱' + }, + + + { + field: 'workDirection', + title: '作品方向', + formatter: function (value, row, index) { + return formatDict("work_direction", value); + } + }, + + { + field: 'createTime', + title: '入驻时间' + }, + + + { + field: 'status', + title: '状态', + formatter: function (value, row, index) { + return value == 1 ? '封禁' : '正常'; + } + }, + + + { + title: '操作', + field: 'id', + align: 'center', + formatter: function (value, row, index) { + if(row.status==1) { + var e = '恢复正常 '; + }else{ + var e = '封禁 '; + } + return e ; + } + }] + }); +} + +function reLoad() { + $('#exampleTable').bootstrapTable('refresh'); +} + +function add() { + layer.open({ + type: 2, + title: '增加', + maxmin: true, + shadeClose: false, // 点击遮罩关闭层 + area: ['800px', '520px'], + content: prefix + '/add' // iframe的url + }); +} + +function detail(id) { + layer.open({ + type: 2, + title: '详情', + maxmin: true, + shadeClose: false, // 点击遮罩关闭层 + area: ['800px', '520px'], + content: prefix + '/detail/' + id // iframe的url + }); +} + +function edit(id,status) { + $.ajax({ + cache: true, + type: "POST", + url: "/novel/author/update", + data: {'id':id,'status':status},// 你的formid + async: false, + error: function (request) { + parent.layer.alert("Connection error"); + }, + success: function (data) { + if (data.code == 0) { + parent.layer.msg("操作成功"); + reLoad(); + + } else { + parent.layer.alert(data.msg) + } + + } + }); +} + +function remove(id) { + layer.confirm('确定要删除选中的记录?', { + btn: ['确定', '取消'] + }, function () { + $.ajax({ + url: prefix + "/remove", + type: "post", + data: { + 'id': id + }, + success: function (r) { + if (r.code == 0) { + layer.msg(r.msg); + reLoad(); + } else { + layer.msg(r.msg); + } + } + }); + }) +} + +function resetPwd(id) { +} + +function batchRemove() { + var rows = $('#exampleTable').bootstrapTable('getSelections'); // 返回所有选择的行,当没有选择的记录时,返回一个空数组 + if (rows.length == 0) { + layer.msg("请选择要删除的数据"); + return; + } + layer.confirm("确认要删除选中的'" + rows.length + "'条数据吗?", { + btn: ['确定', '取消'] + // 按钮 + }, function () { + var ids = new Array(); + // 遍历所有选择的行数据,取每条数据对应的ID + $.each(rows, function (i, row) { + ids[i] = row['id']; + }); + $.ajax({ + type: 'POST', + data: { + "ids": ids + }, + url: prefix + '/batchRemove', + success: function (r) { + if (r.code == 0) { + layer.msg(r.msg); + reLoad(); + } else { + layer.msg(r.msg); + } + } + }); + }, function () { + + }); +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/js/appjs/novel/author/edit.js b/novel-admin/src/main/resources/static/js/appjs/novel/author/edit.js new file mode 100644 index 0000000..238a8a4 --- /dev/null +++ b/novel-admin/src/main/resources/static/js/appjs/novel/author/edit.js @@ -0,0 +1,103 @@ +var E = window.wangEditor; +$("[id^='contentEditor']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(13); + var editor = new E('#contentEditor' + relName); +// 自定义菜单配置 + editor.customConfig.menus = [ + 'head', // 标题 + 'bold', // 粗体 + 'fontSize', // 字号 + 'fontName', // 字体 + 'italic', // 斜体 + 'underline', // 下划线 + 'strikeThrough', // 删除线 + 'foreColor', // 文字颜色 + //'backColor', // 背景颜色 + //'link', // 插入链接 + 'list', // 列表 + 'justify', // 对齐方式 + 'quote', // 引用 + 'emoticon', // 表情 + 'image', // 插入图片 + //'table', // 表格 + //'video', // 插入视频 + //'code', // 插入代码 + 'undo', // 撤销 + 'redo' // 重复 + ]; + editor.customConfig.onchange = function (html) { + // html 即变化之后的内容 + $("#" + relName).val(html); + } + editor.customConfig.uploadImgShowBase64 = true; + editor.create(); + editor.txt.html($("#" + relName).val()); + +}) + +$("[id^='picImage']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(8); + layui.use('upload', function () { + var upload = layui.upload; + //执行实例 + var uploadInst = upload.render({ + elem: '#picImage' + relName, //绑定元素 + url: '/common/sysFile/upload', //上传接口 + size: 1000, + accept: 'file', + done: function (r) { + $("#picImage" + relName).attr("src", r.fileName); + $("#" + relName).val(r.fileName); + }, + error: function (r) { + layer.msg(r.msg); + } + }); + }); + +}); + +$().ready(function () { + validateRule(); +}); + +$.validator.setDefaults({ + submitHandler: function () { + update(); + } +}); +function update() { + $.ajax({ + cache: true, + type: "POST", + url: "/novel/author/update", + data: $('#signupForm').serialize(),// 你的formid + async: false, + error: function (request) { + parent.layer.alert("Connection error"); + }, + success: function (data) { + if (data.code == 0) { + parent.layer.msg("操作成功"); + parent.reLoad(); + var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引 + parent.layer.close(index); + + } else { + parent.layer.alert(data.msg) + } + + } + }); + +} +function validateRule() { + var icon = " "; + $("#signupForm").validate({ + ignore: "", + rules: { + }, + messages: { + } +}) +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/add.js b/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/add.js new file mode 100644 index 0000000..1b9f06c --- /dev/null +++ b/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/add.js @@ -0,0 +1,115 @@ +var E = window.wangEditor; +$("[id^='contentEditor']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(13); + var editor = new E('#contentEditor' + relName); +// 自定义菜单配置 + editor.customConfig.menus = [ + 'head', // 标题 + 'bold', // 粗体 + 'fontSize', // 字号 + 'fontName', // 字体 + 'italic', // 斜体 + 'underline', // 下划线 + 'strikeThrough', // 删除线 + 'foreColor', // 文字颜色 + //'backColor', // 背景颜色 + //'link', // 插入链接 + 'list', // 列表 + 'justify', // 对齐方式 + 'quote', // 引用 + 'emoticon', // 表情 + 'image', // 插入图片 + //'table', // 表格 + //'video', // 插入视频 + //'code', // 插入代码 + 'undo', // 撤销 + 'redo' // 重复 + ]; + editor.customConfig.onchange = function (html) { + // html 即变化之后的内容 + $("#" + relName).val(html); + } + editor.customConfig.uploadImgShowBase64 = true; + editor.create(); + +}) + +$("[id^='picImage']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(8); + layui.use('upload', function () { + var upload = layui.upload; + //执行实例 + var uploadInst = upload.render({ + elem: '#picImage' + relName, //绑定元素 + url: '/common/sysFile/upload', //上传接口 + size: 1000, + accept: 'file', + done: function (r) { + $("#picImage" + relName).attr("src", r.fileName); + $("#" + relName).val(r.fileName); + }, + error: function (r) { + layer.msg(r.msg); + } + }); + }); + +}); + + + + + + +$().ready(function () { + validateRule(); +}); + +$.validator.setDefaults({ + submitHandler: function () { + save(); + } +}); +function save() { + $.ajax({ + cache: true, + type: "POST", + url: "/novel/authorCode/save", + data: $('#signupForm').serialize(),// 你的formid + async: false, + error: function (request) { + parent.layer.alert("Connection error"); + }, + success: function (data) { + if (data.code == 0) { + parent.layer.msg("操作成功"); + parent.reLoad(); + var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引 + parent.layer.close(index); + + } else { + parent.layer.alert(data.msg) + } + + } + }); + +} +function validateRule() { + var icon = " "; + $("#signupForm").validate({ + ignore: "", + rules: { + inviteCode: { + required: true + }, validityTime: { + required: true + }, }, + messages: { + inviteCode: { + required: icon + "请选择邀请码" + }, validityTime: { + required: icon + "请选择有效时间" + }, } +}) +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/authorCode.js b/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/authorCode.js new file mode 100644 index 0000000..df532cf --- /dev/null +++ b/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/authorCode.js @@ -0,0 +1,212 @@ +var prefix = "/novel/authorCode" +$(function () { + load(); +}); + +function load() { + $('#exampleTable') + .bootstrapTable( + { + method: 'get', // 服务器数据的请求方式 get or post + url: prefix + "/list", // 服务器数据的加载地址 + // showRefresh : true, + // showToggle : true, + // showColumns : true, + iconSize: 'outline', + toolbar: '#exampleToolbar', + striped: true, // 设置为true会有隔行变色效果 + dataType: "json", // 服务器返回的数据类型 + pagination: true, // 设置为true会在底部显示分页条 + // queryParamsType : "limit", + // //设置为limit则会发送符合RESTFull格式的参数 + singleSelect: false, // 设置为true将禁止多选 + // contentType : "application/x-www-form-urlencoded", + // //发送到服务器的数据编码类型 + pageSize: 10, // 如果设置了分页,每页数据条数 + pageNumber: 1, // 如果设置了分布,首页页码 + //search : true, // 是否显示搜索框 + showColumns: false, // 是否显示内容下拉框(选择显示的列) + sidePagination: "server", // 设置在哪里进行分页,可选值为"client" 或者 "server" + queryParams: function (params) { + //说明:传入后台的参数包括offset开始索引,limit步长,sort排序列,order:desc或者,以及所有列的键值对 + var queryParams = getFormJson("searchForm"); + queryParams.limit = params.limit; + queryParams.offset = params.offset; + return queryParams; + }, + // //请求服务器数据时,你可以通过重写参数的方式添加一些额外的参数,例如 toolbar 中的参数 如果 + // queryParamsType = 'limit' ,返回参数必须包含 + // limit, offset, search, sort, order 否则, 需要包含: + // pageSize, pageNumber, searchText, sortName, + // sortOrder. + // 返回false将会终止请求 + responseHandler: function (rs) { + + if (rs.code == 0) { + return rs.data; + } else { + parent.layer.alert(rs.msg) + return {total: 0, rows: []}; + } + }, + columns: [ + { + checkbox: true + }, + { + title: '序号', + formatter: function () { + return arguments[2] + 1; + } + }, + + + { + field: 'inviteCode', + title: '邀请码' + }, + + + { + field: 'validityTime', + title: '有效时间' + }, + + + { + field: 'isUse', + title: '是否使用过', + formatter: function (value, row, index) { + return value == 1 ? '使用过' : '未使用'; + } + }, + + + { + field: 'createTime', + title: '创建时间' + }, + + + /* { + field: 'createUserId', + title: '创建人ID' + },*/ + + + { + title: '操作', + field: 'id', + align: 'center', + formatter: function (value, row, index) { + /* var d = ' ';*/ + /* var e = ' ';*/ + var r = ' '; + return r; + } + }] + }); +} + +function reLoad() { + $('#exampleTable').bootstrapTable('refresh'); +} + +function add() { + layer.open({ + type: 2, + title: '增加', + maxmin: true, + shadeClose: false, // 点击遮罩关闭层 + area: ['800px', '520px'], + content: prefix + '/add' // iframe的url + }); +} + +function detail(id) { + layer.open({ + type: 2, + title: '详情', + maxmin: true, + shadeClose: false, // 点击遮罩关闭层 + area: ['800px', '520px'], + content: prefix + '/detail/' + id // iframe的url + }); +} + +function edit(id) { + layer.open({ + type: 2, + title: '编辑', + maxmin: true, + shadeClose: false, // 点击遮罩关闭层 + area: ['800px', '520px'], + content: prefix + '/edit/' + id // iframe的url + }); +} + +function remove(id) { + layer.confirm('确定要删除选中的记录?', { + btn: ['确定', '取消'] + }, function () { + $.ajax({ + url: prefix + "/remove", + type: "post", + data: { + 'id': id + }, + success: function (r) { + if (r.code == 0) { + layer.msg(r.msg); + reLoad(); + } else { + layer.msg(r.msg); + } + } + }); + }) +} + +function resetPwd(id) { +} + +function batchRemove() { + var rows = $('#exampleTable').bootstrapTable('getSelections'); // 返回所有选择的行,当没有选择的记录时,返回一个空数组 + if (rows.length == 0) { + layer.msg("请选择要删除的数据"); + return; + } + layer.confirm("确认要删除选中的'" + rows.length + "'条数据吗?", { + btn: ['确定', '取消'] + // 按钮 + }, function () { + var ids = new Array(); + // 遍历所有选择的行数据,取每条数据对应的ID + $.each(rows, function (i, row) { + ids[i] = row['id']; + }); + $.ajax({ + type: 'POST', + data: { + "ids": ids + }, + url: prefix + '/batchRemove', + success: function (r) { + if (r.code == 0) { + layer.msg(r.msg); + reLoad(); + } else { + layer.msg(r.msg); + } + } + }); + }, function () { + + }); +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/edit.js b/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/edit.js new file mode 100644 index 0000000..3ef86e8 --- /dev/null +++ b/novel-admin/src/main/resources/static/js/appjs/novel/authorCode/edit.js @@ -0,0 +1,115 @@ +var E = window.wangEditor; +$("[id^='contentEditor']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(13); + var editor = new E('#contentEditor' + relName); +// 自定义菜单配置 + editor.customConfig.menus = [ + 'head', // 标题 + 'bold', // 粗体 + 'fontSize', // 字号 + 'fontName', // 字体 + 'italic', // 斜体 + 'underline', // 下划线 + 'strikeThrough', // 删除线 + 'foreColor', // 文字颜色 + //'backColor', // 背景颜色 + //'link', // 插入链接 + 'list', // 列表 + 'justify', // 对齐方式 + 'quote', // 引用 + 'emoticon', // 表情 + 'image', // 插入图片 + //'table', // 表格 + //'video', // 插入视频 + //'code', // 插入代码 + 'undo', // 撤销 + 'redo' // 重复 + ]; + editor.customConfig.onchange = function (html) { + // html 即变化之后的内容 + $("#" + relName).val(html); + } + editor.customConfig.uploadImgShowBase64 = true; + editor.create(); + editor.txt.html($("#" + relName).val()); + +}) + +$("[id^='picImage']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(8); + layui.use('upload', function () { + var upload = layui.upload; + //执行实例 + var uploadInst = upload.render({ + elem: '#picImage' + relName, //绑定元素 + url: '/common/sysFile/upload', //上传接口 + size: 1000, + accept: 'file', + done: function (r) { + $("#picImage" + relName).attr("src", r.fileName); + $("#" + relName).val(r.fileName); + }, + error: function (r) { + layer.msg(r.msg); + } + }); + }); + +}); + +$().ready(function () { + validateRule(); +}); + +$.validator.setDefaults({ + submitHandler: function () { + update(); + } +}); +function update() { + $.ajax({ + cache: true, + type: "POST", + url: "/novel/authorCode/update", + data: $('#signupForm').serialize(),// 你的formid + async: false, + error: function (request) { + parent.layer.alert("Connection error"); + }, + success: function (data) { + if (data.code == 0) { + parent.layer.msg("操作成功"); + parent.reLoad(); + var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引 + parent.layer.close(index); + + } else { + parent.layer.alert(data.msg) + } + + } + }); + +} +function validateRule() { + var icon = " "; + $("#signupForm").validate({ + ignore: "", + rules: { + inviteCode: + { + required: true + }, validityTime: + { + required: true + }, }, + messages: { + inviteCode: + { + required: icon + "请选择邀请码" + }, validityTime: + { + required: icon + "请选择有效时间" + }, } +}) +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/sql/novel/author/menu.js b/novel-admin/src/main/resources/static/sql/novel/author/menu.js new file mode 100644 index 0000000..d561b52 --- /dev/null +++ b/novel-admin/src/main/resources/static/sql/novel/author/menu.js @@ -0,0 +1,18 @@ +-- 菜单SQL +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + VALUES ('1', '作者表', 'novel/author', 'novel:author:author', '1', 'fa', '6'); + +-- 按钮父菜单ID +set @parentId = @@identity; + +-- 菜单对应按钮SQL +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '查看', null, 'novel:author:detail', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '新增', null, 'novel:author:add', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '修改', null, 'novel:author:edit', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '删除', null, 'novel:author:remove', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '批量删除', null, 'novel:author:batchRemove', '2', null, '6'; diff --git a/novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js b/novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js new file mode 100644 index 0000000..8c6c25d --- /dev/null +++ b/novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js @@ -0,0 +1,18 @@ +-- 菜单SQL +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + VALUES ('1', '作家邀请码表', 'novel/authorCode', 'novel:authorCode:authorCode', '1', 'fa', '6'); + +-- 按钮父菜单ID +set @parentId = @@identity; + +-- 菜单对应按钮SQL +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '查看', null, 'novel:authorCode:detail', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '新增', null, 'novel:authorCode:add', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '修改', null, 'novel:authorCode:edit', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '删除', null, 'novel:authorCode:remove', '2', null, '6'; +INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) + SELECT @parentId, '批量删除', null, 'novel:authorCode:batchRemove', '2', null, '6'; diff --git a/novel-admin/src/main/resources/templates/novel/author/add.html b/novel-admin/src/main/resources/templates/novel/author/add.html new file mode 100644 index 0000000..c648af6 --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/author/add.html @@ -0,0 +1,114 @@ + + + + + +
+
+
+
+
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + diff --git a/novel-admin/src/main/resources/templates/novel/author/author.html b/novel-admin/src/main/resources/templates/novel/author/author.html new file mode 100644 index 0000000..a88a205 --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/author/author.html @@ -0,0 +1,57 @@ + + + + + +
+
+
+
+
+
+
+
+ +
+ +
+
+ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/templates/novel/author/detail.html b/novel-admin/src/main/resources/templates/novel/author/detail.html new file mode 100644 index 0000000..fc178d2 --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/author/detail.html @@ -0,0 +1,111 @@ + + + + + +
+
+
+
+
+
+ +
+ + +
+
+ + + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + +
+
+
+
+
+
+
+
+ + diff --git a/novel-admin/src/main/resources/templates/novel/author/edit.html b/novel-admin/src/main/resources/templates/novel/author/edit.html new file mode 100644 index 0000000..904e36f --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/author/edit.html @@ -0,0 +1,116 @@ + + + + + +
+
+
+
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + diff --git a/novel-admin/src/main/resources/templates/novel/authorCode/add.html b/novel-admin/src/main/resources/templates/novel/authorCode/add.html new file mode 100644 index 0000000..c81ea69 --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/authorCode/add.html @@ -0,0 +1,48 @@ + + + + + +
+
+
+
+
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + diff --git a/novel-admin/src/main/resources/templates/novel/authorCode/authorCode.html b/novel-admin/src/main/resources/templates/novel/authorCode/authorCode.html new file mode 100644 index 0000000..539bed0 --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/authorCode/authorCode.html @@ -0,0 +1,66 @@ + + + + + +
+
+
+
+
+
+ + +
+
+ +
+ +
+
+ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/templates/novel/authorCode/detail.html b/novel-admin/src/main/resources/templates/novel/authorCode/detail.html new file mode 100644 index 0000000..77999ed --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/authorCode/detail.html @@ -0,0 +1,70 @@ + + + + + +
+
+
+
+
+
+ +
+ + +
+
+ + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + +
+
+
+
+
+
+
+
+ + diff --git a/novel-admin/src/main/resources/templates/novel/authorCode/edit.html b/novel-admin/src/main/resources/templates/novel/authorCode/edit.html new file mode 100644 index 0000000..3f648c4 --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/authorCode/edit.html @@ -0,0 +1,79 @@ + + + + + +
+
+
+
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + diff --git a/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java b/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java index b6beb0b..93de737 100644 --- a/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java +++ b/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java @@ -49,6 +49,15 @@ public enum ResponseStatus { * */ HAS_COMMENTS(3001, "已评价过该书籍!"), + /** + * 作者相关错误 + * */ + INVITE_CODE_INVALID(4001, "邀请码无效!"), + AUTHOR_STATUS_FORBIDDEN(4002, "作者状态异常,暂不能管理小说!") + , BOOKNAME_EXISTS(4003,"已发布过同名小说!") + + , + /** * 其他通用错误 diff --git a/novel-common/src/main/java/com/java2nb/novel/entity/Author.java b/novel-common/src/main/java/com/java2nb/novel/entity/Author.java new file mode 100644 index 0000000..fb4c6ff --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/entity/Author.java @@ -0,0 +1,136 @@ +package com.java2nb.novel.entity; + +import java.util.Date; +import javax.annotation.Generated; + +public class Author { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String inviteCode; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String penName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String telPhone; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String chatAccount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String email; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte workDirection; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte status; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getInviteCode() { + return inviteCode; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setInviteCode(String inviteCode) { + this.inviteCode = inviteCode == null ? null : inviteCode.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getPenName() { + return penName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPenName(String penName) { + this.penName = penName == null ? null : penName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getTelPhone() { + return telPhone; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setTelPhone(String telPhone) { + this.telPhone = telPhone == null ? null : telPhone.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getChatAccount() { + return chatAccount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setChatAccount(String chatAccount) { + this.chatAccount = chatAccount == null ? null : chatAccount.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getEmail() { + return email; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setEmail(String email) { + this.email = email == null ? null : email.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getWorkDirection() { + return workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setWorkDirection(Byte workDirection) { + this.workDirection = workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getStatus() { + return status; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setStatus(Byte status) { + this.status = status; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/entity/AuthorCode.java b/novel-common/src/main/java/com/java2nb/novel/entity/AuthorCode.java new file mode 100644 index 0000000..661c5e9 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/entity/AuthorCode.java @@ -0,0 +1,84 @@ +package com.java2nb.novel.entity; + +import java.util.Date; +import javax.annotation.Generated; + +public class AuthorCode { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String inviteCode; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date validityTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte isUse; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getInviteCode() { + return inviteCode; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setInviteCode(String inviteCode) { + this.inviteCode = inviteCode == null ? null : inviteCode.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getValidityTime() { + return validityTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setValidityTime(Date validityTime) { + this.validityTime = validityTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getIsUse() { + return isUse; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIsUse(Byte isUse) { + this.isUse = isUse; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorCodeDynamicSqlSupport.java b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorCodeDynamicSqlSupport.java new file mode 100644 index 0000000..63b0777 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorCodeDynamicSqlSupport.java @@ -0,0 +1,49 @@ +package com.java2nb.novel.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class AuthorCodeDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final AuthorCode authorCode = new AuthorCode(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = authorCode.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn inviteCode = authorCode.inviteCode; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn validityTime = authorCode.validityTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn isUse = authorCode.isUse; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = authorCode.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = authorCode.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class AuthorCode extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn inviteCode = column("invite_code", JDBCType.VARCHAR); + + public final SqlColumn validityTime = column("validity_time", JDBCType.TIMESTAMP); + + public final SqlColumn isUse = column("is_use", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public AuthorCode() { + super("author_code"); + } + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorCodeMapper.java b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorCodeMapper.java new file mode 100644 index 0000000..9c12621 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorCodeMapper.java @@ -0,0 +1,200 @@ +package com.java2nb.novel.mapper; + +import static com.java2nb.novel.mapper.AuthorCodeDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.entity.AuthorCode; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.BasicColumn; +import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider; +import org.mybatis.dynamic.sql.select.CountDSLCompleter; +import org.mybatis.dynamic.sql.select.SelectDSLCompleter; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.UpdateDSLCompleter; +import org.mybatis.dynamic.sql.update.UpdateModel; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; +import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils; + +@Mapper +public interface AuthorCodeMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + BasicColumn[] selectList = BasicColumn.columnList(id, inviteCode, validityTime, isUse, createTime, createUserId); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insertMultiple") + int insertMultiple(MultiRowInsertStatementProvider multipleInsertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("AuthorCodeResult") + Optional selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="AuthorCodeResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="invite_code", property="inviteCode", jdbcType=JdbcType.VARCHAR), + @Result(column="validity_time", property="validityTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="is_use", property="isUse", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default long count(CountDSLCompleter completer) { + return MyBatis3Utils.countFrom(this::count, authorCode, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int delete(DeleteDSLCompleter completer) { + return MyBatis3Utils.deleteFrom(this::delete, authorCode, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return delete(c -> + c.where(id, isEqualTo(id_)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(AuthorCode record) { + return MyBatis3Utils.insert(this::insert, record, authorCode, c -> + c.map(id).toProperty("id") + .map(inviteCode).toProperty("inviteCode") + .map(validityTime).toProperty("validityTime") + .map(isUse).toProperty("isUse") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertMultiple(Collection records) { + return MyBatis3Utils.insertMultiple(this::insertMultiple, records, authorCode, c -> + c.map(id).toProperty("id") + .map(inviteCode).toProperty("inviteCode") + .map(validityTime).toProperty("validityTime") + .map(isUse).toProperty("isUse") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(AuthorCode record) { + return MyBatis3Utils.insert(this::insert, record, authorCode, c -> + c.map(id).toPropertyWhenPresent("id", record::getId) + .map(inviteCode).toPropertyWhenPresent("inviteCode", record::getInviteCode) + .map(validityTime).toPropertyWhenPresent("validityTime", record::getValidityTime) + .map(isUse).toPropertyWhenPresent("isUse", record::getIsUse) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Optional selectOne(SelectDSLCompleter completer) { + return MyBatis3Utils.selectOne(this::selectOne, selectList, authorCode, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default List select(SelectDSLCompleter completer) { + return MyBatis3Utils.selectList(this::selectMany, selectList, authorCode, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default List selectDistinct(SelectDSLCompleter completer) { + return MyBatis3Utils.selectDistinct(this::selectMany, selectList, authorCode, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Optional selectByPrimaryKey(Long id_) { + return selectOne(c -> + c.where(id, isEqualTo(id_)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int update(UpdateDSLCompleter completer) { + return MyBatis3Utils.update(this::update, authorCode, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + static UpdateDSL updateAllColumns(AuthorCode record, UpdateDSL dsl) { + return dsl.set(id).equalTo(record::getId) + .set(inviteCode).equalTo(record::getInviteCode) + .set(validityTime).equalTo(record::getValidityTime) + .set(isUse).equalTo(record::getIsUse) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + static UpdateDSL updateSelectiveColumns(AuthorCode record, UpdateDSL dsl) { + return dsl.set(id).equalToWhenPresent(record::getId) + .set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(validityTime).equalToWhenPresent(record::getValidityTime) + .set(isUse).equalToWhenPresent(record::getIsUse) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(AuthorCode record) { + return update(c -> + c.set(inviteCode).equalTo(record::getInviteCode) + .set(validityTime).equalTo(record::getValidityTime) + .set(isUse).equalTo(record::getIsUse) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(AuthorCode record) { + return update(c -> + c.set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(validityTime).equalToWhenPresent(record::getValidityTime) + .set(isUse).equalToWhenPresent(record::getIsUse) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + ); + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorDynamicSqlSupport.java b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorDynamicSqlSupport.java new file mode 100644 index 0000000..55de8f9 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorDynamicSqlSupport.java @@ -0,0 +1,69 @@ +package com.java2nb.novel.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class AuthorDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final Author author = new Author(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = author.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = author.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn inviteCode = author.inviteCode; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn penName = author.penName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn telPhone = author.telPhone; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn chatAccount = author.chatAccount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn email = author.email; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn workDirection = author.workDirection; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn status = author.status; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = author.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class Author extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn inviteCode = column("invite_code", JDBCType.VARCHAR); + + public final SqlColumn penName = column("pen_name", JDBCType.VARCHAR); + + public final SqlColumn telPhone = column("tel_phone", JDBCType.VARCHAR); + + public final SqlColumn chatAccount = column("chat_account", JDBCType.VARCHAR); + + public final SqlColumn email = column("email", JDBCType.VARCHAR); + + public final SqlColumn workDirection = column("work_direction", JDBCType.TINYINT); + + public final SqlColumn status = column("status", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public Author() { + super("author"); + } + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorMapper.java b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorMapper.java new file mode 100644 index 0000000..91719a8 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/AuthorMapper.java @@ -0,0 +1,232 @@ +package com.java2nb.novel.mapper; + +import static com.java2nb.novel.mapper.AuthorDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.entity.Author; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.BasicColumn; +import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider; +import org.mybatis.dynamic.sql.select.CountDSLCompleter; +import org.mybatis.dynamic.sql.select.SelectDSLCompleter; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.UpdateDSLCompleter; +import org.mybatis.dynamic.sql.update.UpdateModel; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; +import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils; + +@Mapper +public interface AuthorMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + BasicColumn[] selectList = BasicColumn.columnList(id, userId, inviteCode, penName, telPhone, chatAccount, email, workDirection, status, createTime); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insertMultiple") + int insertMultiple(MultiRowInsertStatementProvider multipleInsertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("AuthorResult") + Optional selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="AuthorResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="invite_code", property="inviteCode", jdbcType=JdbcType.VARCHAR), + @Result(column="pen_name", property="penName", jdbcType=JdbcType.VARCHAR), + @Result(column="tel_phone", property="telPhone", jdbcType=JdbcType.VARCHAR), + @Result(column="chat_account", property="chatAccount", jdbcType=JdbcType.VARCHAR), + @Result(column="email", property="email", jdbcType=JdbcType.VARCHAR), + @Result(column="work_direction", property="workDirection", jdbcType=JdbcType.TINYINT), + @Result(column="status", property="status", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default long count(CountDSLCompleter completer) { + return MyBatis3Utils.countFrom(this::count, author, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int delete(DeleteDSLCompleter completer) { + return MyBatis3Utils.deleteFrom(this::delete, author, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return delete(c -> + c.where(id, isEqualTo(id_)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(Author record) { + return MyBatis3Utils.insert(this::insert, record, author, c -> + c.map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(inviteCode).toProperty("inviteCode") + .map(penName).toProperty("penName") + .map(telPhone).toProperty("telPhone") + .map(chatAccount).toProperty("chatAccount") + .map(email).toProperty("email") + .map(workDirection).toProperty("workDirection") + .map(status).toProperty("status") + .map(createTime).toProperty("createTime") + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertMultiple(Collection records) { + return MyBatis3Utils.insertMultiple(this::insertMultiple, records, author, c -> + c.map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(inviteCode).toProperty("inviteCode") + .map(penName).toProperty("penName") + .map(telPhone).toProperty("telPhone") + .map(chatAccount).toProperty("chatAccount") + .map(email).toProperty("email") + .map(workDirection).toProperty("workDirection") + .map(status).toProperty("status") + .map(createTime).toProperty("createTime") + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(Author record) { + return MyBatis3Utils.insert(this::insert, record, author, c -> + c.map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(inviteCode).toPropertyWhenPresent("inviteCode", record::getInviteCode) + .map(penName).toPropertyWhenPresent("penName", record::getPenName) + .map(telPhone).toPropertyWhenPresent("telPhone", record::getTelPhone) + .map(chatAccount).toPropertyWhenPresent("chatAccount", record::getChatAccount) + .map(email).toPropertyWhenPresent("email", record::getEmail) + .map(workDirection).toPropertyWhenPresent("workDirection", record::getWorkDirection) + .map(status).toPropertyWhenPresent("status", record::getStatus) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Optional selectOne(SelectDSLCompleter completer) { + return MyBatis3Utils.selectOne(this::selectOne, selectList, author, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default List select(SelectDSLCompleter completer) { + return MyBatis3Utils.selectList(this::selectMany, selectList, author, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default List selectDistinct(SelectDSLCompleter completer) { + return MyBatis3Utils.selectDistinct(this::selectMany, selectList, author, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Optional selectByPrimaryKey(Long id_) { + return selectOne(c -> + c.where(id, isEqualTo(id_)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int update(UpdateDSLCompleter completer) { + return MyBatis3Utils.update(this::update, author, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + static UpdateDSL updateAllColumns(Author record, UpdateDSL dsl) { + return dsl.set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(inviteCode).equalTo(record::getInviteCode) + .set(penName).equalTo(record::getPenName) + .set(telPhone).equalTo(record::getTelPhone) + .set(chatAccount).equalTo(record::getChatAccount) + .set(email).equalTo(record::getEmail) + .set(workDirection).equalTo(record::getWorkDirection) + .set(status).equalTo(record::getStatus) + .set(createTime).equalTo(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + static UpdateDSL updateSelectiveColumns(Author record, UpdateDSL dsl) { + return dsl.set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(penName).equalToWhenPresent(record::getPenName) + .set(telPhone).equalToWhenPresent(record::getTelPhone) + .set(chatAccount).equalToWhenPresent(record::getChatAccount) + .set(email).equalToWhenPresent(record::getEmail) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(status).equalToWhenPresent(record::getStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(Author record) { + return update(c -> + c.set(userId).equalTo(record::getUserId) + .set(inviteCode).equalTo(record::getInviteCode) + .set(penName).equalTo(record::getPenName) + .set(telPhone).equalTo(record::getTelPhone) + .set(chatAccount).equalTo(record::getChatAccount) + .set(email).equalTo(record::getEmail) + .set(workDirection).equalTo(record::getWorkDirection) + .set(status).equalTo(record::getStatus) + .set(createTime).equalTo(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(Author record) { + return update(c -> + c.set(userId).equalToWhenPresent(record::getUserId) + .set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(penName).equalToWhenPresent(record::getPenName) + .set(telPhone).equalToWhenPresent(record::getTelPhone) + .set(chatAccount).equalToWhenPresent(record::getChatAccount) + .set(email).equalToWhenPresent(record::getEmail) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(status).equalToWhenPresent(record::getStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + ); + } +} \ No newline at end of file diff --git a/novel-common/src/main/resources/application-common-dev.yml b/novel-common/src/main/resources/application-common-dev.yml index a2636a1..a95f8d4 100644 --- a/novel-common/src/main/resources/application-common-dev.yml +++ b/novel-common/src/main/resources/application-common-dev.yml @@ -4,7 +4,7 @@ spring: datasource: url: jdbc:mysql://127.0.0.1:3306/novel_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai username: root - password: test123456 + password: driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/novel-common/src/main/resources/mybatis/generatorConfig.xml b/novel-common/src/main/resources/mybatis/generatorConfig.xml index b4015c0..8ca3d63 100644 --- a/novel-common/src/main/resources/mybatis/generatorConfig.xml +++ b/novel-common/src/main/resources/mybatis/generatorConfig.xml @@ -9,7 +9,7 @@ - +
diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java b/novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java new file mode 100644 index 0000000..97028e8 --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/controller/AuthorController.java @@ -0,0 +1,121 @@ +package com.java2nb.novel.controller; + +import com.github.pagehelper.PageInfo; +import com.java2nb.novel.core.bean.ResultBean; +import com.java2nb.novel.core.enums.ResponseStatus; +import com.java2nb.novel.core.utils.BeanUtil; +import com.java2nb.novel.entity.Author; +import com.java2nb.novel.entity.Book; +import com.java2nb.novel.service.AuthorService; +import com.java2nb.novel.service.BookService; +import com.java2nb.novel.service.FriendLinkService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author 11797 + */ +@RequestMapping("author") +@RestController +@Slf4j +@RequiredArgsConstructor +public class AuthorController extends BaseController{ + + private final AuthorService authorService; + + private final BookService bookService; + + /** + * 校验笔名是否存在 + * */ + @PostMapping("checkPenName") + public ResultBean checkPenName(String penName){ + + return ResultBean.ok(authorService.checkPenName(penName)); + } + + /** + * 作家发布小说分页列表查询 + * */ + @PostMapping("listBookByPage") + public ResultBean listBookByPage(@RequestParam(value = "curr", defaultValue = "1") int page, @RequestParam(value = "limit", defaultValue = "10") int pageSize ,HttpServletRequest request){ + + return ResultBean.ok(new PageInfo<>(bookService.listBookPageByUserId(getUserDetails(request).getId(),page,pageSize) + )); + } + + /** + * 发布小说 + * */ + @PostMapping("addBook") + public ResultBean addBook(Book book,HttpServletRequest request){ + + //查询作家信息 + Author author = authorService.queryAuthor(getUserDetails(request).getId()); + + //判断作者状态是否正常 + if(author.getStatus()==1){ + //封禁状态,不能发布小说 + return ResultBean.fail(ResponseStatus.AUTHOR_STATUS_FORBIDDEN); + + } + + //发布小说 + bookService.addBook(book,author.getId(),author.getPenName()); + + return ResultBean.ok(); + } + + /** + * 更新小说状态,上架或下架 + * */ + @PostMapping("updateBookStatus") + public ResultBean updateBookStatus(Long bookId,Byte status,HttpServletRequest request){ + //查询作家信息 + Author author = authorService.queryAuthor(getUserDetails(request).getId()); + + //判断作者状态是否正常 + if(author.getStatus()==1){ + //封禁状态,不能发布小说 + return ResultBean.fail(ResponseStatus.AUTHOR_STATUS_FORBIDDEN); + } + + //更新小说状态,上架或下架 + bookService.updateBookStatus(bookId,status,author.getId()); + + return ResultBean.ok(); + } + + + + /** + * 发布章节内容 + * */ + @PostMapping("addBookContent") + public ResultBean addBookContent(Long bookId,String indexName,String content,HttpServletRequest request){ + //查询作家信息 + Author author = authorService.queryAuthor(getUserDetails(request).getId()); + + //判断作者状态是否正常 + if(author.getStatus()==1){ + //封禁状态,不能发布小说 + return ResultBean.fail(ResponseStatus.AUTHOR_STATUS_FORBIDDEN); + } + + //发布章节内容 + bookService.addBookContent(bookId,indexName,content,author.getId()); + + return ResultBean.ok(); + } + + + + +} diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/PageController.java b/novel-front/src/main/java/com/java2nb/novel/controller/PageController.java index 3a5e293..1d19bf3 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/PageController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/PageController.java @@ -1,19 +1,23 @@ package com.java2nb.novel.controller; +import com.java2nb.novel.core.bean.ResultBean; +import com.java2nb.novel.core.bean.UserDetails; import com.java2nb.novel.core.utils.ThreadLocalUtil; -import com.java2nb.novel.entity.Book; -import com.java2nb.novel.entity.BookContent; -import com.java2nb.novel.entity.BookIndex; -import com.java2nb.novel.entity.News; +import com.java2nb.novel.entity.*; +import com.java2nb.novel.service.AuthorService; import com.java2nb.novel.service.BookService; import com.java2nb.novel.service.NewsService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import javax.servlet.http.HttpServletRequest; +import java.net.URLEncoder; import java.util.List; /** @@ -22,12 +26,14 @@ import java.util.List; @Slf4j @RequiredArgsConstructor @Controller -public class PageController{ +public class PageController extends BaseController{ private final BookService bookService; private final NewsService newsService; + private final AuthorService authorService; + @RequestMapping("{url}.html") public String module(@PathVariable("url") String url) { @@ -35,7 +41,22 @@ public class PageController{ } @RequestMapping("{module}/{url}.html") - public String module2(@PathVariable("module") String module, @PathVariable("url") String url) { + public String module2(@PathVariable("module") String module, @PathVariable("url") String url,HttpServletRequest request) { + + if(request.getRequestURI().startsWith("/author")) { + //访问作者专区 + UserDetails user = getUserDetails(request); + if (user == null) { + //未登录 + return "redirect:/user/login.html?originUrl=" + URLEncoder.encode(request.getRequestURL().toString()); + } + + boolean isAuthor = authorService.isAuthor(user.getId()); + if (!isAuthor) { + return "redirect:/author/register.html" ; + } + } + return module + "/" + url; } @@ -141,4 +162,30 @@ public class PageController{ return "about/news_info"; } + + /** + * 作者注册页面 + * */ + @RequestMapping("author/register.html") + public String authorRegister(Author author, HttpServletRequest request, Model model){ + UserDetails user = getUserDetails(request); + if(user == null){ + //未登录 + return "redirect:/user/login.html?originUrl=/author/register.html"; + } + + if(StringUtils.isNotBlank(author.getInviteCode())) { + //提交作者注册信息 + String errorInfo = authorService.register(user.getId(), author); + if(StringUtils.isBlank(errorInfo)){ + //注册成功 + return "redirect:/author/index.html"; + } + model.addAttribute("LabErr",errorInfo); + model.addAttribute("author",author); + } + return "author/register"; + } + + } diff --git a/novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java b/novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java new file mode 100644 index 0000000..5f96320 --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/service/AuthorService.java @@ -0,0 +1,42 @@ +package com.java2nb.novel.service; + + +import com.java2nb.novel.entity.Author; +import com.java2nb.novel.entity.FriendLink; + +import java.util.List; + +/** + * @author 11797 + */ +public interface AuthorService { + + /** + * 校验笔名是否存在 + * @param penName 校验的笔名 + * @return true:存在该笔名,false: 不存在该笔名 + * */ + Boolean checkPenName(String penName); + + /** + * 作家注册 + * @param userId 注册用户ID + *@param author 注册信息 + * @return 返回错误信息 + * */ + String register(Long userId, Author author); + + /** + * 判断是否是作家 + * @param userId 用户ID + * @return true:是作家,false: 不是作家 + * */ + Boolean isAuthor(Long userId); + + /** + * 查询作家信息 + * @param userId 用户ID + * @return 作家对象 + * */ + Author queryAuthor(Long userId); +} diff --git a/novel-front/src/main/java/com/java2nb/novel/service/BookService.java b/novel-front/src/main/java/com/java2nb/novel/service/BookService.java index c476628..fea0f2b 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/BookService.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/BookService.java @@ -191,4 +191,37 @@ public interface BookService { * @param bookId 小说ID */ void updateBookPicToLocal(String picUrl, Long bookId); + + /** + * 通过作者ID查询小说分页列表 + * @param userId 用户ID + * @param page 页码 + * @param pageSize 分页大小 + * */ + List listBookPageByUserId(Long userId, int page, int pageSize); + + /** + * 发布小说 + * @param book 小说信息 + * @param authorId 作家ID + * @param penName 作家笔名 + * */ + void addBook(Book book, Long authorId, String penName); + + /** + * 更新小说状态,上架或下架 + * @param bookId 小说ID + * @param status 更新的状态 + * @param authorId 作者ID + * */ + void updateBookStatus(Long bookId, Byte status, Long authorId); + + /** + * 发布章节内容 + * @param bookId 小说ID + * @param indexName 章节名 + * @param content 章节内容 + * @param authorId 作者ID + * */ + void addBookContent(Long bookId, String indexName, String content, Long authorId); } diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java new file mode 100644 index 0000000..287f3fe --- /dev/null +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/AuthorServiceImpl.java @@ -0,0 +1,92 @@ +package com.java2nb.novel.service.impl; + +import com.java2nb.novel.core.cache.CacheKey; +import com.java2nb.novel.core.cache.CacheService; +import com.java2nb.novel.core.enums.ResponseStatus; +import com.java2nb.novel.core.exception.BusinessException; +import com.java2nb.novel.entity.Author; +import com.java2nb.novel.entity.FriendLink; +import com.java2nb.novel.mapper.*; +import com.java2nb.novel.service.AuthorService; +import com.java2nb.novel.service.FriendLinkService; +import lombok.RequiredArgsConstructor; +import org.mybatis.dynamic.sql.render.RenderingStrategies; +import org.mybatis.dynamic.sql.select.CountDSLCompleter; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +import static com.java2nb.novel.mapper.AuthorCodeDynamicSqlSupport.authorCode; +import static com.java2nb.novel.mapper.BookDynamicSqlSupport.book; +import static com.java2nb.novel.mapper.BookDynamicSqlSupport.id; +import static com.java2nb.novel.mapper.BookDynamicSqlSupport.updateTime; +import static com.java2nb.novel.mapper.FriendLinkDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; +import static org.mybatis.dynamic.sql.select.SelectDSL.select; + +/** + * @author 11797 + */ +@Service +@RequiredArgsConstructor +public class AuthorServiceImpl implements AuthorService { + + private final AuthorMapper authorMapper; + + private final AuthorCodeMapper authorCodeMapper; + + + @Override + public Boolean checkPenName(String penName) { + return authorMapper.count(c -> + c.where(AuthorDynamicSqlSupport.penName, isEqualTo(penName))) > 0; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public String register(Long userId, Author author) { + Date currentDate = new Date(); + //判断邀请码是否有效 + if (authorCodeMapper.count(c -> + c.where(AuthorCodeDynamicSqlSupport.inviteCode, isEqualTo(author.getInviteCode())) + .and(AuthorCodeDynamicSqlSupport.isUse, isEqualTo((byte) 0)) + .and(AuthorCodeDynamicSqlSupport.validityTime, isGreaterThan(currentDate))) > 0) { + //邀请码有效 + //保存作家信息 + author.setUserId(userId); + author.setCreateTime(currentDate); + authorMapper.insertSelective(author); + //设置邀请码状态为已使用 + authorCodeMapper.update(update(authorCode) + .set(AuthorCodeDynamicSqlSupport.isUse) + .equalTo((byte) 1) + .where(AuthorCodeDynamicSqlSupport.inviteCode,isEqualTo(author.getInviteCode())) + .build() + .render(RenderingStrategies.MYBATIS3)); + return ""; + } else { + //邀请码无效 + return "邀请码无效!"; + } + + } + + @Override + public Boolean isAuthor(Long userId) { + return authorMapper.count(c -> + c.where(AuthorDynamicSqlSupport.userId, isEqualTo(userId))) > 0; + } + + @Override + public Author queryAuthor(Long userId) { + return authorMapper.selectMany( + select(AuthorDynamicSqlSupport.id,AuthorDynamicSqlSupport.penName,AuthorDynamicSqlSupport.status) + .from(AuthorDynamicSqlSupport.author) + .where(AuthorDynamicSqlSupport.userId,isEqualTo(userId)) + .build() + .render(RenderingStrategies.MYBATIS3)).get(0); + } +} diff --git a/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java b/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java index 58072ad..eeaa8ff 100644 --- a/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java +++ b/novel-front/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java @@ -14,6 +14,7 @@ import com.java2nb.novel.entity.*; import com.java2nb.novel.entity.Book; import com.java2nb.novel.mapper.*; import com.java2nb.novel.search.BookSP; +import com.java2nb.novel.service.AuthorService; import com.java2nb.novel.service.BookService; import com.java2nb.novel.vo.BookCommentVO; import com.java2nb.novel.vo.BookSettingVO; @@ -73,6 +74,8 @@ public class BookServiceImpl implements BookService { private final CacheService cacheService; + private final AuthorService authorService; + @SneakyThrows @Override @@ -194,7 +197,7 @@ public class BookServiceImpl implements BookService { @Override public Book queryBookDetail(Long bookId) { - SelectStatementProvider selectStatement = select(id, catName, catId, picUrl, bookName, authorId, authorName, bookDesc, bookStatus, visitCount, wordCount, lastIndexId, lastIndexName, lastIndexUpdateTime,score) + SelectStatementProvider selectStatement = select(id, catName, catId, picUrl, bookName, authorId, authorName, bookDesc, bookStatus, visitCount, wordCount, lastIndexId, lastIndexName, lastIndexUpdateTime,score,status) .from(book) .where(id, isEqualTo(bookId)) .build() @@ -211,7 +214,7 @@ public class BookServiceImpl implements BookService { PageHelper.startPage(1,limit); } - SelectStatementProvider selectStatement = select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.bookId, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.updateTime) + SelectStatementProvider selectStatement = select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.bookId, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.updateTime,BookIndexDynamicSqlSupport.isVip) .from(bookIndex) .where(BookIndexDynamicSqlSupport.bookId, isEqualTo(bookId)) .build() @@ -222,7 +225,7 @@ public class BookServiceImpl implements BookService { @Override public BookIndex queryBookIndex(Long bookIndexId) { - SelectStatementProvider selectStatement = select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.bookId, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.wordCount, BookIndexDynamicSqlSupport.updateTime) + SelectStatementProvider selectStatement = select(BookIndexDynamicSqlSupport.id, BookIndexDynamicSqlSupport.bookId, BookIndexDynamicSqlSupport.indexNum, BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.wordCount, BookIndexDynamicSqlSupport.updateTime,BookIndexDynamicSqlSupport.isVip) .from(bookIndex) .where(BookIndexDynamicSqlSupport.id, isEqualTo(bookIndexId)) .build() @@ -302,6 +305,7 @@ public class BookServiceImpl implements BookService { } SelectStatementProvider selectStatement = select(id, catId, catName, bookName, lastIndexId, lastIndexName, authorId, authorName, picUrl, bookDesc, wordCount, lastIndexUpdateTime) .from(book) + .where(wordCount,isGreaterThan(0)) .orderBy(sortSpecification) .limit(limit) .build() @@ -454,5 +458,103 @@ public class BookServiceImpl implements BookService { } + @Override + public List listBookPageByUserId(Long userId, int page, int pageSize) { + + PageHelper.startPage(page,pageSize); + + SelectStatementProvider selectStatement = select(id, bookName, visitCount, lastIndexName, status) + .from(book) + .where(authorId, isEqualTo(authorService.queryAuthor(userId).getId())) + .orderBy(BookDynamicSqlSupport.createTime.descending()) + .build() + .render(RenderingStrategies.MYBATIS3); + return bookMapper.selectMany(selectStatement); + + } + + @Override + public void addBook(Book book, Long authorId, String penName) { + //判断小说名是否存在 + if(queryIdByNameAndAuthor(book.getBookName(),penName)!=null){ + //该作者发布过此书名的小说 + throw new BusinessException(ResponseStatus.BOOKNAME_EXISTS); + }; + book.setAuthorName(penName); + book.setAuthorId(authorId); + book.setVisitCount(0L); + book.setWordCount(0); + book.setScore(6.5f); + book.setLastIndexName(""); + book.setCreateTime(new Date()); + book.setUpdateTime(book.getCreateTime()); + bookMapper.insertSelective(book); + + } + + @Override + public void updateBookStatus(Long bookId, Byte status, Long authorId) { + bookMapper.update(update(book) + .set(BookDynamicSqlSupport.status) + .equalTo(status) + .where(id,isEqualTo(bookId)) + .and(BookDynamicSqlSupport.authorId,isEqualTo(authorId)) + .build() + .render(RenderingStrategies.MYBATIS3)); + } + + @Transactional + @Override + public void addBookContent(Long bookId, String indexName, String content, Long authorId) { + + Book book = queryBookDetail(bookId); + if(!authorId.equals(book.getAuthorId())){ + //并不是更新自己的小说 + return; + } + Long lastIndexId = new IdWorker().nextId(); + Date currentDate = new Date(); + int wordCount = content.length(); + + //更新小说主表信息 + bookMapper.update(update(BookDynamicSqlSupport.book) + .set(BookDynamicSqlSupport.lastIndexId) + .equalTo(lastIndexId) + .set(BookDynamicSqlSupport.lastIndexName) + .equalTo(indexName) + .set(BookDynamicSqlSupport.lastIndexUpdateTime) + .equalTo(currentDate) + .set(BookDynamicSqlSupport.wordCount) + .equalTo(book.getWordCount()+wordCount) + .where(id,isEqualTo(bookId)) + .and(BookDynamicSqlSupport.authorId,isEqualTo(authorId)) + .build() + .render(RenderingStrategies.MYBATIS3)); + //更新小说目录表 + int indexNum = 0; + if(book.getLastIndexId() != null){ + indexNum = queryBookIndex(book.getLastIndexId()).getIndexNum()+1; + } + BookIndex lastBookIndex = new BookIndex(); + lastBookIndex.setId(lastIndexId); + lastBookIndex.setWordCount(wordCount); + lastBookIndex.setIndexName(indexName); + lastBookIndex.setIndexNum(indexNum); + lastBookIndex.setBookId(bookId); + lastBookIndex.setIsVip(book.getStatus()); + lastBookIndex.setCreateTime(currentDate); + lastBookIndex.setUpdateTime(currentDate); + bookIndexMapper.insertSelective(lastBookIndex); + + //更新小说内容表 + BookContent bookContent = new BookContent(); + bookContent.setIndexId(lastIndexId); + bookContent.setContent(content); + bookContentMapper.insertSelective(bookContent); + + + + } + } diff --git a/novel-front/src/main/resources/mybatis/mapping/BookMapper.xml b/novel-front/src/main/resources/mybatis/mapping/BookMapper.xml index 22799f2..98b0687 100644 --- a/novel-front/src/main/resources/mybatis/mapping/BookMapper.xml +++ b/novel-front/src/main/resources/mybatis/mapping/BookMapper.xml @@ -4,34 +4,33 @@ @@ -59,7 +58,7 @@ limit #{offset},#{limit} - select id,book_name,author_name,pic_url,book_desc,score from book ORDER BY score,RAND() LIMIT #{limit}; diff --git a/novel-front/src/main/resources/static/css/easyui.css b/novel-front/src/main/resources/static/css/easyui.css new file mode 100644 index 0000000..d54b52a --- /dev/null +++ b/novel-front/src/main/resources/static/css/easyui.css @@ -0,0 +1,3243 @@ +.panel { + overflow: hidden; + text-align: left; + margin: 0; + border: 0; + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.panel-header, +.panel-body { + border-width: 1px; + border-style: solid; +} +.panel-header { + padding: 5px; + position: relative; +} +.panel-title { + background: url('images/blank.gif') no-repeat; +} +.panel-header-noborder { + border-width: 0 0 1px 0; +} +.panel-body { + overflow: auto; + border-top-width: 0; + padding: 0; +} +.panel-body-noheader { + border-top-width: 1px; +} +.panel-body-noborder { + border-width: 0px; +} +.panel-body-nobottom { + border-bottom-width: 0; +} +.panel-with-icon { + padding-left: 18px; +} +.panel-icon, +.panel-tool { + position: absolute; + top: 50%; + margin-top: -8px; + height: 16px; + overflow: hidden; +} +.panel-icon { + left: 5px; + width: 16px; +} +.panel-tool { + right: 5px; + width: auto; +} +.panel-tool a { + display: inline-block; + width: 16px; + height: 16px; + opacity: 0.6; + filter: alpha(opacity=60); + margin: 0 0 0 2px; + vertical-align: top; +} +.panel-tool a:hover { + opacity: 1; + filter: alpha(opacity=100); + background-color: #e6e6e6; + -moz-border-radius: 3px 3px 3px 3px; + -webkit-border-radius: 3px 3px 3px 3px; + border-radius: 3px 3px 3px 3px; +} +.panel-loading { + padding: 11px 0px 10px 30px; +} +.panel-noscroll { + overflow: hidden; +} +.panel-fit, +.panel-fit body { + height: 100%; + margin: 0; + padding: 0; + border: 0; + overflow: hidden; background: #f9f9f9 +} +.panel-loading { + background: url('images/loading.gif') no-repeat 10px 10px; +} +.panel-tool-close { + background: url('images/panel_tools.png') no-repeat -16px 0px; +} +.panel-tool-min { + background: url('images/panel_tools.png') no-repeat 0px 0px; +} +.panel-tool-max { + background: url('images/panel_tools.png') no-repeat 0px -16px; +} +.panel-tool-restore { + background: url('images/panel_tools.png') no-repeat -16px -16px; +} +.panel-tool-collapse { + background: url('images/panel_tools.png') no-repeat -32px 0; +} +.panel-tool-expand { + background: url('images/panel_tools.png') no-repeat -32px -16px; +} +.panel-header, +.panel-body { + border-color: #D4D4D4; +} +.panel-header { + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.panel-body { + background-color: #ffffff; + color: #333; + font-size: 12px; +} +.panel-title { + font-size: 12px; + font-weight: bold; + color: #777; + height: 16px; + line-height: 16px; +} +.panel-footer { + border: 1px solid #D4D4D4; + overflow: hidden; + background: #F5F5F5; +} +.panel-footer-noborder { + border-width: 1px 0 0 0; +} +.panel-hleft, +.panel-hright { + position: relative; +} +.panel-hleft>.panel-body, +.panel-hright>.panel-body { + position: absolute; +} +.panel-hleft>.panel-header { + float: left; +} +.panel-hright>.panel-header { + float: right; +} +.panel-hleft>.panel-body { + border-top-width: 1px; + border-left-width: 0; +} +.panel-hright>.panel-body { + border-top-width: 1px; + border-right-width: 0; +} +.panel-hleft>.panel-body-nobottom { + border-bottom-width: 1px; + border-right-width: 0; +} +.panel-hright>.panel-body-nobottom { + border-bottom-width: 1px; + border-left-width: 0; +} +.panel-hleft>.panel-footer { + position: absolute; + right: 0; +} +.panel-hright>.panel-footer { + position: absolute; + left: 0; +} +.panel-hleft>.panel-header-noborder { + border-width: 0 1px 0 0; +} +.panel-hright>.panel-header-noborder { + border-width: 0 0 0 1px; +} +.panel-hleft>.panel-body-noborder { + border-width: 0; +} +.panel-hright>.panel-body-noborder { + border-width: 0; +} +.panel-hleft>.panel-body-noheader { + border-left-width: 1px; +} +.panel-hright>.panel-body-noheader { + border-right-width: 1px; +} +.panel-hleft>.panel-footer-noborder { + border-width: 0 0 0 1px; +} +.panel-hright>.panel-footer-noborder { + border-width: 0 1px 0 0; +} +.panel-hleft>.panel-header .panel-icon, +.panel-hright>.panel-header .panel-icon { + margin-top: 0; + top: 5px; +} +.panel-hleft>.panel-header .panel-title, +.panel-hright>.panel-header .panel-title { + position: absolute; + min-width: 16px; + left: 21px; + top: 5px; + bottom: auto; + white-space: nowrap; + word-wrap: normal; + -webkit-transform: rotate(90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(90deg); + -o-transform-origin: 0 0; + transform: rotate(90deg); + transform-origin: 0 0; +} +.panel-hleft>.panel-header .panel-title-up, +.panel-hright>.panel-header .panel-title-up { + position: absolute; + min-width: 16px; + left: 21px; + top: auto; + bottom: 5px; + text-align: right; + white-space: nowrap; + word-wrap: normal; + -webkit-transform: rotate(-90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(-90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(-90deg); + -o-transform-origin: 0 0; + transform: rotate(-90deg); + transform-origin: 0 16px; +} +.panel-hleft>.panel-header .panel-with-icon.panel-title-up, +.panel-hright>.panel-header .panel-with-icon.panel-title-up { + padding-left: 0; + padding-right: 18px; +} +.panel-hleft>.panel-header .panel-tool, +.panel-hright>.panel-header .panel-tool { + top: auto; + bottom: 5px; + width: 16px; + height: auto; + left: 50%; + margin-left: -8px; + margin-top: 0; +} +.panel-hleft>.panel-header .panel-tool a, +.panel-hright>.panel-header .panel-tool a { + margin: 2px 0 0 0; +} +.accordion { + overflow: hidden; + border-width: 1px; + border-style: solid; +} +.accordion .accordion-header { + border-width: 0 0 1px; + cursor: pointer; +} +.accordion .accordion-body { + border-width: 0 0 1px; +} +.accordion-noborder { + border-width: 0; +} +.accordion-noborder .accordion-header { + border-width: 0 0 1px; +} +.accordion-noborder .accordion-body { + border-width: 0 0 1px; +} +.accordion-collapse { + background: url('images/accordion_arrows.png') no-repeat 0 0; +} +.accordion-expand { + background: url('images/accordion_arrows.png') no-repeat -16px 0; +} +.accordion { + background: #ffffff; + border-color: #D4D4D4; +} +.accordion .accordion-header { + background: #F2F2F2; + filter: none; +} +.accordion .accordion-header-selected { + background: #0081c2; +} +.accordion .accordion-header-selected .panel-title { + color: #fff; +} +.accordion .panel-last > .accordion-header { + border-bottom-color: #F2F2F2; +} +.accordion .panel-last > .accordion-body { + border-bottom-color: #ffffff; +} +.accordion .panel-last > .accordion-header-selected, +.accordion .panel-last > .accordion-header-border { + border-bottom-color: #D4D4D4; +} +.accordion> .panel-hleft { + float: left; +} +.accordion> .panel-hleft>.panel-header { + border-width: 0 1px 0 0; +} +.accordion> .panel-hleft> .panel-body { + border-width: 0 1px 0 0; +} +.accordion> .panel-hleft.panel-last > .accordion-header { + border-right-color: #F2F2F2; +} +.accordion> .panel-hleft.panel-last > .accordion-body { + border-right-color: #ffffff; +} +.accordion> .panel-hleft.panel-last > .accordion-header-selected, +.accordion> .panel-hleft.panel-last > .accordion-header-border { + border-right-color: #D4D4D4; +} +.accordion> .panel-hright { + float: right; +} +.accordion> .panel-hright>.panel-header { + border-width: 0 0 0 1px; +} +.accordion> .panel-hright> .panel-body { + border-width: 0 0 0 1px; +} +.accordion> .panel-hright.panel-last > .accordion-header { + border-left-color: #F2F2F2; +} +.accordion> .panel-hright.panel-last > .accordion-body { + border-left-color: #ffffff; +} +.accordion> .panel-hright.panel-last > .accordion-header-selected, +.accordion> .panel-hright.panel-last > .accordion-header-border { + border-left-color: #D4D4D4; +} +.window { + overflow: hidden; + padding: 5px; + border-width: 1px; + border-style: solid; +} +.window .window-header { + background: transparent; + padding: 0px 0px 6px 0px; +} +.window .window-body { + border-width: 1px; + border-style: solid; + border-top-width: 0px; +} +.window .window-body-noheader { + border-top-width: 1px; +} +.window .panel-body-nobottom { + border-bottom-width: 0; +} +.window .window-header .panel-icon, +.window .window-header .panel-tool { + top: 50%; + margin-top: -11px; +} +.window .window-header .panel-icon { + left: 1px; +} +.window .window-header .panel-tool { + right: 1px; +} +.window .window-header .panel-with-icon { + padding-left: 18px; +} +.window-proxy { + position: absolute; + overflow: hidden; +} +.window-proxy-mask { + position: absolute; + filter: alpha(opacity=5); + opacity: 0.05; +} +.window-mask { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + filter: alpha(opacity=40); + opacity: 0.40; + font-size: 1px; + overflow: hidden; +} +.window, +.window-shadow { + position: absolute; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.window-shadow { + background: #ccc; + -moz-box-shadow: 2px 2px 3px #cccccc; + -webkit-box-shadow: 2px 2px 3px #cccccc; + box-shadow: 2px 2px 3px #cccccc; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.window, +.window .window-body { + border-color: #D4D4D4; +} +.window { + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 20%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 20%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 20%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 20%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.window-proxy { + border: 1px dashed #D4D4D4; +} +.window-proxy-mask, +.window-mask { + background: #ccc; +} +.window .panel-footer { + border: 1px solid #D4D4D4; + position: relative; + top: -1px; +} +.window-thinborder { + padding: 0; +} +.window-thinborder .window-header { + padding: 5px 5px 6px 5px; +} +.window-thinborder .window-body { + border-width: 0px; +} +.window-thinborder .window-header .panel-icon, +.window-thinborder .window-header .panel-tool { + margin-top: -9px; + margin-left: 5px; + margin-right: 5px; +} +.window-noborder { + border: 0; +} +.window.panel-hleft .window-header { + padding: 0 6px 0 0; +} +.window.panel-hright .window-header { + padding: 0 0 0 6px; +} +.window.panel-hleft>.panel-header .panel-title { + top: auto; + left: 16px; +} +.window.panel-hright>.panel-header .panel-title { + top: auto; + right: 16px; +} +.window.panel-hleft>.panel-header .panel-title-up, +.window.panel-hright>.panel-header .panel-title-up { + bottom: 0; +} +.window.panel-hleft .window-body { + border-width: 1px 1px 1px 0; +} +.window.panel-hright .window-body { + border-width: 1px 0 1px 1px; +} +.window.panel-hleft .window-header .panel-icon { + top: 1px; + margin-top: 0; + left: 0; +} +.window.panel-hright .window-header .panel-icon { + top: 1px; + margin-top: 0; + left: auto; + right: 1px; +} +.window.panel-hleft .window-header .panel-tool, +.window.panel-hright .window-header .panel-tool { + margin-top: 0; + top: auto; + bottom: 1px; + right: auto; + margin-right: 0; + left: 50%; + margin-left: -11px; +} +.window.panel-hright .window-header .panel-tool { + left: auto; + right: 1px; +} +.window-thinborder.panel-hleft .window-header { + padding: 5px 6px 5px 5px; +} +.window-thinborder.panel-hright .window-header { + padding: 5px 5px 5px 6px; +} +.window-thinborder.panel-hleft>.panel-header .panel-title { + left: 21px; +} +.window-thinborder.panel-hleft>.panel-header .panel-title-up, +.window-thinborder.panel-hright>.panel-header .panel-title-up { + bottom: 5px; +} +.window-thinborder.panel-hleft .window-header .panel-icon, +.window-thinborder.panel-hright .window-header .panel-icon { + margin-top: 5px; +} +.window-thinborder.panel-hleft .window-header .panel-tool, +.window-thinborder.panel-hright .window-header .panel-tool { + left: 16px; + bottom: 5px; +} +.dialog-content { + overflow: auto; +} +.dialog-toolbar { + position: relative; + padding: 2px 5px; +} +.dialog-tool-separator { + float: left; + height: 24px; + border-left: 1px solid #ccc; + border-right: 1px solid #fff; + margin: 2px 1px; +} +.dialog-button { + position: relative; + top: -1px; + padding: 5px; + text-align: right; +} +.dialog-button .l-btn { + margin-left: 5px; +} +.dialog-toolbar, +.dialog-button { + background: #F5F5F5; + border-width: 1px; + border-style: solid; +} +.dialog-toolbar { + border-color: #D4D4D4 #D4D4D4 #e6e6e6 #D4D4D4; +} +.dialog-button { + border-color: #e6e6e6 #D4D4D4 #D4D4D4 #D4D4D4; +} +.window-thinborder .dialog-toolbar { + border-left: transparent; + border-right: transparent; + border-top-color: #F5F5F5; +} +.window-thinborder .dialog-button { + top: 0px; + padding: 5px 8px 8px 8px; + border-left: transparent; + border-right: transparent; + border-bottom: transparent; +} +.l-btn { + text-decoration: none; + display: inline-block; + overflow: hidden; + margin: 0; + padding: 0; + cursor: pointer; + outline: none; + text-align: center; + vertical-align: middle; + line-height: normal; +} +.l-btn-plain { + border-width: 0; + padding: 1px; +} +.l-btn-left { + display: inline-block; + position: relative; + overflow: hidden; + margin: 0; + padding: 0; + vertical-align: top; +} +.l-btn-text { + display: inline-block; + vertical-align: top; + width: auto; + line-height: 24px; + font-size: 12px; + padding: 0; + margin: 0 4px; +} +.l-btn-icon { + display: inline-block; + width: 16px; + height: 16px; + line-height: 16px; + position: absolute; + top: 50%; + margin-top: -8px; + font-size: 1px; +} +.l-btn span span .l-btn-empty { + display: inline-block; + margin: 0; + width: 16px; + height: 24px; + font-size: 1px; + vertical-align: top; +} +.l-btn span .l-btn-icon-left { + padding: 0 0 0 20px; + background-position: left center; +} +.l-btn span .l-btn-icon-right { + padding: 0 20px 0 0; + background-position: right center; +} +.l-btn-icon-left .l-btn-text { + margin: 0 4px 0 24px; +} +.easyui-form td .l-btn-icon-left .l-btn-text { + margin: 0 4px; +} +.l-btn-icon-left .l-btn-icon { + left: 4px; +} +.l-btn-icon-right .l-btn-text { + margin: 0 24px 0 4px; +} +.l-btn-icon-right .l-btn-icon { + right: 4px; +} +.l-btn-icon-top .l-btn-text { + margin: 20px 4px 0 4px; +} +.l-btn-icon-top .l-btn-icon { + top: 4px; + left: 50%; + margin: 0 0 0 -8px; +} +.l-btn-icon-bottom .l-btn-text { + margin: 0 4px 20px 4px; +} +.l-btn-icon-bottom .l-btn-icon { + top: auto; + bottom: 4px; + left: 50%; + margin: 0 0 0 -8px; +} +.l-btn-left .l-btn-empty { + margin: 0 4px; + width: 16px; +} +.l-btn-plain:hover { + padding: 0; +} +.l-btn-focus { + outline: #0000FF dotted thin; +} +.l-btn-large .l-btn-text { + line-height: 40px; +} +.l-btn-large .l-btn-icon { + width: 32px; + height: 32px; + line-height: 32px; + margin-top: -16px; +} +.l-btn-large .l-btn-icon-left .l-btn-text { + margin-left: 40px; +} +.l-btn-large .l-btn-icon-right .l-btn-text { + margin-right: 40px; +} +.l-btn-large .l-btn-icon-top .l-btn-text { + margin-top: 36px; + line-height: 24px; + min-width: 32px; +} +.l-btn-large .l-btn-icon-top .l-btn-icon { + margin: 0 0 0 -16px; +} +.l-btn-large .l-btn-icon-bottom .l-btn-text { + margin-bottom: 36px; + line-height: 24px; + min-width: 32px; +} +.l-btn-large .l-btn-icon-bottom .l-btn-icon { + margin: 0 0 0 -16px; +} +.l-btn-large .l-btn-left .l-btn-empty { + margin: 0 4px; + width: 32px; +} +.l-btn { + color: #444; + background: #f5f5f5; + background-repeat: repeat-x; + border: 1px solid #bbb; + background: -webkit-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: -moz-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: -o-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: linear-gradient(to bottom,#ffffff 0,#e6e6e6 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#e6e6e6,GradientType=0); + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.l-btn:hover { + background: #e6e6e6; + color: #00438a; + border: 1px solid #ddd; + filter: none; +} +.l-btn-plain { + background: transparent; + border-width: 0; + filter: none; +} +.l-btn-outline { + border-width: 1px; + border-color: #ddd; + padding: 0; +} +.l-btn-plain:hover { + background: #e6e6e6; + color: #00438a; + border: 1px solid #ddd; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.l-btn-disabled, +.l-btn-disabled:hover { + opacity: 0.5; + cursor: default; + background: #f5f5f5; + color: #444; + background: -webkit-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: -moz-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: -o-linear-gradient(top,#ffffff 0,#e6e6e6 100%); + background: linear-gradient(to bottom,#ffffff 0,#e6e6e6 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#e6e6e6,GradientType=0); +} +.l-btn-disabled .l-btn-text, +.l-btn-disabled .l-btn-icon { + filter: alpha(opacity=50); +} +.l-btn-plain-disabled, +.l-btn-plain-disabled:hover { + background: transparent; + filter: alpha(opacity=50); +} +.l-btn-selected, +.l-btn-selected:hover { + background: #ddd; + filter: none; +} +.l-btn-plain-selected, +.l-btn-plain-selected:hover { + background: #ddd; +} +.textbox { + position: relative; + border: 1px solid #D4D4D4; + background-color: #fff; + vertical-align: middle; + display: inline-block; + overflow: hidden; + white-space: nowrap; + margin: 0; + padding: 0; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.textbox .textbox-text { + font-size: 12px; + border: 0; + margin: 0; + padding: 4px; + white-space: normal; + vertical-align: top; + outline-style: none; + resize: none; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.textbox .textbox-text::-ms-clear, +.textbox .textbox-text::-ms-reveal { + display: none; +} +.textbox textarea.textbox-text { + white-space: pre-wrap; +} +.textbox .textbox-prompt { + font-size: 12px; + color: #aaa; +} +.textbox .textbox-bgicon { + background-position: 3px center; + padding-left: 21px; +} +.textbox .textbox-button, +.textbox .textbox-button:hover { + position: absolute; + top: 0; + padding: 0; + vertical-align: top; + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.textbox .textbox-button-right, +.textbox .textbox-button-right:hover { + right: 0; + border-width: 0 0 0 1px; +} +.textbox .textbox-button-left, +.textbox .textbox-button-left:hover { + left: 0; + border-width: 0 1px 0 0; +} +.textbox .textbox-button-top, +.textbox .textbox-button-top:hover { + left: 0; + border-width: 0 0 1px 0; +} +.textbox .textbox-button-bottom, +.textbox .textbox-button-bottom:hover { + top: auto; + bottom: 0; + left: 0; + border-width: 1px 0 0 0; +} +.textbox-addon { + position: absolute; + top: 0; +} +.textbox-label { + display: inline-block; + width: 80px; + height: 22px; + line-height: 22px; + vertical-align: middle; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin: 0; + padding-right: 5px; +} +.textbox-label-after { + padding-left: 5px; + padding-right: 0; +} +.textbox-label-top { + display: block; + width: auto; + padding: 0; +} +.textbox-disabled, +.textbox-label-disabled { + opacity: 0.6; + filter: alpha(opacity=60); +} +.textbox-icon { + display: inline-block; + width: 18px; + height: 20px; + overflow: hidden; + vertical-align: top; + background-position: center center; + cursor: pointer; + opacity: 0.6; + filter: alpha(opacity=60); + text-decoration: none; + outline-style: none; +} +.textbox-icon-disabled, +.textbox-icon-readonly { + cursor: default; +} +.textbox-icon:hover { + opacity: 1.0; + filter: alpha(opacity=100); +} +.textbox-icon-disabled:hover { + opacity: 0.6; + filter: alpha(opacity=60); +} +.textbox-focused { + border-color: #bbbbbb; + -moz-box-shadow: 0 0 3px 0 #D4D4D4; + -webkit-box-shadow: 0 0 3px 0 #D4D4D4; + box-shadow: 0 0 3px 0 #D4D4D4; +} +.textbox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; +} +.passwordbox-open { + background: url('images/passwordbox_open.png') no-repeat center center; +} +.passwordbox-close { + background: url('images/passwordbox_close.png') no-repeat center center; +} +.filebox .textbox-value { + vertical-align: top; + position: absolute; + top: 0; + left: -5000px; +} +.filebox-label { + display: inline-block; + position: absolute; + width: 100%; + height: 100%; + cursor: pointer; + left: 0; + top: 0; + z-index: 10; + background: url('images/blank.gif') no-repeat; +} +.l-btn-disabled .filebox-label { + cursor: default; +} +.combo-arrow { + width: 18px; + height: 20px; + overflow: hidden; + display: inline-block; + vertical-align: top; + cursor: pointer; + opacity: 0.6; + filter: alpha(opacity=60); +} +.combo-arrow-hover { + opacity: 1.0; + filter: alpha(opacity=100); +} +.combo-panel { + overflow: auto; +} +.combo-arrow { + background: url('images/combo_arrow.png') no-repeat center center; +} +.combo-panel { + background-color: #ffffff; +} +.combo-arrow { + background-color: #F2F2F2; +} +.combo-arrow-hover { + background-color: #e6e6e6; +} +.combo-arrow:hover { + background-color: #e6e6e6; +} +.combo .textbox-icon-disabled:hover { + cursor: default; +} +.combobox-item, +.combobox-group, +.combobox-stick { + font-size: 12px; + padding: 3px; +} +.combobox-item-disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} +.combobox-gitem { + padding-left: 10px; +} +.combobox-group, +.combobox-stick { + font-weight: bold; +} +.combobox-stick { + position: absolute; + top: 1px; + left: 1px; + right: 1px; + background: inherit; +} +.combobox-item-hover { + background-color: #e6e6e6; + color: #00438a; +} +.combobox-item-selected { + background-color: #0081c2; + color: #fff; +} +.combobox-icon { + display: inline-block; + width: 16px; + height: 16px; + vertical-align: middle; + margin-right: 2px; +} +.tagbox { + cursor: text; +} +.tagbox .textbox-text { + float: left; +} +.tagbox-label { + position: relative; + display: block; + margin: 4px 0 0 4px; + padding: 0 20px 0 4px; + float: left; + vertical-align: top; + text-decoration: none; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + background: #e6e6e6; + color: #00438a; +} +.tagbox-remove { + background: url('images/tagbox_icons.png') no-repeat -16px center; + position: absolute; + display: block; + width: 16px; + height: 16px; + right: 2px; + top: 50%; + margin-top: -8px; + opacity: 0.6; + filter: alpha(opacity=60); +} +.tagbox-remove:hover { + opacity: 1; + filter: alpha(opacity=100); +} +.textbox-disabled .tagbox-label { + cursor: default; +} +.textbox-disabled .tagbox-remove:hover { + cursor: default; + opacity: 0.6; + filter: alpha(opacity=60); +} +.layout { + position: relative; + overflow: hidden; + margin: 0; + padding: 0; + z-index: 0; +} +.layout-panel { + position: absolute; + overflow: hidden; +} +.layout-body { + min-width: 1px; + min-height: 1px; +} +.layout-panel-east, +.layout-panel-west { + z-index: 2; +} +.layout-panel-north, +.layout-panel-south { + z-index: 3; +} +.layout-expand { + position: absolute; + padding: 0px; + font-size: 1px; + cursor: pointer; + z-index: 1; +} +.layout-expand .panel-header, +.layout-expand .panel-body { + background: transparent; + filter: none; + overflow: hidden; +} +.layout-expand .panel-header { + border-bottom-width: 0px; +} +.layout-expand .panel-body { + position: relative; +} +.layout-expand .panel-body .panel-icon { + margin-top: 0; + top: 0; + left: 50%; + margin-left: -8px; +} +.layout-expand-west .panel-header .panel-icon, +.layout-expand-east .panel-header .panel-icon { + display: none; +} +.layout-expand-title { + position: absolute; + top: 0; + left: 21px; + white-space: nowrap; + word-wrap: normal; + -webkit-transform: rotate(90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(90deg); + -o-transform-origin: 0 0; + transform: rotate(90deg); + transform-origin: 0 0; +} +.layout-expand-title-up { + position: absolute; + top: 0; + left: 0; + text-align: right; + padding-left: 5px; + white-space: nowrap; + word-wrap: normal; + -webkit-transform: rotate(-90deg); + -webkit-transform-origin: 0 0; + -moz-transform: rotate(-90deg); + -moz-transform-origin: 0 0; + -o-transform: rotate(-90deg); + -o-transform-origin: 0 0; + transform: rotate(-90deg); + transform-origin: 0 0; +} +.layout-expand-with-icon { + top: 18px; +} +.layout-expand .panel-body-noheader .layout-expand-title, +.layout-expand .panel-body-noheader .panel-icon { + top: 5px; +} +.layout-expand .panel-body-noheader .layout-expand-with-icon { + top: 23px; +} +.layout-split-proxy-h, +.layout-split-proxy-v { + position: absolute; + font-size: 1px; + display: none; + z-index: 5; +} +.layout-split-proxy-h { + width: 5px; + cursor: e-resize; +} +.layout-split-proxy-v { + height: 5px; + cursor: n-resize; +} +.layout-mask { + position: absolute; + background: #fafafa; + filter: alpha(opacity=10); + opacity: 0.10; + z-index: 4; +} +.layout-button-up { + background: url('images/layout_arrows.png') no-repeat -16px -16px; +} +.layout-button-down { + background: url('images/layout_arrows.png') no-repeat -16px 0; +} +.layout-button-left { + background: url('images/layout_arrows.png') no-repeat 0 0; +} +.layout-button-right { + background: url('images/layout_arrows.png') no-repeat 0 -16px; +} +.layout-split-proxy-h, +.layout-split-proxy-v { + background-color: #bbb; +} +.layout-split-north { + border-bottom: 5px solid #eee; +} +.layout-split-south { + border-top: 5px solid #eee; +} +.layout-split-east { + border-left: 5px solid #eee; +} +.layout-split-west { + border-right: 5px solid #eee; +} +.layout-expand { + background-color: #F2F2F2; +} +.layout-expand-over { + background-color: #F2F2F2; +} +.tabs-container { + overflow: hidden; +} +.tabs-header { + border-width: 1px; + border-style: solid; + border-bottom-width: 0; + position: relative; + padding: 0; + padding-top: 2px; + overflow: hidden; +} +.tabs-scroller-left, +.tabs-scroller-right { + position: absolute; + top: auto; + bottom: 0; + width: 18px; + font-size: 1px; + display: none; + cursor: pointer; + border-width: 1px; + border-style: solid; +} +.tabs-scroller-left { + left: 0; +} +.tabs-scroller-right { + right: 0; +} +.tabs-tool { + position: absolute; + bottom: 0; + padding: 1px; + overflow: hidden; + border-width: 1px; + border-style: solid; +} +.tabs-header-plain .tabs-tool { + padding: 0 1px; +} +.tabs-wrap { + position: relative; + left: 0; + overflow: hidden; + width: 100%; + margin: 0; + padding: 0; +} +.tabs-scrolling { + margin-left: 18px; + margin-right: 18px; +} +.tabs-disabled { + opacity: 0.3; + filter: alpha(opacity=30); +} +.tabs { + list-style-type: none; + height: 26px; + margin: 0px; + padding: 0px; + padding-left: 4px; + width: 50000px; + border-style: solid; + border-width: 0 0 1px 0; +} +.tabs li { + float: left; + display: inline-block; + margin: 0 4px -1px 0; + padding: 0; + position: relative; + border: 0; +} +.tabs li a.tabs-inner { + display: inline-block; + text-decoration: none; + margin: 0; + padding: 0 10px; + height: 25px; + line-height: 25px; + text-align: center; + white-space: nowrap; + border-width: 1px; + border-style: solid; + -moz-border-radius: 5px 5px 0 0; + -webkit-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} +.tabs li.tabs-selected a.tabs-inner { + font-weight: bold; + outline: none; +} +.tabs li.tabs-selected a:hover.tabs-inner { + cursor: default; + pointer: default; +} +.tabs li a.tabs-close, +.tabs-p-tool { + position: absolute; + font-size: 1px; + display: block; + height: 12px; + padding: 0; + top: 50%; + margin-top: -6px; + overflow: hidden; +} +.tabs li a.tabs-close { + width: 12px; + right: 5px; + opacity: 0.6; + filter: alpha(opacity=60); +} +.tabs-p-tool { + right: 16px; +} +.tabs-p-tool a { + display: inline-block; + font-size: 1px; + width: 12px; + height: 12px; + margin: 0; + opacity: 0.6; + filter: alpha(opacity=60); +} +.tabs li a:hover.tabs-close, +.tabs-p-tool a:hover { + opacity: 1; + filter: alpha(opacity=100); + cursor: hand; + cursor: pointer; +} +.tabs-with-icon { + padding-left: 18px; +} +.tabs-icon { + position: absolute; + width: 16px; + height: 16px; + left: 10px; + top: 50%; + margin-top: -8px; +} +.tabs-title { + font-size: 12px; +} +.tabs-closable { + padding-right: 8px; +} +.tabs-panels { + margin: 0px; + padding: 0px; + border-width: 1px; + border-style: solid; + border-top-width: 0; + overflow: hidden; +} +.tabs-header-bottom { + border-width: 0 1px 1px 1px; + padding: 0 0 2px 0; +} +.tabs-header-bottom .tabs { + border-width: 1px 0 0 0; +} +.tabs-header-bottom .tabs li { + margin: -1px 4px 0 0; +} +.tabs-header-bottom .tabs li a.tabs-inner { + -moz-border-radius: 0 0 5px 5px; + -webkit-border-radius: 0 0 5px 5px; + border-radius: 0 0 5px 5px; +} +.tabs-header-bottom .tabs-tool { + top: 0; +} +.tabs-header-bottom .tabs-scroller-left, +.tabs-header-bottom .tabs-scroller-right { + top: 0; + bottom: auto; +} +.tabs-panels-top { + border-width: 1px 1px 0 1px; +} +.tabs-header-left { + float: left; + border-width: 1px 0 1px 1px; + padding: 0; +} +.tabs-header-right { + float: right; + border-width: 1px 1px 1px 0; + padding: 0; +} +.tabs-header-left .tabs-wrap, +.tabs-header-right .tabs-wrap { + height: 100%; +} +.tabs-header-left .tabs { + height: 100%; + padding: 4px 0 0 2px; + border-width: 0 1px 0 0; +} +.tabs-header-right .tabs { + height: 100%; + padding: 4px 2px 0 0; + border-width: 0 0 0 1px; +} +.tabs-header-left .tabs li, +.tabs-header-right .tabs li { + display: block; + width: 100%; + position: relative; +} +.tabs-header-left .tabs li { + left: auto; + right: 0; + margin: 0 -1px 4px 0; + float: right; +} +.tabs-header-right .tabs li { + left: 0; + right: auto; + margin: 0 0 4px -1px; + float: left; +} +.tabs-justified li a.tabs-inner { + padding-left: 0; + padding-right: 0; +} +.tabs-header-left .tabs li a.tabs-inner { + display: block; + text-align: left; + padding-left: 10px; + padding-right: 10px; + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.tabs-header-right .tabs li a.tabs-inner { + display: block; + text-align: left; + padding-left: 10px; + padding-right: 10px; + -moz-border-radius: 0 5px 5px 0; + -webkit-border-radius: 0 5px 5px 0; + border-radius: 0 5px 5px 0; +} +.tabs-panels-right { + float: right; + border-width: 1px 1px 1px 0; +} +.tabs-panels-left { + float: left; + border-width: 1px 0 1px 1px; +} +.tabs-header-noborder, +.tabs-panels-noborder { + border: 0px; +} +.tabs-header-plain { + border: 0px; + background: transparent; +} +.tabs-pill { + padding-bottom: 3px; +} +.tabs-header-bottom .tabs-pill { + padding-top: 3px; + padding-bottom: 0; +} +.tabs-header-left .tabs-pill { + padding-right: 3px; +} +.tabs-header-right .tabs-pill { + padding-left: 3px; +} +.tabs-header .tabs-pill li a.tabs-inner { + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.tabs-header-narrow, +.tabs-header-narrow .tabs-narrow { + padding: 0; +} +.tabs-narrow li, +.tabs-header-bottom .tabs-narrow li { + margin-left: 0; + margin-right: -1px; +} +.tabs-narrow li.tabs-last, +.tabs-header-bottom .tabs-narrow li.tabs-last { + margin-right: 0; +} +.tabs-header-left .tabs-narrow, +.tabs-header-right .tabs-narrow { + padding-top: 0; +} +.tabs-header-left .tabs-narrow li { + margin-bottom: -1px; + margin-right: -1px; +} +.tabs-header-left .tabs-narrow li.tabs-last, +.tabs-header-right .tabs-narrow li.tabs-last { + margin-bottom: 0; +} +.tabs-header-right .tabs-narrow li { + margin-bottom: -1px; + margin-left: -1px; +} +.tabs-scroller-left { + background: #F2F2F2 url('images/tabs_icons.png') no-repeat 1px center; +} +.tabs-scroller-right { + background: #F2F2F2 url('images/tabs_icons.png') no-repeat -15px center; +} +.tabs li a.tabs-close { + background: url('images/tabs_icons.png') no-repeat -34px center; +} +.tabs li a.tabs-inner:hover { + background: #e6e6e6; + color: #00438a; + filter: none; +} +.tabs li.tabs-selected a.tabs-inner { + background-color: #ffffff; + color: #777; + background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%); + background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0); +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: linear-gradient(to right,#ffffff 0,#ffffff 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1); +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + background: -webkit-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -moz-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: -o-linear-gradient(left,#ffffff 0,#ffffff 100%); + background: linear-gradient(to right,#ffffff 0,#ffffff 100%); + background-repeat: repeat-y; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=1); +} +.tabs li a.tabs-inner { + color: #777; + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.tabs-header, +.tabs-tool { + background-color: #F2F2F2; +} +.tabs-header-plain { + background: transparent; +} +.tabs-header, +.tabs-scroller-left, +.tabs-scroller-right, +.tabs-tool, +.tabs, +.tabs-panels, +.tabs li a.tabs-inner, +.tabs li.tabs-selected a.tabs-inner, +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner, +.tabs-header-left .tabs li.tabs-selected a.tabs-inner, +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-color: #D4D4D4; +} +.tabs-p-tool a:hover, +.tabs li a:hover.tabs-close, +.tabs-scroller-over { + background-color: #e6e6e6; +} +.tabs li.tabs-selected a.tabs-inner { + border-bottom: 1px solid #ffffff; +} +.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner { + border-top: 1px solid #ffffff; +} +.tabs-header-left .tabs li.tabs-selected a.tabs-inner { + border-right: 1px solid #ffffff; +} +.tabs-header-right .tabs li.tabs-selected a.tabs-inner { + border-left: 1px solid #ffffff; +} +.tabs-header .tabs-pill li.tabs-selected a.tabs-inner { + background: #0081c2; + color: #fff; + filter: none; + border-color: #D4D4D4; +} +.datagrid .panel-body { + overflow: hidden; + position: relative; +} +.datagrid-view { + position: relative; + overflow: hidden; +} +.datagrid-view1, +.datagrid-view2 { + position: absolute; + overflow: hidden; + top: 0; +} +.datagrid-view1 { + left: 0; +} +.datagrid-view2 { + right: 0; +} +.datagrid-mask { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0.3; + filter: alpha(opacity=30); + display: none; +} +.datagrid-mask-msg { + position: absolute; + top: 50%; + margin-top: -20px; + padding: 10px 5px 10px 30px; + width: auto; + height: 16px; + border-width: 2px; + border-style: solid; + display: none; +} +.datagrid-empty { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 25px; + line-height: 25px; + text-align: center; +} +.datagrid-sort-icon { + padding: 0; + display: none; +} +.datagrid-toolbar { + height: auto; + padding: 1px 2px; + border-width: 0 0 1px 0; + border-style: solid; +} +.datagrid-btn-separator { + float: left; + height: 24px; + border-left: 1px solid #ccc; + border-right: 1px solid #fff; + margin: 2px 1px; +} +.datagrid .datagrid-pager { + display: block; + margin: 0; + border-width: 1px 0 0 0; + border-style: solid; +} +.datagrid .datagrid-pager-top { + border-width: 0 0 1px 0; +} +.datagrid-header { + overflow: hidden; + cursor: default; + border-width: 0 0 1px 0; + border-style: solid; +} +.datagrid-header-inner { + float: left; + width: 10000px; +} +.datagrid-header-row, +.datagrid-row { + height: 25px; +} +.datagrid-header td, +.datagrid-body td, +.datagrid-footer td { + border-width: 0 1px 1px 0; + border-style: dotted; + margin: 0; + padding: 0; +} +.datagrid-cell, +.datagrid-cell-group, +.datagrid-header-rownumber, +.datagrid-cell-rownumber { + margin: 0; + padding: 0 4px; + white-space: nowrap; + word-wrap: normal; + overflow: hidden; + height: 18px; + line-height: 18px; + font-size: 12px; +} +.datagrid-header .datagrid-cell { + height: auto; +} +.datagrid-header .datagrid-cell span { + font-size: 12px; +} +.datagrid-cell-group { + text-align: center; + text-overflow: ellipsis; +} +.datagrid-header-rownumber, +.datagrid-cell-rownumber { + width: 30px; + text-align: center; + margin: 0; + padding: 0; +} +.datagrid-body { + margin: 0; + padding: 0; + overflow: auto; + zoom: 1; +} +.datagrid-view1 .datagrid-body-inner { + padding-bottom: 20px; +} +.datagrid-view1 .datagrid-body { + overflow: hidden; +} +.datagrid-footer { + overflow: hidden; +} +.datagrid-footer-inner { + border-width: 1px 0 0 0; + border-style: solid; + width: 10000px; + float: left; +} +.datagrid-row-editing .datagrid-cell { + height: auto; +} +.datagrid-header-check, +.datagrid-cell-check { + padding: 0; + width: 27px; + height: 18px; + font-size: 1px; + text-align: center; + overflow: hidden; +} +.datagrid-header-check input, +.datagrid-cell-check input { + margin: 0; + padding: 0; + width: 15px; + height: 18px; +} +.datagrid-resize-proxy { + position: absolute; + width: 1px; + height: 10000px; + top: 0; + cursor: e-resize; + display: none; +} +.datagrid-body .datagrid-editable { + margin: 0; + padding: 0; +} +.datagrid-body .datagrid-editable table { + width: 100%; + height: 100%; +} +.datagrid-body .datagrid-editable td { + border: 0; + margin: 0; + padding: 0; +} +.datagrid-view .datagrid-editable-input { + margin: 0; + padding: 2px 4px; + border: 1px solid #D4D4D4; + font-size: 12px; + outline-style: none; + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.datagrid-view .validatebox-invalid { + border-color: #ffa8a8; +} +.datagrid-sort .datagrid-sort-icon { + display: inline; + padding: 0 13px 0 0; + background: url('images/datagrid_icons.png') no-repeat -64px center; +} +.datagrid-sort-desc .datagrid-sort-icon { + display: inline; + padding: 0 13px 0 0; + background: url('images/datagrid_icons.png') no-repeat -16px center; +} +.datagrid-sort-asc .datagrid-sort-icon { + display: inline; + padding: 0 13px 0 0; + background: url('images/datagrid_icons.png') no-repeat 0px center; +} +.datagrid-row-collapse { + background: url('images/datagrid_icons.png') no-repeat -48px center; +} +.datagrid-row-expand { + background: url('images/datagrid_icons.png') no-repeat -32px center; +} +.datagrid-mask-msg { + background: #ffffff url('images/loading.gif') no-repeat scroll 5px center; +} +.datagrid-header, +.datagrid-td-rownumber { + background-color: #F2F2F2; + background: -webkit-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -moz-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: -o-linear-gradient(top,#ffffff 0,#F2F2F2 100%); + background: linear-gradient(to bottom,#ffffff 0,#F2F2F2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#F2F2F2,GradientType=0); +} +.datagrid-cell-rownumber { + color: #333; +} +.datagrid-resize-proxy { + background: #bbb; +} +.datagrid-mask { + background: #ccc; +} +.datagrid-mask-msg { + border-color: #D4D4D4; +} +.datagrid-toolbar, +.datagrid-pager { + background: #F5F5F5; +} +.datagrid-header, +.datagrid-toolbar, +.datagrid-pager, +.datagrid-footer-inner { + border-color: #e6e6e6; +} +.datagrid-header td, +.datagrid-body td, +.datagrid-footer td { + border-color: #ccc; +} +.datagrid-htable, +.datagrid-btable, +.datagrid-ftable { + color: #333; + border-collapse: separate; +} +.datagrid-row-alt { + background: #F5F5F5; +} +.datagrid-row-over, +.datagrid-header td.datagrid-header-over { + background: #e6e6e6; + color: #00438a; + cursor: default; +} +.datagrid-row-selected { + background: #0081c2; + color: #fff; +} +.datagrid-row-editing .textbox, +.datagrid-row-editing .textbox-text { + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.propertygrid .datagrid-view1 .datagrid-body td { + padding-bottom: 1px; + border-width: 0 1px 0 0; +} +.propertygrid .datagrid-group { + height: 21px; + overflow: hidden; + border-width: 0 0 1px 0; + border-style: solid; +} +.propertygrid .datagrid-group span { + font-weight: bold; +} +.propertygrid .datagrid-view1 .datagrid-body td { + border-color: #e6e6e6; +} +.propertygrid .datagrid-view1 .datagrid-group { + border-color: #F2F2F2; +} +.propertygrid .datagrid-view2 .datagrid-group { + border-color: #e6e6e6; +} +.propertygrid .datagrid-group, +.propertygrid .datagrid-view1 .datagrid-body, +.propertygrid .datagrid-view1 .datagrid-row-over, +.propertygrid .datagrid-view1 .datagrid-row-selected { + background: #F2F2F2; +} +.datalist .datagrid-header { + border-width: 0; +} +.datalist .datagrid-group, +.m-list .m-list-group { + height: 25px; + line-height: 25px; + font-weight: bold; + overflow: hidden; + background-color: #F2F2F2; + border-style: solid; + border-width: 0 0 1px 0; + border-color: #ccc; +} +.datalist .datagrid-group-expander { + display: none; +} +.datalist .datagrid-group-title { + padding: 0 4px; +} +.datalist .datagrid-btable { + width: 100%; + table-layout: fixed; +} +.datalist .datagrid-row td { + border-style: solid; + border-left-color: transparent; + border-right-color: transparent; + border-bottom-width: 0; +} +.datalist-lines .datagrid-row td { + border-bottom-width: 1px; +} +.datalist .datagrid-cell, +.m-list li { + width: auto; + height: auto; + padding: 2px 4px; + line-height: 18px; + position: relative; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +.datalist-link, +.m-list li>a { + display: block; + position: relative; + cursor: pointer; + color: #333; + text-decoration: none; + overflow: hidden; + margin: -2px -4px; + padding: 2px 4px; + padding-right: 16px; + line-height: 18px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} +.datalist-link::after, +.m-list li>a::after { + position: absolute; + display: block; + width: 8px; + height: 8px; + content: ''; + right: 6px; + top: 50%; + margin-top: -4px; + border-style: solid; + border-width: 1px 1px 0 0; + -ms-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); +} +.m-list { + margin: 0; + padding: 0; + list-style: none; +} +.m-list li { + border-style: solid; + border-width: 0 0 1px 0; + border-color: #ccc; +} +.m-list li>a:hover { + background: #e6e6e6; + color: #00438a; +} +.m-list .m-list-group { + padding: 0 4px; +} +.pagination { + zoom: 1; +} +.pagination table { + float: left; + height: 30px; +} +.pagination td { + border: 0; +} +.pagination-btn-separator { + float: left; + height: 24px; + border-left: 1px solid #ccc; + border-right: 1px solid #fff; + margin: 3px 1px; +} +.pagination .pagination-num { + border-width: 1px; + border-style: solid; + margin: 0 2px; + padding: 2px; + width: 2em; + height: auto; +} +.pagination-page-list { + margin: 0px 6px; + padding: 1px 2px; + width: auto; + height: auto; + border-width: 1px; + border-style: solid; +} +.pagination-info { + float: right; + margin: 0 6px; + padding: 0; + height: 30px; + line-height: 30px; + font-size: 12px; +} +.pagination span { + font-size: 12px; +} +.pagination-link .l-btn-text { + width: 24px; + text-align: center; + margin: 0; +} +.pagination-first { + background: url('images/pagination_icons.png') no-repeat 0 center; +} +.pagination-prev { + background: url('images/pagination_icons.png') no-repeat -16px center; +} +.pagination-next { + background: url('images/pagination_icons.png') no-repeat -32px center; +} +.pagination-last { + background: url('images/pagination_icons.png') no-repeat -48px center; +} +.pagination-load { + background: url('images/pagination_icons.png') no-repeat -64px center; +} +.pagination-loading { + background: url('images/loading.gif') no-repeat center center; +} +.pagination-page-list, +.pagination .pagination-num { + border-color: #D4D4D4; +} +.calendar { + border-width: 1px; + border-style: solid; + padding: 1px; + overflow: hidden; +} +.calendar table { + table-layout: fixed; + border-collapse: separate; + font-size: 12px; + width: 100%; + height: 100%; +} +.calendar table td, +.calendar table th { + font-size: 12px; +} +.calendar-noborder { + border: 0; +} +.calendar-header { + position: relative; + height: 22px; +} +.calendar-title { + text-align: center; + height: 22px; +} +.calendar-title span { + position: relative; + display: inline-block; + top: 2px; + padding: 0 3px; + height: 18px; + line-height: 18px; + font-size: 12px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth, +.calendar-nextmonth, +.calendar-prevyear, +.calendar-nextyear { + position: absolute; + top: 50%; + margin-top: -7px; + width: 14px; + height: 14px; + cursor: pointer; + font-size: 1px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-prevmonth { + left: 20px; + background: url('images/calendar_arrows.png') no-repeat -18px -2px; +} +.calendar-nextmonth { + right: 20px; + background: url('images/calendar_arrows.png') no-repeat -34px -2px; +} +.calendar-prevyear { + left: 3px; + background: url('images/calendar_arrows.png') no-repeat -1px -2px; +} +.calendar-nextyear { + right: 3px; + background: url('images/calendar_arrows.png') no-repeat -49px -2px; +} +.calendar-body { + position: relative; +} +.calendar-body th, +.calendar-body td { + text-align: center; +} +.calendar-day { + border: 0; + padding: 1px; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-other-month { + opacity: 0.3; + filter: alpha(opacity=30); +} +.calendar-disabled { + opacity: 0.6; + filter: alpha(opacity=60); + cursor: default; +} +.calendar-menu { + position: absolute; + top: 0; + left: 0; + width: 180px; + height: 150px; + padding: 5px; + font-size: 12px; + display: none; + overflow: hidden; +} +.calendar-menu-year-inner { + text-align: center; + padding-bottom: 5px; +} +.calendar-menu-year { + width: 50px; + text-align: center; + border-width: 1px; + border-style: solid; + outline-style: none; + resize: none; + margin: 0; + padding: 2px; + font-weight: bold; + font-size: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev, +.calendar-menu-next { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + cursor: pointer; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-menu-prev { + margin-right: 10px; + background: url('images/calendar_arrows.png') no-repeat 2px 2px; +} +.calendar-menu-next { + margin-left: 10px; + background: url('images/calendar_arrows.png') no-repeat -45px 2px; +} +.calendar-menu-month { + text-align: center; + cursor: pointer; + font-weight: bold; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.calendar-body th, +.calendar-menu-month { + color: #808080; +} +.calendar-day { + color: #333; +} +.calendar-sunday { + color: #CC2222; +} +.calendar-saturday { + color: #00ee00; +} +.calendar-today { + color: #0000ff; +} +.calendar-menu-year { + border-color: #D4D4D4; +} +.calendar { + border-color: #D4D4D4; +} +.calendar-header { + background: #F2F2F2; +} +.calendar-body, +.calendar-menu { + background: #ffffff; +} +.calendar-body th { + background: #F5F5F5; + padding: 2px 0; +} +.calendar-hover, +.calendar-nav-hover, +.calendar-menu-hover { + background-color: #e6e6e6; + color: #00438a; +} +.calendar-hover { + border: 1px solid #ddd; + padding: 0; +} +.calendar-selected { + background-color: #0081c2; + color: #fff; + border: 1px solid #0070a9; + padding: 0; +} +.datebox-calendar-inner { + height: 180px; +} +.datebox-button { + padding: 0 5px; + text-align: center; +} +.datebox-button a { + line-height: 22px; + font-size: 12px; + font-weight: bold; + text-decoration: none; + opacity: 0.6; + filter: alpha(opacity=60); +} +.datebox-button a:hover { + opacity: 1.0; + filter: alpha(opacity=100); +} +.datebox-current, +.datebox-close { + float: left; +} +.datebox-close { + float: right; +} +.datebox .combo-arrow { + background-image: url('images/datebox_arrow.png'); + background-position: center center; +} +.datebox-button { + background-color: #F5F5F5; +} +.datebox-button a { + color: #444; +} +.spinner-arrow { + background-color: #F2F2F2; + display: inline-block; + overflow: hidden; + vertical-align: top; + margin: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + width: 18px; +} +.spinner-arrow-up, +.spinner-arrow-down { + opacity: 0.6; + filter: alpha(opacity=60); + display: block; + font-size: 1px; + width: 18px; + height: 10px; + width: 100%; + height: 50%; + color: #444; + outline-style: none; +} +.spinner-arrow-hover { + background-color: #e6e6e6; + opacity: 1.0; + filter: alpha(opacity=100); +} +.spinner-arrow-up:hover, +.spinner-arrow-down:hover { + opacity: 1.0; + filter: alpha(opacity=100); + background-color: #e6e6e6; +} +.textbox-icon-disabled .spinner-arrow-up:hover, +.textbox-icon-disabled .spinner-arrow-down:hover { + opacity: 0.6; + filter: alpha(opacity=60); + background-color: #F2F2F2; + cursor: default; +} +.spinner .textbox-icon-disabled { + opacity: 0.6; + filter: alpha(opacity=60); +} +.spinner-arrow-up { + background: url('images/spinner_arrows.png') no-repeat 1px center; +} +.spinner-arrow-down { + background: url('images/spinner_arrows.png') no-repeat -15px center; +} +.spinner-button-up { + background: url('images/spinner_arrows.png') no-repeat -32px center; +} +.spinner-button-down { + background: url('images/spinner_arrows.png') no-repeat -48px center; +} +.progressbar { + border-width: 1px; + border-style: solid; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + overflow: hidden; + position: relative; +} +.progressbar-text { + text-align: center; + position: absolute; +} +.progressbar-value { + position: relative; + overflow: hidden; + width: 0; + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.progressbar { + border-color: #D4D4D4; +} +.progressbar-text { + color: #333; + font-size: 12px; +} +.progressbar-value .progressbar-text { + background-color: #0081c2; + color: #fff; +} +.searchbox-button { + width: 18px; + height: 20px; + overflow: hidden; + display: inline-block; + vertical-align: top; + cursor: pointer; + opacity: 0.6; + filter: alpha(opacity=60); +} +.searchbox-button-hover { + opacity: 1.0; + filter: alpha(opacity=100); +} +.searchbox .l-btn-plain { + border: 0; + padding: 0; + vertical-align: top; + opacity: 0.6; + filter: alpha(opacity=60); + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.searchbox .l-btn-plain:hover { + border: 0; + padding: 0; + opacity: 1.0; + filter: alpha(opacity=100); + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.searchbox a.m-btn-plain-active { + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.searchbox .m-btn-active { + border-width: 0 1px 0 0; + -moz-border-radius: 0 0 0 0; + -webkit-border-radius: 0 0 0 0; + border-radius: 0 0 0 0; +} +.searchbox .textbox-button-right { + border-width: 0 0 0 1px; +} +.searchbox .textbox-button-left { + border-width: 0 1px 0 0; +} +.searchbox-button { + background: url('images/searchbox_button.png') no-repeat center center; +} +.searchbox .l-btn-plain { + background: #F2F2F2; +} +.searchbox .l-btn-plain-disabled, +.searchbox .l-btn-plain-disabled:hover { + opacity: 0.5; + filter: alpha(opacity=50); +} +.slider-disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} +.slider-h { + height: 22px; +} +.slider-v { + width: 22px; +} +.slider-inner { + position: relative; + height: 6px; + top: 7px; + border-width: 1px; + border-style: solid; + border-radius: 5px; +} +.slider-handle { + position: absolute; + display: block; + outline: none; + width: 20px; + height: 20px; + top: 50%; + margin-top: -10px; + margin-left: -10px; +} +.slider-tip { + position: absolute; + display: inline-block; + line-height: 12px; + font-size: 12px; + white-space: nowrap; + top: -22px; +} +.slider-rule { + position: relative; + top: 15px; +} +.slider-rule span { + position: absolute; + display: inline-block; + font-size: 0; + height: 5px; + border-width: 0 0 0 1px; + border-style: solid; +} +.slider-rulelabel { + position: relative; + top: 20px; +} +.slider-rulelabel span { + position: absolute; + display: inline-block; + font-size: 12px; +} +.slider-v .slider-inner { + width: 6px; + left: 7px; + top: 0; + float: left; +} +.slider-v .slider-handle { + left: 50%; + margin-top: -10px; +} +.slider-v .slider-tip { + left: -10px; + margin-top: -6px; +} +.slider-v .slider-rule { + float: left; + top: 0; + left: 16px; +} +.slider-v .slider-rule span { + width: 5px; + height: 'auto'; + border-left: 0; + border-width: 1px 0 0 0; + border-style: solid; +} +.slider-v .slider-rulelabel { + float: left; + top: 0; + left: 23px; +} +.slider-handle { + background: url('images/slider_handle.png') no-repeat; +} +.slider-inner { + border-color: #D4D4D4; + background: #F2F2F2; +} +.slider-rule span { + border-color: #D4D4D4; +} +.slider-rulelabel span { + color: #333; +} +.menu { + position: absolute; + margin: 0; + padding: 2px; + border-width: 1px; + border-style: solid; + overflow: hidden; +} +.menu-inline { + position: relative; +} +.menu-item { + position: relative; + margin: 0; + padding: 0; + overflow: hidden; + white-space: nowrap; + cursor: pointer; + border-width: 1px; + border-style: solid; +} +.menu-text { + height: 20px; + line-height: 20px; + float: left; + padding-left: 28px; +} +.menu-icon { + position: absolute; + width: 16px; + height: 16px; + left: 2px; + top: 50%; + margin-top: -8px; +} +.menu-rightarrow { + position: absolute; + width: 16px; + height: 16px; + right: 0; + top: 50%; + margin-top: -8px; +} +.menu-line { + position: absolute; + left: 26px; + top: 0; + height: 2000px; + font-size: 1px; +} +.menu-sep { + margin: 3px 0px 3px 25px; + font-size: 1px; +} +.menu-noline .menu-line { + display: none; +} +.menu-noline .menu-sep { + margin-left: 0; + margin-right: 0; +} +.menu-active { + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.menu-item-disabled { + opacity: 0.5; + filter: alpha(opacity=50); + cursor: default; +} +.menu-text, +.menu-text span { + font-size: 12px; +} +.menu-shadow { + position: absolute; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + background: #ccc; + -moz-box-shadow: 2px 2px 3px #cccccc; + -webkit-box-shadow: 2px 2px 3px #cccccc; + box-shadow: 2px 2px 3px #cccccc; + filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2); +} +.menu-rightarrow { + background: url('images/menu_arrows.png') no-repeat -32px center; +} +.menu-line { + border-left: 1px solid #ccc; + border-right: 1px solid #fff; +} +.menu-sep { + border-top: 1px solid #ccc; + border-bottom: 1px solid #fff; +} +.menu { + background-color: #fff; + border-color: #e6e6e6; + color: #333; +} +.menu-content { + background: #ffffff; +} +.menu-item { + border-color: transparent; + _border-color: #fff; +} +.menu-active { + border-color: #ddd; + color: #00438a; + background: #e6e6e6; +} +.menu-active-disabled { + border-color: transparent; + background: transparent; + color: #333; +} +.m-btn-downarrow, +.s-btn-downarrow { + display: inline-block; + position: absolute; + width: 16px; + height: 16px; + font-size: 1px; + right: 0; + top: 50%; + margin-top: -8px; +} +.m-btn-active, +.s-btn-active { + background: #e6e6e6; + color: #00438a; + border: 1px solid #ddd; + filter: none; +} +.m-btn-plain-active, +.s-btn-plain-active { + background: transparent; + padding: 0; + border-width: 1px; + border-style: solid; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.m-btn .l-btn-left .l-btn-text { + margin-right: 20px; +} +.m-btn .l-btn-icon-right .l-btn-text { + margin-right: 40px; +} +.m-btn .l-btn-icon-right .l-btn-icon { + right: 20px; +} +.m-btn .l-btn-icon-top .l-btn-text { + margin-right: 4px; + margin-bottom: 14px; +} +.m-btn .l-btn-icon-bottom .l-btn-text { + margin-right: 4px; + margin-bottom: 34px; +} +.m-btn .l-btn-icon-bottom .l-btn-icon { + top: auto; + bottom: 20px; +} +.m-btn .l-btn-icon-top .m-btn-downarrow, +.m-btn .l-btn-icon-bottom .m-btn-downarrow { + top: auto; + bottom: 0px; + left: 50%; + margin-left: -8px; +} +.m-btn-line { + display: inline-block; + position: absolute; + font-size: 1px; + display: none; +} +.m-btn .l-btn-left .m-btn-line { + right: 0; + width: 16px; + height: 500px; + border-style: solid; + border-color: #bbb; + border-width: 0 0 0 1px; +} +.m-btn .l-btn-icon-top .m-btn-line, +.m-btn .l-btn-icon-bottom .m-btn-line { + left: 0; + bottom: 0; + width: 500px; + height: 16px; + border-width: 1px 0 0 0; +} +.m-btn-large .l-btn-icon-right .l-btn-text { + margin-right: 56px; +} +.m-btn-large .l-btn-icon-bottom .l-btn-text { + margin-bottom: 50px; +} +.m-btn-downarrow, +.s-btn-downarrow { + background: url('images/menu_arrows.png') no-repeat 0 center; +} +.m-btn-plain-active, +.s-btn-plain-active { + border-color: #ddd; + background-color: #e6e6e6; + color: #00438a; +} +.s-btn:hover .m-btn-line, +.s-btn-active .m-btn-line, +.s-btn-plain-active .m-btn-line { + display: inline-block; +} +.l-btn:hover .s-btn-downarrow, +.s-btn-active .s-btn-downarrow, +.s-btn-plain-active .s-btn-downarrow { + border-style: solid; + border-color: #bbb; + border-width: 0 0 0 1px; +} +.messager-body { + padding: 10px 10px 30px 10px; + overflow: auto; +} +.messager-button { + text-align: center; + padding: 5px; +} +.messager-button .l-btn { + width: 70px; +} +.messager-icon { + float: left; + width: 32px; + height: 32px; + margin: 0 10px 10px 0; +} +.messager-error { + background: url('images/messager_icons.png') no-repeat scroll -64px 0; +} +.messager-info { + background: url('images/messager_icons.png') no-repeat scroll 0 0; +} +.messager-question { + background: url('images/messager_icons.png') no-repeat scroll -32px 0; +} +.messager-warning { + background: url('images/messager_icons.png') no-repeat scroll -96px 0; +} +.messager-progress { + padding: 10px; +} +.messager-p-msg { + margin-bottom: 5px; +} +.messager-body .messager-input { + width: 100%; + padding: 4px 0; + outline-style: none; + border: 1px solid #D4D4D4; +} +.window-thinborder .messager-button { + padding-bottom: 8px; +} +.tree { + margin: 0; + padding: 0; + list-style-type: none; +} +.tree li { + white-space: nowrap; +} +.tree li ul { + list-style-type: none; + margin: 0; + padding: 0; +} +.tree-node { + height: 18px; + white-space: nowrap; + cursor: pointer; +} +.tree-hit { + cursor: pointer; +} +.tree-expanded, +.tree-collapsed, +.tree-folder, +.tree-file, +.tree-checkbox, +.tree-indent { + display: inline-block; + width: 16px; + height: 18px; + vertical-align: top; + overflow: hidden; +} +.tree-expanded { + background: url('images/tree_icons.png') no-repeat -18px 0px; +} +.tree-expanded-hover { + background: url('images/tree_icons.png') no-repeat -50px 0px; +} +.tree-collapsed { + background: url('images/tree_icons.png') no-repeat 0px 0px; +} +.tree-collapsed-hover { + background: url('images/tree_icons.png') no-repeat -32px 0px; +} +.tree-lines .tree-expanded, +.tree-lines .tree-root-first .tree-expanded { + background: url('images/tree_icons.png') no-repeat -144px 0; +} +.tree-lines .tree-collapsed, +.tree-lines .tree-root-first .tree-collapsed { + background: url('images/tree_icons.png') no-repeat -128px 0; +} +.tree-lines .tree-node-last .tree-expanded, +.tree-lines .tree-root-one .tree-expanded { + background: url('images/tree_icons.png') no-repeat -80px 0; +} +.tree-lines .tree-node-last .tree-collapsed, +.tree-lines .tree-root-one .tree-collapsed { + background: url('images/tree_icons.png') no-repeat -64px 0; +} +.tree-line { + background: url('images/tree_icons.png') no-repeat -176px 0; +} +.tree-join { + background: url('images/tree_icons.png') no-repeat -192px 0; +} +.tree-joinbottom { + background: url('images/tree_icons.png') no-repeat -160px 0; +} +.tree-folder { + background: url('images/tree_icons.png') no-repeat -208px 0; +} +.tree-folder-open { + background: url('images/tree_icons.png') no-repeat -224px 0; +} +.tree-file { + background: url('images/tree_icons.png') no-repeat -240px 0; +} +.tree-loading { + background: url('images/loading.gif') no-repeat center center; +} +.tree-checkbox0 { + background: url('images/tree_icons.png') no-repeat -208px -18px; +} +.tree-checkbox1 { + background: url('images/tree_icons.png') no-repeat -224px -18px; +} +.tree-checkbox2 { + background: url('images/tree_icons.png') no-repeat -240px -18px; +} +.tree-title { + font-size: 12px; + display: inline-block; + text-decoration: none; + vertical-align: top; + white-space: nowrap; + padding: 0 2px; + height: 18px; + line-height: 18px; +} +.tree-node-proxy { + font-size: 12px; + line-height: 20px; + padding: 0 2px 0 20px; + border-width: 1px; + border-style: solid; + z-index: 9900000; +} +.tree-dnd-icon { + display: inline-block; + position: absolute; + width: 16px; + height: 18px; + left: 2px; + top: 50%; + margin-top: -9px; +} +.tree-dnd-yes { + background: url('images/tree_icons.png') no-repeat -256px 0; +} +.tree-dnd-no { + background: url('images/tree_icons.png') no-repeat -256px -18px; +} +.tree-node-top { + border-top: 1px dotted red; +} +.tree-node-bottom { + border-bottom: 1px dotted red; +} +.tree-node-append .tree-title { + border: 1px dotted red; +} +.tree-editor { + border: 1px solid #D4D4D4; + font-size: 12px; + line-height: 16px; + padding: 0 4px; + margin: 0; + width: 80px; + outline-style: none; + vertical-align: top; + position: absolute; + top: 0; +} +.tree-node-proxy { + background-color: #ffffff; + color: #333; + border-color: #D4D4D4; +} +.tree-node-hover { + background: #e6e6e6; + color: #00438a; +} +.tree-node-selected { + background: #0081c2; + color: #fff; +} +.tree-node-hidden { + display: none; +} +.validatebox-invalid { + border-color: #ffa8a8; + background-color: #fff3f3; + color: #000; +} +.tooltip { + position: absolute; + display: none; + z-index: 9900000; + outline: none; + opacity: 1; + filter: alpha(opacity=100); + padding: 5px; + border-width: 1px; + border-style: solid; + border-radius: 5px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.tooltip-content { + font-size: 12px; +} +.tooltip-arrow-outer, +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + line-height: 0; + font-size: 0; + border-style: solid; + border-width: 6px; + border-color: transparent; + _border-color: tomato; + _filter: chroma(color=tomato); +} +.tooltip-arrow { + display: none \9; +} +.tooltip-right .tooltip-arrow-outer { + left: 0; + top: 50%; + margin: -6px 0 0 -13px; +} +.tooltip-right .tooltip-arrow { + left: 0; + top: 50%; + margin: -6px 0 0 -12px; +} +.tooltip-left .tooltip-arrow-outer { + right: 0; + top: 50%; + margin: -6px -13px 0 0; +} +.tooltip-left .tooltip-arrow { + right: 0; + top: 50%; + margin: -6px -12px 0 0; +} +.tooltip-top .tooltip-arrow-outer { + bottom: 0; + left: 50%; + margin: 0 0 -13px -6px; +} +.tooltip-top .tooltip-arrow { + bottom: 0; + left: 50%; + margin: 0 0 -12px -6px; +} +.tooltip-bottom .tooltip-arrow-outer { + top: 0; + left: 50%; + margin: -13px 0 0 -6px; +} +.tooltip-bottom .tooltip-arrow { + top: 0; + left: 50%; + margin: -12px 0 0 -6px; +} +.tooltip { + background-color: #ffffff; + border-color: #D4D4D4; + color: #333; +} +.tooltip-right .tooltip-arrow-outer { + border-right-color: #D4D4D4; +} +.tooltip-right .tooltip-arrow { + border-right-color: #ffffff; +} +.tooltip-left .tooltip-arrow-outer { + border-left-color: #D4D4D4; +} +.tooltip-left .tooltip-arrow { + border-left-color: #ffffff; +} +.tooltip-top .tooltip-arrow-outer { + border-top-color: #D4D4D4; +} +.tooltip-top .tooltip-arrow { + border-top-color: #ffffff; +} +.tooltip-bottom .tooltip-arrow-outer { + border-bottom-color: #D4D4D4; +} +.tooltip-bottom .tooltip-arrow { + border-bottom-color: #ffffff; +} +.switchbutton { + text-decoration: none; + display: inline-block; + overflow: hidden; + vertical-align: middle; + margin: 0; + padding: 0; + cursor: pointer; + background: #bbb; + border: 1px solid #bbb; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.switchbutton-inner { + display: inline-block; + overflow: hidden; + position: relative; + top: -1px; + left: -1px; +} +.switchbutton-on, +.switchbutton-off, +.switchbutton-handle { + display: inline-block; + text-align: center; + height: 100%; + float: left; + font-size: 12px; + -moz-border-radius: 5px 5px 5px 5px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; +} +.switchbutton-on { + background: #0081c2; + color: #fff; +} +.switchbutton-off { + background-color: #ffffff; + color: #333; +} +.switchbutton-on, +.switchbutton-reversed .switchbutton-off { + -moz-border-radius: 5px 0 0 5px; + -webkit-border-radius: 5px 0 0 5px; + border-radius: 5px 0 0 5px; +} +.switchbutton-off, +.switchbutton-reversed .switchbutton-on { + -moz-border-radius: 0 5px 5px 0; + -webkit-border-radius: 0 5px 5px 0; + border-radius: 0 5px 5px 0; +} +.switchbutton-handle { + position: absolute; + top: 0; + left: 50%; + background-color: #ffffff; + color: #333; + border: 1px solid #bbb; + -moz-box-shadow: 0 0 3px 0 #bbb; + -webkit-box-shadow: 0 0 3px 0 #bbb; + box-shadow: 0 0 3px 0 #bbb; +} +.switchbutton-value { + position: absolute; + top: 0; + left: -5000px; +} +.switchbutton-disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} +.switchbutton-disabled, +.switchbutton-readonly { + cursor: default; +} +.tabs-panels { + border-color: transparent; +} +.tabs li a.tabs-inner { + border-color: transparent; + background: transparent; + filter: none; + color: #0088CC; +} +.menu-active { + background-color: #0081C2; + border-color: #0081C2; + color: #fff; +} +.menu-active-disabled { + border-color: transparent; + background: transparent; + color: #333; +} +.lh24 { line-height:24px; } \ No newline at end of file diff --git a/novel-front/src/main/resources/static/css/public.css b/novel-front/src/main/resources/static/css/public.css new file mode 100644 index 0000000..ade8bd2 --- /dev/null +++ b/novel-front/src/main/resources/static/css/public.css @@ -0,0 +1,1402 @@ +/*(C) 2012-2013 Douco Inc.*/ + +/* 全局通用 +----------------------------------------------- */ +body { + font-family: Microsoft Yahei, \5FAE\8F6F\96C5\9ED1, \5B8B\4F53, Arial, Verdana, sans-serif; + font-size: 12px; + color: #333; + margin: 0; + padding: 0; +} +body, button, input, textarea { + font-size: 12px; + line-height: 1.531; + outline: none; + margin: 0; + padding: 0; + border: 0; +} +p, ul, ol, dl, dt, dd, form, blockquote { + margin: 0; + padding: 0; +} +h1, h2, h3, h4, h5, h6 { + font-size: 12px; + margin: 0; + padding: 0; + font-weight: normal; +} +img { + border: 0; +} +ul, ol { + list-style: none; +} +img { + border: 0; +} +a { + text-decoration: none; + color: #333; + transition:color .2s, background-color .2s +} +a:hover { + text-decoration: none; +} +input, textarea, select { + vertical-align: middle; +} +*:focus { + outline: none; +} +em, i { + font-style: normal; +} +.bold { + font-weight: bold; +} +.gray { color:#999 !important } +.black { color:#000 !important } +.red { color:#EF5944 !important } +.ora { color:#e86320 !important } +.green { color:#457a2a!important } +.blue { color:#1B7DC6 !important } +.col6 { color:#666 !important } +.colc { color:#ccc !important } +.clear { + clear: both; + display: block; + height: 0; + line-height: 0; + font-size: 0; +} +.clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} +*html .clearfix { + height: 1%; +} +*+html .clearfix { + height: 1%; +} +.none { + display: none; +} +.cue { + /*color: #999;*/ +} +p.cue { + margin-top: 5px; +} +.cueRed { + color: #C00; +} +.ml { + padding-left: 10px; +} +.pl { + padding-left: 10px; +} +.pr { + padding-right: 10px; +} +.unread { + font-weight: bold; +} +#vcode { + cursor: pointer; +} +/* 主体框架 +----------------------------------------------- */ +#dcWrap { + width: 100%; + height: 100%; +} +#dcHead { + background-color: #585858; + float: left; + height: 40px; + width: 100%; +} +#dcLeft { + float: left; + width: 179px; +} +#dcMain { + background-color: #FFFFFF; + border-left: 1px solid #CCC; + margin-left: 179px; + padding-top: 40px; + *padding-top:0; + zoom: 1/* padding-top:40px; */ +} +#dcFooter { + height: 45px; + background-color: #EEEEEE; +} +/*- form -*/ +.btn { + display: inline-block; + background-color: #f80; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border: 1px solid #f70; + color: #FFF; + line-height:1; + padding: 7px 20px; + cursor: pointer; +} +.btnGray { + display: inline-block; + background-color: #EEE; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border: 0; + color: #666; + padding: 6px 15px; + font-weight: bold; + text-transform: capitalize; + cursor: pointer; + -webkit-appearance: none; +} +.btnPayment { + display: inline-block; + background-color: #ff4246; + color: #FFF; + padding: 7px 28px; + text-transform: capitalize; + cursor: pointer; + font-weight: bold; + font-size:14px; + text-align:center; + -webkit-appearance: none; +} +.inpMain { + border: 1px solid #DBDBDB; + background-color: #FFF; + padding: 4px 5px; + color: #727272; + font-size: 12x; + line-height: 20px; + -webkit-appearance: none; +} +.inpFlie { + border: 1px solid #DBDBDB; + background-color: #FFF; + padding: 5px 5px; + color: #999; + -webkit-appearance: none; +} +.textArea { + border: 1px solid #DBDBDB; + background-color: #FFF; + padding: 4px 5px; + color: #727272; + font-size: 12x; + line-height: 20px; + -webkit-appearance: none; +} +.textAreaAuto { + border: 1px solid #DBDBDB; + background-color: #FFF; + padding: 0; + color: #999; + font-size: 12x; + line-height: 20px; + resize: none; + min-height: 40px; + -webkit-appearance: none; +} +select { + border: 1px solid #DBDBDB; + padding: 2px 5px 2px 4px; +} +/*- tab -*/ +.tab { + border-bottom: 1px solid #60BBFF; + font-weight: bold; + font-size: 14px; + height: 35px; + overflow: hidden; +} +.tab li { + float: left; + line-height: 35px; + height: 35px; +} +.tab a { + display: block; + background-color: #F9F9F9; + padding: 0 44px; + text-decoration: none; + color: #999; +} +.tab a.selected { + background-color: #60BBFF; + color: #FFF; +} +/*- tableBasic -*/ +.tableBasic { + background-color: #F9F9F9; + /*color: #666666;*/ + border-left: 1px dotted #CCCCCC; + border-top: 1px dotted #CCCCCC; +} +.tableBasic select { + color: #727272; +} +.tableBasic td, .tableBasic th { + border-right: 1px dotted #CCCCCC; + border-bottom: 1px dotted #CCCCCC; +} +.tableBasic th { + text-align:right; + width:120px; + font-weight:normal; +} +.notes{color:Red;line-height:20px;} +.showNote{background: #fffae2;} +.tableBasic .child { + background-color: #FFFFFF; +} +/*- tableNobor -*/ +.tableNobor td { + border: 0; +} +/*- tableOnebor -*/ +.tableOnebor td { + border-right: 0; +} +/*- showHidden -*/ +.showHidden { + display: block; + float: right; + font-size: 12px; + background-color: #CCC; +} +.showHidden b, .showHidden s { + display: block; + float: left; + padding: 4px 15px; + background-color: #CCC; + color: #333; + cursor: pointer; +} +.showHidden .d b { + background-color: #0072C6; + color: #FFF; +} +.showHidden .h s { + background-color: #0072C6; + color: #FFF; +} +/*- unum -*/ +.unum { + display: inline-block; + background-color:#28B779; + color: #fff; + font-size: 9px; + line-height: 17px; + font-weight: 600; + margin: 1px 0 0 2px; + -webkit-border-radius: 10px; + border-radius: 10px; +} +.unum span { + display: block; + padding: 0 6px; +} +/* 公共顶部 +----------------------------------------------- */ +#head .logo { + border-right: 1px solid #515151; + float: left; + width: 179px; + height: 40px; +} +/*#head .logo img { + margin: 7px 0 0 13px; +}*/ +#head .nav { + margin-left: 180px; + height: 40px; + line-height: 40px; + color: #D9D9D9; + font-size: 13px; +} +#head .nav ul { + float: left; +} +#head .nav ul.navRight { + float: right; +} +#head .nav li { + float: left; + border-left: 1px solid #5f5f5f; + border-right: 1px solid #515151; +} +#head .nav a { + display: block; + color: #D9D9D9; + padding: 0 25px; +} +#head .nav a.topAdd { + background: url(../images/top_add.gif) no-repeat 15px top; + padding-left: 35px; +} +#head .nav a:hover, #head .nav a.cur { + background-color: #5f5f5f; + color: #FFF; +} +#head .nav a.topAdd:hover { + background: #60BBFF url(../images/top_add.gif) no-repeat 15px bottom; +} +#head .nav .noLeft { + border-left: 0; +} +#head .nav .noRight { + border-right: 0; +} +/*- 下拉菜单 -*/ +#head .nav .M { + position: relative; +} +#head .nav .active a { + background-color: #FFF; + color: #000; +} +#head .nav .active a.topAdd { + background: #FFF url(../images/top_add.gif) no-repeat 15px top; +} +#head .nav .drop { + display: none; + position: absolute; +} +#head .nav .drop a { + line-height: 30px; + font-size: 12px; +} +#head .nav .active .drop { + display: block; +} +/* mTopad */ +#head .nav .mTopad { + left: -1px; + top: 40px; + width: 120px; + border-left: 1px solid #FFF; + border-right: 1px solid #CCC; + border-bottom: 1px solid #CCC; +} +#head .nav .mTopad a { + border-bottom: 1px solid #EEE; + border-left: 1px solid #EEE; + border-right: 1px solid #EEE; + background-color: #FFF; + color: #333; + padding-left: 20px; +} +#head .nav .mTopad a:hover { + background-color: #F9F9F9; + color: #0072C6; +} +/* mUser */ +#head .nav .mUser { + left: -1px; + top: 40px; + width: 134px; + border-left: 1px solid #EEE; + border-right: 1px solid #EEE; +} +#head .nav .mUser a { + border-bottom: 1px solid #EEE; + background-color: #FFF; + color: #0072C6; +} +#head .nav .mUser a:hover { + background-color: #F9F9F9; + color: #0072C6; +} +/* 公共管理菜单 +----------------------------------------------- */ +#menu { + margin-right: -1px; + font-size: 13px; +} +#menu ul { + border-top: 1px solid #F9F9F9; + border-bottom: 1px solid #CCCCCC; + padding: 4px 0; +} +#menu .top { + border-top: 0; + border-right: 1px solid #CCC; + background-color: #F5F5F5; + /*margin-top:10px;*/ +} +#menu .bot { + border-bottom: 0; +} +#menu li { + height: 38px; + overflow: hidden; +} +#menu li.cur { + background: #60BBFF url(../images/menu_cur.gif) no-repeat right 50%; +} +#menu li.cur a { + color: #FFF; +} +#menu li a { + display: block; + height: 38px; + line-height: 38px; +} +#menu li i { + background: url(../images/icon_menu.png) no-repeat 13px 0; + float: left; + display: block; + width: 42px; + height: 38px; +} +#menu li em { + float: left; + display: block; + width: 130px; + height: 38px; + cursor: pointer; +} +#menu .top li { + height: 27px; +} +#menu .top li a { + height: 27px; + line-height: 27px; +} +#menu .top li i { + height: 27px; +} +#menu .top li i.home { + background-position: 13px -38px; +} +#menu li i.system { + background-position: 13px -79px; +} +#menu li i.nav { + background-position: 13px -119px; +} +#menu li i.show { + background-position: 13px -159px; +} +#menu li i.page { + background-position: 13px -199px; +} +#menu li i.productCat { + background-position: 13px -239px; +} +#menu li i.product { + background-position: 13px -279px; +} +#menu li i.list { + background-position: 13px -199px; +} +#menu li i.write { + background-position: 13px -558px; +} +#menu li i.Statistics { + background-position: 13px -719px; +} +#menu li i.book { + background-position: 13px -798px; +} +#menu li i.articleCat { + background-position: 13px -319px; +} +#menu li i.article { + background-position: 13px -359px; +} +#menu li i.manager { + background-position: 13px -399px; +} +#menu li i.managerLog { + background-position: 13px -439px; +} +#menu li i.backup { + background-position: 13px -479px; +} +#menu li i.link { + background-position: 13px -519px; +} +#menu li i.guestbook { + background-position: 13px -559px; +} +#menu li i.mobile { + background-position: 13px -599px; +} +#menu li i.user { + background-position: 13px -639px; +} +#menu li i.order { + background-position: 13px -679px; +} +#menu li i.plugin { + background-position: 13px -719px; +} +#menu li i.menuPage { + background-position: 13px -759px; +} +#menu li i.theme { + background-position: 13px -799px; +} +#menu li i.caseCat { + background-position: 13px -839px; +} +#menu li i.case { + background-position: 13px -879px; +} +#menu li i.downloadCat { + background-position: 13px -919px; +} +#menu li i.download { + background-position: 13px -959px; +} +/* 当前位置 +----------------------------------------------- */ +#urHere { + background-color:#F5F5F5; + border-left: 1px solid #FFF; + border-bottom:1px solid #ccc; + height: 35px; + line-height: 37px; + color: #666; + padding-left: 10px; +} +#urHere strong { font-weight:normal; } +#urHere a { + color: #A0A0A0; +} +#urHere b { + margin: 0 10px; +} +/* 公共主区域 +----------------------------------------------- */ +.mainBox { + border-left: 1px solid #FFF; + padding: 30px 22px 50px 22px; +} +.mainBox h3 { + border-bottom: 1px solid #D7D7D7; + color: #666666; + font-size: 28px; + padding-bottom: 20px; + margin-bottom: 30px; +} +.mainBox h3 .actionBtn { + float: right; + display: inline-block; + background-color: #28B779; + padding: 0 20px; + height: 27px; + line-height: 27px; + color: #FFFFFF; + font-size: 13px; + font-weight: bold; +} +.mainBox h3 .add { + background: #28B779 url(../images/action_btn.gif) no-repeat 20px 50%; + padding-left: 40px; +} +.mainBox .filter { + margin: 0 0 10px -2px; + height: 35px; +} +.mainBox .filter form { + float: left; +} +.mainBox .filter span { + float: right; +} +.mainBox .action { + margin: 10px 0 0 -2px; +} +.mainBox .warning { + border: 1px solid #E6DB55; + background: #FFFBCC; + padding: 10px; + margin-bottom: 20px; +} +/* 公共样式 +----------------------------------------------- */ +#maskBox { + position: relative; +} +#maskBox dt { + font-size: 14px; + margin-bottom: 30px; + color: #999; + font-weight: 700; + zoom: 1; + overflow: hidden; + line-height: 28px; +} +#maskBox em, #maskBox form { + float: left; + margin-right: 20px; +} +#maskBox .count { + position: relative; +} +#maskBox i { + display: block; + float: left; + width: 30px; + height: 30px; + margin: 0 20px 20px 0; +} +#maskBox .maskBg { + position: absolute; + z-index: 1; +} +#maskBox .maskBg i { + background: url(../images/icon_picture_big.png) no-repeat; +} +#maskBox #mask { + position: absolute; + z-index: 2; +} +#maskBox #mask i { + background: url(../images/icon_picture_big.png) no-repeat left bottom; +} +#maskBox #success { + background: #60BBFF url(); + display: none; + width: 60px; + padding: 0 10px; + line-height: 30px; + color: #FFF; + font-weight: bold; +} +/* 首页 +----------------------------------------------- */ +#index .indexBox { + margin-bottom: 20px; +} +#index .indexBox .boxTitle { + border-bottom: 1px solid #D7D7D7; + color: #666666; + font-size: 16px; + padding-bottom: 10px; + margin-bottom: 15px; +} +#index .indexBox em { + color:#999; +} +/*- ipage -*/ +#index .indexBox .ipage { + overflow: hidden; +} +#index .indexBox .ipage a { + display: block; + background-color: #DDDDDD; + color: #555555; + font-weight: bold; + border: 1px dotted #CCCCCC; + float: left; + width: 122px; + height: 37px; + line-height: 37px; + text-align: center; + margin: 0 15px 12px 0; +} +#index .indexBox .ipage a.child1 { + border: 1px dotted #DDDDDD; + background-color: #EEEEEE; +} +#index .indexBox .ipage a.child2 { + border: 1px dotted #EEEEEE; + background-color: #F6F6F6; +} +#index .indexBox .ipage a.child3 { + border: 1px dotted #F6F6F6; + background-color: #FFFFFF; +} +#index .indexBox .ipage a:hover { + border: 1px dotted #FFFFFF; + background: #60BBFF url(../images/icon_edit_white.png) no-repeat 12px 50%; + color: #FFF; +} +/*- help -*/ +#index .help { + margin-top:10px; +} +#index .help a { + color:#60BBFF; +} +#index .help .text { + line-height: 200%; +} +/* 单页面 +----------------------------------------------- */ +.page dl { + border: 1px dotted #CCC; + background-color: #DDDDDD; + float: left; + width: 120px; + height: 75px; + margin: 0 15px 15px 0; + text-align: center; +} +.page dl.child1 { + border: 1px dotted #DDDDDD; + background-color: #EEEEEE; +} +.page dl.child2 { + border: 1px dotted #EEEEEE; + background-color: #F6F6F6; +} +.page dl.child3 { + border: 1px dotted #F6F6F6; + background-color: #FFFFFF; +} +.page dt { + padding: 8px 0; + color: #555; +} +.page dt p { + padding-top: 5px; + color: #999; +} +.page dd { + color: #CCC; +} +.page dd a { + color: #999; +} +/* 首页商品筛选 +----------------------------------------------- */ +.homeSortLeft { + margin-right: 70px; +} +.homeSortRight { + float: right; + width: 62px; + position: relative; + z-index: 10; +} +.homeSortRight .homeSortBg { + position: absolute; + left: 0; + top: 0; + z-index: 11; +} +.homeSortRight .homeSortList { + position: absolute; + left: 0; + top: 0; + z-index: 12; +} +.homeSortRight li { + margin-bottom: 10px; + height: 72px; +} +.homeSortRight li img, .homeSortRight li em { + border: 1px solid #EEE; +} +.homeSortRight li em { + display: block; + padding: 3px; + width: 54px; + height: 54px; + overflow: hidden; + color: #666; +} +.homeSortRight li a { + display: block; + font-family: Arial, Verdana, sans-serif; + text-align: right; + color: #666; +} +/* 图片模块管理 +----------------------------------------------- */ +.imgModule form { + padding:0 7px; +} +.imgModule b { + display:block; + margin-bottom:8px; +} +.imgModule .formEdit { + border: 4px solid #9FD7FF; +} +.imgModule .active td { + border-bottom: 4px solid #9FD7FF; + background-color:#FFF; +} +.imgModule .formEdit .btn { + float:right; +} +/* 订单中心 +----------------------------------------------- */ +#order .tracking .trackingNo { + float:left; + width:50%; + font-size:14px; + color:#333; +} +#order .tracking .trackingSubmit { + float:right; + width:50%; + text-align:right; +} +#order .btnShow { + background: #FFFFFF url(../images/icon_edit_blue.png) no-repeat; + border: none; + width:16px; + height:16px; + text-indent:-999px; + overflow:hidden; + cursor:pointer; + margin-left:10px; +} +#order .btnHide { + background: #FFFFFF url(../images/icon_no.png) no-repeat; + border: none; + width:14px; + height:14px; + text-indent:-999px; + overflow:hidden; + cursor:pointer; + margin-top:5px; +} +#order .trackingSubmit .edit { + display:none; +} +/* 网站管理员 +----------------------------------------------- */ +#manager .cloudAccount { + background: url(../images/icon_cloud_account.png) no-repeat center top; + text-align:center; + padding-top:80px; + margin-top:150px; +} +#manager .cloudAccount .inpMain { + margin-right:20px; +} +#manager .cloudAccount .reg { + margin-top:60px; + color:#999; +} +#manager .cloudAccount .reg a { + color:#60BBFF; +} +#manager .cloudAccount em { + font-size:18px; + margin-right:20px; + color:#60BBFF; +} +/* 留言板 +----------------------------------------------- */ +#guestBook .book { + border: 1px dotted #CCCCCC; + background-color: #F9F9F9; +} +#guestBook .book dt { + font-weight: bold; + color: #555; + font-size: 16px; + padding: 10px; +} +#guestBook .book dd { + padding: 10px; + color: #666; +} +#guestBook .book p { + background-color: #60BBFF; + color: #FFF; + padding: 10px; +} +#guestBook .book p b { + margin-right: 35px; +} +#guestBook .reply { + margin-top: 30px; +} +#guestBook .replySubmit { + margin-top: 30px; +} +/* 云中心 +----------------------------------------------- */ +#cloud .filter a { + margin-right:20px; +} +#cloud .handbook { + margin-bottom:20px; +} +/*- handle -*/ +#cloud .handle h2 { + background:url(../images/icon_cloud_handle.png) no-repeat left top; + height:46px; + padding-left:45px; + font-size:18px; +} +#cloud .handle p { + margin-bottom:12px; +} +#cloud .handle a { + margin-right:15px; +} +#cloud .handle i { + margin:0 8px; +} +/*- order -*/ +#cloud .order h2 { + background:url(../images/icon_cloud_order.png) no-repeat left top; + height:46px; + padding-left:45px; + font-size:18px; +} +#cloud .order li { + margin-bottom:10px; +} +#cloud .order em { + color:#999; +} +#cloud .order .btn, #cloud .order .btnPayment { + margin-top:20px; +} +/*- cloudList -*/ +.cloudList p { + margin-top:2px; +} +.cloudList p a { + color:#0072C6; +} +.cloudList p i { + margin:0 8px; + color:#DDD; +} +.cloudList p b { + background-color:#28B779; + padding:0 10px; + color:#FFF; + -webkit-border-radius: 10px; + border-radius: 10px; +} +/*- douFrame -*/ +#douFrame .bg { + position: fixed; + top: 0; + left: 0; + z-index: 10000001; + width: 100%; + height: 100%; + background: #000; + filter: alpha(opacity=45); + opacity:0.45 +} +#douFrame .frame { + position: absolute; + z-index: 10000002; + overflow: hidden; + padding: 0; + left:50%; +} +#douFrame .frame h2 { + padding: 0 10px; + background: #0072C6; + line-height: 32px; + color: #FFF; + font-size:14px; +} +#douFrame .frame h2 .close { + background: url(../images/icon_fork.png) no-repeat; + width:12px; + height:12px; + display:block; + float:right; + text-indent:-9999px; + margin-top:11px; +} +#douFrame .details { + border: 2px solid #C4C4C4; + background-color:#FFF; + width:800px; + top:100px; + margin-left:-400px; +} +#douFrame .selectBox { + border: 2px solid #FFF; + background-color: #F5F5F5; + width:400px; + top:300px; + margin-left:-200px; + text-align:center; + padding:10px 0 30px 0; +} +#douFrame .selectBox a { + margin:0 25px; +} +/* 模块扩展 +----------------------------------------------- */ +#module .install { + margin-top:150px; + padding-left:10px; + text-align:center; +} +#module .install h2 { + margin-bottom:20px; + font-size:18px; + color:#999; +} +#module .uninstall .handbook { + border: 1px solid #EEE; + font-size:14px; + margin:20px 0; + padding:15px; + color:#555; +} +#module .uninstall .handbook a { + color:#60BBFF; + text-decoration:underline; +} +#module .uninstall .list h2 { + background:url(../images/icon_cloud_uninstall.png) no-repeat left top; + padding-left:40px; + height:30px; + color:#60BBFF; + font-size:16px; + margin-bottom:10px; +} +#module .uninstall .list ul { + zoom:1; + overflow:hidden; +} +#module .uninstall .list ul li { + float:left; + margin:0 20px 20px 0; + text-align:center; +} +#module .uninstall .list ul li em { + display:block; + border: 1px solid #C4C4C4; + padding:15px 50px; + font-size:14px; + margin-bottom:3px; +} +#module .uninstall .list ul li a { +} +/* 模板扩展 +----------------------------------------------- */ +#theme .enable { + border-bottom: 1px solid #DDD; + padding:30px 0; + zoom:1; + overflow:hidden; +} +#theme .enable h2 { + font-size:14px; + font-weight:bold; + color:#999; + margin-bottom:10px; +} +#theme .enable p { + float:left; + padding:4px; + background-color:#FFF; + border: 1px solid #DDD; +} +#theme .enable dl { + float:left; + padding:10px; +} +#theme .enable dl dt { + font-weight:bold; + font-size:14px; + margin-bottom:10px; +} +#theme .enable dl dd { + margin-bottom:5px; +} +/* -- themeList -- */ +#theme .themeList { + padding-top:30px; + zoom:1; + overflow:hidden; +} +#theme .themeList h2 { + font-size:14px; + font-weight:bold; + color:#60BBFF; + margin-bottom:15px; +} +#theme .themeList dl { + border: 1px solid #DDD; + width:288px; + background-color:#FAFAFA; + float:left; + margin:0 20px 20px 0; + padding-bottom:5px; +} +#theme .themeList dl p { + padding:4px 4px 10px 4px; + background-color:#FFF; + border-bottom: 1px solid #EEE; +} +#theme .themeList dl p img { + width:280px; + height:175px; +} +#theme .themeList dl.mobile { + width:178px; + margin-right:40px; +} +#theme .themeList dl.mobile p img { + width:170px; + height:230px; +} +#theme .themeList dl dt { + font-weight:bold; + padding:5px; +} +#theme .themeList dl dd { + padding:2px 5px; +} +#theme .themeList dl dd.btnList span a { + color:#0072C6; + margin-right:10px; +} +#theme .themeList dl dd.btnList span em { + margin-right:10px; +} +#theme .themeList dl dd.btnList .del { + float:right; + color:#999; +} +/* 手机版 +----------------------------------------------- */ +#mobileBox { + background-color:#F5F5F5; + border-top: 1px solid #CCCCCC; +} +#mobileBox #mMenu { + float: left; + width: 120px; +} +#mobileBox #mMain { + background-color: #FFFFFF; + border-left: 1px solid #DDD; + margin-left: 120px; +} +#mobileBox #mMenu h3 { + background:#60BBFF url(../images/icon_mobile.png) no-repeat center 30px; + color:#FFF; + font-size:14px; + font-weight:bold; + text-align:center; + height:50px; + padding-top:80px; +} +#mobileBox #mMenu li a { + display:block; + line-height:50px; + height:50px; + border-bottom: 1px solid #DDD; + padding-left:20px; + font-weight:bold; +} +#mobileBox #mMenu li a.cur { + background-color:#FFF; + margin-right:-1px; +} +/* 用户登录 +----------------------------------------------- */ +#login { + margin: 0px auto; + width: 368px; + margin-top: 120px; + overflow: hidden; +} +#login .dologo { + background: url(../images/logo.gif) no-repeat 0 0; + height: 50px; + margin-bottom: 30px; +} +#login li { + height: 34px; + margin-bottom: 15px; +} +#login .inpLi { + border: 1px solid #CCC; +} +#login .inpLi b { + background-color: #E0E0E0; + float: left; + display: block; + width: 70px; + height: 34px; + line-height: 34px; + text-align: center; + font-weight: normal; +} +#login .inpLi .inpLogin, #login .inpLi .captcha { + float: left; + background-color: #EBEBEB; + border: 0; + padding: 7px 8px; + height: 20px; + line-height: 20px; + color: #000; + font-size: 14px; +} +#login .inpLi .inpLogin { + width: 280px; +} +#login .inpLi .captcha { + width: 198px; + text-transform: uppercase; +} +#login .captchaPic { + height: 38px; +} +#login .captchaPic .inpLi { + float: left; + width: 288px; +} +#login .captchaPic #vcode { + float: right; +} +#login .btn { + padding:6px 40px; +} +#login .sub { + margin:30px 0; +} +#login .action .separator { + color: #DDD; + margin:0 10px; +} +#login .reset .inpLi b { + width: 100px; +} +#login .reset .inpLi .inpLogin { + width: 250px; +} +/* 分页 +----------------------------------------------- */ +.pager { + text-align: right; + padding-top: 20px; + color: #666; +} +.pager a { + color: #666; + text-decoration: underline; +} +/* 信息提示 +----------------------------------------------- */ +/*- douMsg -*/ +#douMsg { + background: url(../images/icon_exc_small.gif) no-repeat left top; + padding: 27px 0 0 70px; + margin-top: 30px; +} +#douMsg h2 { + font-size: 16px; + font-weight: bold; + color: #0574C7; +} +#douMsg dl { + background: url(../images/icon_back_arrow.gif) no-repeat right bottom; +} +#douMsg dt { + padding: 10px 0 25px 0; + font-size: 13px; + color: #999999; +} +#douMsg dd { + padding: 100px 20px 20px 0; + font-size: 12px; + text-align: right; +} +#douMsg dd a { + color: #60BBFF; +} +/*- outMsg -*/ +#outMsg { + background: url(../images/icon_exc.gif) no-repeat left top; + margin: 0px auto; + width: 340px; + padding: 30px 0 0 80px; + margin-top: 160px; +} +#outMsg h2 { + font-size: 22px; + font-weight: bold; + color: #0574C7; +} +#outMsg dt { + padding: 10px 0 25px 0; + font-size: 13px; + color: #666666; +} +#outMsg dd { + background: url(../images/icon_back.gif) no-repeat left top; + padding-left: 25px; + font-size: 14px; +} +/* 公共底部 +----------------------------------------------- */ +#footer { + margin-top: -1px; + color: #999; +} +#footer .line { + border-top: 1px solid #FFFFFF; + background-color: #CCCCCC; + height: 1px; + line-height: 1px; + font-size: 0; + margin-left: 180px; +} +#footer ul { + text-align: center; + padding: 15px 0; +} + + +.w50{width:50px;} +.w100{width:100px;} +.w150{width:150px;} +.w200{width:200px;} +.w250{width:250px;} +.w300{width:300px;} +.w500{width:500px;} +.w1f1{width:95%;} + +a.lista,a.listag,a.listred{display:inline-block;margin-right:4px;margin-left:4px;color:#444444;text-decoration: none} +a.lista:hover,a.listag:hover{color:#0066cc;} + +a.listred,a.listred:hover{color:Red} +/*gsq*/ +#menu li a:hover, #menu li .selected, .red { color:#f60 } +.panel-header, .panel-body { border-left:none!important; } +.datagrid-row-selected { background:#f6f6f6!important; color:#000 } +.datagrid-row-over { background:#f6f6f6!important } +a.easyui-linkbutton { text-align:center } +a.easyui-linkbutton.on { color:#f60 } +a.l-btn span span.icon-search { padding:0; display: none } +/*.l-btn-icon-left .l-btn-text { + margin: 0 4px!important; +}*/ +table.querytable { padding:5px 0 } +.panel-title { font-weight:normal; padding-left:5px } +.auther_box { padding:30px } +.auther_news { background-color: #F9F9F9 } +.auther_news li { line-height: 30px; margin-bottom: 20px; } +.auther_news li .dot { width: 5px; height: 5px; background: #888; border-radius: 50%; display: inline-block; margin: 0 5px 2px 14px; } +#LabErr{ color:Red;line-height:24px; } \ No newline at end of file diff --git a/novel-front/src/main/resources/static/javascript/YT.js b/novel-front/src/main/resources/static/javascript/YT.js new file mode 100644 index 0000000..2950211 --- /dev/null +++ b/novel-front/src/main/resources/static/javascript/YT.js @@ -0,0 +1,617 @@ +var $C = function (objName) { + if (typeof (document.getElementById(objName)) != "object") + { return null; } + else + { return document.getElementById(objName); } +} +var YT = { + BaseCommon: { + gL: function (x) { var l = 0; while (x) { l += x.offsetLeft; x = x.offsetParent; } return l }, + gT: function (x) { var t = 0; while (x) { t += x.offsetTop; x = x.offsetParent; } return t } + }, + BaseData: { + WaitImg: "/images/loading.gif" + }, + Fun: { + GetWordLength: function (str) { + str = str.replace(/(\n)+|(\r\n)+/g, ""); + str = str.replace(" ", ""); + str = str.replace(" ", ""); + return str.length; + }, + ConvertToMoney: function (btanch) { + if (btanch != undefined) { + return parseFloat(btanch) / 100; + } + else { + return 0; + } + }, + LoadShow: function () { + if ($C("LayerShowPic") == null) { + var sp = document.createElement("div"); + sp.innerHTML = "

请稍后…
"; + document.body.appendChild(sp); + } + $C("LayerShowPic").style.display = ''; + $C("LayerCover").style.display = ''; + $C("LayerCover").style.height = String(document.documentElement.scrollHeight) + 'px'; + YT.Fun.ScreenCenter($C("LayerShowPic"), 266, 200); + + }, + LoadHide: function () { + if ($C("LayerShowPic") != null) { + $C("LayerShowPic").style.display = 'none'; + $C("LayerCover").style.display = 'none'; + } + }, + ScreenCenter: function (obj, width, height) { + if (obj.style.display == 'none') { + obj.style.display = ''; + } + var scrolltop = document.documentElement.scrollTop; + if (width <= 0) { + width = obj.offsetWidth; + } + if (height <= 0) { + height = obj.offsetHeight; + } + if (scrolltop == null || scrolltop == 0) { + scrolltop = document.body.scrollTop; + } + var offsetHT = document.body.clientHeight / 2 - height / 2; + if (offsetHT <= 0) { offsetHT = 10; } + var offsetWT = document.body.clientWidth / 2 - width / 2; + if (offsetWT <= 0) { offsetWT = 10; } + obj.style.top = String(scrolltop + offsetHT) + 'px'; + obj.style.left = String(offsetWT) + 'px'; + }, + NewPanel: function (url, title, width, height, needFits) { + if (typeof (width) == 'undefind' || width == null) { width = 750; } + if (typeof (height) == 'undefind' || height == null) { height = 550; } + var fits = false; + if (typeof (needFits) != "undefined" && needFits) { + if (document.body.clientWidth < 650 || document.body.clientHeight < 450 || document.body.clientHeight - 50 < height) + { fits = true; } + } + if ($C("YT_Panel") == null) { + var sp = document.createElement("div"); + sp.innerHTML = "
"; + document.body.appendChild(sp); + } + if (url.indexOf("?") > 0) { + url = url + "&"; + } + else { + url = url + "?"; + } + url = url + "randomkeys=" + Math.random(); + $C("YT_Panel_i").src = url; + var sTop = null, sLeft = null; + if (window.screen.height < 800) { + sTop = 0; + } + if (fits) { + sLeft = 0; + } + $('#YT_Panel').window({ + width: width, + height: height, + title: title, + collapsible: true, + minimizable: false, + maximizable: true, + closable: true, + modal: true, + fit: fits, + top: sTop, + left: sLeft + }); + }, + NewPanelNoClose: function (url, title, width, height) { + if (typeof (width) == 'undefind' || width == null) { width = 750; } + if (typeof (height) == 'undefind' || height == null) { height = 550; } + if ($C("YT_Panel") == null) { + var sp = document.createElement("div"); + sp.innerHTML = "
"; + document.body.appendChild(sp); + } + if (url.indexOf("?") > 0) { + url = url + "&"; + } + else { + url = url + "?"; + } + url = url + "randomkeys=" + Math.random(); + $C("YT_Panel_i").src = url; + $('#YT_Panel').window({ + width: width, + height: height, + title: title, + collapsible: false, + minimizable: false, + maximizable: true, + closable: false, + modal: true + }); + }, + ClosePanel: function (id) { + if (typeof (id) == 'undefind' || id == null) { + $('#YT_Panel').panel('close'); + /*CreateGrid();*/ + CreateGridReload(); + } + else { $('#' + id).panel('close'); } + }, + /*格式化时间字符串*/ + formatDate: function (now, types) { + if (now != null && now != "") { + var dateN = new Date(+/\d+/.exec(now)[0]); + var year = dateN.getFullYear(); + var month = dateN.getMonth() + 1; + var date = dateN.getDate(); + var hour = dateN.getHours(); + var minute = dateN.getMinutes(); + var second = dateN.getSeconds(); + if (typeof (types) != "undefined" && types != null) { + return year + "-" + month + "-" + date; + } + else if (hour == 0 && minute == 0 && second == 0) { + return year + "-" + month + "-" + date; + } + else { + return year + "-" + month + "-" + date + " " + hour + ":" + minute + ":" + second; + } + } + else { + return ""; + } + }, + /** 获取当前时间月份*/ + formatMonth: function (now) { + if (now != null && now != "") { + var dateN = new Date(+/\d+/.exec(now)[0]); + var month = dateN.getMonth() + 1; + return month; + } + else { + return ""; + } + }, + /** 获取当前时间具体的某一天*/ + formatDay: function (now) { + if (now != null && now != "") { + var dateN = new Date(+/\d+/.exec(now)[0]); + var month = dateN.getMonth() + 1; + var date = dateN.getDate(); + return month + "-" + date; + } + else { + return ""; + } + }, + /** 获取所属时间的季度*/ + formatSeasonal: function (now) { + if (now != null && now != "") { + var dateN = new Date(+/\d+/.exec(now)[0]); + var year = dateN.getFullYear(); + var month = dateN.getMonth() + 1; + if (month == 1) { + return year + "年第1季度"; + } + else if (month == 4) { + return year + "年第2季度"; + } + else if (month == 7) { + return year + "年第三季度"; + } + else { + return year + "年第四季度"; + } + } + else { + return ""; + } + }, + + formatStatus: function (id) { + if (id == 0) { + return "无效"; + } + else { + return "有效"; + } + }, + ShowPanel: function (obj, divName, xlong, ylong) { + var showobj = $C(divName); + if (showobj) { + if (showobj.style.display == 'none') { + showobj.style.display = ''; + } + if (xlong) + { showobj.style.top = YT.BaseCommon.gT(obj) + 20 + xlong + "px"; } + else + { showobj.style.top = YT.BaseCommon.gT(obj) + 20 + "px"; } + if (ylong) + { showobj.style.left = YT.BaseCommon.gL(obj) + ylong + "px"; } + else + { showobj.style.left = YT.BaseCommon.gL(obj) + "px"; } + } + }, + GetDateDiff:function(startTime,endTime, diffType) { + startTime = startTime.replace(/\-/g, "/"); + endTime= endTime.replace(/\-/g, "/"); + diffType = diffType.toLowerCase(); + var sTime = new Date(startTime); + var eTime = new Date(endTime); + var timeType = 1; + switch (diffType) { + case "second": + timeType = 1000; + break; + case "minute": + timeType = 1000 * 60; + break; + case "hour": + timeType = 1000 * 3600; + break; + case "day": + timeType = 1000 * 3600 * 24; + break; + default: + break; + } + return parseInt((eTime.getTime() - sTime.getTime()) / parseInt(timeType)); + } + }, + Dirt: { + /*绑定到列表*/ + BindList: function (listId, dirtName, needBlock) { + var obj = $C(listId); + if (obj != undefined) { + obj.length = 0; + var objV = eval("DirtInfo." + dirtName); + if (objV != undefined && objV != null) { + for (var i = 0; i < objV.length; i++) { + obj.options.add(new Option(objV[i][1], objV[i][0])); + } + } + if (needBlock) { + obj.options.add(new Option("请选择", "0")); + obj.value = ""; + } + } + }, + /*获取值表示的意义*/ + GetName: function (dirtName, dValue) { + var obj = eval("DirtInfo." + dirtName); + if (obj != undefined && obj != null) { + for (var i = 0; i < obj.length; i++) { + if (obj[i][0] == dValue) { + return obj[i][1]; + } + } + } + return ""; + } + }, + Cookie: function (name, value, options) { + if (typeof value != 'undefined') { /* name and value given, set cookie*/ + options = options || {}; + if (value === null) { + value = ''; + options.expires = -1; + } + var expires = ''; + if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { + var date; + if (typeof options.expires == 'number') { + date = new Date(); + date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); + } else { + date = options.expires; + } + expires = '; expires=' + date.toUTCString(); /* use expires attribute, max-age is not supported by IE */ + } + var path = options.path ? '; path=' + options.path : ''; + var domain = options.domain ? '; domain=' + options.domain : ''; + var secure = options.secure ? '; secure' : ''; + document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); + } else { /* only name given, get cookie */ + var cookieValue = null; + if (document.cookie && document.cookie != '') { + var cookies = document.cookie.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = jQuery.trim(cookies[i]); + if (cookie.substring(0, name.length + 1) == (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; + } + } +} + +/*重新定义录入框校验规则*/ +$.extend($.fn.validatebox.defaults.rules, { + chinaMobile: {/*手机号码*/ + validator: function (value, param) { + var reg = /^(13|14|15|17|18)\d{9}$/; + var reglt = /^(\d{3}|\d{4})-\d{8}$/; + /*var reg = /^\d{11,12}$/;*/ + if (value.indexOf('-') > 0) { + return reglt.test(value); + } + else { + return reg.test(value); + } + }, message: '手机号码有误' + }, + chinaName: {/*中文名称*/ + validator: function (value, param) { + // var reg = /^[\u4e00-\u9fa5a-zA-Z0-9]{2,6}$/; + var reg = /^[a-zA-Z\u4e00-\u9fa5][a-zA-Z0-9\u4e00-\u9fa5]{1,5}$/; + // var reg = /^[\u4e00-\u9fa5,a-zA-Z0-9]{2,5}$/; + return reg.test(value); + }, message: '在笔名中数字不能开头,且昵称的长度应在2-6之间' + }, + realName: {/*真实姓名*/ + validator: function (value, param) { + // var reg = /^[a-zA-Z\u4e00-\u9fa5][a-zA-Z0-9\u4e00-\u9fa5]{1,5}$/; + var reg = /^[\u4e00-\u9fa5,a-zA-Z0-9]{2,5}$/; + return reg.test(value); + }, message: '真实姓名的长度为2-5位中文字符' + }, + maxLength: { + validator: function (value, param) { + $.fn.validatebox.defaults.rules.maxLength.message = '只能少于' + param + '字符串'; + return value.length < param; + } + }, + isNumber: { + validator: function (value, param) { + var reg = /^(-|[0-9])(|\d{1,9})$/; + return reg.test(value); + }, message: '必须是数字' + }, + isBankNumber: { + validator: function (value, param) { + var reg = /^([0-9]{16}|[0-9]{19})$/; + return reg.test(value); + }, message: '银行卡号错误' + }, + isEmail: { + validator: function (value, param) { + var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/; + return reg.test(value); + }, message: '邮箱格式错误' + }, + + isPosInt: { + validator: function (value, param) { + var reg = /^(\d{1,9})$/; + if (reg.test(value) && value > 0) { + return true; + } + else { + return false; + } + }, message: '必须是大于0的正整数' + }, + isPosIntTen: { + validator: function (value, param) { + var reg = /^(\d{1,9})$/; + if (reg.test(value) && value > 10) { + return true; + } + else { + return false; + } + }, message: '必须是大于10的正整数' + }, + isDate: { + validator: function (value, param) { + var reg = /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29))$/; + return reg.test(value); + }, message: 'yyyy-MM-dd' + }, + isIdCard: { + validator: function (value, param) { + var reg = /^(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/; + return isCardID(value); + }, message: '身份证号码错误' + }, + isFloat: { + validator: function (value, param) { + var reg = /^(^\+?[1-9][0-9]*$)$|^(\d{1,9}\.\d{1,9})$/; + return reg.test(value); + }, message: '必须是大于零的数字' + }, + isFloatMin0: + { + validator: function (value, param) { + var reg = /^(^\d{1,9})$|^(\d{1,9}\.\d{1,9})$/; + return reg.test(value); + }, message: '必须是大于零的数字' + }, + isPassWord: { + validator: function (value, param) { + var reg = /^[a-zA-Z0-9_]{5,15}$/; + return reg.test(value); + }, message: '密码格式错误' + }, + isConfirmPassword: { + validator: function (value, param) { + return $(param[0]).val() == value; + }, message: '两次录入的密码不同' + }, + phoneCheck: { + validator: function (value, param) { + var reg = /^(((\()?\d{2,4}(\))?[-(\s)*]){0,2})?(\d{8})$/; + return reg.test(value); + }, message: '输入的电话不正确' + }, + isUserName: { + validator: function (value, param) { + var reg = /^[a-zA-Z0-9_]{3,15}$/; + return reg.test(value); + }, message: '用户名格式错误' + }, + equalTo: { + validator: function (value, param) { + return $(param[0]).val() == value; + }, + message: '字段不匹配' + } +}); + +/*空函数*/ +function CreateGrid() { } +function CreateGridReload() { } + +/*身份证校验正确性*/ +var NumbCardCity = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外" }; +function isCardID(sId) { + var iSum = 0; + var info = ""; + if (!/^\d{17}(\d|x)$/i.test(sId)) return false; /* "你输入的身份证长度或格式错误"; */ + sId = sId.replace(/x$/i, "a"); + if (NumbCardCity[parseInt(sId.substr(0, 2))] == null) return false; /*"你的身份证地区非法";*/ + sBirthday = sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2)); + var d = new Date(sBirthday.replace(/-/g, "/")); + if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate())) return false; /* "身份证上的出生日期非法";*/ + for (var i = 17; i >= 0; i--) iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11); + if (iSum % 11 != 1) return false; /*"你输入的身份证号非法";*/ + return true; +} + +function getSex(val) { + if (parseInt(val.charAt(16) / 2) * 2 != val.charAt(16)) + return '1'; + else + return '0'; +} +function showBirthday(val) { + var mm; + if (18 == val.length) {/*18位身份证号码*/ + mm = val.charAt(6) + val.charAt(7) + val.charAt(8) + val.charAt(9) + '-' + val.charAt(10) + val.charAt(11) + '-' + val.charAt(12) + val.charAt(13); + + } + return mm; +} + + +var DirtInfo = { + TrueOrFalse: [[0, "否"], [1, "是"]], + EnumUserCommendStatus: [[0, "新"], [1, "已处理"], [2, "已查看"]], + AvailablesStatus: [[0, "禁用"], [1, "可用"]], + SettleClass: [[0, "现金"], [1, "预付扣款"]], + EnumSexClass: [[0, "不限"], [1, "男"], [2, "女"]], + EnumUserType: [[1, "手机端app"], [2, "手机wap端"]], + EnumPayClass: [[1, "支付宝"], [2, "微信"], [3, "微信扫码"], [100, "绑定手机奖励"]], + EnumPayStatus: [[0, "新申请"], [2, "充值失败"], [3, "成功"]], + EnumMoneyClass: [[0, "购买"], [1, "赠送"]], + EnumUserFrom: [[1, "其他"], [2, "微博"], [3, "qq"], [4, "微信"], [10, "app注册"], [11, "wap注册"], [12, "微博绑定"], [13, "qq绑定"], [14, "微信绑定"]], + EnumSignType: [[0, "未签约"], [1, "分成"], [2, "买断"], [3, "保底"], [4, "买断整本"], [9, "保底"], [15, "道具结算"], [30, "全勤奖励"]], + EnumLogType: [[0, "app登录"], [1, "wap登录"]], + EnumAuditStatus: [[-10, "下线"], [-1, "审核失败"], [0, "编辑中"], [1, "提交申请"], [2, "通过审核"], [3, "已发布"]], + EnumHandleStatus: [[-1, "处理失败"], [0, "新申请"], [1, "待处理"], [2, "处理成功"]], + EnumAuthorLevel: [[1, "一级"], [2, "二级"], [3, "三级"], [4, "四级"], [5, "五级"]], + EnumChannelClass: [[0, "特级"], [1, "一级"], [2, "二级"], [3, "三级"], [4, "四级"], [5, "五级"], [6, "六级"], [7, "七级"], [8, "八级"], [9, "九级"], [1100, "千级"]], + EnumVipChapter: [[0, "公众"], [1, "VIP"]], + EnumBookLeveType: [[1, "A级"], [2, "B级"], [3, "C级"], [4, "普通"], [5, "S级"]], + EnumBookLeveTypeL: [[1, "A"], [2, "B"], [3, "C"]], + EnumAdmActClass: [[50, "签约等级修改"], [51, "封面修改"], [52, "渠道添加"], [53, "渠道修改"], [54, "渠道删除"], [55, "章节删除"]], + EnumSettlementType: [[0, "未结算"], [1, "已结算"], [2, "结算失败"]], + EnumBookProcess: [[0, "连载"], [1, "完结"]], + EnumAuthStatus: [[1 ,"独家"], [2, "非独家"]] +}; + +function dateToDate(date) { + var sDate = new Date(); + if (typeof date == 'object' + && typeof new Date().getMonth == "function" + ) { + sDate = date; + } + else if (typeof date == "string") { + var arr = date.split('-') + if (arr.length == 3) { + sDate = new Date(arr[0] + '-' + arr[1] + '-' + arr[2]); + } + } + + return sDate; +} + + +function addMonth(date, num) { + num = parseInt(num); + var sDate = dateToDate(date); + + var sYear = sDate.getFullYear(); + var sMonth = sDate.getMonth() + 1; + var sDay = sDate.getDate(); + + var eYear = sYear; + var eMonth = sMonth + num; + var eDay = sDay; + while (eMonth > 12) { + eYear++; + eMonth -= 12; + } + + var eDate = new Date(eYear, eMonth - 1, eDay); + + while (eDate.getMonth() != eMonth - 1) { + eDay--; + eDate = new Date(eYear, eMonth - 1, eDay); + } + + return eDate; +} + +function checkAll() { + if ($("#selAll").attr("checked")) { + $("input[name='selBox']").each(function () { + $(this).attr("checked", true); + }); + } + else { + $("input[name='selBox']").each(function () { + $(this).removeAttr("checked"); + }); + } +} + +$(function () { + initSubmitButton(3); +}); + +//停留时间 +function initSubmitButton(wait) { + $("input[type='submit']").each(function () { + $(this).click(function () { + if ($(this).attr("submited") == "1") { + return false; + } + var oldVal = $(this).val(); + $(this).val("正在处理,请稍等(" + wait + ")"); + $(this).attr("submited", "1"); + setTimeout('ButtonLimit("' + $(this).attr("id") + '",' + wait + ',"' + oldVal + '")', 1000); + }); + }); +} +function ButtonLimit(objId, wait, oldVal) { + wait--; + if (wait > 0) { + $("#" + objId).val("正在处理,请稍等(" + wait + ")"); + setTimeout('ButtonLimit("' + objId + '",' + wait + ',"' + oldVal + '");', 1000); + } + else { + $("#" + objId).removeAttr("submited"); + $("#" + objId).val(oldVal); + } +} \ No newline at end of file diff --git a/novel-front/src/main/resources/static/javascript/common.js b/novel-front/src/main/resources/static/javascript/common.js index 750008d..0a75196 100644 --- a/novel-front/src/main/resources/static/javascript/common.js +++ b/novel-front/src/main/resources/static/javascript/common.js @@ -1,6 +1,8 @@ var needLoginPath = ['/user/favorites.html','/user/comment.html','/user/feedback.html', '/user/feedback_list.html','/user/read_history.html','/user/set_name.html', - '/user/set_password.html','/user/set_sex.html','/user/setup.html','/user/userinfo.html',"/pay/index.html"]; + '/user/set_password.html','/user/set_sex.html','/user/setup.html','/user/userinfo.html', + "/pay/index.html," + + "/author/register.html","/author/index.html"]; var isLogin = false; var url = window.location.search; //key(需要检索的键) diff --git a/novel-front/src/main/resources/static/javascript/easyui-lang-zh_CN.js b/novel-front/src/main/resources/static/javascript/easyui-lang-zh_CN.js new file mode 100644 index 0000000..96e410e --- /dev/null +++ b/novel-front/src/main/resources/static/javascript/easyui-lang-zh_CN.js @@ -0,0 +1,70 @@ +if ($.fn.pagination){ + $.fn.pagination.defaults.beforePageText = '第'; + $.fn.pagination.defaults.afterPageText = '共{pages}页'; + $.fn.pagination.defaults.displayMsg = '显示{from}到{to},共{total}记录'; +} +if ($.fn.datagrid){ + $.fn.datagrid.defaults.loadMsg = '请稍后…'; +} +if ($.fn.treegrid && $.fn.datagrid){ + $.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg; +} +if ($.messager){ + $.messager.defaults.ok = '确定'; + $.messager.defaults.cancel = '取消'; +} +if ($.fn.validatebox){ + $.fn.validatebox.defaults.missingMessage = '该输入项为必输项'; + $.fn.validatebox.defaults.rules.email.message = '请输入有效的电子邮件地址'; + $.fn.validatebox.defaults.rules.url.message = '请输入有效的URL地址'; + $.fn.validatebox.defaults.rules.length.message = '输入内容长度必须介于{0}和{1}之间'; + $.fn.validatebox.defaults.rules.remote.message = '请修正该字段'; +} +if ($.fn.numberbox){ + $.fn.numberbox.defaults.missingMessage = '该输入项为必输项'; +} +if ($.fn.combobox){ + $.fn.combobox.defaults.missingMessage = '该输入项为必输项'; +} +if ($.fn.combotree){ + $.fn.combotree.defaults.missingMessage = '该输入项为必输项'; +} +if ($.fn.combogrid){ + $.fn.combogrid.defaults.missingMessage = '该输入项为必输项'; +} +if ($.fn.calendar){ + $.fn.calendar.defaults.weeks = ['日','一','二','三','四','五','六']; + $.fn.calendar.defaults.months = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月']; +} +if ($.fn.datebox){ + $.fn.datebox.defaults.currentText = '今天'; + $.fn.datebox.defaults.closeText = '关闭'; + $.fn.datebox.defaults.okText = '确定'; + $.fn.datebox.defaults.missingMessage = '该输入项为必输项'; + $.fn.datebox.defaults.formatter = function(date){ + var y = date.getFullYear(); + var m = date.getMonth()+1; + var d = date.getDate(); + return y+'-'+(m<10?('0'+m):m)+'-'+(d<10?('0'+d):d); + }; + $.fn.datebox.defaults.parser = function(s){ + if (!s) return new Date(); + var ss = s.split('-'); + var y = parseInt(ss[0],10); + var m = parseInt(ss[1],10); + var d = parseInt(ss[2],10); + if (!isNaN(y) && !isNaN(m) && !isNaN(d)){ + return new Date(y,m-1,d); + } else { + return new Date(); + } + }; +} +if ($.fn.datetimebox && $.fn.datebox){ + $.extend($.fn.datetimebox.defaults,{ + currentText: $.fn.datebox.defaults.currentText, + closeText: $.fn.datebox.defaults.closeText, + okText: $.fn.datebox.defaults.okText, + missingMessage: $.fn.datebox.defaults.missingMessage + }); +} diff --git a/novel-front/src/main/resources/static/javascript/jquery.easyui.min.js b/novel-front/src/main/resources/static/javascript/jquery.easyui.min.js new file mode 100644 index 0000000..29aed05 --- /dev/null +++ b/novel-front/src/main/resources/static/javascript/jquery.easyui.min.js @@ -0,0 +1,16103 @@ +/** + * EasyUI for jQuery 1.5.3 + * + * Copyright (c) 2009-2017 www.jeasyui.com. All rights reserved. + * + * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php + * To use it on other terms please contact us: info@jeasyui.com + * + */ +(function($){ + $.easyui={indexOfArray:function(a,o,id){ + for(var i=0,_1=a.length;i<_1;i++){ + if(id==undefined){ + if(a[i]==o){ + return i; + } + }else{ + if(a[i][o]==id){ + return i; + } + } + } + return -1; + },removeArrayItem:function(a,o,id){ + if(typeof o=="string"){ + for(var i=0,_2=a.length;i<_2;i++){ + if(a[i][o]==id){ + a.splice(i,1); + return; + } + } + }else{ + var _3=this.indexOfArray(a,o); + if(_3!=-1){ + a.splice(_3,1); + } + } + },addArrayItem:function(a,o,r){ + var _4=this.indexOfArray(a,o,r?r[o]:undefined); + if(_4==-1){ + a.push(r?r:o); + }else{ + a[_4]=r?r:o; + } + },getArrayItem:function(a,o,id){ + var _5=this.indexOfArray(a,o,id); + return _5==-1?null:a[_5]; + },forEach:function(_6,_7,_8){ + var _9=[]; + for(var i=0;i<_6.length;i++){ + _9.push(_6[i]); + } + while(_9.length){ + var _a=_9.shift(); + if(_8(_a)==false){ + return; + } + if(_7&&_a.children){ + for(var i=_a.children.length-1;i>=0;i--){ + _9.unshift(_a.children[i]); + } + } + } + }}; + $.parser={auto:true,onComplete:function(_b){ + },plugins:["draggable","droppable","resizable","pagination","tooltip","linkbutton","menu","menubutton","splitbutton","switchbutton","progressbar","tree","textbox","passwordbox","filebox","combo","combobox","combotree","combogrid","combotreegrid","tagbox","numberbox","validatebox","searchbox","spinner","numberspinner","timespinner","datetimespinner","calendar","datebox","datetimebox","slider","layout","panel","datagrid","propertygrid","treegrid","datalist","tabs","accordion","window","dialog","form"],parse:function(_c){ + var aa=[]; + for(var i=0;i<$.parser.plugins.length;i++){ + var _d=$.parser.plugins[i]; + var r=$(".easyui-"+_d,_c); + if(r.length){ + if(r[_d]){ + r.each(function(){ + $(this)[_d]($.data(this,"options")||{}); + }); + }else{ + aa.push({name:_d,jq:r}); + } + } + } + if(aa.length&&window.easyloader){ + var _e=[]; + for(var i=0;i=0){ + v=Math.floor((_12.width()-_13)*v/100); + }else{ + v=Math.floor((_12.height()-_13)*v/100); + } + }else{ + v=parseInt(v)||undefined; + } + return v; + },parseOptions:function(_15,_16){ + var t=$(_15); + var _17={}; + var s=$.trim(t.attr("data-options")); + if(s){ + if(s.substring(0,1)!="{"){ + s="{"+s+"}"; + } + _17=(new Function("return "+s))(); + } + $.map(["width","height","left","top","minWidth","maxWidth","minHeight","maxHeight"],function(p){ + var pv=$.trim(_15.style[p]||""); + if(pv){ + if(pv.indexOf("%")==-1){ + pv=parseInt(pv); + if(isNaN(pv)){ + pv=undefined; + } + } + _17[p]=pv; + } + }); + if(_16){ + var _18={}; + for(var i=0;i<_16.length;i++){ + var pp=_16[i]; + if(typeof pp=="string"){ + _18[pp]=t.attr(pp); + }else{ + for(var _19 in pp){ + var _1a=pp[_19]; + if(_1a=="boolean"){ + _18[_19]=t.attr(_19)?(t.attr(_19)=="true"):undefined; + }else{ + if(_1a=="number"){ + _18[_19]=t.attr(_19)=="0"?0:parseFloat(t.attr(_19))||undefined; + } + } + } + } + } + $.extend(_17,_18); + } + return _17; + }}; + $(function(){ + var d=$("
").appendTo("body"); + $._boxModel=d.outerWidth()!=100; + d.remove(); + d=$("
").appendTo("body"); + $._positionFixed=(d.css("position")=="fixed"); + d.remove(); + if(!window.easyloader&&$.parser.auto){ + $.parser.parse(); + } + }); + $.fn._outerWidth=function(_1b){ + if(_1b==undefined){ + if(this[0]==window){ + return this.width()||document.body.clientWidth; + } + return this.outerWidth()||0; + } + return this._size("width",_1b); + }; + $.fn._outerHeight=function(_1c){ + if(_1c==undefined){ + if(this[0]==window){ + return this.height()||document.body.clientHeight; + } + return this.outerHeight()||0; + } + return this._size("height",_1c); + }; + $.fn._scrollLeft=function(_1d){ + if(_1d==undefined){ + return this.scrollLeft(); + }else{ + return this.each(function(){ + $(this).scrollLeft(_1d); + }); + } + }; + $.fn._propAttr=$.fn.prop||$.fn.attr; + $.fn._size=function(_1e,_1f){ + if(typeof _1e=="string"){ + if(_1e=="clear"){ + return this.each(function(){ + $(this).css({width:"",minWidth:"",maxWidth:"",height:"",minHeight:"",maxHeight:""}); + }); + }else{ + if(_1e=="fit"){ + return this.each(function(){ + _20(this,this.tagName=="BODY"?$("body"):$(this).parent(),true); + }); + }else{ + if(_1e=="unfit"){ + return this.each(function(){ + _20(this,$(this).parent(),false); + }); + }else{ + if(_1f==undefined){ + return _21(this[0],_1e); + }else{ + return this.each(function(){ + _21(this,_1e,_1f); + }); + } + } + } + } + }else{ + return this.each(function(){ + _1f=_1f||$(this).parent(); + $.extend(_1e,_20(this,_1f,_1e.fit)||{}); + var r1=_22(this,"width",_1f,_1e); + var r2=_22(this,"height",_1f,_1e); + if(r1||r2){ + $(this).addClass("easyui-fluid"); + }else{ + $(this).removeClass("easyui-fluid"); + } + }); + } + function _20(_23,_24,fit){ + if(!_24.length){ + return false; + } + var t=$(_23)[0]; + var p=_24[0]; + var _25=p.fcount||0; + if(fit){ + if(!t.fitted){ + t.fitted=true; + p.fcount=_25+1; + $(p).addClass("panel-noscroll"); + if(p.tagName=="BODY"){ + $("html").addClass("panel-fit"); + } + } + return {width:($(p).width()||1),height:($(p).height()||1)}; + }else{ + if(t.fitted){ + t.fitted=false; + p.fcount=_25-1; + if(p.fcount==0){ + $(p).removeClass("panel-noscroll"); + if(p.tagName=="BODY"){ + $("html").removeClass("panel-fit"); + } + } + } + return false; + } + }; + function _22(_26,_27,_28,_29){ + var t=$(_26); + var p=_27; + var p1=p.substr(0,1).toUpperCase()+p.substr(1); + var min=$.parser.parseValue("min"+p1,_29["min"+p1],_28); + var max=$.parser.parseValue("max"+p1,_29["max"+p1],_28); + var val=$.parser.parseValue(p,_29[p],_28); + var _2a=(String(_29[p]||"").indexOf("%")>=0?true:false); + if(!isNaN(val)){ + var v=Math.min(Math.max(val,min||0),max||99999); + if(!_2a){ + _29[p]=v; + } + t._size("min"+p1,""); + t._size("max"+p1,""); + t._size(p,v); + }else{ + t._size(p,""); + t._size("min"+p1,min); + t._size("max"+p1,max); + } + return _2a||_29.fit; + }; + function _21(_2b,_2c,_2d){ + var t=$(_2b); + if(_2d==undefined){ + _2d=parseInt(_2b.style[_2c]); + if(isNaN(_2d)){ + return undefined; + } + if($._boxModel){ + _2d+=_2e(); + } + return _2d; + }else{ + if(_2d===""){ + t.css(_2c,""); + }else{ + if($._boxModel){ + _2d-=_2e(); + if(_2d<0){ + _2d=0; + } + } + t.css(_2c,_2d+"px"); + } + } + function _2e(){ + if(_2c.toLowerCase().indexOf("width")>=0){ + return t.outerWidth()-t.width(); + }else{ + return t.outerHeight()-t.height(); + } + }; + }; + }; +})(jQuery); +(function($){ + var _2f=null; + var _30=null; + var _31=false; + function _32(e){ + if(e.touches.length!=1){ + return; + } + if(!_31){ + _31=true; + dblClickTimer=setTimeout(function(){ + _31=false; + },500); + }else{ + clearTimeout(dblClickTimer); + _31=false; + _33(e,"dblclick"); + } + _2f=setTimeout(function(){ + _33(e,"contextmenu",3); + },1000); + _33(e,"mousedown"); + if($.fn.draggable.isDragging||$.fn.resizable.isResizing){ + e.preventDefault(); + } + }; + function _34(e){ + if(e.touches.length!=1){ + return; + } + if(_2f){ + clearTimeout(_2f); + } + _33(e,"mousemove"); + if($.fn.draggable.isDragging||$.fn.resizable.isResizing){ + e.preventDefault(); + } + }; + function _35(e){ + if(_2f){ + clearTimeout(_2f); + } + _33(e,"mouseup"); + if($.fn.draggable.isDragging||$.fn.resizable.isResizing){ + e.preventDefault(); + } + }; + function _33(e,_36,_37){ + var _38=new $.Event(_36); + _38.pageX=e.changedTouches[0].pageX; + _38.pageY=e.changedTouches[0].pageY; + _38.which=_37||1; + $(e.target).trigger(_38); + }; + if(document.addEventListener){ + document.addEventListener("touchstart",_32,true); + document.addEventListener("touchmove",_34,true); + document.addEventListener("touchend",_35,true); + } +})(jQuery); +(function($){ + function _39(e){ + var _3a=$.data(e.data.target,"draggable"); + var _3b=_3a.options; + var _3c=_3a.proxy; + var _3d=e.data; + var _3e=_3d.startLeft+e.pageX-_3d.startX; + var top=_3d.startTop+e.pageY-_3d.startY; + if(_3c){ + if(_3c.parent()[0]==document.body){ + if(_3b.deltaX!=null&&_3b.deltaX!=undefined){ + _3e=e.pageX+_3b.deltaX; + }else{ + _3e=e.pageX-e.data.offsetWidth; + } + if(_3b.deltaY!=null&&_3b.deltaY!=undefined){ + top=e.pageY+_3b.deltaY; + }else{ + top=e.pageY-e.data.offsetHeight; + } + }else{ + if(_3b.deltaX!=null&&_3b.deltaX!=undefined){ + _3e+=e.data.offsetWidth+_3b.deltaX; + } + if(_3b.deltaY!=null&&_3b.deltaY!=undefined){ + top+=e.data.offsetHeight+_3b.deltaY; + } + } + } + if(e.data.parent!=document.body){ + _3e+=$(e.data.parent).scrollLeft(); + top+=$(e.data.parent).scrollTop(); + } + if(_3b.axis=="h"){ + _3d.left=_3e; + }else{ + if(_3b.axis=="v"){ + _3d.top=top; + }else{ + _3d.left=_3e; + _3d.top=top; + } + } + }; + function _3f(e){ + var _40=$.data(e.data.target,"draggable"); + var _41=_40.options; + var _42=_40.proxy; + if(!_42){ + _42=$(e.data.target); + } + _42.css({left:e.data.left,top:e.data.top}); + $("body").css("cursor",_41.cursor); + }; + function _43(e){ + if(!$.fn.draggable.isDragging){ + return false; + } + var _44=$.data(e.data.target,"draggable"); + var _45=_44.options; + var _46=$(".droppable:visible").filter(function(){ + return e.data.target!=this; + }).filter(function(){ + var _47=$.data(this,"droppable").options.accept; + if(_47){ + return $(_47).filter(function(){ + return this==e.data.target; + }).length>0; + }else{ + return true; + } + }); + _44.droppables=_46; + var _48=_44.proxy; + if(!_48){ + if(_45.proxy){ + if(_45.proxy=="clone"){ + _48=$(e.data.target).clone().insertAfter(e.data.target); + }else{ + _48=_45.proxy.call(e.data.target,e.data.target); + } + _44.proxy=_48; + }else{ + _48=$(e.data.target); + } + } + _48.css("position","absolute"); + _39(e); + _3f(e); + _45.onStartDrag.call(e.data.target,e); + return false; + }; + function _49(e){ + if(!$.fn.draggable.isDragging){ + return false; + } + var _4a=$.data(e.data.target,"draggable"); + _39(e); + if(_4a.options.onDrag.call(e.data.target,e)!=false){ + _3f(e); + } + var _4b=e.data.target; + _4a.droppables.each(function(){ + var _4c=$(this); + if(_4c.droppable("options").disabled){ + return; + } + var p2=_4c.offset(); + if(e.pageX>p2.left&&e.pageXp2.top&&e.pageYp2.left&&e.pageXp2.top&&e.pageY_62.options.edge; + }; + }); + }; + $.fn.draggable.methods={options:function(jq){ + return $.data(jq[0],"draggable").options; + },proxy:function(jq){ + return $.data(jq[0],"draggable").proxy; + },enable:function(jq){ + return jq.each(function(){ + $(this).draggable({disabled:false}); + }); + },disable:function(jq){ + return jq.each(function(){ + $(this).draggable({disabled:true}); + }); + }}; + $.fn.draggable.parseOptions=function(_67){ + var t=$(_67); + return $.extend({},$.parser.parseOptions(_67,["cursor","handle","axis",{"revert":"boolean","deltaX":"number","deltaY":"number","edge":"number","delay":"number"}]),{disabled:(t.attr("disabled")?true:undefined)}); + }; + $.fn.draggable.defaults={proxy:null,revert:false,cursor:"move",deltaX:null,deltaY:null,handle:null,disabled:false,edge:0,axis:null,delay:100,onBeforeDrag:function(e){ + },onStartDrag:function(e){ + },onDrag:function(e){ + },onEndDrag:function(e){ + },onStopDrag:function(e){ + }}; + $.fn.draggable.isDragging=false; +})(jQuery); +(function($){ + function _68(_69){ + $(_69).addClass("droppable"); + $(_69).bind("_dragenter",function(e,_6a){ + $.data(_69,"droppable").options.onDragEnter.apply(_69,[e,_6a]); + }); + $(_69).bind("_dragleave",function(e,_6b){ + $.data(_69,"droppable").options.onDragLeave.apply(_69,[e,_6b]); + }); + $(_69).bind("_dragover",function(e,_6c){ + $.data(_69,"droppable").options.onDragOver.apply(_69,[e,_6c]); + }); + $(_69).bind("_drop",function(e,_6d){ + $.data(_69,"droppable").options.onDrop.apply(_69,[e,_6d]); + }); + }; + $.fn.droppable=function(_6e,_6f){ + if(typeof _6e=="string"){ + return $.fn.droppable.methods[_6e](this,_6f); + } + _6e=_6e||{}; + return this.each(function(){ + var _70=$.data(this,"droppable"); + if(_70){ + $.extend(_70.options,_6e); + }else{ + _68(this); + $.data(this,"droppable",{options:$.extend({},$.fn.droppable.defaults,$.fn.droppable.parseOptions(this),_6e)}); + } + }); + }; + $.fn.droppable.methods={options:function(jq){ + return $.data(jq[0],"droppable").options; + },enable:function(jq){ + return jq.each(function(){ + $(this).droppable({disabled:false}); + }); + },disable:function(jq){ + return jq.each(function(){ + $(this).droppable({disabled:true}); + }); + }}; + $.fn.droppable.parseOptions=function(_71){ + var t=$(_71); + return $.extend({},$.parser.parseOptions(_71,["accept"]),{disabled:(t.attr("disabled")?true:undefined)}); + }; + $.fn.droppable.defaults={accept:null,disabled:false,onDragEnter:function(e,_72){ + },onDragOver:function(e,_73){ + },onDragLeave:function(e,_74){ + },onDrop:function(e,_75){ + }}; +})(jQuery); +(function($){ + function _76(e){ + var _77=e.data; + var _78=$.data(_77.target,"resizable").options; + if(_77.dir.indexOf("e")!=-1){ + var _79=_77.startWidth+e.pageX-_77.startX; + _79=Math.min(Math.max(_79,_78.minWidth),_78.maxWidth); + _77.width=_79; + } + if(_77.dir.indexOf("s")!=-1){ + var _7a=_77.startHeight+e.pageY-_77.startY; + _7a=Math.min(Math.max(_7a,_78.minHeight),_78.maxHeight); + _77.height=_7a; + } + if(_77.dir.indexOf("w")!=-1){ + var _79=_77.startWidth-e.pageX+_77.startX; + _79=Math.min(Math.max(_79,_78.minWidth),_78.maxWidth); + _77.width=_79; + _77.left=_77.startLeft+_77.startWidth-_77.width; + } + if(_77.dir.indexOf("n")!=-1){ + var _7a=_77.startHeight-e.pageY+_77.startY; + _7a=Math.min(Math.max(_7a,_78.minHeight),_78.maxHeight); + _77.height=_7a; + _77.top=_77.startTop+_77.startHeight-_77.height; + } + }; + function _7b(e){ + var _7c=e.data; + var t=$(_7c.target); + t.css({left:_7c.left,top:_7c.top}); + if(t.outerWidth()!=_7c.width){ + t._outerWidth(_7c.width); + } + if(t.outerHeight()!=_7c.height){ + t._outerHeight(_7c.height); + } + }; + function _7d(e){ + $.fn.resizable.isResizing=true; + $.data(e.data.target,"resizable").options.onStartResize.call(e.data.target,e); + return false; + }; + function _7e(e){ + _76(e); + if($.data(e.data.target,"resizable").options.onResize.call(e.data.target,e)!=false){ + _7b(e); + } + return false; + }; + function _7f(e){ + $.fn.resizable.isResizing=false; + _76(e,true); + _7b(e); + $.data(e.data.target,"resizable").options.onStopResize.call(e.data.target,e); + $(document).unbind(".resizable"); + $("body").css("cursor",""); + return false; + }; + function _80(e){ + var _81=$(e.data.target).resizable("options"); + var tt=$(e.data.target); + var dir=""; + var _82=tt.offset(); + var _83=tt.outerWidth(); + var _84=tt.outerHeight(); + var _85=_81.edge; + if(e.pageY>_82.top&&e.pageY<_82.top+_85){ + dir+="n"; + }else{ + if(e.pageY<_82.top+_84&&e.pageY>_82.top+_84-_85){ + dir+="s"; + } + } + if(e.pageX>_82.left&&e.pageX<_82.left+_85){ + dir+="w"; + }else{ + if(e.pageX<_82.left+_83&&e.pageX>_82.left+_83-_85){ + dir+="e"; + } + } + var _86=_81.handles.split(","); + _86=$.map(_86,function(h){ + return $.trim(h).toLowerCase(); + }); + if($.inArray("all",_86)>=0||$.inArray(dir,_86)>=0){ + return dir; + } + for(var i=0;i=0){ + return _86[_87]; + } + } + return ""; + }; + $.fn.resizable=function(_88,_89){ + if(typeof _88=="string"){ + return $.fn.resizable.methods[_88](this,_89); + } + return this.each(function(){ + var _8a=null; + var _8b=$.data(this,"resizable"); + if(_8b){ + $(this).unbind(".resizable"); + _8a=$.extend(_8b.options,_88||{}); + }else{ + _8a=$.extend({},$.fn.resizable.defaults,$.fn.resizable.parseOptions(this),_88||{}); + $.data(this,"resizable",{options:_8a}); + } + if(_8a.disabled==true){ + return; + } + $(this).bind("mousemove.resizable",{target:this},function(e){ + if($.fn.resizable.isResizing){ + return; + } + var dir=_80(e); + $(e.data.target).css("cursor",dir?dir+"-resize":""); + }).bind("mouseleave.resizable",{target:this},function(e){ + $(e.data.target).css("cursor",""); + }).bind("mousedown.resizable",{target:this},function(e){ + var dir=_80(e); + if(dir==""){ + return; + } + function _8c(css){ + var val=parseInt($(e.data.target).css(css)); + if(isNaN(val)){ + return 0; + }else{ + return val; + } + }; + var _8d={target:e.data.target,dir:dir,startLeft:_8c("left"),startTop:_8c("top"),left:_8c("left"),top:_8c("top"),startX:e.pageX,startY:e.pageY,startWidth:$(e.data.target).outerWidth(),startHeight:$(e.data.target).outerHeight(),width:$(e.data.target).outerWidth(),height:$(e.data.target).outerHeight(),deltaWidth:$(e.data.target).outerWidth()-$(e.data.target).width(),deltaHeight:$(e.data.target).outerHeight()-$(e.data.target).height()}; + $(document).bind("mousedown.resizable",_8d,_7d); + $(document).bind("mousemove.resizable",_8d,_7e); + $(document).bind("mouseup.resizable",_8d,_7f); + $("body").css("cursor",dir+"-resize"); + }); + }); + }; + $.fn.resizable.methods={options:function(jq){ + return $.data(jq[0],"resizable").options; + },enable:function(jq){ + return jq.each(function(){ + $(this).resizable({disabled:false}); + }); + },disable:function(jq){ + return jq.each(function(){ + $(this).resizable({disabled:true}); + }); + }}; + $.fn.resizable.parseOptions=function(_8e){ + var t=$(_8e); + return $.extend({},$.parser.parseOptions(_8e,["handles",{minWidth:"number",minHeight:"number",maxWidth:"number",maxHeight:"number",edge:"number"}]),{disabled:(t.attr("disabled")?true:undefined)}); + }; + $.fn.resizable.defaults={disabled:false,handles:"n, e, s, w, ne, se, sw, nw, all",minWidth:10,minHeight:10,maxWidth:10000,maxHeight:10000,edge:5,onStartResize:function(e){ + },onResize:function(e){ + },onStopResize:function(e){ + }}; + $.fn.resizable.isResizing=false; +})(jQuery); +(function($){ + function _8f(_90,_91){ + var _92=$.data(_90,"linkbutton").options; + if(_91){ + $.extend(_92,_91); + } + if(_92.width||_92.height||_92.fit){ + var btn=$(_90); + var _93=btn.parent(); + var _94=btn.is(":visible"); + if(!_94){ + var _95=$("
").insertBefore(_90); + var _96={position:btn.css("position"),display:btn.css("display"),left:btn.css("left")}; + btn.appendTo("body"); + btn.css({position:"absolute",display:"inline-block",left:-20000}); + } + btn._size(_92,_93); + var _97=btn.find(".l-btn-left"); + _97.css("margin-top",0); + _97.css("margin-top",parseInt((btn.height()-_97.height())/2)+"px"); + if(!_94){ + btn.insertAfter(_95); + btn.css(_96); + _95.remove(); + } + } + }; + function _98(_99){ + var _9a=$.data(_99,"linkbutton").options; + var t=$(_99).empty(); + t.addClass("l-btn").removeClass("l-btn-plain l-btn-selected l-btn-plain-selected l-btn-outline"); + t.removeClass("l-btn-small l-btn-medium l-btn-large").addClass("l-btn-"+_9a.size); + if(_9a.plain){ + t.addClass("l-btn-plain"); + } + if(_9a.outline){ + t.addClass("l-btn-outline"); + } + if(_9a.selected){ + t.addClass(_9a.plain?"l-btn-selected l-btn-plain-selected":"l-btn-selected"); + } + t.attr("group",_9a.group||""); + t.attr("id",_9a.id||""); + var _9b=$("").appendTo(t); + if(_9a.text){ + $("").html(_9a.text).appendTo(_9b); + }else{ + $(" ").appendTo(_9b); + } + if(_9a.iconCls){ + $(" ").addClass(_9a.iconCls).appendTo(_9b); + _9b.addClass("l-btn-icon-"+_9a.iconAlign); + } + t.unbind(".linkbutton").bind("focus.linkbutton",function(){ + if(!_9a.disabled){ + $(this).addClass("l-btn-focus"); + } + }).bind("blur.linkbutton",function(){ + $(this).removeClass("l-btn-focus"); + }).bind("click.linkbutton",function(){ + if(!_9a.disabled){ + if(_9a.toggle){ + if(_9a.selected){ + $(this).linkbutton("unselect"); + }else{ + $(this).linkbutton("select"); + } + } + _9a.onClick.call(this); + } + }); + _9c(_99,_9a.selected); + _9d(_99,_9a.disabled); + }; + function _9c(_9e,_9f){ + var _a0=$.data(_9e,"linkbutton").options; + if(_9f){ + if(_a0.group){ + $("a.l-btn[group=\""+_a0.group+"\"]").each(function(){ + var o=$(this).linkbutton("options"); + if(o.toggle){ + $(this).removeClass("l-btn-selected l-btn-plain-selected"); + o.selected=false; + } + }); + } + $(_9e).addClass(_a0.plain?"l-btn-selected l-btn-plain-selected":"l-btn-selected"); + _a0.selected=true; + }else{ + if(!_a0.group){ + $(_9e).removeClass("l-btn-selected l-btn-plain-selected"); + _a0.selected=false; + } + } + }; + function _9d(_a1,_a2){ + var _a3=$.data(_a1,"linkbutton"); + var _a4=_a3.options; + $(_a1).removeClass("l-btn-disabled l-btn-plain-disabled"); + if(_a2){ + _a4.disabled=true; + var _a5=$(_a1).attr("href"); + if(_a5){ + _a3.href=_a5; + $(_a1).attr("href","javascript:;"); + } + if(_a1.onclick){ + _a3.onclick=_a1.onclick; + _a1.onclick=null; + } + _a4.plain?$(_a1).addClass("l-btn-disabled l-btn-plain-disabled"):$(_a1).addClass("l-btn-disabled"); + }else{ + _a4.disabled=false; + if(_a3.href){ + $(_a1).attr("href",_a3.href); + } + if(_a3.onclick){ + _a1.onclick=_a3.onclick; + } + } + }; + $.fn.linkbutton=function(_a6,_a7){ + if(typeof _a6=="string"){ + return $.fn.linkbutton.methods[_a6](this,_a7); + } + _a6=_a6||{}; + return this.each(function(){ + var _a8=$.data(this,"linkbutton"); + if(_a8){ + $.extend(_a8.options,_a6); + }else{ + $.data(this,"linkbutton",{options:$.extend({},$.fn.linkbutton.defaults,$.fn.linkbutton.parseOptions(this),_a6)}); + $(this).removeAttr("disabled"); + $(this).bind("_resize",function(e,_a9){ + if($(this).hasClass("easyui-fluid")||_a9){ + _8f(this); + } + return false; + }); + } + _98(this); + _8f(this); + }); + }; + $.fn.linkbutton.methods={options:function(jq){ + return $.data(jq[0],"linkbutton").options; + },resize:function(jq,_aa){ + return jq.each(function(){ + _8f(this,_aa); + }); + },enable:function(jq){ + return jq.each(function(){ + _9d(this,false); + }); + },disable:function(jq){ + return jq.each(function(){ + _9d(this,true); + }); + },select:function(jq){ + return jq.each(function(){ + _9c(this,true); + }); + },unselect:function(jq){ + return jq.each(function(){ + _9c(this,false); + }); + }}; + $.fn.linkbutton.parseOptions=function(_ab){ + var t=$(_ab); + return $.extend({},$.parser.parseOptions(_ab,["id","iconCls","iconAlign","group","size","text",{plain:"boolean",toggle:"boolean",selected:"boolean",outline:"boolean"}]),{disabled:(t.attr("disabled")?true:undefined),text:($.trim(t.html())||undefined),iconCls:(t.attr("icon")||t.attr("iconCls"))}); + }; + $.fn.linkbutton.defaults={id:null,disabled:false,toggle:false,selected:false,outline:false,group:null,plain:false,text:"",iconCls:null,iconAlign:"left",size:"small",onClick:function(){ + }}; +})(jQuery); +(function($){ + function _ac(_ad){ + var _ae=$.data(_ad,"pagination"); + var _af=_ae.options; + var bb=_ae.bb={}; + var _b0=$(_ad).addClass("pagination").html("
"); + var tr=_b0.find("tr"); + var aa=$.extend([],_af.layout); + if(!_af.showPageList){ + _b1(aa,"list"); + } + if(!_af.showPageInfo){ + _b1(aa,"info"); + } + if(!_af.showRefresh){ + _b1(aa,"refresh"); + } + if(aa[0]=="sep"){ + aa.shift(); + } + if(aa[aa.length-1]=="sep"){ + aa.pop(); + } + for(var _b2=0;_b2"); + ps.bind("change",function(){ + _af.pageSize=parseInt($(this).val()); + _af.onChangePageSize.call(_ad,_af.pageSize); + _b9(_ad,_af.pageNumber); + }); + for(var i=0;i<_af.pageList.length;i++){ + $("").text(_af.pageList[i]).appendTo(ps); + } + $("").append(ps).appendTo(tr); + }else{ + if(_b3=="sep"){ + $("
").appendTo(tr); + }else{ + if(_b3=="first"){ + bb.first=_b4("first"); + }else{ + if(_b3=="prev"){ + bb.prev=_b4("prev"); + }else{ + if(_b3=="next"){ + bb.next=_b4("next"); + }else{ + if(_b3=="last"){ + bb.last=_b4("last"); + }else{ + if(_b3=="manual"){ + $("").html(_af.beforePageText).appendTo(tr).wrap(""); + bb.num=$("").appendTo(tr).wrap(""); + bb.num.unbind(".pagination").bind("keydown.pagination",function(e){ + if(e.keyCode==13){ + var _b5=parseInt($(this).val())||1; + _b9(_ad,_b5); + return false; + } + }); + bb.after=$("").appendTo(tr).wrap(""); + }else{ + if(_b3=="refresh"){ + bb.refresh=_b4("refresh"); + }else{ + if(_b3=="links"){ + $("").appendTo(tr); + }else{ + if(_b3=="info"){ + if(_b2==aa.length-1){ + $("
").appendTo(_b0); + }else{ + $("
").appendTo(tr); + } + } + } + } + } + } + } + } + } + } + } + } + if(_af.buttons){ + $("
").appendTo(tr); + if($.isArray(_af.buttons)){ + for(var i=0;i<_af.buttons.length;i++){ + var btn=_af.buttons[i]; + if(btn=="-"){ + $("
").appendTo(tr); + }else{ + var td=$("").appendTo(tr); + var a=$("").appendTo(td); + a[0].onclick=eval(btn.handler||function(){ + }); + a.linkbutton($.extend({},btn,{plain:true})); + } + } + }else{ + var td=$("").appendTo(tr); + $(_af.buttons).appendTo(td).show(); + } + } + $("
").appendTo(_b0); + function _b4(_b6){ + var btn=_af.nav[_b6]; + var a=$("").appendTo(tr); + a.wrap(""); + a.linkbutton({iconCls:btn.iconCls,plain:true}).unbind(".pagination").bind("click.pagination",function(){ + btn.handler.call(_ad); + }); + return a; + }; + function _b1(aa,_b7){ + var _b8=$.inArray(_b7,aa); + if(_b8>=0){ + aa.splice(_b8,1); + } + return aa; + }; + }; + function _b9(_ba,_bb){ + var _bc=$.data(_ba,"pagination").options; + _bd(_ba,{pageNumber:_bb}); + _bc.onSelectPage.call(_ba,_bc.pageNumber,_bc.pageSize); + }; + function _bd(_be,_bf){ + var _c0=$.data(_be,"pagination"); + var _c1=_c0.options; + var bb=_c0.bb; + $.extend(_c1,_bf||{}); + var ps=$(_be).find("select.pagination-page-list"); + if(ps.length){ + ps.val(_c1.pageSize+""); + _c1.pageSize=parseInt(ps.val()); + } + var _c2=Math.ceil(_c1.total/_c1.pageSize)||1; + if(_c1.pageNumber<1){ + _c1.pageNumber=1; + } + if(_c1.pageNumber>_c2){ + _c1.pageNumber=_c2; + } + if(_c1.total==0){ + _c1.pageNumber=0; + _c2=0; + } + if(bb.num){ + bb.num.val(_c1.pageNumber); + } + if(bb.after){ + bb.after.html(_c1.afterPageText.replace(/{pages}/,_c2)); + } + var td=$(_be).find("td.pagination-links"); + if(td.length){ + td.empty(); + var _c3=_c1.pageNumber-Math.floor(_c1.links/2); + if(_c3<1){ + _c3=1; + } + var _c4=_c3+_c1.links-1; + if(_c4>_c2){ + _c4=_c2; + } + _c3=_c4-_c1.links+1; + if(_c3<1){ + _c3=1; + } + for(var i=_c3;i<=_c4;i++){ + var a=$("").appendTo(td); + a.linkbutton({plain:true,text:i}); + if(i==_c1.pageNumber){ + a.linkbutton("select"); + }else{ + a.unbind(".pagination").bind("click.pagination",{pageNumber:i},function(e){ + _b9(_be,e.data.pageNumber); + }); + } + } + } + var _c5=_c1.displayMsg; + _c5=_c5.replace(/{from}/,_c1.total==0?0:_c1.pageSize*(_c1.pageNumber-1)+1); + _c5=_c5.replace(/{to}/,Math.min(_c1.pageSize*(_c1.pageNumber),_c1.total)); + _c5=_c5.replace(/{total}/,_c1.total); + $(_be).find("div.pagination-info").html(_c5); + if(bb.first){ + bb.first.linkbutton({disabled:((!_c1.total)||_c1.pageNumber==1)}); + } + if(bb.prev){ + bb.prev.linkbutton({disabled:((!_c1.total)||_c1.pageNumber==1)}); + } + if(bb.next){ + bb.next.linkbutton({disabled:(_c1.pageNumber==_c2)}); + } + if(bb.last){ + bb.last.linkbutton({disabled:(_c1.pageNumber==_c2)}); + } + _c6(_be,_c1.loading); + }; + function _c6(_c7,_c8){ + var _c9=$.data(_c7,"pagination"); + var _ca=_c9.options; + _ca.loading=_c8; + if(_ca.showRefresh&&_c9.bb.refresh){ + _c9.bb.refresh.linkbutton({iconCls:(_ca.loading?"pagination-loading":"pagination-load")}); + } + }; + $.fn.pagination=function(_cb,_cc){ + if(typeof _cb=="string"){ + return $.fn.pagination.methods[_cb](this,_cc); + } + _cb=_cb||{}; + return this.each(function(){ + var _cd; + var _ce=$.data(this,"pagination"); + if(_ce){ + _cd=$.extend(_ce.options,_cb); + }else{ + _cd=$.extend({},$.fn.pagination.defaults,$.fn.pagination.parseOptions(this),_cb); + $.data(this,"pagination",{options:_cd}); + } + _ac(this); + _bd(this); + }); + }; + $.fn.pagination.methods={options:function(jq){ + return $.data(jq[0],"pagination").options; + },loading:function(jq){ + return jq.each(function(){ + _c6(this,true); + }); + },loaded:function(jq){ + return jq.each(function(){ + _c6(this,false); + }); + },refresh:function(jq,_cf){ + return jq.each(function(){ + _bd(this,_cf); + }); + },select:function(jq,_d0){ + return jq.each(function(){ + _b9(this,_d0); + }); + }}; + $.fn.pagination.parseOptions=function(_d1){ + var t=$(_d1); + return $.extend({},$.parser.parseOptions(_d1,[{total:"number",pageSize:"number",pageNumber:"number",links:"number"},{loading:"boolean",showPageList:"boolean",showPageInfo:"boolean",showRefresh:"boolean"}]),{pageList:(t.attr("pageList")?eval(t.attr("pageList")):undefined)}); + }; + $.fn.pagination.defaults={total:1,pageSize:10,pageNumber:1,pageList:[10,20,30,50],loading:false,buttons:null,showPageList:true,showPageInfo:true,showRefresh:true,links:10,layout:["list","sep","first","prev","sep","manual","sep","next","last","sep","refresh","info"],onSelectPage:function(_d2,_d3){ + },onBeforeRefresh:function(_d4,_d5){ + },onRefresh:function(_d6,_d7){ + },onChangePageSize:function(_d8){ + },beforePageText:"Page",afterPageText:"of {pages}",displayMsg:"Displaying {from} to {to} of {total} items",nav:{first:{iconCls:"pagination-first",handler:function(){ + var _d9=$(this).pagination("options"); + if(_d9.pageNumber>1){ + $(this).pagination("select",1); + } + }},prev:{iconCls:"pagination-prev",handler:function(){ + var _da=$(this).pagination("options"); + if(_da.pageNumber>1){ + $(this).pagination("select",_da.pageNumber-1); + } + }},next:{iconCls:"pagination-next",handler:function(){ + var _db=$(this).pagination("options"); + var _dc=Math.ceil(_db.total/_db.pageSize); + if(_db.pageNumber<_dc){ + $(this).pagination("select",_db.pageNumber+1); + } + }},last:{iconCls:"pagination-last",handler:function(){ + var _dd=$(this).pagination("options"); + var _de=Math.ceil(_dd.total/_dd.pageSize); + if(_dd.pageNumber<_de){ + $(this).pagination("select",_de); + } + }},refresh:{iconCls:"pagination-refresh",handler:function(){ + var _df=$(this).pagination("options"); + if(_df.onBeforeRefresh.call(this,_df.pageNumber,_df.pageSize)!=false){ + $(this).pagination("select",_df.pageNumber); + _df.onRefresh.call(this,_df.pageNumber,_df.pageSize); + } + }}}}; +})(jQuery); +(function($){ + function _e0(_e1){ + var _e2=$(_e1); + _e2.addClass("tree"); + return _e2; + }; + function _e3(_e4){ + var _e5=$.data(_e4,"tree").options; + $(_e4).unbind().bind("mouseover",function(e){ + var tt=$(e.target); + var _e6=tt.closest("div.tree-node"); + if(!_e6.length){ + return; + } + _e6.addClass("tree-node-hover"); + if(tt.hasClass("tree-hit")){ + if(tt.hasClass("tree-expanded")){ + tt.addClass("tree-expanded-hover"); + }else{ + tt.addClass("tree-collapsed-hover"); + } + } + e.stopPropagation(); + }).bind("mouseout",function(e){ + var tt=$(e.target); + var _e7=tt.closest("div.tree-node"); + if(!_e7.length){ + return; + } + _e7.removeClass("tree-node-hover"); + if(tt.hasClass("tree-hit")){ + if(tt.hasClass("tree-expanded")){ + tt.removeClass("tree-expanded-hover"); + }else{ + tt.removeClass("tree-collapsed-hover"); + } + } + e.stopPropagation(); + }).bind("click",function(e){ + var tt=$(e.target); + var _e8=tt.closest("div.tree-node"); + if(!_e8.length){ + return; + } + if(tt.hasClass("tree-hit")){ + _146(_e4,_e8[0]); + return false; + }else{ + if(tt.hasClass("tree-checkbox")){ + _10d(_e4,_e8[0]); + return false; + }else{ + _189(_e4,_e8[0]); + _e5.onClick.call(_e4,_eb(_e4,_e8[0])); + } + } + e.stopPropagation(); + }).bind("dblclick",function(e){ + var _e9=$(e.target).closest("div.tree-node"); + if(!_e9.length){ + return; + } + _189(_e4,_e9[0]); + _e5.onDblClick.call(_e4,_eb(_e4,_e9[0])); + e.stopPropagation(); + }).bind("contextmenu",function(e){ + var _ea=$(e.target).closest("div.tree-node"); + if(!_ea.length){ + return; + } + _e5.onContextMenu.call(_e4,e,_eb(_e4,_ea[0])); + e.stopPropagation(); + }); + }; + function _ec(_ed){ + var _ee=$.data(_ed,"tree").options; + _ee.dnd=false; + var _ef=$(_ed).find("div.tree-node"); + _ef.draggable("disable"); + _ef.css("cursor","pointer"); + }; + function _f0(_f1){ + var _f2=$.data(_f1,"tree"); + var _f3=_f2.options; + var _f4=_f2.tree; + _f2.disabledNodes=[]; + _f3.dnd=true; + _f4.find("div.tree-node").draggable({disabled:false,revert:true,cursor:"pointer",proxy:function(_f5){ + var p=$("
").appendTo("body"); + p.html(" "+$(_f5).find(".tree-title").html()); + p.hide(); + return p; + },deltaX:15,deltaY:15,onBeforeDrag:function(e){ + if(_f3.onBeforeDrag.call(_f1,_eb(_f1,this))==false){ + return false; + } + if($(e.target).hasClass("tree-hit")||$(e.target).hasClass("tree-checkbox")){ + return false; + } + if(e.which!=1){ + return false; + } + var _f6=$(this).find("span.tree-indent"); + if(_f6.length){ + e.data.offsetWidth-=_f6.length*_f6.width(); + } + },onStartDrag:function(e){ + $(this).next("ul").find("div.tree-node").each(function(){ + $(this).droppable("disable"); + _f2.disabledNodes.push(this); + }); + $(this).draggable("proxy").css({left:-10000,top:-10000}); + _f3.onStartDrag.call(_f1,_eb(_f1,this)); + var _f7=_eb(_f1,this); + if(_f7.id==undefined){ + _f7.id="easyui_tree_node_id_temp"; + _12d(_f1,_f7); + } + _f2.draggingNodeId=_f7.id; + },onDrag:function(e){ + var x1=e.pageX,y1=e.pageY,x2=e.data.startX,y2=e.data.startY; + var d=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); + if(d>3){ + $(this).draggable("proxy").show(); + } + this.pageY=e.pageY; + },onStopDrag:function(){ + for(var i=0;i<_f2.disabledNodes.length;i++){ + $(_f2.disabledNodes[i]).droppable("enable"); + } + _f2.disabledNodes=[]; + var _f8=_183(_f1,_f2.draggingNodeId); + if(_f8&&_f8.id=="easyui_tree_node_id_temp"){ + _f8.id=""; + _12d(_f1,_f8); + } + _f3.onStopDrag.call(_f1,_f8); + }}).droppable({accept:"div.tree-node",onDragEnter:function(e,_f9){ + if(_f3.onDragEnter.call(_f1,this,_fa(_f9))==false){ + _fb(_f9,false); + $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); + $(this).droppable("disable"); + _f2.disabledNodes.push(this); + } + },onDragOver:function(e,_fc){ + if($(this).droppable("options").disabled){ + return; + } + var _fd=_fc.pageY; + var top=$(this).offset().top; + var _fe=top+$(this).outerHeight(); + _fb(_fc,true); + $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); + if(_fd>top+(_fe-top)/2){ + if(_fe-_fd<5){ + $(this).addClass("tree-node-bottom"); + }else{ + $(this).addClass("tree-node-append"); + } + }else{ + if(_fd-top<5){ + $(this).addClass("tree-node-top"); + }else{ + $(this).addClass("tree-node-append"); + } + } + if(_f3.onDragOver.call(_f1,this,_fa(_fc))==false){ + _fb(_fc,false); + $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); + $(this).droppable("disable"); + _f2.disabledNodes.push(this); + } + },onDragLeave:function(e,_ff){ + _fb(_ff,false); + $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); + _f3.onDragLeave.call(_f1,this,_fa(_ff)); + },onDrop:function(e,_100){ + var dest=this; + var _101,_102; + if($(this).hasClass("tree-node-append")){ + _101=_103; + _102="append"; + }else{ + _101=_104; + _102=$(this).hasClass("tree-node-top")?"top":"bottom"; + } + if(_f3.onBeforeDrop.call(_f1,dest,_fa(_100),_102)==false){ + $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); + return; + } + _101(_100,dest,_102); + $(this).removeClass("tree-node-append tree-node-top tree-node-bottom"); + }}); + function _fa(_105,pop){ + return $(_105).closest("ul.tree").tree(pop?"pop":"getData",_105); + }; + function _fb(_106,_107){ + var icon=$(_106).draggable("proxy").find("span.tree-dnd-icon"); + icon.removeClass("tree-dnd-yes tree-dnd-no").addClass(_107?"tree-dnd-yes":"tree-dnd-no"); + }; + function _103(_108,dest){ + if(_eb(_f1,dest).state=="closed"){ + _13e(_f1,dest,function(){ + _109(); + }); + }else{ + _109(); + } + function _109(){ + var node=_fa(_108,true); + $(_f1).tree("append",{parent:dest,data:[node]}); + _f3.onDrop.call(_f1,dest,node,"append"); + }; + }; + function _104(_10a,dest,_10b){ + var _10c={}; + if(_10b=="top"){ + _10c.before=dest; + }else{ + _10c.after=dest; + } + var node=_fa(_10a,true); + _10c.data=node; + $(_f1).tree("insert",_10c); + _f3.onDrop.call(_f1,dest,node,_10b); + }; + }; + function _10d(_10e,_10f,_110,_111){ + var _112=$.data(_10e,"tree"); + var opts=_112.options; + if(!opts.checkbox){ + return; + } + var _113=_eb(_10e,_10f); + if(!_113.checkState){ + return; + } + var ck=$(_10f).find(".tree-checkbox"); + if(_110==undefined){ + if(ck.hasClass("tree-checkbox1")){ + _110=false; + }else{ + if(ck.hasClass("tree-checkbox0")){ + _110=true; + }else{ + if(_113._checked==undefined){ + _113._checked=$(_10f).find(".tree-checkbox").hasClass("tree-checkbox1"); + } + _110=!_113._checked; + } + } + } + _113._checked=_110; + if(_110){ + if(ck.hasClass("tree-checkbox1")){ + return; + } + }else{ + if(ck.hasClass("tree-checkbox0")){ + return; + } + } + if(!_111){ + if(opts.onBeforeCheck.call(_10e,_113,_110)==false){ + return; + } + } + if(opts.cascadeCheck){ + _114(_10e,_113,_110); + _115(_10e,_113); + }else{ + _116(_10e,_113,_110?"1":"0"); + } + if(!_111){ + opts.onCheck.call(_10e,_113,_110); + } + }; + function _114(_117,_118,_119){ + var opts=$.data(_117,"tree").options; + var flag=_119?1:0; + _116(_117,_118,flag); + if(opts.deepCheck){ + $.easyui.forEach(_118.children||[],true,function(n){ + _116(_117,n,flag); + }); + }else{ + var _11a=[]; + if(_118.children&&_118.children.length){ + _11a.push(_118); + } + $.easyui.forEach(_118.children||[],true,function(n){ + if(!n.hidden){ + _116(_117,n,flag); + if(n.children&&n.children.length){ + _11a.push(n); + } + } + }); + for(var i=_11a.length-1;i>=0;i--){ + var node=_11a[i]; + _116(_117,node,_11b(node)); + } + } + }; + function _116(_11c,_11d,flag){ + var opts=$.data(_11c,"tree").options; + if(!_11d.checkState||flag==undefined){ + return; + } + if(_11d.hidden&&!opts.deepCheck){ + return; + } + var ck=$("#"+_11d.domId).find(".tree-checkbox"); + _11d.checkState=["unchecked","checked","indeterminate"][flag]; + _11d.checked=(_11d.checkState=="checked"); + ck.removeClass("tree-checkbox0 tree-checkbox1 tree-checkbox2"); + ck.addClass("tree-checkbox"+flag); + }; + function _115(_11e,_11f){ + var pd=_120(_11e,$("#"+_11f.domId)[0]); + if(pd){ + _116(_11e,pd,_11b(pd)); + _115(_11e,pd); + } + }; + function _11b(row){ + var c0=0; + var c1=0; + var len=0; + $.easyui.forEach(row.children||[],false,function(r){ + if(r.checkState){ + len++; + if(r.checkState=="checked"){ + c1++; + }else{ + if(r.checkState=="unchecked"){ + c0++; + } + } + } + }); + if(len==0){ + return undefined; + } + var flag=0; + if(c0==len){ + flag=0; + }else{ + if(c1==len){ + flag=1; + }else{ + flag=2; + } + } + return flag; + }; + function _121(_122,_123){ + var opts=$.data(_122,"tree").options; + if(!opts.checkbox){ + return; + } + var node=$(_123); + var ck=node.find(".tree-checkbox"); + var _124=_eb(_122,_123); + if(opts.view.hasCheckbox(_122,_124)){ + if(!ck.length){ + _124.checkState=_124.checkState||"unchecked"; + $("").insertBefore(node.find(".tree-title")); + } + if(_124.checkState=="checked"){ + _10d(_122,_123,true,true); + }else{ + if(_124.checkState=="unchecked"){ + _10d(_122,_123,false,true); + }else{ + var flag=_11b(_124); + if(flag===0){ + _10d(_122,_123,false,true); + }else{ + if(flag===1){ + _10d(_122,_123,true,true); + } + } + } + } + }else{ + ck.remove(); + _124.checkState=undefined; + _124.checked=undefined; + _115(_122,_124); + } + }; + function _125(_126,ul,data,_127,_128){ + var _129=$.data(_126,"tree"); + var opts=_129.options; + var _12a=$(ul).prevAll("div.tree-node:first"); + data=opts.loadFilter.call(_126,data,_12a[0]); + var _12b=_12c(_126,"domId",_12a.attr("id")); + if(!_127){ + _12b?_12b.children=data:_129.data=data; + $(ul).empty(); + }else{ + if(_12b){ + _12b.children?_12b.children=_12b.children.concat(data):_12b.children=data; + }else{ + _129.data=_129.data.concat(data); + } + } + opts.view.render.call(opts.view,_126,ul,data); + if(opts.dnd){ + _f0(_126); + } + if(_12b){ + _12d(_126,_12b); + } + for(var i=0;i<_129.tmpIds.length;i++){ + _10d(_126,$("#"+_129.tmpIds[i])[0],true,true); + } + _129.tmpIds=[]; + setTimeout(function(){ + _12e(_126,_126); + },0); + if(!_128){ + opts.onLoadSuccess.call(_126,_12b,data); + } + }; + function _12e(_12f,ul,_130){ + var opts=$.data(_12f,"tree").options; + if(opts.lines){ + $(_12f).addClass("tree-lines"); + }else{ + $(_12f).removeClass("tree-lines"); + return; + } + if(!_130){ + _130=true; + $(_12f).find("span.tree-indent").removeClass("tree-line tree-join tree-joinbottom"); + $(_12f).find("div.tree-node").removeClass("tree-node-last tree-root-first tree-root-one"); + var _131=$(_12f).tree("getRoots"); + if(_131.length>1){ + $(_131[0].target).addClass("tree-root-first"); + }else{ + if(_131.length==1){ + $(_131[0].target).addClass("tree-root-one"); + } + } + } + $(ul).children("li").each(function(){ + var node=$(this).children("div.tree-node"); + var ul=node.next("ul"); + if(ul.length){ + if($(this).next().length){ + _132(node); + } + _12e(_12f,ul,_130); + }else{ + _133(node); + } + }); + var _134=$(ul).children("li:last").children("div.tree-node").addClass("tree-node-last"); + _134.children("span.tree-join").removeClass("tree-join").addClass("tree-joinbottom"); + function _133(node,_135){ + var icon=node.find("span.tree-icon"); + icon.prev("span.tree-indent").addClass("tree-join"); + }; + function _132(node){ + var _136=node.find("span.tree-indent, span.tree-hit").length; + node.next().find("div.tree-node").each(function(){ + $(this).children("span:eq("+(_136-1)+")").addClass("tree-line"); + }); + }; + }; + function _137(_138,ul,_139,_13a){ + var opts=$.data(_138,"tree").options; + _139=$.extend({},opts.queryParams,_139||{}); + var _13b=null; + if(_138!=ul){ + var node=$(ul).prev(); + _13b=_eb(_138,node[0]); + } + if(opts.onBeforeLoad.call(_138,_13b,_139)==false){ + return; + } + var _13c=$(ul).prev().children("span.tree-folder"); + _13c.addClass("tree-loading"); + var _13d=opts.loader.call(_138,_139,function(data){ + _13c.removeClass("tree-loading"); + _125(_138,ul,data); + if(_13a){ + _13a(); + } + },function(){ + _13c.removeClass("tree-loading"); + opts.onLoadError.apply(_138,arguments); + if(_13a){ + _13a(); + } + }); + if(_13d==false){ + _13c.removeClass("tree-loading"); + } + }; + function _13e(_13f,_140,_141){ + var opts=$.data(_13f,"tree").options; + var hit=$(_140).children("span.tree-hit"); + if(hit.length==0){ + return; + } + if(hit.hasClass("tree-expanded")){ + return; + } + var node=_eb(_13f,_140); + if(opts.onBeforeExpand.call(_13f,node)==false){ + return; + } + hit.removeClass("tree-collapsed tree-collapsed-hover").addClass("tree-expanded"); + hit.next().addClass("tree-folder-open"); + var ul=$(_140).next(); + if(ul.length){ + if(opts.animate){ + ul.slideDown("normal",function(){ + node.state="open"; + opts.onExpand.call(_13f,node); + if(_141){ + _141(); + } + }); + }else{ + ul.css("display","block"); + node.state="open"; + opts.onExpand.call(_13f,node); + if(_141){ + _141(); + } + } + }else{ + var _142=$("
    ").insertAfter(_140); + _137(_13f,_142[0],{id:node.id},function(){ + if(_142.is(":empty")){ + _142.remove(); + } + if(opts.animate){ + _142.slideDown("normal",function(){ + node.state="open"; + opts.onExpand.call(_13f,node); + if(_141){ + _141(); + } + }); + }else{ + _142.css("display","block"); + node.state="open"; + opts.onExpand.call(_13f,node); + if(_141){ + _141(); + } + } + }); + } + }; + function _143(_144,_145){ + var opts=$.data(_144,"tree").options; + var hit=$(_145).children("span.tree-hit"); + if(hit.length==0){ + return; + } + if(hit.hasClass("tree-collapsed")){ + return; + } + var node=_eb(_144,_145); + if(opts.onBeforeCollapse.call(_144,node)==false){ + return; + } + hit.removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed"); + hit.next().removeClass("tree-folder-open"); + var ul=$(_145).next(); + if(opts.animate){ + ul.slideUp("normal",function(){ + node.state="closed"; + opts.onCollapse.call(_144,node); + }); + }else{ + ul.css("display","none"); + node.state="closed"; + opts.onCollapse.call(_144,node); + } + }; + function _146(_147,_148){ + var hit=$(_148).children("span.tree-hit"); + if(hit.length==0){ + return; + } + if(hit.hasClass("tree-expanded")){ + _143(_147,_148); + }else{ + _13e(_147,_148); + } + }; + function _149(_14a,_14b){ + var _14c=_14d(_14a,_14b); + if(_14b){ + _14c.unshift(_eb(_14a,_14b)); + } + for(var i=0;i<_14c.length;i++){ + _13e(_14a,_14c[i].target); + } + }; + function _14e(_14f,_150){ + var _151=[]; + var p=_120(_14f,_150); + while(p){ + _151.unshift(p); + p=_120(_14f,p.target); + } + for(var i=0;i<_151.length;i++){ + _13e(_14f,_151[i].target); + } + }; + function _152(_153,_154){ + var c=$(_153).parent(); + while(c[0].tagName!="BODY"&&c.css("overflow-y")!="auto"){ + c=c.parent(); + } + var n=$(_154); + var ntop=n.offset().top; + if(c[0].tagName!="BODY"){ + var ctop=c.offset().top; + if(ntopctop+c.outerHeight()-18){ + c.scrollTop(c.scrollTop()+ntop+n.outerHeight()-ctop-c.outerHeight()+18); + } + } + }else{ + c.scrollTop(ntop); + } + }; + function _155(_156,_157){ + var _158=_14d(_156,_157); + if(_157){ + _158.unshift(_eb(_156,_157)); + } + for(var i=0;i<_158.length;i++){ + _143(_156,_158[i].target); + } + }; + function _159(_15a,_15b){ + var node=$(_15b.parent); + var data=_15b.data; + if(!data){ + return; + } + data=$.isArray(data)?data:[data]; + if(!data.length){ + return; + } + var ul; + if(node.length==0){ + ul=$(_15a); + }else{ + if(_15c(_15a,node[0])){ + var _15d=node.find("span.tree-icon"); + _15d.removeClass("tree-file").addClass("tree-folder tree-folder-open"); + var hit=$("").insertBefore(_15d); + if(hit.prev().length){ + hit.prev().remove(); + } + } + ul=node.next(); + if(!ul.length){ + ul=$("
      ").insertAfter(node); + } + } + _125(_15a,ul[0],data,true,true); + }; + function _15e(_15f,_160){ + var ref=_160.before||_160.after; + var _161=_120(_15f,ref); + var data=_160.data; + if(!data){ + return; + } + data=$.isArray(data)?data:[data]; + if(!data.length){ + return; + } + _159(_15f,{parent:(_161?_161.target:null),data:data}); + var _162=_161?_161.children:$(_15f).tree("getRoots"); + for(var i=0;i<_162.length;i++){ + if(_162[i].domId==$(ref).attr("id")){ + for(var j=data.length-1;j>=0;j--){ + _162.splice((_160.before?i:(i+1)),0,data[j]); + } + _162.splice(_162.length-data.length,data.length); + break; + } + } + var li=$(); + for(var i=0;i").prependTo(node); + node.next().remove(); + } + _12d(_164,_166); + } + _12e(_164,_164); + function del(_167){ + var id=$(_167).attr("id"); + var _168=_120(_164,_167); + var cc=_168?_168.children:$.data(_164,"tree").data; + for(var i=0;i").appendTo(nt); + _192.val(node.text).focus(); + _192.width(_191+20); + _192._outerHeight(18); + _192.bind("click",function(e){ + return false; + }).bind("mousedown",function(e){ + e.stopPropagation(); + }).bind("mousemove",function(e){ + e.stopPropagation(); + }).bind("keydown",function(e){ + if(e.keyCode==13){ + _193(_18f,_190); + return false; + }else{ + if(e.keyCode==27){ + _197(_18f,_190); + return false; + } + } + }).bind("blur",function(e){ + e.stopPropagation(); + _193(_18f,_190); + }); + }; + function _193(_194,_195){ + var opts=$.data(_194,"tree").options; + $(_195).css("position",""); + var _196=$(_195).find("input.tree-editor"); + var val=_196.val(); + _196.remove(); + var node=_eb(_194,_195); + node.text=val; + _12d(_194,node); + opts.onAfterEdit.call(_194,node); + }; + function _197(_198,_199){ + var opts=$.data(_198,"tree").options; + $(_199).css("position",""); + $(_199).find("input.tree-editor").remove(); + var node=_eb(_198,_199); + _12d(_198,node); + opts.onCancelEdit.call(_198,node); + }; + function _19a(_19b,q){ + var _19c=$.data(_19b,"tree"); + var opts=_19c.options; + var ids={}; + $.easyui.forEach(_19c.data,true,function(node){ + if(opts.filter.call(_19b,q,node)){ + $("#"+node.domId).removeClass("tree-node-hidden"); + ids[node.domId]=1; + node.hidden=false; + }else{ + $("#"+node.domId).addClass("tree-node-hidden"); + node.hidden=true; + } + }); + for(var id in ids){ + _19d(id); + } + function _19d(_19e){ + var p=$(_19b).tree("getParent",$("#"+_19e)[0]); + while(p){ + $(p.target).removeClass("tree-node-hidden"); + p.hidden=false; + p=$(_19b).tree("getParent",p.target); + } + }; + }; + $.fn.tree=function(_19f,_1a0){ + if(typeof _19f=="string"){ + return $.fn.tree.methods[_19f](this,_1a0); + } + var _19f=_19f||{}; + return this.each(function(){ + var _1a1=$.data(this,"tree"); + var opts; + if(_1a1){ + opts=$.extend(_1a1.options,_19f); + _1a1.options=opts; + }else{ + opts=$.extend({},$.fn.tree.defaults,$.fn.tree.parseOptions(this),_19f); + $.data(this,"tree",{options:opts,tree:_e0(this),data:[],tmpIds:[]}); + var data=$.fn.tree.parseData(this); + if(data.length){ + _125(this,this,data); + } + } + _e3(this); + if(opts.data){ + _125(this,this,$.extend(true,[],opts.data)); + } + _137(this,this); + }); + }; + $.fn.tree.methods={options:function(jq){ + return $.data(jq[0],"tree").options; + },loadData:function(jq,data){ + return jq.each(function(){ + _125(this,this,data); + }); + },getNode:function(jq,_1a2){ + return _eb(jq[0],_1a2); + },getData:function(jq,_1a3){ + return _17e(jq[0],_1a3); + },reload:function(jq,_1a4){ + return jq.each(function(){ + if(_1a4){ + var node=$(_1a4); + var hit=node.children("span.tree-hit"); + hit.removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed"); + node.next().remove(); + _13e(this,_1a4); + }else{ + $(this).empty(); + _137(this,this); + } + }); + },getRoot:function(jq,_1a5){ + return _16b(jq[0],_1a5); + },getRoots:function(jq){ + return _16f(jq[0]); + },getParent:function(jq,_1a6){ + return _120(jq[0],_1a6); + },getChildren:function(jq,_1a7){ + return _14d(jq[0],_1a7); + },getChecked:function(jq,_1a8){ + return _178(jq[0],_1a8); + },getSelected:function(jq){ + return _17c(jq[0]); + },isLeaf:function(jq,_1a9){ + return _15c(jq[0],_1a9); + },find:function(jq,id){ + return _183(jq[0],id); + },select:function(jq,_1aa){ + return jq.each(function(){ + _189(this,_1aa); + }); + },check:function(jq,_1ab){ + return jq.each(function(){ + _10d(this,_1ab,true); + }); + },uncheck:function(jq,_1ac){ + return jq.each(function(){ + _10d(this,_1ac,false); + }); + },collapse:function(jq,_1ad){ + return jq.each(function(){ + _143(this,_1ad); + }); + },expand:function(jq,_1ae){ + return jq.each(function(){ + _13e(this,_1ae); + }); + },collapseAll:function(jq,_1af){ + return jq.each(function(){ + _155(this,_1af); + }); + },expandAll:function(jq,_1b0){ + return jq.each(function(){ + _149(this,_1b0); + }); + },expandTo:function(jq,_1b1){ + return jq.each(function(){ + _14e(this,_1b1); + }); + },scrollTo:function(jq,_1b2){ + return jq.each(function(){ + _152(this,_1b2); + }); + },toggle:function(jq,_1b3){ + return jq.each(function(){ + _146(this,_1b3); + }); + },append:function(jq,_1b4){ + return jq.each(function(){ + _159(this,_1b4); + }); + },insert:function(jq,_1b5){ + return jq.each(function(){ + _15e(this,_1b5); + }); + },remove:function(jq,_1b6){ + return jq.each(function(){ + _163(this,_1b6); + }); + },pop:function(jq,_1b7){ + var node=jq.tree("getData",_1b7); + jq.tree("remove",_1b7); + return node; + },update:function(jq,_1b8){ + return jq.each(function(){ + _12d(this,$.extend({},_1b8,{checkState:_1b8.checked?"checked":(_1b8.checked===false?"unchecked":undefined)})); + }); + },enableDnd:function(jq){ + return jq.each(function(){ + _f0(this); + }); + },disableDnd:function(jq){ + return jq.each(function(){ + _ec(this); + }); + },beginEdit:function(jq,_1b9){ + return jq.each(function(){ + _18e(this,_1b9); + }); + },endEdit:function(jq,_1ba){ + return jq.each(function(){ + _193(this,_1ba); + }); + },cancelEdit:function(jq,_1bb){ + return jq.each(function(){ + _197(this,_1bb); + }); + },doFilter:function(jq,q){ + return jq.each(function(){ + _19a(this,q); + }); + }}; + $.fn.tree.parseOptions=function(_1bc){ + var t=$(_1bc); + return $.extend({},$.parser.parseOptions(_1bc,["url","method",{checkbox:"boolean",cascadeCheck:"boolean",onlyLeafCheck:"boolean"},{animate:"boolean",lines:"boolean",dnd:"boolean"}])); + }; + $.fn.tree.parseData=function(_1bd){ + var data=[]; + _1be(data,$(_1bd)); + return data; + function _1be(aa,tree){ + tree.children("li").each(function(){ + var node=$(this); + var item=$.extend({},$.parser.parseOptions(this,["id","iconCls","state"]),{checked:(node.attr("checked")?true:undefined)}); + item.text=node.children("span").html(); + if(!item.text){ + item.text=node.html(); + } + var _1bf=node.children("ul"); + if(_1bf.length){ + item.children=[]; + _1be(item.children,_1bf); + } + aa.push(item); + }); + }; + }; + var _1c0=1; + var _1c1={render:function(_1c2,ul,data){ + var _1c3=$.data(_1c2,"tree"); + var opts=_1c3.options; + var _1c4=$(ul).prev(".tree-node"); + var _1c5=_1c4.length?$(_1c2).tree("getNode",_1c4[0]):null; + var _1c6=_1c4.find("span.tree-indent, span.tree-hit").length; + var cc=_1c7.call(this,_1c6,data); + $(ul).append(cc.join("")); + function _1c7(_1c8,_1c9){ + var cc=[]; + for(var i=0;i<_1c9.length;i++){ + var item=_1c9[i]; + if(item.state!="open"&&item.state!="closed"){ + item.state="open"; + } + item.domId="_easyui_tree_"+_1c0++; + cc.push("
    • "); + cc.push("
      "); + for(var j=0;j<_1c8;j++){ + cc.push(""); + } + if(item.state=="closed"){ + cc.push(""); + cc.push(""); + }else{ + if(item.children&&item.children.length){ + cc.push(""); + cc.push(""); + }else{ + cc.push(""); + cc.push(""); + } + } + if(this.hasCheckbox(_1c2,item)){ + var flag=0; + if(_1c5&&_1c5.checkState=="checked"&&opts.cascadeCheck){ + flag=1; + item.checked=true; + }else{ + if(item.checked){ + $.easyui.addArrayItem(_1c3.tmpIds,item.domId); + } + } + item.checkState=flag?"checked":"unchecked"; + cc.push(""); + }else{ + item.checkState=undefined; + item.checked=undefined; + } + cc.push(""+opts.formatter.call(_1c2,item)+""); + cc.push("
      "); + if(item.children&&item.children.length){ + var tmp=_1c7.call(this,_1c8+1,item.children); + cc.push("
        "); + cc=cc.concat(tmp); + cc.push("
      "); + } + cc.push("
    • "); + } + return cc; + }; + },hasCheckbox:function(_1ca,item){ + var _1cb=$.data(_1ca,"tree"); + var opts=_1cb.options; + if(opts.checkbox){ + if($.isFunction(opts.checkbox)){ + if(opts.checkbox.call(_1ca,item)){ + return true; + }else{ + return false; + } + }else{ + if(opts.onlyLeafCheck){ + if(item.state=="open"&&!(item.children&&item.children.length)){ + return true; + } + }else{ + return true; + } + } + } + return false; + }}; + $.fn.tree.defaults={url:null,method:"post",animate:false,checkbox:false,cascadeCheck:true,onlyLeafCheck:false,lines:false,dnd:false,data:null,queryParams:{},formatter:function(node){ + return node.text; + },filter:function(q,node){ + var qq=[]; + $.map($.isArray(q)?q:[q],function(q){ + q=$.trim(q); + if(q){ + qq.push(q); + } + }); + for(var i=0;i=0){ + return true; + } + } + return !qq.length; + },loader:function(_1cd,_1ce,_1cf){ + var opts=$(this).tree("options"); + if(!opts.url){ + return false; + } + $.ajax({type:opts.method,url:opts.url,data:_1cd,dataType:"json",success:function(data){ + _1ce(data); + },error:function(){ + _1cf.apply(this,arguments); + }}); + },loadFilter:function(data,_1d0){ + return data; + },view:_1c1,onBeforeLoad:function(node,_1d1){ + },onLoadSuccess:function(node,data){ + },onLoadError:function(){ + },onClick:function(node){ + },onDblClick:function(node){ + },onBeforeExpand:function(node){ + },onExpand:function(node){ + },onBeforeCollapse:function(node){ + },onCollapse:function(node){ + },onBeforeCheck:function(node,_1d2){ + },onCheck:function(node,_1d3){ + },onBeforeSelect:function(node){ + },onSelect:function(node){ + },onContextMenu:function(e,node){ + },onBeforeDrag:function(node){ + },onStartDrag:function(node){ + },onStopDrag:function(node){ + },onDragEnter:function(_1d4,_1d5){ + },onDragOver:function(_1d6,_1d7){ + },onDragLeave:function(_1d8,_1d9){ + },onBeforeDrop:function(_1da,_1db,_1dc){ + },onDrop:function(_1dd,_1de,_1df){ + },onBeforeEdit:function(node){ + },onAfterEdit:function(node){ + },onCancelEdit:function(node){ + }}; +})(jQuery); +(function($){ + function init(_1e0){ + $(_1e0).addClass("progressbar"); + $(_1e0).html("
      "); + $(_1e0).bind("_resize",function(e,_1e1){ + if($(this).hasClass("easyui-fluid")||_1e1){ + _1e2(_1e0); + } + return false; + }); + return $(_1e0); + }; + function _1e2(_1e3,_1e4){ + var opts=$.data(_1e3,"progressbar").options; + var bar=$.data(_1e3,"progressbar").bar; + if(_1e4){ + opts.width=_1e4; + } + bar._size(opts); + bar.find("div.progressbar-text").css("width",bar.width()); + bar.find("div.progressbar-text,div.progressbar-value").css({height:bar.height()+"px",lineHeight:bar.height()+"px"}); + }; + $.fn.progressbar=function(_1e5,_1e6){ + if(typeof _1e5=="string"){ + var _1e7=$.fn.progressbar.methods[_1e5]; + if(_1e7){ + return _1e7(this,_1e6); + } + } + _1e5=_1e5||{}; + return this.each(function(){ + var _1e8=$.data(this,"progressbar"); + if(_1e8){ + $.extend(_1e8.options,_1e5); + }else{ + _1e8=$.data(this,"progressbar",{options:$.extend({},$.fn.progressbar.defaults,$.fn.progressbar.parseOptions(this),_1e5),bar:init(this)}); + } + $(this).progressbar("setValue",_1e8.options.value); + _1e2(this); + }); + }; + $.fn.progressbar.methods={options:function(jq){ + return $.data(jq[0],"progressbar").options; + },resize:function(jq,_1e9){ + return jq.each(function(){ + _1e2(this,_1e9); + }); + },getValue:function(jq){ + return $.data(jq[0],"progressbar").options.value; + },setValue:function(jq,_1ea){ + if(_1ea<0){ + _1ea=0; + } + if(_1ea>100){ + _1ea=100; + } + return jq.each(function(){ + var opts=$.data(this,"progressbar").options; + var text=opts.text.replace(/{value}/,_1ea); + var _1eb=opts.value; + opts.value=_1ea; + $(this).find("div.progressbar-value").width(_1ea+"%"); + $(this).find("div.progressbar-text").html(text); + if(_1eb!=_1ea){ + opts.onChange.call(this,_1ea,_1eb); + } + }); + }}; + $.fn.progressbar.parseOptions=function(_1ec){ + return $.extend({},$.parser.parseOptions(_1ec,["width","height","text",{value:"number"}])); + }; + $.fn.progressbar.defaults={width:"auto",height:22,value:0,text:"{value}%",onChange:function(_1ed,_1ee){ + }}; +})(jQuery); +(function($){ + function init(_1ef){ + $(_1ef).addClass("tooltip-f"); + }; + function _1f0(_1f1){ + var opts=$.data(_1f1,"tooltip").options; + $(_1f1).unbind(".tooltip").bind(opts.showEvent+".tooltip",function(e){ + $(_1f1).tooltip("show",e); + }).bind(opts.hideEvent+".tooltip",function(e){ + $(_1f1).tooltip("hide",e); + }).bind("mousemove.tooltip",function(e){ + if(opts.trackMouse){ + opts.trackMouseX=e.pageX; + opts.trackMouseY=e.pageY; + $(_1f1).tooltip("reposition"); + } + }); + }; + function _1f2(_1f3){ + var _1f4=$.data(_1f3,"tooltip"); + if(_1f4.showTimer){ + clearTimeout(_1f4.showTimer); + _1f4.showTimer=null; + } + if(_1f4.hideTimer){ + clearTimeout(_1f4.hideTimer); + _1f4.hideTimer=null; + } + }; + function _1f5(_1f6){ + var _1f7=$.data(_1f6,"tooltip"); + if(!_1f7||!_1f7.tip){ + return; + } + var opts=_1f7.options; + var tip=_1f7.tip; + var pos={left:-100000,top:-100000}; + if($(_1f6).is(":visible")){ + pos=_1f8(opts.position); + if(opts.position=="top"&&pos.top<0){ + pos=_1f8("bottom"); + }else{ + if((opts.position=="bottom")&&(pos.top+tip._outerHeight()>$(window)._outerHeight()+$(document).scrollTop())){ + pos=_1f8("top"); + } + } + if(pos.left<0){ + if(opts.position=="left"){ + pos=_1f8("right"); + }else{ + $(_1f6).tooltip("arrow").css("left",tip._outerWidth()/2+pos.left); + pos.left=0; + } + }else{ + if(pos.left+tip._outerWidth()>$(window)._outerWidth()+$(document)._scrollLeft()){ + if(opts.position=="right"){ + pos=_1f8("left"); + }else{ + var left=pos.left; + pos.left=$(window)._outerWidth()+$(document)._scrollLeft()-tip._outerWidth(); + $(_1f6).tooltip("arrow").css("left",tip._outerWidth()/2-(pos.left-left)); + } + } + } + } + tip.css({left:pos.left,top:pos.top,zIndex:(opts.zIndex!=undefined?opts.zIndex:($.fn.window?$.fn.window.defaults.zIndex++:""))}); + opts.onPosition.call(_1f6,pos.left,pos.top); + function _1f8(_1f9){ + opts.position=_1f9||"bottom"; + tip.removeClass("tooltip-top tooltip-bottom tooltip-left tooltip-right").addClass("tooltip-"+opts.position); + var left,top; + var _1fa=$.isFunction(opts.deltaX)?opts.deltaX.call(_1f6,opts.position):opts.deltaX; + var _1fb=$.isFunction(opts.deltaY)?opts.deltaY.call(_1f6,opts.position):opts.deltaY; + if(opts.trackMouse){ + t=$(); + left=opts.trackMouseX+_1fa; + top=opts.trackMouseY+_1fb; + }else{ + var t=$(_1f6); + left=t.offset().left+_1fa; + top=t.offset().top+_1fb; + } + switch(opts.position){ + case "right": + left+=t._outerWidth()+12+(opts.trackMouse?12:0); + top-=(tip._outerHeight()-t._outerHeight())/2; + break; + case "left": + left-=tip._outerWidth()+12+(opts.trackMouse?12:0); + top-=(tip._outerHeight()-t._outerHeight())/2; + break; + case "top": + left-=(tip._outerWidth()-t._outerWidth())/2; + top-=tip._outerHeight()+12+(opts.trackMouse?12:0); + break; + case "bottom": + left-=(tip._outerWidth()-t._outerWidth())/2; + top+=t._outerHeight()+12+(opts.trackMouse?12:0); + break; + } + return {left:left,top:top}; + }; + }; + function _1fc(_1fd,e){ + var _1fe=$.data(_1fd,"tooltip"); + var opts=_1fe.options; + var tip=_1fe.tip; + if(!tip){ + tip=$("
      "+"
      "+"
      "+"
      "+"
      ").appendTo("body"); + _1fe.tip=tip; + _1ff(_1fd); + } + _1f2(_1fd); + _1fe.showTimer=setTimeout(function(){ + $(_1fd).tooltip("reposition"); + tip.show(); + opts.onShow.call(_1fd,e); + var _200=tip.children(".tooltip-arrow-outer"); + var _201=tip.children(".tooltip-arrow"); + var bc="border-"+opts.position+"-color"; + _200.add(_201).css({borderTopColor:"",borderBottomColor:"",borderLeftColor:"",borderRightColor:""}); + _200.css(bc,tip.css(bc)); + _201.css(bc,tip.css("backgroundColor")); + },opts.showDelay); + }; + function _202(_203,e){ + var _204=$.data(_203,"tooltip"); + if(_204&&_204.tip){ + _1f2(_203); + _204.hideTimer=setTimeout(function(){ + _204.tip.hide(); + _204.options.onHide.call(_203,e); + },_204.options.hideDelay); + } + }; + function _1ff(_205,_206){ + var _207=$.data(_205,"tooltip"); + var opts=_207.options; + if(_206){ + opts.content=_206; + } + if(!_207.tip){ + return; + } + var cc=typeof opts.content=="function"?opts.content.call(_205):opts.content; + _207.tip.children(".tooltip-content").html(cc); + opts.onUpdate.call(_205,cc); + }; + function _208(_209){ + var _20a=$.data(_209,"tooltip"); + if(_20a){ + _1f2(_209); + var opts=_20a.options; + if(_20a.tip){ + _20a.tip.remove(); + } + if(opts._title){ + $(_209).attr("title",opts._title); + } + $.removeData(_209,"tooltip"); + $(_209).unbind(".tooltip").removeClass("tooltip-f"); + opts.onDestroy.call(_209); + } + }; + $.fn.tooltip=function(_20b,_20c){ + if(typeof _20b=="string"){ + return $.fn.tooltip.methods[_20b](this,_20c); + } + _20b=_20b||{}; + return this.each(function(){ + var _20d=$.data(this,"tooltip"); + if(_20d){ + $.extend(_20d.options,_20b); + }else{ + $.data(this,"tooltip",{options:$.extend({},$.fn.tooltip.defaults,$.fn.tooltip.parseOptions(this),_20b)}); + init(this); + } + _1f0(this); + _1ff(this); + }); + }; + $.fn.tooltip.methods={options:function(jq){ + return $.data(jq[0],"tooltip").options; + },tip:function(jq){ + return $.data(jq[0],"tooltip").tip; + },arrow:function(jq){ + return jq.tooltip("tip").children(".tooltip-arrow-outer,.tooltip-arrow"); + },show:function(jq,e){ + return jq.each(function(){ + _1fc(this,e); + }); + },hide:function(jq,e){ + return jq.each(function(){ + _202(this,e); + }); + },update:function(jq,_20e){ + return jq.each(function(){ + _1ff(this,_20e); + }); + },reposition:function(jq){ + return jq.each(function(){ + _1f5(this); + }); + },destroy:function(jq){ + return jq.each(function(){ + _208(this); + }); + }}; + $.fn.tooltip.parseOptions=function(_20f){ + var t=$(_20f); + var opts=$.extend({},$.parser.parseOptions(_20f,["position","showEvent","hideEvent","content",{trackMouse:"boolean",deltaX:"number",deltaY:"number",showDelay:"number",hideDelay:"number"}]),{_title:t.attr("title")}); + t.attr("title",""); + if(!opts.content){ + opts.content=opts._title; + } + return opts; + }; + $.fn.tooltip.defaults={position:"bottom",content:null,trackMouse:false,deltaX:0,deltaY:0,showEvent:"mouseenter",hideEvent:"mouseleave",showDelay:200,hideDelay:100,onShow:function(e){ + },onHide:function(e){ + },onUpdate:function(_210){ + },onPosition:function(left,top){ + },onDestroy:function(){ + }}; +})(jQuery); +(function($){ + $.fn._remove=function(){ + return this.each(function(){ + $(this).remove(); + try{ + this.outerHTML=""; + } + catch(err){ + } + }); + }; + function _211(node){ + node._remove(); + }; + function _212(_213,_214){ + var _215=$.data(_213,"panel"); + var opts=_215.options; + var _216=_215.panel; + var _217=_216.children(".panel-header"); + var _218=_216.children(".panel-body"); + var _219=_216.children(".panel-footer"); + var _21a=(opts.halign=="left"||opts.halign=="right"); + if(_214){ + $.extend(opts,{width:_214.width,height:_214.height,minWidth:_214.minWidth,maxWidth:_214.maxWidth,minHeight:_214.minHeight,maxHeight:_214.maxHeight,left:_214.left,top:_214.top}); + } + _216._size(opts); + if(!_21a){ + _217._outerWidth(_216.width()); + } + _218._outerWidth(_216.width()); + if(!isNaN(parseInt(opts.height))){ + if(_21a){ + if(opts.header){ + var _21b=$(opts.header)._outerWidth(); + }else{ + _217.css("width",""); + var _21b=_217._outerWidth(); + } + var _21c=_217.find(".panel-title"); + _21b+=Math.min(_21c._outerWidth(),_21c._outerHeight()); + var _21d=_216.height(); + _217._outerWidth(_21b)._outerHeight(_21d); + _21c._outerWidth(_217.height()); + _218._outerWidth(_216.width()-_21b-_219._outerWidth())._outerHeight(_21d); + _219._outerHeight(_21d); + _218.css({left:"",right:""}).css(opts.halign,(_217.position()[opts.halign]+_21b)+"px"); + opts.panelCssWidth=_216.css("width"); + if(opts.collapsed){ + _216._outerWidth(_21b+_219._outerWidth()); + } + }else{ + _218._outerHeight(_216.height()-_217._outerHeight()-_219._outerHeight()); + } + }else{ + _218.css("height",""); + var min=$.parser.parseValue("minHeight",opts.minHeight,_216.parent()); + var max=$.parser.parseValue("maxHeight",opts.maxHeight,_216.parent()); + var _21e=_217._outerHeight()+_219._outerHeight()+_216._outerHeight()-_216.height(); + _218._size("minHeight",min?(min-_21e):""); + _218._size("maxHeight",max?(max-_21e):""); + } + _216.css({height:(_21a?undefined:""),minHeight:"",maxHeight:"",left:opts.left,top:opts.top}); + opts.onResize.apply(_213,[opts.width,opts.height]); + $(_213).panel("doLayout"); + }; + function _21f(_220,_221){ + var _222=$.data(_220,"panel"); + var opts=_222.options; + var _223=_222.panel; + if(_221){ + if(_221.left!=null){ + opts.left=_221.left; + } + if(_221.top!=null){ + opts.top=_221.top; + } + } + _223.css({left:opts.left,top:opts.top}); + _223.find(".tooltip-f").each(function(){ + $(this).tooltip("reposition"); + }); + opts.onMove.apply(_220,[opts.left,opts.top]); + }; + function _224(_225){ + $(_225).addClass("panel-body")._size("clear"); + var _226=$("
      ").insertBefore(_225); + _226[0].appendChild(_225); + _226.bind("_resize",function(e,_227){ + if($(this).hasClass("easyui-fluid")||_227){ + _212(_225); + } + return false; + }); + return _226; + }; + function _228(_229){ + var _22a=$.data(_229,"panel"); + var opts=_22a.options; + var _22b=_22a.panel; + _22b.css(opts.style); + _22b.addClass(opts.cls); + _22b.removeClass("panel-hleft panel-hright").addClass("panel-h"+opts.halign); + _22c(); + _22d(); + var _22e=$(_229).panel("header"); + var body=$(_229).panel("body"); + var _22f=$(_229).siblings(".panel-footer"); + if(opts.border){ + _22e.removeClass("panel-header-noborder"); + body.removeClass("panel-body-noborder"); + _22f.removeClass("panel-footer-noborder"); + }else{ + _22e.addClass("panel-header-noborder"); + body.addClass("panel-body-noborder"); + _22f.addClass("panel-footer-noborder"); + } + _22e.addClass(opts.headerCls); + body.addClass(opts.bodyCls); + $(_229).attr("id",opts.id||""); + if(opts.content){ + $(_229).panel("clear"); + $(_229).html(opts.content); + $.parser.parse($(_229)); + } + function _22c(){ + if(opts.noheader||(!opts.title&&!opts.header)){ + _211(_22b.children(".panel-header")); + _22b.children(".panel-body").addClass("panel-body-noheader"); + }else{ + if(opts.header){ + $(opts.header).addClass("panel-header").prependTo(_22b); + }else{ + var _230=_22b.children(".panel-header"); + if(!_230.length){ + _230=$("
      ").prependTo(_22b); + } + if(!$.isArray(opts.tools)){ + _230.find("div.panel-tool .panel-tool-a").appendTo(opts.tools); + } + _230.empty(); + var _231=$("
      ").html(opts.title).appendTo(_230); + if(opts.iconCls){ + _231.addClass("panel-with-icon"); + $("
      ").addClass(opts.iconCls).appendTo(_230); + } + if(opts.halign=="left"||opts.halign=="right"){ + _231.addClass("panel-title-"+opts.titleDirection); + } + var tool=$("
      ").appendTo(_230); + tool.bind("click",function(e){ + e.stopPropagation(); + }); + if(opts.tools){ + if($.isArray(opts.tools)){ + $.map(opts.tools,function(t){ + _232(tool,t.iconCls,eval(t.handler)); + }); + }else{ + $(opts.tools).children().each(function(){ + $(this).addClass($(this).attr("iconCls")).addClass("panel-tool-a").appendTo(tool); + }); + } + } + if(opts.collapsible){ + _232(tool,"panel-tool-collapse",function(){ + if(opts.collapsed==true){ + _252(_229,true); + }else{ + _243(_229,true); + } + }); + } + if(opts.minimizable){ + _232(tool,"panel-tool-min",function(){ + _258(_229); + }); + } + if(opts.maximizable){ + _232(tool,"panel-tool-max",function(){ + if(opts.maximized==true){ + _25b(_229); + }else{ + _242(_229); + } + }); + } + if(opts.closable){ + _232(tool,"panel-tool-close",function(){ + _244(_229); + }); + } + } + _22b.children("div.panel-body").removeClass("panel-body-noheader"); + } + }; + function _232(c,icon,_233){ + var a=$("").addClass(icon).appendTo(c); + a.bind("click",_233); + }; + function _22d(){ + if(opts.footer){ + $(opts.footer).addClass("panel-footer").appendTo(_22b); + $(_229).addClass("panel-body-nobottom"); + }else{ + _22b.children(".panel-footer").remove(); + $(_229).removeClass("panel-body-nobottom"); + } + }; + }; + function _234(_235,_236){ + var _237=$.data(_235,"panel"); + var opts=_237.options; + if(_238){ + opts.queryParams=_236; + } + if(!opts.href){ + return; + } + if(!_237.isLoaded||!opts.cache){ + var _238=$.extend({},opts.queryParams); + if(opts.onBeforeLoad.call(_235,_238)==false){ + return; + } + _237.isLoaded=false; + if(opts.loadingMessage){ + $(_235).panel("clear"); + $(_235).html($("
      ").html(opts.loadingMessage)); + } + opts.loader.call(_235,_238,function(data){ + var _239=opts.extractor.call(_235,data); + $(_235).panel("clear"); + $(_235).html(_239); + $.parser.parse($(_235)); + opts.onLoad.apply(_235,arguments); + _237.isLoaded=true; + },function(){ + opts.onLoadError.apply(_235,arguments); + }); + } + }; + function _23a(_23b){ + var t=$(_23b); + t.find(".combo-f").each(function(){ + $(this).combo("destroy"); + }); + t.find(".m-btn").each(function(){ + $(this).menubutton("destroy"); + }); + t.find(".s-btn").each(function(){ + $(this).splitbutton("destroy"); + }); + t.find(".tooltip-f").each(function(){ + $(this).tooltip("destroy"); + }); + t.children("div").each(function(){ + $(this)._size("unfit"); + }); + t.empty(); + }; + function _23c(_23d){ + $(_23d).panel("doLayout",true); + }; + function _23e(_23f,_240){ + var opts=$.data(_23f,"panel").options; + var _241=$.data(_23f,"panel").panel; + if(_240!=true){ + if(opts.onBeforeOpen.call(_23f)==false){ + return; + } + } + _241.stop(true,true); + if($.isFunction(opts.openAnimation)){ + opts.openAnimation.call(_23f,cb); + }else{ + switch(opts.openAnimation){ + case "slide": + _241.slideDown(opts.openDuration,cb); + break; + case "fade": + _241.fadeIn(opts.openDuration,cb); + break; + case "show": + _241.show(opts.openDuration,cb); + break; + default: + _241.show(); + cb(); + } + } + function cb(){ + opts.closed=false; + opts.minimized=false; + var tool=_241.children(".panel-header").find("a.panel-tool-restore"); + if(tool.length){ + opts.maximized=true; + } + opts.onOpen.call(_23f); + if(opts.maximized==true){ + opts.maximized=false; + _242(_23f); + } + if(opts.collapsed==true){ + opts.collapsed=false; + _243(_23f); + } + if(!opts.collapsed){ + _234(_23f); + _23c(_23f); + } + }; + }; + function _244(_245,_246){ + var _247=$.data(_245,"panel"); + var opts=_247.options; + var _248=_247.panel; + if(_246!=true){ + if(opts.onBeforeClose.call(_245)==false){ + return; + } + } + _248.find(".tooltip-f").each(function(){ + $(this).tooltip("hide"); + }); + _248.stop(true,true); + _248._size("unfit"); + if($.isFunction(opts.closeAnimation)){ + opts.closeAnimation.call(_245,cb); + }else{ + switch(opts.closeAnimation){ + case "slide": + _248.slideUp(opts.closeDuration,cb); + break; + case "fade": + _248.fadeOut(opts.closeDuration,cb); + break; + case "hide": + _248.hide(opts.closeDuration,cb); + break; + default: + _248.hide(); + cb(); + } + } + function cb(){ + opts.closed=true; + opts.onClose.call(_245); + }; + }; + function _249(_24a,_24b){ + var _24c=$.data(_24a,"panel"); + var opts=_24c.options; + var _24d=_24c.panel; + if(_24b!=true){ + if(opts.onBeforeDestroy.call(_24a)==false){ + return; + } + } + $(_24a).panel("clear").panel("clear","footer"); + _211(_24d); + opts.onDestroy.call(_24a); + }; + function _243(_24e,_24f){ + var opts=$.data(_24e,"panel").options; + var _250=$.data(_24e,"panel").panel; + var body=_250.children(".panel-body"); + var _251=_250.children(".panel-header"); + var tool=_251.find("a.panel-tool-collapse"); + if(opts.collapsed==true){ + return; + } + body.stop(true,true); + if(opts.onBeforeCollapse.call(_24e)==false){ + return; + } + tool.addClass("panel-tool-expand"); + if(_24f==true){ + if(opts.halign=="left"||opts.halign=="right"){ + _250.animate({width:_251._outerWidth()+_250.children(".panel-footer")._outerWidth()},function(){ + cb(); + }); + }else{ + body.slideUp("normal",function(){ + cb(); + }); + } + }else{ + if(opts.halign=="left"||opts.halign=="right"){ + _250._outerWidth(_251._outerWidth()+_250.children(".panel-footer")._outerWidth()); + } + cb(); + } + function cb(){ + body.hide(); + opts.collapsed=true; + opts.onCollapse.call(_24e); + }; + }; + function _252(_253,_254){ + var opts=$.data(_253,"panel").options; + var _255=$.data(_253,"panel").panel; + var body=_255.children(".panel-body"); + var tool=_255.children(".panel-header").find("a.panel-tool-collapse"); + if(opts.collapsed==false){ + return; + } + body.stop(true,true); + if(opts.onBeforeExpand.call(_253)==false){ + return; + } + tool.removeClass("panel-tool-expand"); + if(_254==true){ + if(opts.halign=="left"||opts.halign=="right"){ + body.show(); + _255.animate({width:opts.panelCssWidth},function(){ + cb(); + }); + }else{ + body.slideDown("normal",function(){ + cb(); + }); + } + }else{ + if(opts.halign=="left"||opts.halign=="right"){ + _255.css("width",opts.panelCssWidth); + } + cb(); + } + function cb(){ + body.show(); + opts.collapsed=false; + opts.onExpand.call(_253); + _234(_253); + _23c(_253); + }; + }; + function _242(_256){ + var opts=$.data(_256,"panel").options; + var _257=$.data(_256,"panel").panel; + var tool=_257.children(".panel-header").find("a.panel-tool-max"); + if(opts.maximized==true){ + return; + } + tool.addClass("panel-tool-restore"); + if(!$.data(_256,"panel").original){ + $.data(_256,"panel").original={width:opts.width,height:opts.height,left:opts.left,top:opts.top,fit:opts.fit}; + } + opts.left=0; + opts.top=0; + opts.fit=true; + _212(_256); + opts.minimized=false; + opts.maximized=true; + opts.onMaximize.call(_256); + }; + function _258(_259){ + var opts=$.data(_259,"panel").options; + var _25a=$.data(_259,"panel").panel; + _25a._size("unfit"); + _25a.hide(); + opts.minimized=true; + opts.maximized=false; + opts.onMinimize.call(_259); + }; + function _25b(_25c){ + var opts=$.data(_25c,"panel").options; + var _25d=$.data(_25c,"panel").panel; + var tool=_25d.children(".panel-header").find("a.panel-tool-max"); + if(opts.maximized==false){ + return; + } + _25d.show(); + tool.removeClass("panel-tool-restore"); + $.extend(opts,$.data(_25c,"panel").original); + _212(_25c); + opts.minimized=false; + opts.maximized=false; + $.data(_25c,"panel").original=null; + opts.onRestore.call(_25c); + }; + function _25e(_25f,_260){ + $.data(_25f,"panel").options.title=_260; + $(_25f).panel("header").find("div.panel-title").html(_260); + }; + var _261=null; + $(window).unbind(".panel").bind("resize.panel",function(){ + if(_261){ + clearTimeout(_261); + } + _261=setTimeout(function(){ + var _262=$("body.layout"); + if(_262.length){ + _262.layout("resize"); + $("body").children(".easyui-fluid:visible").each(function(){ + $(this).triggerHandler("_resize"); + }); + }else{ + $("body").panel("doLayout"); + } + _261=null; + },100); + }); + $.fn.panel=function(_263,_264){ + if(typeof _263=="string"){ + return $.fn.panel.methods[_263](this,_264); + } + _263=_263||{}; + return this.each(function(){ + var _265=$.data(this,"panel"); + var opts; + if(_265){ + opts=$.extend(_265.options,_263); + _265.isLoaded=false; + }else{ + opts=$.extend({},$.fn.panel.defaults,$.fn.panel.parseOptions(this),_263); + $(this).attr("title",""); + _265=$.data(this,"panel",{options:opts,panel:_224(this),isLoaded:false}); + } + _228(this); + $(this).show(); + if(opts.doSize==true){ + _265.panel.css("display","block"); + _212(this); + } + if(opts.closed==true||opts.minimized==true){ + _265.panel.hide(); + }else{ + _23e(this); + } + }); + }; + $.fn.panel.methods={options:function(jq){ + return $.data(jq[0],"panel").options; + },panel:function(jq){ + return $.data(jq[0],"panel").panel; + },header:function(jq){ + return $.data(jq[0],"panel").panel.children(".panel-header"); + },footer:function(jq){ + return jq.panel("panel").children(".panel-footer"); + },body:function(jq){ + return $.data(jq[0],"panel").panel.children(".panel-body"); + },setTitle:function(jq,_266){ + return jq.each(function(){ + _25e(this,_266); + }); + },open:function(jq,_267){ + return jq.each(function(){ + _23e(this,_267); + }); + },close:function(jq,_268){ + return jq.each(function(){ + _244(this,_268); + }); + },destroy:function(jq,_269){ + return jq.each(function(){ + _249(this,_269); + }); + },clear:function(jq,type){ + return jq.each(function(){ + _23a(type=="footer"?$(this).panel("footer"):this); + }); + },refresh:function(jq,href){ + return jq.each(function(){ + var _26a=$.data(this,"panel"); + _26a.isLoaded=false; + if(href){ + if(typeof href=="string"){ + _26a.options.href=href; + }else{ + _26a.options.queryParams=href; + } + } + _234(this); + }); + },resize:function(jq,_26b){ + return jq.each(function(){ + _212(this,_26b); + }); + },doLayout:function(jq,all){ + return jq.each(function(){ + _26c(this,"body"); + _26c($(this).siblings(".panel-footer")[0],"footer"); + function _26c(_26d,type){ + if(!_26d){ + return; + } + var _26e=_26d==$("body")[0]; + var s=$(_26d).find("div.panel:visible,div.accordion:visible,div.tabs-container:visible,div.layout:visible,.easyui-fluid:visible").filter(function(_26f,el){ + var p=$(el).parents(".panel-"+type+":first"); + return _26e?p.length==0:p[0]==_26d; + }); + s.each(function(){ + $(this).triggerHandler("_resize",[all||false]); + }); + }; + }); + },move:function(jq,_270){ + return jq.each(function(){ + _21f(this,_270); + }); + },maximize:function(jq){ + return jq.each(function(){ + _242(this); + }); + },minimize:function(jq){ + return jq.each(function(){ + _258(this); + }); + },restore:function(jq){ + return jq.each(function(){ + _25b(this); + }); + },collapse:function(jq,_271){ + return jq.each(function(){ + _243(this,_271); + }); + },expand:function(jq,_272){ + return jq.each(function(){ + _252(this,_272); + }); + }}; + $.fn.panel.parseOptions=function(_273){ + var t=$(_273); + var hh=t.children(".panel-header,header"); + var ff=t.children(".panel-footer,footer"); + return $.extend({},$.parser.parseOptions(_273,["id","width","height","left","top","title","iconCls","cls","headerCls","bodyCls","tools","href","method","header","footer","halign","titleDirection",{cache:"boolean",fit:"boolean",border:"boolean",noheader:"boolean"},{collapsible:"boolean",minimizable:"boolean",maximizable:"boolean"},{closable:"boolean",collapsed:"boolean",minimized:"boolean",maximized:"boolean",closed:"boolean"},"openAnimation","closeAnimation",{openDuration:"number",closeDuration:"number"},]),{loadingMessage:(t.attr("loadingMessage")!=undefined?t.attr("loadingMessage"):undefined),header:(hh.length?hh.removeClass("panel-header"):undefined),footer:(ff.length?ff.removeClass("panel-footer"):undefined)}); + }; + $.fn.panel.defaults={id:null,title:null,iconCls:null,width:"auto",height:"auto",left:null,top:null,cls:null,headerCls:null,bodyCls:null,style:{},href:null,cache:true,fit:false,border:true,doSize:true,noheader:false,content:null,halign:"top",titleDirection:"down",collapsible:false,minimizable:false,maximizable:false,closable:false,collapsed:false,minimized:false,maximized:false,closed:false,openAnimation:false,openDuration:400,closeAnimation:false,closeDuration:400,tools:null,footer:null,header:null,queryParams:{},method:"get",href:null,loadingMessage:"Loading...",loader:function(_274,_275,_276){ + var opts=$(this).panel("options"); + if(!opts.href){ + return false; + } + $.ajax({type:opts.method,url:opts.href,cache:false,data:_274,dataType:"html",success:function(data){ + _275(data); + },error:function(){ + _276.apply(this,arguments); + }}); + },extractor:function(data){ + var _277=/]*>((.|[\n\r])*)<\/body>/im; + var _278=_277.exec(data); + if(_278){ + return _278[1]; + }else{ + return data; + } + },onBeforeLoad:function(_279){ + },onLoad:function(){ + },onLoadError:function(){ + },onBeforeOpen:function(){ + },onOpen:function(){ + },onBeforeClose:function(){ + },onClose:function(){ + },onBeforeDestroy:function(){ + },onDestroy:function(){ + },onResize:function(_27a,_27b){ + },onMove:function(left,top){ + },onMaximize:function(){ + },onRestore:function(){ + },onMinimize:function(){ + },onBeforeCollapse:function(){ + },onBeforeExpand:function(){ + },onCollapse:function(){ + },onExpand:function(){ + }}; +})(jQuery); +(function($){ + function _27c(_27d,_27e){ + var _27f=$.data(_27d,"window"); + if(_27e){ + if(_27e.left!=null){ + _27f.options.left=_27e.left; + } + if(_27e.top!=null){ + _27f.options.top=_27e.top; + } + } + $(_27d).panel("move",_27f.options); + if(_27f.shadow){ + _27f.shadow.css({left:_27f.options.left,top:_27f.options.top}); + } + }; + function _280(_281,_282){ + var opts=$.data(_281,"window").options; + var pp=$(_281).window("panel"); + var _283=pp._outerWidth(); + if(opts.inline){ + var _284=pp.parent(); + opts.left=Math.ceil((_284.width()-_283)/2+_284.scrollLeft()); + }else{ + opts.left=Math.ceil(($(window)._outerWidth()-_283)/2+$(document).scrollLeft()); + } + if(_282){ + _27c(_281); + } + }; + function _285(_286,_287){ + var opts=$.data(_286,"window").options; + var pp=$(_286).window("panel"); + var _288=pp._outerHeight(); + if(opts.inline){ + var _289=pp.parent(); + opts.top=Math.ceil((_289.height()-_288)/2+_289.scrollTop()); + }else{ + opts.top=Math.ceil(($(window)._outerHeight()-_288)/2+$(document).scrollTop()); + } + if(_287){ + _27c(_286); + } + }; + function _28a(_28b){ + var _28c=$.data(_28b,"window"); + var opts=_28c.options; + var win=$(_28b).panel($.extend({},_28c.options,{border:false,doSize:true,closed:true,cls:"window "+(!opts.border?"window-thinborder window-noborder ":(opts.border=="thin"?"window-thinborder ":""))+(opts.cls||""),headerCls:"window-header "+(opts.headerCls||""),bodyCls:"window-body "+(opts.noheader?"window-body-noheader ":" ")+(opts.bodyCls||""),onBeforeDestroy:function(){ + if(opts.onBeforeDestroy.call(_28b)==false){ + return false; + } + if(_28c.shadow){ + _28c.shadow.remove(); + } + if(_28c.mask){ + _28c.mask.remove(); + } + },onClose:function(){ + if(_28c.shadow){ + _28c.shadow.hide(); + } + if(_28c.mask){ + _28c.mask.hide(); + } + opts.onClose.call(_28b); + },onOpen:function(){ + if(_28c.mask){ + _28c.mask.css($.extend({display:"block",zIndex:$.fn.window.defaults.zIndex++},$.fn.window.getMaskSize(_28b))); + } + if(_28c.shadow){ + _28c.shadow.css({display:"block",zIndex:$.fn.window.defaults.zIndex++,left:opts.left,top:opts.top,width:_28c.window._outerWidth(),height:_28c.window._outerHeight()}); + } + _28c.window.css("z-index",$.fn.window.defaults.zIndex++); + opts.onOpen.call(_28b); + },onResize:function(_28d,_28e){ + var _28f=$(this).panel("options"); + $.extend(opts,{width:_28f.width,height:_28f.height,left:_28f.left,top:_28f.top}); + if(_28c.shadow){ + _28c.shadow.css({left:opts.left,top:opts.top,width:_28c.window._outerWidth(),height:_28c.window._outerHeight()}); + } + opts.onResize.call(_28b,_28d,_28e); + },onMinimize:function(){ + if(_28c.shadow){ + _28c.shadow.hide(); + } + if(_28c.mask){ + _28c.mask.hide(); + } + _28c.options.onMinimize.call(_28b); + },onBeforeCollapse:function(){ + if(opts.onBeforeCollapse.call(_28b)==false){ + return false; + } + if(_28c.shadow){ + _28c.shadow.hide(); + } + },onExpand:function(){ + if(_28c.shadow){ + _28c.shadow.show(); + } + opts.onExpand.call(_28b); + }})); + _28c.window=win.panel("panel"); + if(_28c.mask){ + _28c.mask.remove(); + } + if(opts.modal){ + _28c.mask=$("
      ").insertAfter(_28c.window); + } + if(_28c.shadow){ + _28c.shadow.remove(); + } + if(opts.shadow){ + _28c.shadow=$("
      ").insertAfter(_28c.window); + } + var _290=opts.closed; + if(opts.left==null){ + _280(_28b); + } + if(opts.top==null){ + _285(_28b); + } + _27c(_28b); + if(!_290){ + win.window("open"); + } + }; + function _291(left,top,_292,_293){ + var _294=this; + var _295=$.data(_294,"window"); + var opts=_295.options; + if(!opts.constrain){ + return {}; + } + if($.isFunction(opts.constrain)){ + return opts.constrain.call(_294,left,top,_292,_293); + } + var win=$(_294).window("window"); + var _296=opts.inline?win.parent():$(window); + if(left<0){ + left=0; + } + if(top<_296.scrollTop()){ + top=_296.scrollTop(); + } + if(left+_292>_296.width()){ + if(_292==win.outerWidth()){ + left=_296.width()-_292; + }else{ + _292=_296.width()-left; + } + } + if(top-_296.scrollTop()+_293>_296.height()){ + if(_293==win.outerHeight()){ + top=_296.height()-_293+_296.scrollTop(); + }else{ + _293=_296.height()-top+_296.scrollTop(); + } + } + return {left:left,top:top,width:_292,height:_293}; + }; + function _297(_298){ + var _299=$.data(_298,"window"); + _299.window.draggable({handle:">div.panel-header>div.panel-title",disabled:_299.options.draggable==false,onBeforeDrag:function(e){ + if(_299.mask){ + _299.mask.css("z-index",$.fn.window.defaults.zIndex++); + } + if(_299.shadow){ + _299.shadow.css("z-index",$.fn.window.defaults.zIndex++); + } + _299.window.css("z-index",$.fn.window.defaults.zIndex++); + },onStartDrag:function(e){ + _29a(e); + },onDrag:function(e){ + _29b(e); + return false; + },onStopDrag:function(e){ + _29c(e,"move"); + }}); + _299.window.resizable({disabled:_299.options.resizable==false,onStartResize:function(e){ + _29a(e); + },onResize:function(e){ + _29b(e); + return false; + },onStopResize:function(e){ + _29c(e,"resize"); + }}); + function _29a(e){ + if(_299.pmask){ + _299.pmask.remove(); + } + _299.pmask=$("
      ").insertAfter(_299.window); + _299.pmask.css({display:"none",zIndex:$.fn.window.defaults.zIndex++,left:e.data.left,top:e.data.top,width:_299.window._outerWidth(),height:_299.window._outerHeight()}); + if(_299.proxy){ + _299.proxy.remove(); + } + _299.proxy=$("
      ").insertAfter(_299.window); + _299.proxy.css({display:"none",zIndex:$.fn.window.defaults.zIndex++,left:e.data.left,top:e.data.top}); + _299.proxy._outerWidth(e.data.width)._outerHeight(e.data.height); + _299.proxy.hide(); + setTimeout(function(){ + if(_299.pmask){ + _299.pmask.show(); + } + if(_299.proxy){ + _299.proxy.show(); + } + },500); + }; + function _29b(e){ + $.extend(e.data,_291.call(_298,e.data.left,e.data.top,e.data.width,e.data.height)); + _299.pmask.show(); + _299.proxy.css({display:"block",left:e.data.left,top:e.data.top}); + _299.proxy._outerWidth(e.data.width); + _299.proxy._outerHeight(e.data.height); + }; + function _29c(e,_29d){ + $.extend(e.data,_291.call(_298,e.data.left,e.data.top,e.data.width+0.1,e.data.height+0.1)); + $(_298).window(_29d,e.data); + _299.pmask.remove(); + _299.pmask=null; + _299.proxy.remove(); + _299.proxy=null; + }; + }; + $(function(){ + if(!$._positionFixed){ + $(window).resize(function(){ + $("body>div.window-mask:visible").css({width:"",height:""}); + setTimeout(function(){ + $("body>div.window-mask:visible").css($.fn.window.getMaskSize()); + },50); + }); + } + }); + $.fn.window=function(_29e,_29f){ + if(typeof _29e=="string"){ + var _2a0=$.fn.window.methods[_29e]; + if(_2a0){ + return _2a0(this,_29f); + }else{ + return this.panel(_29e,_29f); + } + } + _29e=_29e||{}; + return this.each(function(){ + var _2a1=$.data(this,"window"); + if(_2a1){ + $.extend(_2a1.options,_29e); + }else{ + _2a1=$.data(this,"window",{options:$.extend({},$.fn.window.defaults,$.fn.window.parseOptions(this),_29e)}); + if(!_2a1.options.inline){ + document.body.appendChild(this); + } + } + _28a(this); + _297(this); + }); + }; + $.fn.window.methods={options:function(jq){ + var _2a2=jq.panel("options"); + var _2a3=$.data(jq[0],"window").options; + return $.extend(_2a3,{closed:_2a2.closed,collapsed:_2a2.collapsed,minimized:_2a2.minimized,maximized:_2a2.maximized}); + },window:function(jq){ + return $.data(jq[0],"window").window; + },move:function(jq,_2a4){ + return jq.each(function(){ + _27c(this,_2a4); + }); + },hcenter:function(jq){ + return jq.each(function(){ + _280(this,true); + }); + },vcenter:function(jq){ + return jq.each(function(){ + _285(this,true); + }); + },center:function(jq){ + return jq.each(function(){ + _280(this); + _285(this); + _27c(this); + }); + }}; + $.fn.window.getMaskSize=function(_2a5){ + var _2a6=$(_2a5).data("window"); + if(_2a6&&_2a6.options.inline){ + return {}; + }else{ + if($._positionFixed){ + return {position:"fixed"}; + }else{ + return {width:$(document).width(),height:$(document).height()}; + } + } + }; + $.fn.window.parseOptions=function(_2a7){ + return $.extend({},$.fn.panel.parseOptions(_2a7),$.parser.parseOptions(_2a7,[{draggable:"boolean",resizable:"boolean",shadow:"boolean",modal:"boolean",inline:"boolean"}])); + }; + $.fn.window.defaults=$.extend({},$.fn.panel.defaults,{zIndex:9000,draggable:true,resizable:true,shadow:true,modal:false,border:true,inline:false,title:"New Window",collapsible:true,minimizable:true,maximizable:true,closable:true,closed:false,constrain:false}); +})(jQuery); +(function($){ + function _2a8(_2a9){ + var opts=$.data(_2a9,"dialog").options; + opts.inited=false; + $(_2a9).window($.extend({},opts,{onResize:function(w,h){ + if(opts.inited){ + _2ae(this); + opts.onResize.call(this,w,h); + } + }})); + var win=$(_2a9).window("window"); + if(opts.toolbar){ + if($.isArray(opts.toolbar)){ + $(_2a9).siblings("div.dialog-toolbar").remove(); + var _2aa=$("
      ").appendTo(win); + var tr=_2aa.find("tr"); + for(var i=0;i
      ").appendTo(tr); + }else{ + var td=$("").appendTo(tr); + var tool=$("").appendTo(td); + tool[0].onclick=eval(btn.handler||function(){ + }); + tool.linkbutton($.extend({},btn,{plain:true})); + } + } + }else{ + $(opts.toolbar).addClass("dialog-toolbar").appendTo(win); + $(opts.toolbar).show(); + } + }else{ + $(_2a9).siblings("div.dialog-toolbar").remove(); + } + if(opts.buttons){ + if($.isArray(opts.buttons)){ + $(_2a9).siblings("div.dialog-button").remove(); + var _2ab=$("
      ").appendTo(win); + for(var i=0;i").appendTo(_2ab); + if(p.handler){ + _2ac[0].onclick=p.handler; + } + _2ac.linkbutton(p); + } + }else{ + $(opts.buttons).addClass("dialog-button").appendTo(win); + $(opts.buttons).show(); + } + }else{ + $(_2a9).siblings("div.dialog-button").remove(); + } + opts.inited=true; + var _2ad=opts.closed; + win.show(); + $(_2a9).window("resize"); + if(_2ad){ + win.hide(); + } + }; + function _2ae(_2af,_2b0){ + var t=$(_2af); + var opts=t.dialog("options"); + var _2b1=opts.noheader; + var tb=t.siblings(".dialog-toolbar"); + var bb=t.siblings(".dialog-button"); + tb.insertBefore(_2af).css({borderTopWidth:(_2b1?1:0),top:(_2b1?tb.length:0)}); + bb.insertAfter(_2af); + tb.add(bb)._outerWidth(t._outerWidth()).find(".easyui-fluid:visible").each(function(){ + $(this).triggerHandler("_resize"); + }); + var _2b2=tb._outerHeight()+bb._outerHeight(); + if(!isNaN(parseInt(opts.height))){ + t._outerHeight(t._outerHeight()-_2b2); + }else{ + var _2b3=t._size("min-height"); + if(_2b3){ + t._size("min-height",_2b3-_2b2); + } + var _2b4=t._size("max-height"); + if(_2b4){ + t._size("max-height",_2b4-_2b2); + } + } + var _2b5=$.data(_2af,"window").shadow; + if(_2b5){ + var cc=t.panel("panel"); + _2b5.css({width:cc._outerWidth(),height:cc._outerHeight()}); + } + }; + $.fn.dialog=function(_2b6,_2b7){ + if(typeof _2b6=="string"){ + var _2b8=$.fn.dialog.methods[_2b6]; + if(_2b8){ + return _2b8(this,_2b7); + }else{ + return this.window(_2b6,_2b7); + } + } + _2b6=_2b6||{}; + return this.each(function(){ + var _2b9=$.data(this,"dialog"); + if(_2b9){ + $.extend(_2b9.options,_2b6); + }else{ + $.data(this,"dialog",{options:$.extend({},$.fn.dialog.defaults,$.fn.dialog.parseOptions(this),_2b6)}); + } + _2a8(this); + }); + }; + $.fn.dialog.methods={options:function(jq){ + var _2ba=$.data(jq[0],"dialog").options; + var _2bb=jq.panel("options"); + $.extend(_2ba,{width:_2bb.width,height:_2bb.height,left:_2bb.left,top:_2bb.top,closed:_2bb.closed,collapsed:_2bb.collapsed,minimized:_2bb.minimized,maximized:_2bb.maximized}); + return _2ba; + },dialog:function(jq){ + return jq.window("window"); + }}; + $.fn.dialog.parseOptions=function(_2bc){ + var t=$(_2bc); + return $.extend({},$.fn.window.parseOptions(_2bc),$.parser.parseOptions(_2bc,["toolbar","buttons"]),{toolbar:(t.children(".dialog-toolbar").length?t.children(".dialog-toolbar").removeClass("dialog-toolbar"):undefined),buttons:(t.children(".dialog-button").length?t.children(".dialog-button").removeClass("dialog-button"):undefined)}); + }; + $.fn.dialog.defaults=$.extend({},$.fn.window.defaults,{title:"New Dialog",collapsible:false,minimizable:false,maximizable:false,resizable:false,toolbar:null,buttons:null}); +})(jQuery); +(function($){ + function _2bd(){ + $(document).unbind(".messager").bind("keydown.messager",function(e){ + if(e.keyCode==27){ + $("body").children("div.messager-window").children("div.messager-body").each(function(){ + $(this).dialog("close"); + }); + }else{ + if(e.keyCode==9){ + var win=$("body").children("div.messager-window"); + if(!win.length){ + return; + } + var _2be=win.find(".messager-input,.messager-button .l-btn"); + for(var i=0;i<_2be.length;i++){ + if($(_2be[i]).is(":focus")){ + $(_2be[i>=_2be.length-1?0:i+1]).focus(); + return false; + } + } + }else{ + if(e.keyCode==13){ + var _2bf=$(e.target).closest("input.messager-input"); + if(_2bf.length){ + var dlg=_2bf.closest(".messager-body"); + _2c0(dlg,_2bf.val()); + } + } + } + } + }); + }; + function _2c1(){ + $(document).unbind(".messager"); + }; + function _2c2(_2c3){ + var opts=$.extend({},$.messager.defaults,{modal:false,shadow:false,draggable:false,resizable:false,closed:true,style:{left:"",top:"",right:0,zIndex:$.fn.window.defaults.zIndex++,bottom:-document.body.scrollTop-document.documentElement.scrollTop},title:"",width:250,height:100,minHeight:0,showType:"slide",showSpeed:600,content:_2c3.msg,timeout:4000},_2c3); + var dlg=$("
      ").appendTo("body"); + dlg.dialog($.extend({},opts,{noheader:(opts.title?false:true),openAnimation:(opts.showType),closeAnimation:(opts.showType=="show"?"hide":opts.showType),openDuration:opts.showSpeed,closeDuration:opts.showSpeed,onOpen:function(){ + dlg.dialog("dialog").hover(function(){ + if(opts.timer){ + clearTimeout(opts.timer); + } + },function(){ + _2c4(); + }); + _2c4(); + function _2c4(){ + if(opts.timeout>0){ + opts.timer=setTimeout(function(){ + if(dlg.length&&dlg.data("dialog")){ + dlg.dialog("close"); + } + },opts.timeout); + } + }; + if(_2c3.onOpen){ + _2c3.onOpen.call(this); + }else{ + opts.onOpen.call(this); + } + },onClose:function(){ + if(opts.timer){ + clearTimeout(opts.timer); + } + if(_2c3.onClose){ + _2c3.onClose.call(this); + }else{ + opts.onClose.call(this); + } + dlg.dialog("destroy"); + }})); + dlg.dialog("dialog").css(opts.style); + dlg.dialog("open"); + return dlg; + }; + function _2c5(_2c6){ + _2bd(); + var dlg=$("
      ").appendTo("body"); + dlg.dialog($.extend({},_2c6,{noheader:(_2c6.title?false:true),onClose:function(){ + _2c1(); + if(_2c6.onClose){ + _2c6.onClose.call(this); + } + dlg.dialog("destroy"); + }})); + var win=dlg.dialog("dialog").addClass("messager-window"); + win.find(".dialog-button").addClass("messager-button").find("a:first").focus(); + return dlg; + }; + function _2c0(dlg,_2c7){ + var opts=dlg.dialog("options"); + dlg.dialog("close"); + opts.fn(_2c7); + }; + $.messager={show:function(_2c8){ + return _2c2(_2c8); + },alert:function(_2c9,msg,icon,fn){ + var opts=typeof _2c9=="object"?_2c9:{title:_2c9,msg:msg,icon:icon,fn:fn}; + var cls=opts.icon?"messager-icon messager-"+opts.icon:""; + opts=$.extend({},$.messager.defaults,{content:"
      "+"
      "+opts.msg+"
      "+"
      "},opts); + if(!opts.buttons){ + opts.buttons=[{text:opts.ok,onClick:function(){ + _2c0(dlg); + }}]; + } + var dlg=_2c5(opts); + return dlg; + },confirm:function(_2ca,msg,fn){ + var opts=typeof _2ca=="object"?_2ca:{title:_2ca,msg:msg,fn:fn}; + opts=$.extend({},$.messager.defaults,{content:"
      "+"
      "+opts.msg+"
      "+"
      "},opts); + if(!opts.buttons){ + opts.buttons=[{text:opts.ok,onClick:function(){ + _2c0(dlg,true); + }},{text:opts.cancel,onClick:function(){ + _2c0(dlg,false); + }}]; + } + var dlg=_2c5(opts); + return dlg; + },prompt:function(_2cb,msg,fn){ + var opts=typeof _2cb=="object"?_2cb:{title:_2cb,msg:msg,fn:fn}; + opts=$.extend({},$.messager.defaults,{content:"
      "+"
      "+opts.msg+"
      "+"
      "+"
      "+"
      "},opts); + if(!opts.buttons){ + opts.buttons=[{text:opts.ok,onClick:function(){ + _2c0(dlg,dlg.find(".messager-input").val()); + }},{text:opts.cancel,onClick:function(){ + _2c0(dlg); + }}]; + } + var dlg=_2c5(opts); + dlg.find(".messager-input").focus(); + return dlg; + },progress:function(_2cc){ + var _2cd={bar:function(){ + return $("body>div.messager-window").find("div.messager-p-bar"); + },close:function(){ + var dlg=$("body>div.messager-window>div.messager-body:has(div.messager-progress)"); + if(dlg.length){ + dlg.dialog("close"); + } + }}; + if(typeof _2cc=="string"){ + var _2ce=_2cd[_2cc]; + return _2ce(); + } + _2cc=_2cc||{}; + var opts=$.extend({},{title:"",minHeight:0,content:undefined,msg:"",text:undefined,interval:300},_2cc); + var dlg=_2c5($.extend({},$.messager.defaults,{content:"
      "+opts.msg+"
      ",closable:false,doSize:false},opts,{onClose:function(){ + if(this.timer){ + clearInterval(this.timer); + } + if(_2cc.onClose){ + _2cc.onClose.call(this); + }else{ + $.messager.defaults.onClose.call(this); + } + }})); + var bar=dlg.find("div.messager-p-bar"); + bar.progressbar({text:opts.text}); + dlg.dialog("resize"); + if(opts.interval){ + dlg[0].timer=setInterval(function(){ + var v=bar.progressbar("getValue"); + v+=10; + if(v>100){ + v=0; + } + bar.progressbar("setValue",v); + },opts.interval); + } + return dlg; + }}; + $.messager.defaults=$.extend({},$.fn.dialog.defaults,{ok:"Ok",cancel:"Cancel",width:300,height:"auto",minHeight:150,modal:true,collapsible:false,minimizable:false,maximizable:false,resizable:false,fn:function(){ + }}); +})(jQuery); +(function($){ + function _2cf(_2d0,_2d1){ + var _2d2=$.data(_2d0,"accordion"); + var opts=_2d2.options; + var _2d3=_2d2.panels; + var cc=$(_2d0); + var _2d4=(opts.halign=="left"||opts.halign=="right"); + cc.children(".panel-last").removeClass("panel-last"); + cc.children(".panel:last").addClass("panel-last"); + if(_2d1){ + $.extend(opts,{width:_2d1.width,height:_2d1.height}); + } + cc._size(opts); + var _2d5=0; + var _2d6="auto"; + var _2d7=cc.find(">.panel>.accordion-header"); + if(_2d7.length){ + if(_2d4){ + $(_2d3[0]).panel("resize",{width:cc.width(),height:cc.height()}); + _2d5=$(_2d7[0])._outerWidth(); + }else{ + _2d5=$(_2d7[0]).css("height","")._outerHeight(); + } + } + if(!isNaN(parseInt(opts.height))){ + if(_2d4){ + _2d6=cc.width()-_2d5*_2d7.length; + }else{ + _2d6=cc.height()-_2d5*_2d7.length; + } + } + _2d8(true,_2d6-_2d8(false)); + function _2d8(_2d9,_2da){ + var _2db=0; + for(var i=0;i<_2d3.length;i++){ + var p=_2d3[i]; + if(_2d4){ + var h=p.panel("header")._outerWidth(_2d5); + }else{ + var h=p.panel("header")._outerHeight(_2d5); + } + if(p.panel("options").collapsible==_2d9){ + var _2dc=isNaN(_2da)?undefined:(_2da+_2d5*h.length); + if(_2d4){ + p.panel("resize",{height:cc.height(),width:(_2d9?_2dc:undefined)}); + _2db+=p.panel("panel")._outerWidth()-_2d5*h.length; + }else{ + p.panel("resize",{width:cc.width(),height:(_2d9?_2dc:undefined)}); + _2db+=p.panel("panel").outerHeight()-_2d5*h.length; + } + } + } + return _2db; + }; + }; + function _2dd(_2de,_2df,_2e0,all){ + var _2e1=$.data(_2de,"accordion").panels; + var pp=[]; + for(var i=0;i<_2e1.length;i++){ + var p=_2e1[i]; + if(_2df){ + if(p.panel("options")[_2df]==_2e0){ + pp.push(p); + } + }else{ + if(p[0]==$(_2e0)[0]){ + return i; + } + } + } + if(_2df){ + return all?pp:(pp.length?pp[0]:null); + }else{ + return -1; + } + }; + function _2e2(_2e3){ + return _2dd(_2e3,"collapsed",false,true); + }; + function _2e4(_2e5){ + var pp=_2e2(_2e5); + return pp.length?pp[0]:null; + }; + function _2e6(_2e7,_2e8){ + return _2dd(_2e7,null,_2e8); + }; + function _2e9(_2ea,_2eb){ + var _2ec=$.data(_2ea,"accordion").panels; + if(typeof _2eb=="number"){ + if(_2eb<0||_2eb>=_2ec.length){ + return null; + }else{ + return _2ec[_2eb]; + } + } + return _2dd(_2ea,"title",_2eb); + }; + function _2ed(_2ee){ + var opts=$.data(_2ee,"accordion").options; + var cc=$(_2ee); + if(opts.border){ + cc.removeClass("accordion-noborder"); + }else{ + cc.addClass("accordion-noborder"); + } + }; + function init(_2ef){ + var _2f0=$.data(_2ef,"accordion"); + var cc=$(_2ef); + cc.addClass("accordion"); + _2f0.panels=[]; + cc.children("div").each(function(){ + var opts=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr("selected")?true:undefined)}); + var pp=$(this); + _2f0.panels.push(pp); + _2f2(_2ef,pp,opts); + }); + cc.bind("_resize",function(e,_2f1){ + if($(this).hasClass("easyui-fluid")||_2f1){ + _2cf(_2ef); + } + return false; + }); + }; + function _2f2(_2f3,pp,_2f4){ + var opts=$.data(_2f3,"accordion").options; + pp.panel($.extend({},{collapsible:true,minimizable:false,maximizable:false,closable:false,doSize:false,collapsed:true,headerCls:"accordion-header",bodyCls:"accordion-body",halign:opts.halign},_2f4,{onBeforeExpand:function(){ + if(_2f4.onBeforeExpand){ + if(_2f4.onBeforeExpand.call(this)==false){ + return false; + } + } + if(!opts.multiple){ + var all=$.grep(_2e2(_2f3),function(p){ + return p.panel("options").collapsible; + }); + for(var i=0;i.panel-last>.accordion-header").removeClass("accordion-header-border"); + if(_2f4.onExpand){ + _2f4.onExpand.call(this); + } + opts.onSelect.call(_2f3,$(this).panel("options").title,_2e6(_2f3,this)); + },onBeforeCollapse:function(){ + if(_2f4.onBeforeCollapse){ + if(_2f4.onBeforeCollapse.call(this)==false){ + return false; + } + } + $(_2f3).find(">.panel-last>.accordion-header").addClass("accordion-header-border"); + var _2f6=$(this).panel("header"); + _2f6.removeClass("accordion-header-selected"); + _2f6.find(".accordion-collapse").addClass("accordion-expand"); + },onCollapse:function(){ + if(isNaN(parseInt(opts.height))){ + $(_2f3).find(">.panel-last>.accordion-header").removeClass("accordion-header-border"); + } + if(_2f4.onCollapse){ + _2f4.onCollapse.call(this); + } + opts.onUnselect.call(_2f3,$(this).panel("options").title,_2e6(_2f3,this)); + }})); + var _2f7=pp.panel("header"); + var tool=_2f7.children("div.panel-tool"); + tool.children("a.panel-tool-collapse").hide(); + var t=$("").addClass("accordion-collapse accordion-expand").appendTo(tool); + t.bind("click",function(){ + _2f8(pp); + return false; + }); + pp.panel("options").collapsible?t.show():t.hide(); + if(opts.halign=="left"||opts.halign=="right"){ + t.hide(); + } + _2f7.click(function(){ + _2f8(pp); + return false; + }); + function _2f8(p){ + var _2f9=p.panel("options"); + if(_2f9.collapsible){ + var _2fa=_2e6(_2f3,p); + if(_2f9.collapsed){ + _2fb(_2f3,_2fa); + }else{ + _2fc(_2f3,_2fa); + } + } + }; + }; + function _2fb(_2fd,_2fe){ + var p=_2e9(_2fd,_2fe); + if(!p){ + return; + } + _2ff(_2fd); + var opts=$.data(_2fd,"accordion").options; + p.panel("expand",opts.animate); + }; + function _2fc(_300,_301){ + var p=_2e9(_300,_301); + if(!p){ + return; + } + _2ff(_300); + var opts=$.data(_300,"accordion").options; + p.panel("collapse",opts.animate); + }; + function _302(_303){ + var opts=$.data(_303,"accordion").options; + $(_303).find(">.panel-last>.accordion-header").addClass("accordion-header-border"); + var p=_2dd(_303,"selected",true); + if(p){ + _304(_2e6(_303,p)); + }else{ + _304(opts.selected); + } + function _304(_305){ + var _306=opts.animate; + opts.animate=false; + _2fb(_303,_305); + opts.animate=_306; + }; + }; + function _2ff(_307){ + var _308=$.data(_307,"accordion").panels; + for(var i=0;i<_308.length;i++){ + _308[i].stop(true,true); + } + }; + function add(_309,_30a){ + var _30b=$.data(_309,"accordion"); + var opts=_30b.options; + var _30c=_30b.panels; + if(_30a.selected==undefined){ + _30a.selected=true; + } + _2ff(_309); + var pp=$("
      ").appendTo(_309); + _30c.push(pp); + _2f2(_309,pp,_30a); + _2cf(_309); + opts.onAdd.call(_309,_30a.title,_30c.length-1); + if(_30a.selected){ + _2fb(_309,_30c.length-1); + } + }; + function _30d(_30e,_30f){ + var _310=$.data(_30e,"accordion"); + var opts=_310.options; + var _311=_310.panels; + _2ff(_30e); + var _312=_2e9(_30e,_30f); + var _313=_312.panel("options").title; + var _314=_2e6(_30e,_312); + if(!_312){ + return; + } + if(opts.onBeforeRemove.call(_30e,_313,_314)==false){ + return; + } + _311.splice(_314,1); + _312.panel("destroy"); + if(_311.length){ + _2cf(_30e); + var curr=_2e4(_30e); + if(!curr){ + _2fb(_30e,0); + } + } + opts.onRemove.call(_30e,_313,_314); + }; + $.fn.accordion=function(_315,_316){ + if(typeof _315=="string"){ + return $.fn.accordion.methods[_315](this,_316); + } + _315=_315||{}; + return this.each(function(){ + var _317=$.data(this,"accordion"); + if(_317){ + $.extend(_317.options,_315); + }else{ + $.data(this,"accordion",{options:$.extend({},$.fn.accordion.defaults,$.fn.accordion.parseOptions(this),_315),accordion:$(this).addClass("accordion"),panels:[]}); + init(this); + } + _2ed(this); + _2cf(this); + _302(this); + }); + }; + $.fn.accordion.methods={options:function(jq){ + return $.data(jq[0],"accordion").options; + },panels:function(jq){ + return $.data(jq[0],"accordion").panels; + },resize:function(jq,_318){ + return jq.each(function(){ + _2cf(this,_318); + }); + },getSelections:function(jq){ + return _2e2(jq[0]); + },getSelected:function(jq){ + return _2e4(jq[0]); + },getPanel:function(jq,_319){ + return _2e9(jq[0],_319); + },getPanelIndex:function(jq,_31a){ + return _2e6(jq[0],_31a); + },select:function(jq,_31b){ + return jq.each(function(){ + _2fb(this,_31b); + }); + },unselect:function(jq,_31c){ + return jq.each(function(){ + _2fc(this,_31c); + }); + },add:function(jq,_31d){ + return jq.each(function(){ + add(this,_31d); + }); + },remove:function(jq,_31e){ + return jq.each(function(){ + _30d(this,_31e); + }); + }}; + $.fn.accordion.parseOptions=function(_31f){ + var t=$(_31f); + return $.extend({},$.parser.parseOptions(_31f,["width","height","halign",{fit:"boolean",border:"boolean",animate:"boolean",multiple:"boolean",selected:"number"}])); + }; + $.fn.accordion.defaults={width:"auto",height:"auto",fit:false,border:true,animate:true,multiple:false,selected:0,halign:"top",onSelect:function(_320,_321){ + },onUnselect:function(_322,_323){ + },onAdd:function(_324,_325){ + },onBeforeRemove:function(_326,_327){ + },onRemove:function(_328,_329){ + }}; +})(jQuery); +(function($){ + function _32a(c){ + var w=0; + $(c).children().each(function(){ + w+=$(this).outerWidth(true); + }); + return w; + }; + function _32b(_32c){ + var opts=$.data(_32c,"tabs").options; + if(opts.tabPosition=="left"||opts.tabPosition=="right"||!opts.showHeader){ + return; + } + var _32d=$(_32c).children("div.tabs-header"); + var tool=_32d.children("div.tabs-tool:not(.tabs-tool-hidden)"); + var _32e=_32d.children("div.tabs-scroller-left"); + var _32f=_32d.children("div.tabs-scroller-right"); + var wrap=_32d.children("div.tabs-wrap"); + var _330=_32d.outerHeight(); + if(opts.plain){ + _330-=_330-_32d.height(); + } + tool._outerHeight(_330); + var _331=_32a(_32d.find("ul.tabs")); + var _332=_32d.width()-tool._outerWidth(); + if(_331>_332){ + _32e.add(_32f).show()._outerHeight(_330); + if(opts.toolPosition=="left"){ + tool.css({left:_32e.outerWidth(),right:""}); + wrap.css({marginLeft:_32e.outerWidth()+tool._outerWidth(),marginRight:_32f._outerWidth(),width:_332-_32e.outerWidth()-_32f.outerWidth()}); + }else{ + tool.css({left:"",right:_32f.outerWidth()}); + wrap.css({marginLeft:_32e.outerWidth(),marginRight:_32f.outerWidth()+tool._outerWidth(),width:_332-_32e.outerWidth()-_32f.outerWidth()}); + } + }else{ + _32e.add(_32f).hide(); + if(opts.toolPosition=="left"){ + tool.css({left:0,right:""}); + wrap.css({marginLeft:tool._outerWidth(),marginRight:0,width:_332}); + }else{ + tool.css({left:"",right:0}); + wrap.css({marginLeft:0,marginRight:tool._outerWidth(),width:_332}); + } + } + }; + function _333(_334){ + var opts=$.data(_334,"tabs").options; + var _335=$(_334).children("div.tabs-header"); + if(opts.tools){ + if(typeof opts.tools=="string"){ + $(opts.tools).addClass("tabs-tool").appendTo(_335); + $(opts.tools).show(); + }else{ + _335.children("div.tabs-tool").remove(); + var _336=$("
      ").appendTo(_335); + var tr=_336.find("tr"); + for(var i=0;i").appendTo(tr); + var tool=$("").appendTo(td); + tool[0].onclick=eval(opts.tools[i].handler||function(){ + }); + tool.linkbutton($.extend({},opts.tools[i],{plain:true})); + } + } + }else{ + _335.children("div.tabs-tool").remove(); + } + }; + function _337(_338,_339){ + var _33a=$.data(_338,"tabs"); + var opts=_33a.options; + var cc=$(_338); + if(!opts.doSize){ + return; + } + if(_339){ + $.extend(opts,{width:_339.width,height:_339.height}); + } + cc._size(opts); + var _33b=cc.children("div.tabs-header"); + var _33c=cc.children("div.tabs-panels"); + var wrap=_33b.find("div.tabs-wrap"); + var ul=wrap.find(".tabs"); + ul.children("li").removeClass("tabs-first tabs-last"); + ul.children("li:first").addClass("tabs-first"); + ul.children("li:last").addClass("tabs-last"); + if(opts.tabPosition=="left"||opts.tabPosition=="right"){ + _33b._outerWidth(opts.showHeader?opts.headerWidth:0); + _33c._outerWidth(cc.width()-_33b.outerWidth()); + _33b.add(_33c)._size("height",isNaN(parseInt(opts.height))?"":cc.height()); + wrap._outerWidth(_33b.width()); + ul._outerWidth(wrap.width()).css("height",""); + }else{ + _33b.children("div.tabs-scroller-left,div.tabs-scroller-right,div.tabs-tool:not(.tabs-tool-hidden)").css("display",opts.showHeader?"block":"none"); + _33b._outerWidth(cc.width()).css("height",""); + if(opts.showHeader){ + _33b.css("background-color",""); + wrap.css("height",""); + }else{ + _33b.css("background-color","transparent"); + _33b._outerHeight(0); + wrap._outerHeight(0); + } + ul._outerHeight(opts.tabHeight).css("width",""); + ul._outerHeight(ul.outerHeight()-ul.height()-1+opts.tabHeight).css("width",""); + _33c._size("height",isNaN(parseInt(opts.height))?"":(cc.height()-_33b.outerHeight())); + _33c._size("width",cc.width()); + } + if(_33a.tabs.length){ + var d1=ul.outerWidth(true)-ul.width(); + var li=ul.children("li:first"); + var d2=li.outerWidth(true)-li.width(); + var _33d=_33b.width()-_33b.children(".tabs-tool:not(.tabs-tool-hidden)")._outerWidth(); + var _33e=Math.floor((_33d-d1-d2*_33a.tabs.length)/_33a.tabs.length); + $.map(_33a.tabs,function(p){ + _33f(p,(opts.justified&&$.inArray(opts.tabPosition,["top","bottom"])>=0)?_33e:undefined); + }); + if(opts.justified&&$.inArray(opts.tabPosition,["top","bottom"])>=0){ + var _340=_33d-d1-_32a(ul); + _33f(_33a.tabs[_33a.tabs.length-1],_33e+_340); + } + } + _32b(_338); + function _33f(p,_341){ + var _342=p.panel("options"); + var p_t=_342.tab.find("a.tabs-inner"); + var _341=_341?_341:(parseInt(_342.tabWidth||opts.tabWidth||undefined)); + if(_341){ + p_t._outerWidth(_341); + }else{ + p_t.css("width",""); + } + p_t._outerHeight(opts.tabHeight); + p_t.css("lineHeight",p_t.height()+"px"); + p_t.find(".easyui-fluid:visible").triggerHandler("_resize"); + }; + }; + function _343(_344){ + var opts=$.data(_344,"tabs").options; + var tab=_345(_344); + if(tab){ + var _346=$(_344).children("div.tabs-panels"); + var _347=opts.width=="auto"?"auto":_346.width(); + var _348=opts.height=="auto"?"auto":_346.height(); + tab.panel("resize",{width:_347,height:_348}); + } + }; + function _349(_34a){ + var tabs=$.data(_34a,"tabs").tabs; + var cc=$(_34a).addClass("tabs-container"); + var _34b=$("
      ").insertBefore(cc); + cc.children("div").each(function(){ + _34b[0].appendChild(this); + }); + cc[0].appendChild(_34b[0]); + $("
      "+"
      "+"
      "+"
      "+"
        "+"
        "+"
        ").prependTo(_34a); + cc.children("div.tabs-panels").children("div").each(function(i){ + var opts=$.extend({},$.parser.parseOptions(this),{disabled:($(this).attr("disabled")?true:undefined),selected:($(this).attr("selected")?true:undefined)}); + _358(_34a,opts,$(this)); + }); + cc.children("div.tabs-header").find(".tabs-scroller-left, .tabs-scroller-right").hover(function(){ + $(this).addClass("tabs-scroller-over"); + },function(){ + $(this).removeClass("tabs-scroller-over"); + }); + cc.bind("_resize",function(e,_34c){ + if($(this).hasClass("easyui-fluid")||_34c){ + _337(_34a); + _343(_34a); + } + return false; + }); + }; + function _34d(_34e){ + var _34f=$.data(_34e,"tabs"); + var opts=_34f.options; + $(_34e).children("div.tabs-header").unbind().bind("click",function(e){ + if($(e.target).hasClass("tabs-scroller-left")){ + $(_34e).tabs("scrollBy",-opts.scrollIncrement); + }else{ + if($(e.target).hasClass("tabs-scroller-right")){ + $(_34e).tabs("scrollBy",opts.scrollIncrement); + }else{ + var li=$(e.target).closest("li"); + if(li.hasClass("tabs-disabled")){ + return false; + } + var a=$(e.target).closest("a.tabs-close"); + if(a.length){ + _371(_34e,_350(li)); + }else{ + if(li.length){ + var _351=_350(li); + var _352=_34f.tabs[_351].panel("options"); + if(_352.collapsible){ + _352.closed?_368(_34e,_351):_385(_34e,_351); + }else{ + _368(_34e,_351); + } + } + } + return false; + } + } + }).bind("contextmenu",function(e){ + var li=$(e.target).closest("li"); + if(li.hasClass("tabs-disabled")){ + return; + } + if(li.length){ + opts.onContextMenu.call(_34e,e,li.find("span.tabs-title").html(),_350(li)); + } + }); + function _350(li){ + var _353=0; + li.parent().children("li").each(function(i){ + if(li[0]==this){ + _353=i; + return false; + } + }); + return _353; + }; + }; + function _354(_355){ + var opts=$.data(_355,"tabs").options; + var _356=$(_355).children("div.tabs-header"); + var _357=$(_355).children("div.tabs-panels"); + _356.removeClass("tabs-header-top tabs-header-bottom tabs-header-left tabs-header-right"); + _357.removeClass("tabs-panels-top tabs-panels-bottom tabs-panels-left tabs-panels-right"); + if(opts.tabPosition=="top"){ + _356.insertBefore(_357); + }else{ + if(opts.tabPosition=="bottom"){ + _356.insertAfter(_357); + _356.addClass("tabs-header-bottom"); + _357.addClass("tabs-panels-top"); + }else{ + if(opts.tabPosition=="left"){ + _356.addClass("tabs-header-left"); + _357.addClass("tabs-panels-right"); + }else{ + if(opts.tabPosition=="right"){ + _356.addClass("tabs-header-right"); + _357.addClass("tabs-panels-left"); + } + } + } + } + if(opts.plain==true){ + _356.addClass("tabs-header-plain"); + }else{ + _356.removeClass("tabs-header-plain"); + } + _356.removeClass("tabs-header-narrow").addClass(opts.narrow?"tabs-header-narrow":""); + var tabs=_356.find(".tabs"); + tabs.removeClass("tabs-pill").addClass(opts.pill?"tabs-pill":""); + tabs.removeClass("tabs-narrow").addClass(opts.narrow?"tabs-narrow":""); + tabs.removeClass("tabs-justified").addClass(opts.justified?"tabs-justified":""); + if(opts.border==true){ + _356.removeClass("tabs-header-noborder"); + _357.removeClass("tabs-panels-noborder"); + }else{ + _356.addClass("tabs-header-noborder"); + _357.addClass("tabs-panels-noborder"); + } + opts.doSize=true; + }; + function _358(_359,_35a,pp){ + _35a=_35a||{}; + var _35b=$.data(_359,"tabs"); + var tabs=_35b.tabs; + if(_35a.index==undefined||_35a.index>tabs.length){ + _35a.index=tabs.length; + } + if(_35a.index<0){ + _35a.index=0; + } + var ul=$(_359).children("div.tabs-header").find("ul.tabs"); + var _35c=$(_359).children("div.tabs-panels"); + var tab=$("
      • "+""+""+""+""+"
      • "); + if(!pp){ + pp=$("
        "); + } + if(_35a.index>=tabs.length){ + tab.appendTo(ul); + pp.appendTo(_35c); + tabs.push(pp); + }else{ + tab.insertBefore(ul.children("li:eq("+_35a.index+")")); + pp.insertBefore(_35c.children("div.panel:eq("+_35a.index+")")); + tabs.splice(_35a.index,0,pp); + } + pp.panel($.extend({},_35a,{tab:tab,border:false,noheader:true,closed:true,doSize:false,iconCls:(_35a.icon?_35a.icon:undefined),onLoad:function(){ + if(_35a.onLoad){ + _35a.onLoad.apply(this,arguments); + } + _35b.options.onLoad.call(_359,$(this)); + },onBeforeOpen:function(){ + if(_35a.onBeforeOpen){ + if(_35a.onBeforeOpen.call(this)==false){ + return false; + } + } + var p=$(_359).tabs("getSelected"); + if(p){ + if(p[0]!=this){ + $(_359).tabs("unselect",_363(_359,p)); + p=$(_359).tabs("getSelected"); + if(p){ + return false; + } + }else{ + _343(_359); + return false; + } + } + var _35d=$(this).panel("options"); + _35d.tab.addClass("tabs-selected"); + var wrap=$(_359).find(">div.tabs-header>div.tabs-wrap"); + var left=_35d.tab.position().left; + var _35e=left+_35d.tab.outerWidth(); + if(left<0||_35e>wrap.width()){ + var _35f=left-(wrap.width()-_35d.tab.width())/2; + $(_359).tabs("scrollBy",_35f); + }else{ + $(_359).tabs("scrollBy",0); + } + var _360=$(this).panel("panel"); + _360.css("display","block"); + _343(_359); + _360.css("display","none"); + },onOpen:function(){ + if(_35a.onOpen){ + _35a.onOpen.call(this); + } + var _361=$(this).panel("options"); + _35b.selectHis.push(_361.title); + _35b.options.onSelect.call(_359,_361.title,_363(_359,this)); + },onBeforeClose:function(){ + if(_35a.onBeforeClose){ + if(_35a.onBeforeClose.call(this)==false){ + return false; + } + } + $(this).panel("options").tab.removeClass("tabs-selected"); + },onClose:function(){ + if(_35a.onClose){ + _35a.onClose.call(this); + } + var _362=$(this).panel("options"); + _35b.options.onUnselect.call(_359,_362.title,_363(_359,this)); + }})); + $(_359).tabs("update",{tab:pp,options:pp.panel("options"),type:"header"}); + }; + function _364(_365,_366){ + var _367=$.data(_365,"tabs"); + var opts=_367.options; + if(_366.selected==undefined){ + _366.selected=true; + } + _358(_365,_366); + opts.onAdd.call(_365,_366.title,_366.index); + if(_366.selected){ + _368(_365,_366.index); + } + }; + function _369(_36a,_36b){ + _36b.type=_36b.type||"all"; + var _36c=$.data(_36a,"tabs").selectHis; + var pp=_36b.tab; + var opts=pp.panel("options"); + var _36d=opts.title; + $.extend(opts,_36b.options,{iconCls:(_36b.options.icon?_36b.options.icon:undefined)}); + if(_36b.type=="all"||_36b.type=="body"){ + pp.panel(); + } + if(_36b.type=="all"||_36b.type=="header"){ + var tab=opts.tab; + if(opts.header){ + tab.find(".tabs-inner").html($(opts.header)); + }else{ + var _36e=tab.find("span.tabs-title"); + var _36f=tab.find("span.tabs-icon"); + _36e.html(opts.title); + _36f.attr("class","tabs-icon"); + tab.find("a.tabs-close").remove(); + if(opts.closable){ + _36e.addClass("tabs-closable"); + $("").appendTo(tab); + }else{ + _36e.removeClass("tabs-closable"); + } + if(opts.iconCls){ + _36e.addClass("tabs-with-icon"); + _36f.addClass(opts.iconCls); + }else{ + _36e.removeClass("tabs-with-icon"); + } + if(opts.tools){ + var _370=tab.find("span.tabs-p-tool"); + if(!_370.length){ + var _370=$("").insertAfter(tab.find("a.tabs-inner")); + } + if($.isArray(opts.tools)){ + _370.empty(); + for(var i=0;i").appendTo(_370); + t.addClass(opts.tools[i].iconCls); + if(opts.tools[i].handler){ + t.bind("click",{handler:opts.tools[i].handler},function(e){ + if($(this).parents("li").hasClass("tabs-disabled")){ + return; + } + e.data.handler.call(this); + }); + } + } + }else{ + $(opts.tools).children().appendTo(_370); + } + var pr=_370.children().length*12; + if(opts.closable){ + pr+=8; + _370.css("right",""); + }else{ + pr-=3; + _370.css("right","5px"); + } + _36e.css("padding-right",pr+"px"); + }else{ + tab.find("span.tabs-p-tool").remove(); + _36e.css("padding-right",""); + } + } + if(_36d!=opts.title){ + for(var i=0;i<_36c.length;i++){ + if(_36c[i]==_36d){ + _36c[i]=opts.title; + } + } + } + } + if(opts.disabled){ + opts.tab.addClass("tabs-disabled"); + }else{ + opts.tab.removeClass("tabs-disabled"); + } + _337(_36a); + $.data(_36a,"tabs").options.onUpdate.call(_36a,opts.title,_363(_36a,pp)); + }; + function _371(_372,_373){ + var opts=$.data(_372,"tabs").options; + var tabs=$.data(_372,"tabs").tabs; + var _374=$.data(_372,"tabs").selectHis; + if(!_375(_372,_373)){ + return; + } + var tab=_376(_372,_373); + var _377=tab.panel("options").title; + var _378=_363(_372,tab); + if(opts.onBeforeClose.call(_372,_377,_378)==false){ + return; + } + var tab=_376(_372,_373,true); + tab.panel("options").tab.remove(); + tab.panel("destroy"); + opts.onClose.call(_372,_377,_378); + _337(_372); + for(var i=0;i<_374.length;i++){ + if(_374[i]==_377){ + _374.splice(i,1); + i--; + } + } + var _379=_374.pop(); + if(_379){ + _368(_372,_379); + }else{ + if(tabs.length){ + _368(_372,0); + } + } + }; + function _376(_37a,_37b,_37c){ + var tabs=$.data(_37a,"tabs").tabs; + var tab=null; + if(typeof _37b=="number"){ + if(_37b>=0&&_37b"); + for(var i=0;i.tabs-header>.tabs-tool"); + if(_390){ + tool.removeClass("tabs-tool-hidden").show(); + }else{ + tool.addClass("tabs-tool-hidden").hide(); + } + $(_38f).tabs("resize").tabs("scrollBy",0); + }; + $.fn.tabs=function(_391,_392){ + if(typeof _391=="string"){ + return $.fn.tabs.methods[_391](this,_392); + } + _391=_391||{}; + return this.each(function(){ + var _393=$.data(this,"tabs"); + if(_393){ + $.extend(_393.options,_391); + }else{ + $.data(this,"tabs",{options:$.extend({},$.fn.tabs.defaults,$.fn.tabs.parseOptions(this),_391),tabs:[],selectHis:[]}); + _349(this); + } + _333(this); + _354(this); + _337(this); + _34d(this); + _37f(this); + }); + }; + $.fn.tabs.methods={options:function(jq){ + var cc=jq[0]; + var opts=$.data(cc,"tabs").options; + var s=_345(cc); + opts.selected=s?_363(cc,s):-1; + return opts; + },tabs:function(jq){ + return $.data(jq[0],"tabs").tabs; + },resize:function(jq,_394){ + return jq.each(function(){ + _337(this,_394); + _343(this); + }); + },add:function(jq,_395){ + return jq.each(function(){ + _364(this,_395); + }); + },close:function(jq,_396){ + return jq.each(function(){ + _371(this,_396); + }); + },getTab:function(jq,_397){ + return _376(jq[0],_397); + },getTabIndex:function(jq,tab){ + return _363(jq[0],tab); + },getSelected:function(jq){ + return _345(jq[0]); + },select:function(jq,_398){ + return jq.each(function(){ + _368(this,_398); + }); + },unselect:function(jq,_399){ + return jq.each(function(){ + _385(this,_399); + }); + },exists:function(jq,_39a){ + return _375(jq[0],_39a); + },update:function(jq,_39b){ + return jq.each(function(){ + _369(this,_39b); + }); + },enableTab:function(jq,_39c){ + return jq.each(function(){ + var opts=$(this).tabs("getTab",_39c).panel("options"); + opts.tab.removeClass("tabs-disabled"); + opts.disabled=false; + }); + },disableTab:function(jq,_39d){ + return jq.each(function(){ + var opts=$(this).tabs("getTab",_39d).panel("options"); + opts.tab.addClass("tabs-disabled"); + opts.disabled=true; + }); + },showHeader:function(jq){ + return jq.each(function(){ + _38b(this,true); + }); + },hideHeader:function(jq){ + return jq.each(function(){ + _38b(this,false); + }); + },showTool:function(jq){ + return jq.each(function(){ + _38e(this,true); + }); + },hideTool:function(jq){ + return jq.each(function(){ + _38e(this,false); + }); + },scrollBy:function(jq,_39e){ + return jq.each(function(){ + var opts=$(this).tabs("options"); + var wrap=$(this).find(">div.tabs-header>div.tabs-wrap"); + var pos=Math.min(wrap._scrollLeft()+_39e,_39f()); + wrap.animate({scrollLeft:pos},opts.scrollDuration); + function _39f(){ + var w=0; + var ul=wrap.children("ul"); + ul.children("li").each(function(){ + w+=$(this).outerWidth(true); + }); + return w-wrap.width()+(ul.outerWidth()-ul.width()); + }; + }); + }}; + $.fn.tabs.parseOptions=function(_3a0){ + return $.extend({},$.parser.parseOptions(_3a0,["tools","toolPosition","tabPosition",{fit:"boolean",border:"boolean",plain:"boolean"},{headerWidth:"number",tabWidth:"number",tabHeight:"number",selected:"number"},{showHeader:"boolean",justified:"boolean",narrow:"boolean",pill:"boolean"}])); + }; + $.fn.tabs.defaults={width:"auto",height:"auto",headerWidth:150,tabWidth:"auto",tabHeight:27,selected:0,showHeader:true,plain:false,fit:false,border:true,justified:false,narrow:false,pill:false,tools:null,toolPosition:"right",tabPosition:"top",scrollIncrement:100,scrollDuration:400,onLoad:function(_3a1){ + },onSelect:function(_3a2,_3a3){ + },onUnselect:function(_3a4,_3a5){ + },onBeforeClose:function(_3a6,_3a7){ + },onClose:function(_3a8,_3a9){ + },onAdd:function(_3aa,_3ab){ + },onUpdate:function(_3ac,_3ad){ + },onContextMenu:function(e,_3ae,_3af){ + }}; +})(jQuery); +(function($){ + var _3b0=false; + function _3b1(_3b2,_3b3){ + var _3b4=$.data(_3b2,"layout"); + var opts=_3b4.options; + var _3b5=_3b4.panels; + var cc=$(_3b2); + if(_3b3){ + $.extend(opts,{width:_3b3.width,height:_3b3.height}); + } + if(_3b2.tagName.toLowerCase()=="body"){ + cc._size("fit"); + }else{ + cc._size(opts); + } + var cpos={top:0,left:0,width:cc.width(),height:cc.height()}; + _3b6(_3b7(_3b5.expandNorth)?_3b5.expandNorth:_3b5.north,"n"); + _3b6(_3b7(_3b5.expandSouth)?_3b5.expandSouth:_3b5.south,"s"); + _3b8(_3b7(_3b5.expandEast)?_3b5.expandEast:_3b5.east,"e"); + _3b8(_3b7(_3b5.expandWest)?_3b5.expandWest:_3b5.west,"w"); + _3b5.center.panel("resize",cpos); + function _3b6(pp,type){ + if(!pp.length||!_3b7(pp)){ + return; + } + var opts=pp.panel("options"); + pp.panel("resize",{width:cc.width(),height:opts.height}); + var _3b9=pp.panel("panel").outerHeight(); + pp.panel("move",{left:0,top:(type=="n"?0:cc.height()-_3b9)}); + cpos.height-=_3b9; + if(type=="n"){ + cpos.top+=_3b9; + if(!opts.split&&opts.border){ + cpos.top--; + } + } + if(!opts.split&&opts.border){ + cpos.height++; + } + }; + function _3b8(pp,type){ + if(!pp.length||!_3b7(pp)){ + return; + } + var opts=pp.panel("options"); + pp.panel("resize",{width:opts.width,height:cpos.height}); + var _3ba=pp.panel("panel").outerWidth(); + pp.panel("move",{left:(type=="e"?cc.width()-_3ba:0),top:cpos.top}); + cpos.width-=_3ba; + if(type=="w"){ + cpos.left+=_3ba; + if(!opts.split&&opts.border){ + cpos.left--; + } + } + if(!opts.split&&opts.border){ + cpos.width++; + } + }; + }; + function init(_3bb){ + var cc=$(_3bb); + cc.addClass("layout"); + function _3bc(el){ + var _3bd=$.fn.layout.parsePanelOptions(el); + if("north,south,east,west,center".indexOf(_3bd.region)>=0){ + _3c0(_3bb,_3bd,el); + } + }; + var opts=cc.layout("options"); + var _3be=opts.onAdd; + opts.onAdd=function(){ + }; + cc.find(">div,>form>div").each(function(){ + _3bc(this); + }); + opts.onAdd=_3be; + cc.append("
        "); + cc.bind("_resize",function(e,_3bf){ + if($(this).hasClass("easyui-fluid")||_3bf){ + _3b1(_3bb); + } + return false; + }); + }; + function _3c0(_3c1,_3c2,el){ + _3c2.region=_3c2.region||"center"; + var _3c3=$.data(_3c1,"layout").panels; + var cc=$(_3c1); + var dir=_3c2.region; + if(_3c3[dir].length){ + return; + } + var pp=$(el); + if(!pp.length){ + pp=$("
        ").appendTo(cc); + } + var _3c4=$.extend({},$.fn.layout.paneldefaults,{width:(pp.length?parseInt(pp[0].style.width)||pp.outerWidth():"auto"),height:(pp.length?parseInt(pp[0].style.height)||pp.outerHeight():"auto"),doSize:false,collapsible:true,onOpen:function(){ + var tool=$(this).panel("header").children("div.panel-tool"); + tool.children("a.panel-tool-collapse").hide(); + var _3c5={north:"up",south:"down",east:"right",west:"left"}; + if(!_3c5[dir]){ + return; + } + var _3c6="layout-button-"+_3c5[dir]; + var t=tool.children("a."+_3c6); + if(!t.length){ + t=$("").addClass(_3c6).appendTo(tool); + t.bind("click",{dir:dir},function(e){ + _3dd(_3c1,e.data.dir); + return false; + }); + } + $(this).panel("options").collapsible?t.show():t.hide(); + }},_3c2,{cls:((_3c2.cls||"")+" layout-panel layout-panel-"+dir),bodyCls:((_3c2.bodyCls||"")+" layout-body")}); + pp.panel(_3c4); + _3c3[dir]=pp; + var _3c7={north:"s",south:"n",east:"w",west:"e"}; + var _3c8=pp.panel("panel"); + if(pp.panel("options").split){ + _3c8.addClass("layout-split-"+dir); + } + _3c8.resizable($.extend({},{handles:(_3c7[dir]||""),disabled:(!pp.panel("options").split),onStartResize:function(e){ + _3b0=true; + if(dir=="north"||dir=="south"){ + var _3c9=$(">div.layout-split-proxy-v",_3c1); + }else{ + var _3c9=$(">div.layout-split-proxy-h",_3c1); + } + var top=0,left=0,_3ca=0,_3cb=0; + var pos={display:"block"}; + if(dir=="north"){ + pos.top=parseInt(_3c8.css("top"))+_3c8.outerHeight()-_3c9.height(); + pos.left=parseInt(_3c8.css("left")); + pos.width=_3c8.outerWidth(); + pos.height=_3c9.height(); + }else{ + if(dir=="south"){ + pos.top=parseInt(_3c8.css("top")); + pos.left=parseInt(_3c8.css("left")); + pos.width=_3c8.outerWidth(); + pos.height=_3c9.height(); + }else{ + if(dir=="east"){ + pos.top=parseInt(_3c8.css("top"))||0; + pos.left=parseInt(_3c8.css("left"))||0; + pos.width=_3c9.width(); + pos.height=_3c8.outerHeight(); + }else{ + if(dir=="west"){ + pos.top=parseInt(_3c8.css("top"))||0; + pos.left=_3c8.outerWidth()-_3c9.width(); + pos.width=_3c9.width(); + pos.height=_3c8.outerHeight(); + } + } + } + } + _3c9.css(pos); + $("
        ").css({left:0,top:0,width:cc.width(),height:cc.height()}).appendTo(cc); + },onResize:function(e){ + if(dir=="north"||dir=="south"){ + var _3cc=_3cd(this); + $(this).resizable("options").maxHeight=_3cc; + var _3ce=$(">div.layout-split-proxy-v",_3c1); + var top=dir=="north"?e.data.height-_3ce.height():$(_3c1).height()-e.data.height; + _3ce.css("top",top); + }else{ + var _3cf=_3cd(this); + $(this).resizable("options").maxWidth=_3cf; + var _3ce=$(">div.layout-split-proxy-h",_3c1); + var left=dir=="west"?e.data.width-_3ce.width():$(_3c1).width()-e.data.width; + _3ce.css("left",left); + } + return false; + },onStopResize:function(e){ + cc.children("div.layout-split-proxy-v,div.layout-split-proxy-h").hide(); + pp.panel("resize",e.data); + _3b1(_3c1); + _3b0=false; + cc.find(">div.layout-mask").remove(); + }},_3c2)); + cc.layout("options").onAdd.call(_3c1,dir); + function _3cd(p){ + var _3d0="expand"+dir.substring(0,1).toUpperCase()+dir.substring(1); + var _3d1=_3c3["center"]; + var _3d2=(dir=="north"||dir=="south")?"minHeight":"minWidth"; + var _3d3=(dir=="north"||dir=="south")?"maxHeight":"maxWidth"; + var _3d4=(dir=="north"||dir=="south")?"_outerHeight":"_outerWidth"; + var _3d5=$.parser.parseValue(_3d3,_3c3[dir].panel("options")[_3d3],$(_3c1)); + var _3d6=$.parser.parseValue(_3d2,_3d1.panel("options")[_3d2],$(_3c1)); + var _3d7=_3d1.panel("panel")[_3d4]()-_3d6; + if(_3b7(_3c3[_3d0])){ + _3d7+=_3c3[_3d0][_3d4]()-1; + }else{ + _3d7+=$(p)[_3d4](); + } + if(_3d7>_3d5){ + _3d7=_3d5; + } + return _3d7; + }; + }; + function _3d8(_3d9,_3da){ + var _3db=$.data(_3d9,"layout").panels; + if(_3db[_3da].length){ + _3db[_3da].panel("destroy"); + _3db[_3da]=$(); + var _3dc="expand"+_3da.substring(0,1).toUpperCase()+_3da.substring(1); + if(_3db[_3dc]){ + _3db[_3dc].panel("destroy"); + _3db[_3dc]=undefined; + } + $(_3d9).layout("options").onRemove.call(_3d9,_3da); + } + }; + function _3dd(_3de,_3df,_3e0){ + if(_3e0==undefined){ + _3e0="normal"; + } + var _3e1=$.data(_3de,"layout").panels; + var p=_3e1[_3df]; + var _3e2=p.panel("options"); + if(_3e2.onBeforeCollapse.call(p)==false){ + return; + } + var _3e3="expand"+_3df.substring(0,1).toUpperCase()+_3df.substring(1); + if(!_3e1[_3e3]){ + _3e1[_3e3]=_3e4(_3df); + var ep=_3e1[_3e3].panel("panel"); + if(!_3e2.expandMode){ + ep.css("cursor","default"); + }else{ + ep.bind("click",function(){ + if(_3e2.expandMode=="dock"){ + _3f0(_3de,_3df); + }else{ + p.panel("expand",false).panel("open"); + var _3e5=_3e6(); + p.panel("resize",_3e5.collapse); + p.panel("panel").animate(_3e5.expand,function(){ + $(this).unbind(".layout").bind("mouseleave.layout",{region:_3df},function(e){ + if(_3b0==true){ + return; + } + if($("body>div.combo-p>div.combo-panel:visible").length){ + return; + } + _3dd(_3de,e.data.region); + }); + $(_3de).layout("options").onExpand.call(_3de,_3df); + }); + } + return false; + }); + } + } + var _3e7=_3e6(); + if(!_3b7(_3e1[_3e3])){ + _3e1.center.panel("resize",_3e7.resizeC); + } + p.panel("panel").animate(_3e7.collapse,_3e0,function(){ + p.panel("collapse",false).panel("close"); + _3e1[_3e3].panel("open").panel("resize",_3e7.expandP); + $(this).unbind(".layout"); + $(_3de).layout("options").onCollapse.call(_3de,_3df); + }); + function _3e4(dir){ + var _3e8={"east":"left","west":"right","north":"down","south":"up"}; + var isns=(_3e2.region=="north"||_3e2.region=="south"); + var icon="layout-button-"+_3e8[dir]; + var p=$("
        ").appendTo(_3de); + p.panel($.extend({},$.fn.layout.paneldefaults,{cls:("layout-expand layout-expand-"+dir),title:" ",titleDirection:_3e2.titleDirection,iconCls:(_3e2.hideCollapsedContent?null:_3e2.iconCls),closed:true,minWidth:0,minHeight:0,doSize:false,region:_3e2.region,collapsedSize:_3e2.collapsedSize,noheader:(!isns&&_3e2.hideExpandTool),tools:((isns&&_3e2.hideExpandTool)?null:[{iconCls:icon,handler:function(){ + _3f0(_3de,_3df); + return false; + }}]),onResize:function(){ + var _3e9=$(this).children(".layout-expand-title"); + if(_3e9.length){ + _3e9._outerWidth($(this).height()); + var left=($(this).width()-Math.min(_3e9._outerWidth(),_3e9._outerHeight()))/2; + var top=Math.max(_3e9._outerWidth(),_3e9._outerHeight()); + if(_3e9.hasClass("layout-expand-title-down")){ + left+=Math.min(_3e9._outerWidth(),_3e9._outerHeight()); + top=0; + } + _3e9.css({left:(left+"px"),top:(top+"px")}); + } + }})); + if(!_3e2.hideCollapsedContent){ + var _3ea=typeof _3e2.collapsedContent=="function"?_3e2.collapsedContent.call(p[0],_3e2.title):_3e2.collapsedContent; + isns?p.panel("setTitle",_3ea):p.html(_3ea); + } + p.panel("panel").hover(function(){ + $(this).addClass("layout-expand-over"); + },function(){ + $(this).removeClass("layout-expand-over"); + }); + return p; + }; + function _3e6(){ + var cc=$(_3de); + var _3eb=_3e1.center.panel("options"); + var _3ec=_3e2.collapsedSize; + if(_3df=="east"){ + var _3ed=p.panel("panel")._outerWidth(); + var _3ee=_3eb.width+_3ed-_3ec; + if(_3e2.split||!_3e2.border){ + _3ee++; + } + return {resizeC:{width:_3ee},expand:{left:cc.width()-_3ed},expandP:{top:_3eb.top,left:cc.width()-_3ec,width:_3ec,height:_3eb.height},collapse:{left:cc.width(),top:_3eb.top,height:_3eb.height}}; + }else{ + if(_3df=="west"){ + var _3ed=p.panel("panel")._outerWidth(); + var _3ee=_3eb.width+_3ed-_3ec; + if(_3e2.split||!_3e2.border){ + _3ee++; + } + return {resizeC:{width:_3ee,left:_3ec-1},expand:{left:0},expandP:{left:0,top:_3eb.top,width:_3ec,height:_3eb.height},collapse:{left:-_3ed,top:_3eb.top,height:_3eb.height}}; + }else{ + if(_3df=="north"){ + var _3ef=p.panel("panel")._outerHeight(); + var hh=_3eb.height; + if(!_3b7(_3e1.expandNorth)){ + hh+=_3ef-_3ec+((_3e2.split||!_3e2.border)?1:0); + } + _3e1.east.add(_3e1.west).add(_3e1.expandEast).add(_3e1.expandWest).panel("resize",{top:_3ec-1,height:hh}); + return {resizeC:{top:_3ec-1,height:hh},expand:{top:0},expandP:{top:0,left:0,width:cc.width(),height:_3ec},collapse:{top:-_3ef,width:cc.width()}}; + }else{ + if(_3df=="south"){ + var _3ef=p.panel("panel")._outerHeight(); + var hh=_3eb.height; + if(!_3b7(_3e1.expandSouth)){ + hh+=_3ef-_3ec+((_3e2.split||!_3e2.border)?1:0); + } + _3e1.east.add(_3e1.west).add(_3e1.expandEast).add(_3e1.expandWest).panel("resize",{height:hh}); + return {resizeC:{height:hh},expand:{top:cc.height()-_3ef},expandP:{top:cc.height()-_3ec,left:0,width:cc.width(),height:_3ec},collapse:{top:cc.height(),width:cc.width()}}; + } + } + } + } + }; + }; + function _3f0(_3f1,_3f2){ + var _3f3=$.data(_3f1,"layout").panels; + var p=_3f3[_3f2]; + var _3f4=p.panel("options"); + if(_3f4.onBeforeExpand.call(p)==false){ + return; + } + var _3f5="expand"+_3f2.substring(0,1).toUpperCase()+_3f2.substring(1); + if(_3f3[_3f5]){ + _3f3[_3f5].panel("close"); + p.panel("panel").stop(true,true); + p.panel("expand",false).panel("open"); + var _3f6=_3f7(); + p.panel("resize",_3f6.collapse); + p.panel("panel").animate(_3f6.expand,function(){ + _3b1(_3f1); + $(_3f1).layout("options").onExpand.call(_3f1,_3f2); + }); + } + function _3f7(){ + var cc=$(_3f1); + var _3f8=_3f3.center.panel("options"); + if(_3f2=="east"&&_3f3.expandEast){ + return {collapse:{left:cc.width(),top:_3f8.top,height:_3f8.height},expand:{left:cc.width()-p.panel("panel")._outerWidth()}}; + }else{ + if(_3f2=="west"&&_3f3.expandWest){ + return {collapse:{left:-p.panel("panel")._outerWidth(),top:_3f8.top,height:_3f8.height},expand:{left:0}}; + }else{ + if(_3f2=="north"&&_3f3.expandNorth){ + return {collapse:{top:-p.panel("panel")._outerHeight(),width:cc.width()},expand:{top:0}}; + }else{ + if(_3f2=="south"&&_3f3.expandSouth){ + return {collapse:{top:cc.height(),width:cc.width()},expand:{top:cc.height()-p.panel("panel")._outerHeight()}}; + } + } + } + } + }; + }; + function _3b7(pp){ + if(!pp){ + return false; + } + if(pp.length){ + return pp.panel("panel").is(":visible"); + }else{ + return false; + } + }; + function _3f9(_3fa){ + var _3fb=$.data(_3fa,"layout"); + var opts=_3fb.options; + var _3fc=_3fb.panels; + var _3fd=opts.onCollapse; + opts.onCollapse=function(){ + }; + _3fe("east"); + _3fe("west"); + _3fe("north"); + _3fe("south"); + opts.onCollapse=_3fd; + function _3fe(_3ff){ + var p=_3fc[_3ff]; + if(p.length&&p.panel("options").collapsed){ + _3dd(_3fa,_3ff,0); + } + }; + }; + function _400(_401,_402,_403){ + var p=$(_401).layout("panel",_402); + p.panel("options").split=_403; + var cls="layout-split-"+_402; + var _404=p.panel("panel").removeClass(cls); + if(_403){ + _404.addClass(cls); + } + _404.resizable({disabled:(!_403)}); + _3b1(_401); + }; + $.fn.layout=function(_405,_406){ + if(typeof _405=="string"){ + return $.fn.layout.methods[_405](this,_406); + } + _405=_405||{}; + return this.each(function(){ + var _407=$.data(this,"layout"); + if(_407){ + $.extend(_407.options,_405); + }else{ + var opts=$.extend({},$.fn.layout.defaults,$.fn.layout.parseOptions(this),_405); + $.data(this,"layout",{options:opts,panels:{center:$(),north:$(),south:$(),east:$(),west:$()}}); + init(this); + } + _3b1(this); + _3f9(this); + }); + }; + $.fn.layout.methods={options:function(jq){ + return $.data(jq[0],"layout").options; + },resize:function(jq,_408){ + return jq.each(function(){ + _3b1(this,_408); + }); + },panel:function(jq,_409){ + return $.data(jq[0],"layout").panels[_409]; + },collapse:function(jq,_40a){ + return jq.each(function(){ + _3dd(this,_40a); + }); + },expand:function(jq,_40b){ + return jq.each(function(){ + _3f0(this,_40b); + }); + },add:function(jq,_40c){ + return jq.each(function(){ + _3c0(this,_40c); + _3b1(this); + if($(this).layout("panel",_40c.region).panel("options").collapsed){ + _3dd(this,_40c.region,0); + } + }); + },remove:function(jq,_40d){ + return jq.each(function(){ + _3d8(this,_40d); + _3b1(this); + }); + },split:function(jq,_40e){ + return jq.each(function(){ + _400(this,_40e,true); + }); + },unsplit:function(jq,_40f){ + return jq.each(function(){ + _400(this,_40f,false); + }); + }}; + $.fn.layout.parseOptions=function(_410){ + return $.extend({},$.parser.parseOptions(_410,[{fit:"boolean"}])); + }; + $.fn.layout.defaults={fit:false,onExpand:function(_411){ + },onCollapse:function(_412){ + },onAdd:function(_413){ + },onRemove:function(_414){ + }}; + $.fn.layout.parsePanelOptions=function(_415){ + var t=$(_415); + return $.extend({},$.fn.panel.parseOptions(_415),$.parser.parseOptions(_415,["region",{split:"boolean",collpasedSize:"number",minWidth:"number",minHeight:"number",maxWidth:"number",maxHeight:"number"}])); + }; + $.fn.layout.paneldefaults=$.extend({},$.fn.panel.defaults,{region:null,split:false,collapsedSize:28,expandMode:"float",hideExpandTool:false,hideCollapsedContent:true,collapsedContent:function(_416){ + var p=$(this); + var opts=p.panel("options"); + if(opts.region=="north"||opts.region=="south"){ + return _416; + } + var cc=[]; + if(opts.iconCls){ + cc.push("
        "); + } + cc.push("
        "); + cc.push(_416); + cc.push("
        "); + return cc.join(""); + },minWidth:10,minHeight:10,maxWidth:10000,maxHeight:10000}); +})(jQuery); +(function($){ + $(function(){ + $(document).unbind(".menu").bind("mousedown.menu",function(e){ + var m=$(e.target).closest("div.menu,div.combo-p"); + if(m.length){ + return; + } + $("body>div.menu-top:visible").not(".menu-inline").menu("hide"); + _417($("body>div.menu:visible").not(".menu-inline")); + }); + }); + function init(_418){ + var opts=$.data(_418,"menu").options; + $(_418).addClass("menu-top"); + opts.inline?$(_418).addClass("menu-inline"):$(_418).appendTo("body"); + $(_418).bind("_resize",function(e,_419){ + if($(this).hasClass("easyui-fluid")||_419){ + $(_418).menu("resize",_418); + } + return false; + }); + var _41a=_41b($(_418)); + for(var i=0;i<_41a.length;i++){ + _41e(_418,_41a[i]); + } + function _41b(menu){ + var _41c=[]; + menu.addClass("menu"); + _41c.push(menu); + if(!menu.hasClass("menu-content")){ + menu.children("div").each(function(){ + var _41d=$(this).children("div"); + if(_41d.length){ + _41d.appendTo("body"); + this.submenu=_41d; + var mm=_41b(_41d); + _41c=_41c.concat(mm); + } + }); + } + return _41c; + }; + }; + function _41e(_41f,div){ + var menu=$(div).addClass("menu"); + if(!menu.data("menu")){ + menu.data("menu",{options:$.parser.parseOptions(menu[0],["width","height"])}); + } + if(!menu.hasClass("menu-content")){ + menu.children("div").each(function(){ + _420(_41f,this); + }); + $("
        ").prependTo(menu); + } + _421(_41f,menu); + if(!menu.hasClass("menu-inline")){ + menu.hide(); + } + _422(_41f,menu); + }; + function _420(_423,div,_424){ + var item=$(div); + var _425=$.extend({},$.parser.parseOptions(item[0],["id","name","iconCls","href",{separator:"boolean"}]),{disabled:(item.attr("disabled")?true:undefined),text:$.trim(item.html()),onclick:item[0].onclick},_424||{}); + _425.onclick=_425.onclick||_425.handler||null; + item.data("menuitem",{options:_425}); + if(_425.separator){ + item.addClass("menu-sep"); + } + if(!item.hasClass("menu-sep")){ + item.addClass("menu-item"); + item.empty().append($("
        ").html(_425.text)); + if(_425.iconCls){ + $("
        ").addClass(_425.iconCls).appendTo(item); + } + if(_425.id){ + item.attr("id",_425.id); + } + if(_425.onclick){ + if(typeof _425.onclick=="string"){ + item.attr("onclick",_425.onclick); + }else{ + item[0].onclick=eval(_425.onclick); + } + } + if(_425.disabled){ + _426(_423,item[0],true); + } + if(item[0].submenu){ + $("
        ").appendTo(item); + } + } + }; + function _421(_427,menu){ + var opts=$.data(_427,"menu").options; + var _428=menu.attr("style")||""; + var _429=menu.is(":visible"); + menu.css({display:"block",left:-10000,height:"auto",overflow:"hidden"}); + menu.find(".menu-item").each(function(){ + $(this)._outerHeight(opts.itemHeight); + $(this).find(".menu-text").css({height:(opts.itemHeight-2)+"px",lineHeight:(opts.itemHeight-2)+"px"}); + }); + menu.removeClass("menu-noline").addClass(opts.noline?"menu-noline":""); + var _42a=menu.data("menu").options; + var _42b=_42a.width; + var _42c=_42a.height; + if(isNaN(parseInt(_42b))){ + _42b=0; + menu.find("div.menu-text").each(function(){ + if(_42b<$(this).outerWidth()){ + _42b=$(this).outerWidth(); + } + }); + _42b=_42b?_42b+40:""; + } + var _42d=menu.outerHeight(); + if(isNaN(parseInt(_42c))){ + _42c=_42d; + if(menu.hasClass("menu-top")&&opts.alignTo){ + var at=$(opts.alignTo); + var h1=at.offset().top-$(document).scrollTop(); + var h2=$(window)._outerHeight()+$(document).scrollTop()-at.offset().top-at._outerHeight(); + _42c=Math.min(_42c,Math.max(h1,h2)); + }else{ + if(_42c>$(window)._outerHeight()){ + _42c=$(window).height(); + } + } + } + menu.attr("style",_428); + menu.show(); + menu._size($.extend({},_42a,{width:_42b,height:_42c,minWidth:_42a.minWidth||opts.minWidth,maxWidth:_42a.maxWidth||opts.maxWidth})); + menu.find(".easyui-fluid").triggerHandler("_resize",[true]); + menu.css("overflow",menu.outerHeight()<_42d?"auto":"hidden"); + menu.children("div.menu-line")._outerHeight(_42d-2); + if(!_429){ + menu.hide(); + } + }; + function _422(_42e,menu){ + var _42f=$.data(_42e,"menu"); + var opts=_42f.options; + menu.unbind(".menu"); + for(var _430 in opts.events){ + menu.bind(_430+".menu",{target:_42e},opts.events[_430]); + } + }; + function _431(e){ + var _432=e.data.target; + var _433=$.data(_432,"menu"); + if(_433.timer){ + clearTimeout(_433.timer); + _433.timer=null; + } + }; + function _434(e){ + var _435=e.data.target; + var _436=$.data(_435,"menu"); + if(_436.options.hideOnUnhover){ + _436.timer=setTimeout(function(){ + _437(_435,$(_435).hasClass("menu-inline")); + },_436.options.duration); + } + }; + function _438(e){ + var _439=e.data.target; + var item=$(e.target).closest(".menu-item"); + if(item.length){ + item.siblings().each(function(){ + if(this.submenu){ + _417(this.submenu); + } + $(this).removeClass("menu-active"); + }); + item.addClass("menu-active"); + if(item.hasClass("menu-item-disabled")){ + item.addClass("menu-active-disabled"); + return; + } + var _43a=item[0].submenu; + if(_43a){ + $(_439).menu("show",{menu:_43a,parent:item}); + } + } + }; + function _43b(e){ + var item=$(e.target).closest(".menu-item"); + if(item.length){ + item.removeClass("menu-active menu-active-disabled"); + var _43c=item[0].submenu; + if(_43c){ + if(e.pageX>=parseInt(_43c.css("left"))){ + item.addClass("menu-active"); + }else{ + _417(_43c); + } + }else{ + item.removeClass("menu-active"); + } + } + }; + function _43d(e){ + var _43e=e.data.target; + var item=$(e.target).closest(".menu-item"); + if(item.length){ + var opts=$(_43e).data("menu").options; + var _43f=item.data("menuitem").options; + if(_43f.disabled){ + return; + } + if(!item[0].submenu){ + _437(_43e,opts.inline); + if(_43f.href){ + location.href=_43f.href; + } + } + item.trigger("mouseenter"); + opts.onClick.call(_43e,$(_43e).menu("getItem",item[0])); + } + }; + function _437(_440,_441){ + var _442=$.data(_440,"menu"); + if(_442){ + if($(_440).is(":visible")){ + _417($(_440)); + if(_441){ + $(_440).show(); + }else{ + _442.options.onHide.call(_440); + } + } + } + return false; + }; + function _443(_444,_445){ + _445=_445||{}; + var left,top; + var opts=$.data(_444,"menu").options; + var menu=$(_445.menu||_444); + $(_444).menu("resize",menu[0]); + if(menu.hasClass("menu-top")){ + $.extend(opts,_445); + left=opts.left; + top=opts.top; + if(opts.alignTo){ + var at=$(opts.alignTo); + left=at.offset().left; + top=at.offset().top+at._outerHeight(); + if(opts.align=="right"){ + left+=at.outerWidth()-menu.outerWidth(); + } + } + if(left+menu.outerWidth()>$(window)._outerWidth()+$(document)._scrollLeft()){ + left=$(window)._outerWidth()+$(document).scrollLeft()-menu.outerWidth()-5; + } + if(left<0){ + left=0; + } + top=_446(top,opts.alignTo); + }else{ + var _447=_445.parent; + left=_447.offset().left+_447.outerWidth()-2; + if(left+menu.outerWidth()+5>$(window)._outerWidth()+$(document).scrollLeft()){ + left=_447.offset().left-menu.outerWidth()+2; + } + top=_446(_447.offset().top-3); + } + function _446(top,_448){ + if(top+menu.outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){ + if(_448){ + top=$(_448).offset().top-menu._outerHeight(); + }else{ + top=$(window)._outerHeight()+$(document).scrollTop()-menu.outerHeight(); + } + } + if(top<0){ + top=0; + } + return top; + }; + menu.css(opts.position.call(_444,menu[0],left,top)); + menu.show(0,function(){ + if(!menu[0].shadow){ + menu[0].shadow=$("
        ").insertAfter(menu); + } + menu[0].shadow.css({display:(menu.hasClass("menu-inline")?"none":"block"),zIndex:$.fn.menu.defaults.zIndex++,left:menu.css("left"),top:menu.css("top"),width:menu.outerWidth(),height:menu.outerHeight()}); + menu.css("z-index",$.fn.menu.defaults.zIndex++); + if(menu.hasClass("menu-top")){ + opts.onShow.call(_444); + } + }); + }; + function _417(menu){ + if(menu&&menu.length){ + _449(menu); + menu.find("div.menu-item").each(function(){ + if(this.submenu){ + _417(this.submenu); + } + $(this).removeClass("menu-active"); + }); + } + function _449(m){ + m.stop(true,true); + if(m[0].shadow){ + m[0].shadow.hide(); + } + m.hide(); + }; + }; + function _44a(_44b,text){ + var _44c=null; + var tmp=$("
        "); + function find(menu){ + menu.children("div.menu-item").each(function(){ + var item=$(_44b).menu("getItem",this); + var s=tmp.empty().html(item.text).text(); + if(text==$.trim(s)){ + _44c=item; + }else{ + if(this.submenu&&!_44c){ + find(this.submenu); + } + } + }); + }; + find($(_44b)); + tmp.remove(); + return _44c; + }; + function _426(_44d,_44e,_44f){ + var t=$(_44e); + if(t.hasClass("menu-item")){ + var opts=t.data("menuitem").options; + opts.disabled=_44f; + if(_44f){ + t.addClass("menu-item-disabled"); + t[0].onclick=null; + }else{ + t.removeClass("menu-item-disabled"); + t[0].onclick=opts.onclick; + } + } + }; + function _450(_451,_452){ + var opts=$.data(_451,"menu").options; + var menu=$(_451); + if(_452.parent){ + if(!_452.parent.submenu){ + var _453=$("
        ").appendTo("body"); + _452.parent.submenu=_453; + $("
        ").appendTo(_452.parent); + _41e(_451,_453); + } + menu=_452.parent.submenu; + } + var div=$("
        ").appendTo(menu); + _420(_451,div,_452); + }; + function _454(_455,_456){ + function _457(el){ + if(el.submenu){ + el.submenu.children("div.menu-item").each(function(){ + _457(this); + }); + var _458=el.submenu[0].shadow; + if(_458){ + _458.remove(); + } + el.submenu.remove(); + } + $(el).remove(); + }; + _457(_456); + }; + function _459(_45a,_45b,_45c){ + var menu=$(_45b).parent(); + if(_45c){ + $(_45b).show(); + }else{ + $(_45b).hide(); + } + _421(_45a,menu); + }; + function _45d(_45e){ + $(_45e).children("div.menu-item").each(function(){ + _454(_45e,this); + }); + if(_45e.shadow){ + _45e.shadow.remove(); + } + $(_45e).remove(); + }; + $.fn.menu=function(_45f,_460){ + if(typeof _45f=="string"){ + return $.fn.menu.methods[_45f](this,_460); + } + _45f=_45f||{}; + return this.each(function(){ + var _461=$.data(this,"menu"); + if(_461){ + $.extend(_461.options,_45f); + }else{ + _461=$.data(this,"menu",{options:$.extend({},$.fn.menu.defaults,$.fn.menu.parseOptions(this),_45f)}); + init(this); + } + $(this).css({left:_461.options.left,top:_461.options.top}); + }); + }; + $.fn.menu.methods={options:function(jq){ + return $.data(jq[0],"menu").options; + },show:function(jq,pos){ + return jq.each(function(){ + _443(this,pos); + }); + },hide:function(jq){ + return jq.each(function(){ + _437(this); + }); + },destroy:function(jq){ + return jq.each(function(){ + _45d(this); + }); + },setText:function(jq,_462){ + return jq.each(function(){ + var item=$(_462.target).data("menuitem").options; + item.text=_462.text; + $(_462.target).children("div.menu-text").html(_462.text); + }); + },setIcon:function(jq,_463){ + return jq.each(function(){ + var item=$(_463.target).data("menuitem").options; + item.iconCls=_463.iconCls; + $(_463.target).children("div.menu-icon").remove(); + if(_463.iconCls){ + $("
        ").addClass(_463.iconCls).appendTo(_463.target); + } + }); + },getItem:function(jq,_464){ + var item=$(_464).data("menuitem").options; + return $.extend({},item,{target:$(_464)[0]}); + },findItem:function(jq,text){ + return _44a(jq[0],text); + },appendItem:function(jq,_465){ + return jq.each(function(){ + _450(this,_465); + }); + },removeItem:function(jq,_466){ + return jq.each(function(){ + _454(this,_466); + }); + },enableItem:function(jq,_467){ + return jq.each(function(){ + _426(this,_467,false); + }); + },disableItem:function(jq,_468){ + return jq.each(function(){ + _426(this,_468,true); + }); + },showItem:function(jq,_469){ + return jq.each(function(){ + _459(this,_469,true); + }); + },hideItem:function(jq,_46a){ + return jq.each(function(){ + _459(this,_46a,false); + }); + },resize:function(jq,_46b){ + return jq.each(function(){ + _421(this,_46b?$(_46b):$(this)); + }); + }}; + $.fn.menu.parseOptions=function(_46c){ + return $.extend({},$.parser.parseOptions(_46c,[{minWidth:"number",itemHeight:"number",duration:"number",hideOnUnhover:"boolean"},{fit:"boolean",inline:"boolean",noline:"boolean"}])); + }; + $.fn.menu.defaults={zIndex:110000,left:0,top:0,alignTo:null,align:"left",minWidth:120,itemHeight:22,duration:100,hideOnUnhover:true,inline:false,fit:false,noline:false,events:{mouseenter:_431,mouseleave:_434,mouseover:_438,mouseout:_43b,click:_43d},position:function(_46d,left,top){ + return {left:left,top:top}; + },onShow:function(){ + },onHide:function(){ + },onClick:function(item){ + }}; +})(jQuery); +(function($){ + function init(_46e){ + var opts=$.data(_46e,"menubutton").options; + var btn=$(_46e); + btn.linkbutton(opts); + if(opts.hasDownArrow){ + btn.removeClass(opts.cls.btn1+" "+opts.cls.btn2).addClass("m-btn"); + btn.removeClass("m-btn-small m-btn-medium m-btn-large").addClass("m-btn-"+opts.size); + var _46f=btn.find(".l-btn-left"); + $("").addClass(opts.cls.arrow).appendTo(_46f); + $("").addClass("m-btn-line").appendTo(_46f); + } + $(_46e).menubutton("resize"); + if(opts.menu){ + $(opts.menu).menu({duration:opts.duration}); + var _470=$(opts.menu).menu("options"); + var _471=_470.onShow; + var _472=_470.onHide; + $.extend(_470,{onShow:function(){ + var _473=$(this).menu("options"); + var btn=$(_473.alignTo); + var opts=btn.menubutton("options"); + btn.addClass((opts.plain==true)?opts.cls.btn2:opts.cls.btn1); + _471.call(this); + },onHide:function(){ + var _474=$(this).menu("options"); + var btn=$(_474.alignTo); + var opts=btn.menubutton("options"); + btn.removeClass((opts.plain==true)?opts.cls.btn2:opts.cls.btn1); + _472.call(this); + }}); + } + }; + function _475(_476){ + var opts=$.data(_476,"menubutton").options; + var btn=$(_476); + var t=btn.find("."+opts.cls.trigger); + if(!t.length){ + t=btn; + } + t.unbind(".menubutton"); + var _477=null; + t.bind("click.menubutton",function(){ + if(!_478()){ + _479(_476); + return false; + } + }).bind("mouseenter.menubutton",function(){ + if(!_478()){ + _477=setTimeout(function(){ + _479(_476); + },opts.duration); + return false; + } + }).bind("mouseleave.menubutton",function(){ + if(_477){ + clearTimeout(_477); + } + $(opts.menu).triggerHandler("mouseleave"); + }); + function _478(){ + return $(_476).linkbutton("options").disabled; + }; + }; + function _479(_47a){ + var opts=$(_47a).menubutton("options"); + if(opts.disabled||!opts.menu){ + return; + } + $("body>div.menu-top").menu("hide"); + var btn=$(_47a); + var mm=$(opts.menu); + if(mm.length){ + mm.menu("options").alignTo=btn; + mm.menu("show",{alignTo:btn,align:opts.menuAlign}); + } + btn.blur(); + }; + $.fn.menubutton=function(_47b,_47c){ + if(typeof _47b=="string"){ + var _47d=$.fn.menubutton.methods[_47b]; + if(_47d){ + return _47d(this,_47c); + }else{ + return this.linkbutton(_47b,_47c); + } + } + _47b=_47b||{}; + return this.each(function(){ + var _47e=$.data(this,"menubutton"); + if(_47e){ + $.extend(_47e.options,_47b); + }else{ + $.data(this,"menubutton",{options:$.extend({},$.fn.menubutton.defaults,$.fn.menubutton.parseOptions(this),_47b)}); + $(this).removeAttr("disabled"); + } + init(this); + _475(this); + }); + }; + $.fn.menubutton.methods={options:function(jq){ + var _47f=jq.linkbutton("options"); + return $.extend($.data(jq[0],"menubutton").options,{toggle:_47f.toggle,selected:_47f.selected,disabled:_47f.disabled}); + },destroy:function(jq){ + return jq.each(function(){ + var opts=$(this).menubutton("options"); + if(opts.menu){ + $(opts.menu).menu("destroy"); + } + $(this).remove(); + }); + }}; + $.fn.menubutton.parseOptions=function(_480){ + var t=$(_480); + return $.extend({},$.fn.linkbutton.parseOptions(_480),$.parser.parseOptions(_480,["menu",{plain:"boolean",hasDownArrow:"boolean",duration:"number"}])); + }; + $.fn.menubutton.defaults=$.extend({},$.fn.linkbutton.defaults,{plain:true,hasDownArrow:true,menu:null,menuAlign:"left",duration:100,cls:{btn1:"m-btn-active",btn2:"m-btn-plain-active",arrow:"m-btn-downarrow",trigger:"m-btn"}}); +})(jQuery); +(function($){ + function init(_481){ + var opts=$.data(_481,"splitbutton").options; + $(_481).menubutton(opts); + $(_481).addClass("s-btn"); + }; + $.fn.splitbutton=function(_482,_483){ + if(typeof _482=="string"){ + var _484=$.fn.splitbutton.methods[_482]; + if(_484){ + return _484(this,_483); + }else{ + return this.menubutton(_482,_483); + } + } + _482=_482||{}; + return this.each(function(){ + var _485=$.data(this,"splitbutton"); + if(_485){ + $.extend(_485.options,_482); + }else{ + $.data(this,"splitbutton",{options:$.extend({},$.fn.splitbutton.defaults,$.fn.splitbutton.parseOptions(this),_482)}); + $(this).removeAttr("disabled"); + } + init(this); + }); + }; + $.fn.splitbutton.methods={options:function(jq){ + var _486=jq.menubutton("options"); + var _487=$.data(jq[0],"splitbutton").options; + $.extend(_487,{disabled:_486.disabled,toggle:_486.toggle,selected:_486.selected}); + return _487; + }}; + $.fn.splitbutton.parseOptions=function(_488){ + var t=$(_488); + return $.extend({},$.fn.linkbutton.parseOptions(_488),$.parser.parseOptions(_488,["menu",{plain:"boolean",duration:"number"}])); + }; + $.fn.splitbutton.defaults=$.extend({},$.fn.linkbutton.defaults,{plain:true,menu:null,duration:100,cls:{btn1:"m-btn-active s-btn-active",btn2:"m-btn-plain-active s-btn-plain-active",arrow:"m-btn-downarrow",trigger:"m-btn-line"}}); +})(jQuery); +(function($){ + function init(_489){ + var _48a=$(""+""+""+""+""+""+""+"").insertAfter(_489); + var t=$(_489); + t.addClass("switchbutton-f").hide(); + var name=t.attr("name"); + if(name){ + t.removeAttr("name").attr("switchbuttonName",name); + _48a.find(".switchbutton-value").attr("name",name); + } + _48a.bind("_resize",function(e,_48b){ + if($(this).hasClass("easyui-fluid")||_48b){ + _48c(_489); + } + return false; + }); + return _48a; + }; + function _48c(_48d,_48e){ + var _48f=$.data(_48d,"switchbutton"); + var opts=_48f.options; + var _490=_48f.switchbutton; + if(_48e){ + $.extend(opts,_48e); + } + var _491=_490.is(":visible"); + if(!_491){ + _490.appendTo("body"); + } + _490._size(opts); + var w=_490.width(); + var h=_490.height(); + var w=_490.outerWidth(); + var h=_490.outerHeight(); + var _492=parseInt(opts.handleWidth)||_490.height(); + var _493=w*2-_492; + _490.find(".switchbutton-inner").css({width:_493+"px",height:h+"px",lineHeight:h+"px"}); + _490.find(".switchbutton-handle")._outerWidth(_492)._outerHeight(h).css({marginLeft:-_492/2+"px"}); + _490.find(".switchbutton-on").css({width:(w-_492/2)+"px",textIndent:(opts.reversed?"":"-")+_492/2+"px"}); + _490.find(".switchbutton-off").css({width:(w-_492/2)+"px",textIndent:(opts.reversed?"-":"")+_492/2+"px"}); + opts.marginWidth=w-_492; + _494(_48d,opts.checked,false); + if(!_491){ + _490.insertAfter(_48d); + } + }; + function _495(_496){ + var _497=$.data(_496,"switchbutton"); + var opts=_497.options; + var _498=_497.switchbutton; + var _499=_498.find(".switchbutton-inner"); + var on=_499.find(".switchbutton-on").html(opts.onText); + var off=_499.find(".switchbutton-off").html(opts.offText); + var _49a=_499.find(".switchbutton-handle").html(opts.handleText); + if(opts.reversed){ + off.prependTo(_499); + on.insertAfter(_49a); + }else{ + on.prependTo(_499); + off.insertAfter(_49a); + } + _498.find(".switchbutton-value")._propAttr("checked",opts.checked); + _498.removeClass("switchbutton-disabled").addClass(opts.disabled?"switchbutton-disabled":""); + _498.removeClass("switchbutton-reversed").addClass(opts.reversed?"switchbutton-reversed":""); + _494(_496,opts.checked); + _49b(_496,opts.readonly); + $(_496).switchbutton("setValue",opts.value); + }; + function _494(_49c,_49d,_49e){ + var _49f=$.data(_49c,"switchbutton"); + var opts=_49f.options; + opts.checked=_49d; + var _4a0=_49f.switchbutton.find(".switchbutton-inner"); + var _4a1=_4a0.find(".switchbutton-on"); + var _4a2=opts.reversed?(opts.checked?opts.marginWidth:0):(opts.checked?0:opts.marginWidth); + var dir=_4a1.css("float").toLowerCase(); + var css={}; + css["margin-"+dir]=-_4a2+"px"; + _49e?_4a0.animate(css,200):_4a0.css(css); + var _4a3=_4a0.find(".switchbutton-value"); + var ck=_4a3.is(":checked"); + $(_49c).add(_4a3)._propAttr("checked",opts.checked); + if(ck!=opts.checked){ + opts.onChange.call(_49c,opts.checked); + } + }; + function _4a4(_4a5,_4a6){ + var _4a7=$.data(_4a5,"switchbutton"); + var opts=_4a7.options; + var _4a8=_4a7.switchbutton; + var _4a9=_4a8.find(".switchbutton-value"); + if(_4a6){ + opts.disabled=true; + $(_4a5).add(_4a9).attr("disabled","disabled"); + _4a8.addClass("switchbutton-disabled"); + }else{ + opts.disabled=false; + $(_4a5).add(_4a9).removeAttr("disabled"); + _4a8.removeClass("switchbutton-disabled"); + } + }; + function _49b(_4aa,mode){ + var _4ab=$.data(_4aa,"switchbutton"); + var opts=_4ab.options; + opts.readonly=mode==undefined?true:mode; + _4ab.switchbutton.removeClass("switchbutton-readonly").addClass(opts.readonly?"switchbutton-readonly":""); + }; + function _4ac(_4ad){ + var _4ae=$.data(_4ad,"switchbutton"); + var opts=_4ae.options; + _4ae.switchbutton.unbind(".switchbutton").bind("click.switchbutton",function(){ + if(!opts.disabled&&!opts.readonly){ + _494(_4ad,opts.checked?false:true,true); + } + }); + }; + $.fn.switchbutton=function(_4af,_4b0){ + if(typeof _4af=="string"){ + return $.fn.switchbutton.methods[_4af](this,_4b0); + } + _4af=_4af||{}; + return this.each(function(){ + var _4b1=$.data(this,"switchbutton"); + if(_4b1){ + $.extend(_4b1.options,_4af); + }else{ + _4b1=$.data(this,"switchbutton",{options:$.extend({},$.fn.switchbutton.defaults,$.fn.switchbutton.parseOptions(this),_4af),switchbutton:init(this)}); + } + _4b1.options.originalChecked=_4b1.options.checked; + _495(this); + _48c(this); + _4ac(this); + }); + }; + $.fn.switchbutton.methods={options:function(jq){ + var _4b2=jq.data("switchbutton"); + return $.extend(_4b2.options,{value:_4b2.switchbutton.find(".switchbutton-value").val()}); + },resize:function(jq,_4b3){ + return jq.each(function(){ + _48c(this,_4b3); + }); + },enable:function(jq){ + return jq.each(function(){ + _4a4(this,false); + }); + },disable:function(jq){ + return jq.each(function(){ + _4a4(this,true); + }); + },readonly:function(jq,mode){ + return jq.each(function(){ + _49b(this,mode); + }); + },check:function(jq){ + return jq.each(function(){ + _494(this,true); + }); + },uncheck:function(jq){ + return jq.each(function(){ + _494(this,false); + }); + },clear:function(jq){ + return jq.each(function(){ + _494(this,false); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).switchbutton("options"); + _494(this,opts.originalChecked); + }); + },setValue:function(jq,_4b4){ + return jq.each(function(){ + $(this).val(_4b4); + $.data(this,"switchbutton").switchbutton.find(".switchbutton-value").val(_4b4); + }); + }}; + $.fn.switchbutton.parseOptions=function(_4b5){ + var t=$(_4b5); + return $.extend({},$.parser.parseOptions(_4b5,["onText","offText","handleText",{handleWidth:"number",reversed:"boolean"}]),{value:(t.val()||undefined),checked:(t.attr("checked")?true:undefined),disabled:(t.attr("disabled")?true:undefined),readonly:(t.attr("readonly")?true:undefined)}); + }; + $.fn.switchbutton.defaults={handleWidth:"auto",width:60,height:26,checked:false,disabled:false,readonly:false,reversed:false,onText:"ON",offText:"OFF",handleText:"",value:"on",onChange:function(_4b6){ + }}; +})(jQuery); +(function($){ + function init(_4b7){ + $(_4b7).addClass("validatebox-text"); + }; + function _4b8(_4b9){ + var _4ba=$.data(_4b9,"validatebox"); + _4ba.validating=false; + if(_4ba.vtimer){ + clearTimeout(_4ba.vtimer); + } + if(_4ba.ftimer){ + clearTimeout(_4ba.ftimer); + } + $(_4b9).tooltip("destroy"); + $(_4b9).unbind(); + $(_4b9).remove(); + }; + function _4bb(_4bc){ + var opts=$.data(_4bc,"validatebox").options; + $(_4bc).unbind(".validatebox"); + if(opts.novalidate||opts.disabled){ + return; + } + for(var _4bd in opts.events){ + $(_4bc).bind(_4bd+".validatebox",{target:_4bc},opts.events[_4bd]); + } + }; + function _4be(e){ + var _4bf=e.data.target; + var _4c0=$.data(_4bf,"validatebox"); + var opts=_4c0.options; + if($(_4bf).attr("readonly")){ + return; + } + _4c0.validating=true; + _4c0.value=opts.val(_4bf); + (function(){ + if(!$(_4bf).is(":visible")){ + _4c0.validating=false; + } + if(_4c0.validating){ + var _4c1=opts.val(_4bf); + if(_4c0.value!=_4c1){ + _4c0.value=_4c1; + if(_4c0.vtimer){ + clearTimeout(_4c0.vtimer); + } + _4c0.vtimer=setTimeout(function(){ + $(_4bf).validatebox("validate"); + },opts.delay); + }else{ + if(_4c0.message){ + opts.err(_4bf,_4c0.message); + } + } + _4c0.ftimer=setTimeout(arguments.callee,opts.interval); + } + })(); + }; + function _4c2(e){ + var _4c3=e.data.target; + var _4c4=$.data(_4c3,"validatebox"); + var opts=_4c4.options; + _4c4.validating=false; + if(_4c4.vtimer){ + clearTimeout(_4c4.vtimer); + _4c4.vtimer=undefined; + } + if(_4c4.ftimer){ + clearTimeout(_4c4.ftimer); + _4c4.ftimer=undefined; + } + if(opts.validateOnBlur){ + setTimeout(function(){ + $(_4c3).validatebox("validate"); + },0); + } + opts.err(_4c3,_4c4.message,"hide"); + }; + function _4c5(e){ + var _4c6=e.data.target; + var _4c7=$.data(_4c6,"validatebox"); + _4c7.options.err(_4c6,_4c7.message,"show"); + }; + function _4c8(e){ + var _4c9=e.data.target; + var _4ca=$.data(_4c9,"validatebox"); + if(!_4ca.validating){ + _4ca.options.err(_4c9,_4ca.message,"hide"); + } + }; + function _4cb(_4cc,_4cd,_4ce){ + var _4cf=$.data(_4cc,"validatebox"); + var opts=_4cf.options; + var t=$(_4cc); + if(_4ce=="hide"||!_4cd){ + t.tooltip("hide"); + }else{ + if((t.is(":focus")&&_4cf.validating)||_4ce=="show"){ + t.tooltip($.extend({},opts.tipOptions,{content:_4cd,position:opts.tipPosition,deltaX:opts.deltaX,deltaY:opts.deltaY})).tooltip("show"); + } + } + }; + function _4d0(_4d1){ + var _4d2=$.data(_4d1,"validatebox"); + var opts=_4d2.options; + var box=$(_4d1); + opts.onBeforeValidate.call(_4d1); + var _4d3=_4d4(); + _4d3?box.removeClass("validatebox-invalid"):box.addClass("validatebox-invalid"); + opts.err(_4d1,_4d2.message); + opts.onValidate.call(_4d1,_4d3); + return _4d3; + function _4d5(msg){ + _4d2.message=msg; + }; + function _4d6(_4d7,_4d8){ + var _4d9=opts.val(_4d1); + var _4da=/([a-zA-Z_]+)(.*)/.exec(_4d7); + var rule=opts.rules[_4da[1]]; + if(rule&&_4d9){ + var _4db=_4d8||opts.validParams||eval(_4da[2]); + if(!rule["validator"].call(_4d1,_4d9,_4db)){ + var _4dc=rule["message"]; + if(_4db){ + for(var i=0;i<_4db.length;i++){ + _4dc=_4dc.replace(new RegExp("\\{"+i+"\\}","g"),_4db[i]); + } + } + _4d5(opts.invalidMessage||_4dc); + return false; + } + } + return true; + }; + function _4d4(){ + _4d5(""); + if(!opts._validateOnCreate){ + setTimeout(function(){ + opts._validateOnCreate=true; + },0); + return true; + } + if(opts.novalidate||opts.disabled){ + return true; + } + if(opts.required){ + if(opts.val(_4d1)==""){ + _4d5(opts.missingMessage); + return false; + } + } + if(opts.validType){ + if($.isArray(opts.validType)){ + for(var i=0;i=_4ef[0]&&len<=_4ef[1]; + },message:"Please enter a value between {0} and {1}."},remote:{validator:function(_4f0,_4f1){ + var data={}; + data[_4f1[1]]=_4f0; + var _4f2=$.ajax({url:_4f1[0],dataType:"json",data:data,async:false,cache:false,type:"post"}).responseText; + return _4f2=="true"; + },message:"Please fix this field."}},onBeforeValidate:function(){ + },onValidate:function(_4f3){ + }}; +})(jQuery); +(function($){ + var _4f4=0; + function init(_4f5){ + $(_4f5).addClass("textbox-f").hide(); + var span=$(""+""+""+"").insertAfter(_4f5); + var name=$(_4f5).attr("name"); + if(name){ + span.find("input.textbox-value").attr("name",name); + $(_4f5).removeAttr("name").attr("textboxName",name); + } + return span; + }; + function _4f6(_4f7){ + var _4f8=$.data(_4f7,"textbox"); + var opts=_4f8.options; + var tb=_4f8.textbox; + var _4f9="_easyui_textbox_input"+(++_4f4); + tb.addClass(opts.cls); + tb.find(".textbox-text").remove(); + if(opts.multiline){ + $("").prependTo(tb); + }else{ + $("").prependTo(tb); + } + $("#"+_4f9).attr("tabindex",$(_4f7).attr("tabindex")||"").css("text-align",_4f7.style.textAlign||""); + tb.find(".textbox-addon").remove(); + var bb=opts.icons?$.extend(true,[],opts.icons):[]; + if(opts.iconCls){ + bb.push({iconCls:opts.iconCls,disabled:true}); + } + if(bb.length){ + var bc=$("").prependTo(tb); + bc.addClass("textbox-addon-"+opts.iconAlign); + for(var i=0;i"); + } + } + tb.find(".textbox-button").remove(); + if(opts.buttonText||opts.buttonIcon){ + var btn=$("").prependTo(tb); + btn.addClass("textbox-button-"+opts.buttonAlign).linkbutton({text:opts.buttonText,iconCls:opts.buttonIcon,onClick:function(){ + var t=$(this).parent().prev(); + t.textbox("options").onClickButton.call(t[0]); + }}); + } + if(opts.label){ + if(typeof opts.label=="object"){ + _4f8.label=$(opts.label); + _4f8.label.attr("for",_4f9); + }else{ + $(_4f8.label).remove(); + _4f8.label=$("").html(opts.label); + _4f8.label.css("textAlign",opts.labelAlign).attr("for",_4f9); + if(opts.labelPosition=="after"){ + _4f8.label.insertAfter(tb); + }else{ + _4f8.label.insertBefore(_4f7); + } + _4f8.label.removeClass("textbox-label-left textbox-label-right textbox-label-top"); + _4f8.label.addClass("textbox-label-"+opts.labelPosition); + } + }else{ + $(_4f8.label).remove(); + } + _4fa(_4f7); + _4fb(_4f7,opts.disabled); + _4fc(_4f7,opts.readonly); + }; + function _4fd(_4fe){ + var _4ff=$.data(_4fe,"textbox"); + var tb=_4ff.textbox; + tb.find(".textbox-text").validatebox("destroy"); + tb.remove(); + $(_4ff.label).remove(); + $(_4fe).remove(); + }; + function _500(_501,_502){ + var _503=$.data(_501,"textbox"); + var opts=_503.options; + var tb=_503.textbox; + var _504=tb.parent(); + if(_502){ + if(typeof _502=="object"){ + $.extend(opts,_502); + }else{ + opts.width=_502; + } + } + if(isNaN(parseInt(opts.width))){ + var c=$(_501).clone(); + c.css("visibility","hidden"); + c.insertAfter(_501); + opts.width=c.outerWidth(); + c.remove(); + } + var _505=tb.is(":visible"); + if(!_505){ + tb.appendTo("body"); + } + var _506=tb.find(".textbox-text"); + var btn=tb.find(".textbox-button"); + var _507=tb.find(".textbox-addon"); + var _508=_507.find(".textbox-icon"); + if(opts.height=="auto"){ + _506.css({margin:"",paddingTop:"",paddingBottom:"",height:"",lineHeight:""}); + } + tb._size(opts,_504); + if(opts.label&&opts.labelPosition){ + if(opts.labelPosition=="top"){ + _503.label._size({width:opts.labelWidth=="auto"?tb.outerWidth():opts.labelWidth},tb); + if(opts.height!="auto"){ + tb._size("height",tb.outerHeight()-_503.label.outerHeight()); + } + }else{ + _503.label._size({width:opts.labelWidth,height:tb.outerHeight()},tb); + if(!opts.multiline){ + _503.label.css("lineHeight",_503.label.height()+"px"); + } + tb._size("width",tb.outerWidth()-_503.label.outerWidth()); + } + } + if(opts.buttonAlign=="left"||opts.buttonAlign=="right"){ + btn.linkbutton("resize",{height:tb.height()}); + }else{ + btn.linkbutton("resize",{width:"100%"}); + } + var _509=tb.width()-_508.length*opts.iconWidth-_50a("left")-_50a("right"); + var _50b=opts.height=="auto"?_506.outerHeight():(tb.height()-_50a("top")-_50a("bottom")); + _507.css(opts.iconAlign,_50a(opts.iconAlign)+"px"); + _507.css("top",_50a("top")+"px"); + _508.css({width:opts.iconWidth+"px",height:_50b+"px"}); + _506.css({paddingLeft:(_501.style.paddingLeft||""),paddingRight:(_501.style.paddingRight||""),marginLeft:_50c("left"),marginRight:_50c("right"),marginTop:_50a("top"),marginBottom:_50a("bottom")}); + if(opts.multiline){ + _506.css({paddingTop:(_501.style.paddingTop||""),paddingBottom:(_501.style.paddingBottom||"")}); + _506._outerHeight(_50b); + }else{ + _506.css({paddingTop:0,paddingBottom:0,height:_50b+"px",lineHeight:_50b+"px"}); + } + _506._outerWidth(_509); + opts.onResizing.call(_501,opts.width,opts.height); + if(!_505){ + tb.insertAfter(_501); + } + opts.onResize.call(_501,opts.width,opts.height); + function _50c(_50d){ + return (opts.iconAlign==_50d?_507._outerWidth():0)+_50a(_50d); + }; + function _50a(_50e){ + var w=0; + btn.filter(".textbox-button-"+_50e).each(function(){ + if(_50e=="left"||_50e=="right"){ + w+=$(this).outerWidth(); + }else{ + w+=$(this).outerHeight(); + } + }); + return w; + }; + }; + function _4fa(_50f){ + var opts=$(_50f).textbox("options"); + var _510=$(_50f).textbox("textbox"); + _510.validatebox($.extend({},opts,{deltaX:function(_511){ + return $(_50f).textbox("getTipX",_511); + },deltaY:function(_512){ + return $(_50f).textbox("getTipY",_512); + },onBeforeValidate:function(){ + opts.onBeforeValidate.call(_50f); + var box=$(this); + if(!box.is(":focus")){ + if(box.val()!==opts.value){ + opts.oldInputValue=box.val(); + box.val(opts.value); + } + } + },onValidate:function(_513){ + var box=$(this); + if(opts.oldInputValue!=undefined){ + box.val(opts.oldInputValue); + opts.oldInputValue=undefined; + } + var tb=box.parent(); + if(_513){ + tb.removeClass("textbox-invalid"); + }else{ + tb.addClass("textbox-invalid"); + } + opts.onValidate.call(_50f,_513); + }})); + }; + function _514(_515){ + var _516=$.data(_515,"textbox"); + var opts=_516.options; + var tb=_516.textbox; + var _517=tb.find(".textbox-text"); + _517.attr("placeholder",opts.prompt); + _517.unbind(".textbox"); + $(_516.label).unbind(".textbox"); + if(!opts.disabled&&!opts.readonly){ + if(_516.label){ + $(_516.label).bind("click.textbox",function(e){ + if(!opts.hasFocusMe){ + _517.focus(); + $(_515).textbox("setSelectionRange",{start:0,end:_517.val().length}); + } + }); + } + _517.bind("blur.textbox",function(e){ + if(!tb.hasClass("textbox-focused")){ + return; + } + opts.value=$(this).val(); + if(opts.value==""){ + $(this).val(opts.prompt).addClass("textbox-prompt"); + }else{ + $(this).removeClass("textbox-prompt"); + } + tb.removeClass("textbox-focused"); + }).bind("focus.textbox",function(e){ + opts.hasFocusMe=true; + if(tb.hasClass("textbox-focused")){ + return; + } + if($(this).val()!=opts.value){ + $(this).val(opts.value); + } + $(this).removeClass("textbox-prompt"); + tb.addClass("textbox-focused"); + }); + for(var _518 in opts.inputEvents){ + _517.bind(_518+".textbox",{target:_515},opts.inputEvents[_518]); + } + } + var _519=tb.find(".textbox-addon"); + _519.unbind().bind("click",{target:_515},function(e){ + var icon=$(e.target).closest("a.textbox-icon:not(.textbox-icon-disabled)"); + if(icon.length){ + var _51a=parseInt(icon.attr("icon-index")); + var conf=opts.icons[_51a]; + if(conf&&conf.handler){ + conf.handler.call(icon[0],e); + } + opts.onClickIcon.call(_515,_51a); + } + }); + _519.find(".textbox-icon").each(function(_51b){ + var conf=opts.icons[_51b]; + var icon=$(this); + if(!conf||conf.disabled||opts.disabled||opts.readonly){ + icon.addClass("textbox-icon-disabled"); + }else{ + icon.removeClass("textbox-icon-disabled"); + } + }); + var btn=tb.find(".textbox-button"); + btn.linkbutton((opts.disabled||opts.readonly)?"disable":"enable"); + tb.unbind(".textbox").bind("_resize.textbox",function(e,_51c){ + if($(this).hasClass("easyui-fluid")||_51c){ + _500(_515); + } + return false; + }); + }; + function _4fb(_51d,_51e){ + var _51f=$.data(_51d,"textbox"); + var opts=_51f.options; + var tb=_51f.textbox; + var _520=tb.find(".textbox-text"); + var ss=$(_51d).add(tb.find(".textbox-value")); + opts.disabled=_51e; + if(opts.disabled){ + _520.blur(); + _520.validatebox("disable"); + tb.addClass("textbox-disabled"); + ss.attr("disabled","disabled"); + $(_51f.label).addClass("textbox-label-disabled"); + }else{ + _520.validatebox("enable"); + tb.removeClass("textbox-disabled"); + ss.removeAttr("disabled"); + $(_51f.label).removeClass("textbox-label-disabled"); + } + }; + function _4fc(_521,mode){ + var _522=$.data(_521,"textbox"); + var opts=_522.options; + var tb=_522.textbox; + var _523=tb.find(".textbox-text"); + opts.readonly=mode==undefined?true:mode; + if(opts.readonly){ + _523.triggerHandler("blur.textbox"); + } + _523.validatebox("readonly",opts.readonly); + tb.removeClass("textbox-readonly").addClass(opts.readonly?"textbox-readonly":""); + }; + $.fn.textbox=function(_524,_525){ + if(typeof _524=="string"){ + var _526=$.fn.textbox.methods[_524]; + if(_526){ + return _526(this,_525); + }else{ + return this.each(function(){ + var _527=$(this).textbox("textbox"); + _527.validatebox(_524,_525); + }); + } + } + _524=_524||{}; + return this.each(function(){ + var _528=$.data(this,"textbox"); + if(_528){ + $.extend(_528.options,_524); + if(_524.value!=undefined){ + _528.options.originalValue=_524.value; + } + }else{ + _528=$.data(this,"textbox",{options:$.extend({},$.fn.textbox.defaults,$.fn.textbox.parseOptions(this),_524),textbox:init(this)}); + _528.options.originalValue=_528.options.value; + } + _4f6(this); + _514(this); + if(_528.options.doSize){ + _500(this); + } + var _529=_528.options.value; + _528.options.value=""; + $(this).textbox("initValue",_529); + }); + }; + $.fn.textbox.methods={options:function(jq){ + return $.data(jq[0],"textbox").options; + },cloneFrom:function(jq,from){ + return jq.each(function(){ + var t=$(this); + if(t.data("textbox")){ + return; + } + if(!$(from).data("textbox")){ + $(from).textbox(); + } + var opts=$.extend(true,{},$(from).textbox("options")); + var name=t.attr("name")||""; + t.addClass("textbox-f").hide(); + t.removeAttr("name").attr("textboxName",name); + var span=$(from).next().clone().insertAfter(t); + var _52a="_easyui_textbox_input"+(++_4f4); + span.find(".textbox-value").attr("name",name); + span.find(".textbox-text").attr("id",_52a); + var _52b=$($(from).textbox("label")).clone(); + if(_52b.length){ + _52b.attr("for",_52a); + if(opts.labelPosition=="after"){ + _52b.insertAfter(t.next()); + }else{ + _52b.insertBefore(t); + } + } + $.data(this,"textbox",{options:opts,textbox:span,label:(_52b.length?_52b:undefined)}); + var _52c=$(from).textbox("button"); + if(_52c.length){ + t.textbox("button").linkbutton($.extend(true,{},_52c.linkbutton("options"))); + } + _514(this); + _4fa(this); + }); + },textbox:function(jq){ + return $.data(jq[0],"textbox").textbox.find(".textbox-text"); + },button:function(jq){ + return $.data(jq[0],"textbox").textbox.find(".textbox-button"); + },label:function(jq){ + return $.data(jq[0],"textbox").label; + },destroy:function(jq){ + return jq.each(function(){ + _4fd(this); + }); + },resize:function(jq,_52d){ + return jq.each(function(){ + _500(this,_52d); + }); + },disable:function(jq){ + return jq.each(function(){ + _4fb(this,true); + _514(this); + }); + },enable:function(jq){ + return jq.each(function(){ + _4fb(this,false); + _514(this); + }); + },readonly:function(jq,mode){ + return jq.each(function(){ + _4fc(this,mode); + _514(this); + }); + },isValid:function(jq){ + return jq.textbox("textbox").validatebox("isValid"); + },clear:function(jq){ + return jq.each(function(){ + $(this).textbox("setValue",""); + }); + },setText:function(jq,_52e){ + return jq.each(function(){ + var opts=$(this).textbox("options"); + var _52f=$(this).textbox("textbox"); + _52e=_52e==undefined?"":String(_52e); + if($(this).textbox("getText")!=_52e){ + _52f.val(_52e); + } + opts.value=_52e; + if(!_52f.is(":focus")){ + if(_52e){ + _52f.removeClass("textbox-prompt"); + }else{ + _52f.val(opts.prompt).addClass("textbox-prompt"); + } + } + $(this).textbox("validate"); + }); + },initValue:function(jq,_530){ + return jq.each(function(){ + var _531=$.data(this,"textbox"); + $(this).textbox("setText",_530); + _531.textbox.find(".textbox-value").val(_530); + $(this).val(_530); + }); + },setValue:function(jq,_532){ + return jq.each(function(){ + var opts=$.data(this,"textbox").options; + var _533=$(this).textbox("getValue"); + $(this).textbox("initValue",_532); + if(_533!=_532){ + opts.onChange.call(this,_532,_533); + $(this).closest("form").trigger("_change",[this]); + } + }); + },getText:function(jq){ + var _534=jq.textbox("textbox"); + if(_534.is(":focus")){ + return _534.val(); + }else{ + return jq.textbox("options").value; + } + },getValue:function(jq){ + return jq.data("textbox").textbox.find(".textbox-value").val(); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).textbox("options"); + $(this).textbox("textbox").val(opts.originalValue); + $(this).textbox("setValue",opts.originalValue); + }); + },getIcon:function(jq,_535){ + return jq.data("textbox").textbox.find(".textbox-icon:eq("+_535+")"); + },getTipX:function(jq,_536){ + var _537=jq.data("textbox"); + var opts=_537.options; + var tb=_537.textbox; + var _538=tb.find(".textbox-text"); + var _536=_536||opts.tipPosition; + var p1=tb.offset(); + var p2=_538.offset(); + var w1=tb.outerWidth(); + var w2=_538.outerWidth(); + if(_536=="right"){ + return w1-w2-p2.left+p1.left; + }else{ + if(_536=="left"){ + return p1.left-p2.left; + }else{ + return (w1-w2-p2.left+p1.left)/2-(p2.left-p1.left)/2; + } + } + },getTipY:function(jq,_539){ + var _53a=jq.data("textbox"); + var opts=_53a.options; + var tb=_53a.textbox; + var _53b=tb.find(".textbox-text"); + var _539=_539||opts.tipPosition; + var p1=tb.offset(); + var p2=_53b.offset(); + var h1=tb.outerHeight(); + var h2=_53b.outerHeight(); + if(_539=="left"||_539=="right"){ + return (h1-h2-p2.top+p1.top)/2-(p2.top-p1.top)/2; + }else{ + if(_539=="bottom"){ + return (h1-h2-p2.top+p1.top); + }else{ + return (p1.top-p2.top); + } + } + },getSelectionStart:function(jq){ + return jq.textbox("getSelectionRange").start; + },getSelectionRange:function(jq){ + var _53c=jq.textbox("textbox")[0]; + var _53d=0; + var end=0; + if(typeof _53c.selectionStart=="number"){ + _53d=_53c.selectionStart; + end=_53c.selectionEnd; + }else{ + if(_53c.createTextRange){ + var s=document.selection.createRange(); + var _53e=_53c.createTextRange(); + _53e.setEndPoint("EndToStart",s); + _53d=_53e.text.length; + end=_53d+s.text.length; + } + } + return {start:_53d,end:end}; + },setSelectionRange:function(jq,_53f){ + return jq.each(function(){ + var _540=$(this).textbox("textbox")[0]; + var _541=_53f.start; + var end=_53f.end; + if(_540.setSelectionRange){ + _540.setSelectionRange(_541,end); + }else{ + if(_540.createTextRange){ + var _542=_540.createTextRange(); + _542.collapse(); + _542.moveEnd("character",end); + _542.moveStart("character",_541); + _542.select(); + } + } + }); + }}; + $.fn.textbox.parseOptions=function(_543){ + var t=$(_543); + return $.extend({},$.fn.validatebox.parseOptions(_543),$.parser.parseOptions(_543,["prompt","iconCls","iconAlign","buttonText","buttonIcon","buttonAlign","label","labelPosition","labelAlign",{multiline:"boolean",iconWidth:"number",labelWidth:"number"}]),{value:(t.val()||undefined),type:(t.attr("type")?t.attr("type"):undefined)}); + }; + $.fn.textbox.defaults=$.extend({},$.fn.validatebox.defaults,{doSize:true,width:"auto",height:"auto",cls:null,prompt:"",value:"",type:"text",multiline:false,icons:[],iconCls:null,iconAlign:"right",iconWidth:18,buttonText:"",buttonIcon:null,buttonAlign:"right",label:null,labelWidth:"auto",labelPosition:"before",labelAlign:"left",inputEvents:{blur:function(e){ + var t=$(e.data.target); + var opts=t.textbox("options"); + if(t.textbox("getValue")!=opts.value){ + t.textbox("setValue",opts.value); + } + },keydown:function(e){ + if(e.keyCode==13){ + var t=$(e.data.target); + t.textbox("setValue",t.textbox("getText")); + } + }},onChange:function(_544,_545){ + },onResizing:function(_546,_547){ + },onResize:function(_548,_549){ + },onClickButton:function(){ + },onClickIcon:function(_54a){ + }}); +})(jQuery); +(function($){ + function _54b(_54c){ + var _54d=$.data(_54c,"passwordbox"); + var opts=_54d.options; + var _54e=$.extend(true,[],opts.icons); + if(opts.showEye){ + _54e.push({iconCls:"passwordbox-open",handler:function(e){ + opts.revealed=!opts.revealed; + _54f(_54c); + }}); + } + $(_54c).addClass("passwordbox-f").textbox($.extend({},opts,{icons:_54e})); + _54f(_54c); + }; + function _550(_551,_552,all){ + var t=$(_551); + var opts=t.passwordbox("options"); + if(opts.revealed){ + t.textbox("setValue",_552); + return; + } + var _553=unescape(opts.passwordChar); + var cc=_552.split(""); + var vv=t.passwordbox("getValue").split(""); + for(var i=0;i").appendTo(btn); + if(btn.linkbutton("options").disabled){ + file.attr("disabled","disabled"); + }else{ + file.removeAttr("disabled"); + } + } + }; + function _569(_56a){ + var _56b=$.data(_56a,"filebox"); + var opts=_56b.options; + _56b.filebox.find(".textbox-value").remove(); + opts.oldValue=""; + var file=$("").appendTo(_56b.filebox); + file.attr("id",opts.fileboxId).attr("name",$(_56a).attr("textboxName")||""); + file.attr("accept",opts.accept); + file.attr("capture",opts.capture); + if(opts.multiple){ + file.attr("multiple","multiple"); + } + file.change(function(){ + var _56c=this.value; + if(this.files){ + _56c=$.map(this.files,function(file){ + return file.name; + }).join(opts.separator); + } + $(_56a).filebox("setText",_56c); + opts.onChange.call(_56a,_56c,opts.oldValue); + opts.oldValue=_56c; + }); + return file; + }; + $.fn.filebox=function(_56d,_56e){ + if(typeof _56d=="string"){ + var _56f=$.fn.filebox.methods[_56d]; + if(_56f){ + return _56f(this,_56e); + }else{ + return this.textbox(_56d,_56e); + } + } + _56d=_56d||{}; + return this.each(function(){ + var _570=$.data(this,"filebox"); + if(_570){ + $.extend(_570.options,_56d); + }else{ + $.data(this,"filebox",{options:$.extend({},$.fn.filebox.defaults,$.fn.filebox.parseOptions(this),_56d)}); + } + _566(this); + }); + }; + $.fn.filebox.methods={options:function(jq){ + var opts=jq.textbox("options"); + return $.extend($.data(jq[0],"filebox").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); + },clear:function(jq){ + return jq.each(function(){ + $(this).textbox("clear"); + _569(this); + }); + },reset:function(jq){ + return jq.each(function(){ + $(this).filebox("clear"); + }); + },setValue:function(jq){ + return jq; + },setValues:function(jq){ + return jq; + }}; + $.fn.filebox.parseOptions=function(_571){ + var t=$(_571); + return $.extend({},$.fn.textbox.parseOptions(_571),$.parser.parseOptions(_571,["accept","capture","separator"]),{multiple:(t.attr("multiple")?true:undefined)}); + }; + $.fn.filebox.defaults=$.extend({},$.fn.textbox.defaults,{buttonIcon:null,buttonText:"Choose File",buttonAlign:"right",inputEvents:{},accept:"",capture:"",separator:",",multiple:false}); +})(jQuery); +(function($){ + function _572(_573){ + var _574=$.data(_573,"searchbox"); + var opts=_574.options; + var _575=$.extend(true,[],opts.icons); + _575.push({iconCls:"searchbox-button",handler:function(e){ + var t=$(e.data.target); + var opts=t.searchbox("options"); + opts.searcher.call(e.data.target,t.searchbox("getValue"),t.searchbox("getName")); + }}); + _576(); + var _577=_578(); + $(_573).addClass("searchbox-f").textbox($.extend({},opts,{icons:_575,buttonText:(_577?_577.text:"")})); + $(_573).attr("searchboxName",$(_573).attr("textboxName")); + _574.searchbox=$(_573).next(); + _574.searchbox.addClass("searchbox"); + _579(_577); + function _576(){ + if(opts.menu){ + _574.menu=$(opts.menu).menu(); + var _57a=_574.menu.menu("options"); + var _57b=_57a.onClick; + _57a.onClick=function(item){ + _579(item); + _57b.call(this,item); + }; + }else{ + if(_574.menu){ + _574.menu.menu("destroy"); + } + _574.menu=null; + } + }; + function _578(){ + if(_574.menu){ + var item=_574.menu.children("div.menu-item:first"); + _574.menu.children("div.menu-item").each(function(){ + var _57c=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr("selected")?true:undefined)}); + if(_57c.selected){ + item=$(this); + return false; + } + }); + return _574.menu.menu("getItem",item[0]); + }else{ + return null; + } + }; + function _579(item){ + if(!item){ + return; + } + $(_573).textbox("button").menubutton({text:item.text,iconCls:(item.iconCls||null),menu:_574.menu,menuAlign:opts.buttonAlign,plain:false}); + _574.searchbox.find("input.textbox-value").attr("name",item.name||item.text); + $(_573).searchbox("resize"); + }; + }; + $.fn.searchbox=function(_57d,_57e){ + if(typeof _57d=="string"){ + var _57f=$.fn.searchbox.methods[_57d]; + if(_57f){ + return _57f(this,_57e); + }else{ + return this.textbox(_57d,_57e); + } + } + _57d=_57d||{}; + return this.each(function(){ + var _580=$.data(this,"searchbox"); + if(_580){ + $.extend(_580.options,_57d); + }else{ + $.data(this,"searchbox",{options:$.extend({},$.fn.searchbox.defaults,$.fn.searchbox.parseOptions(this),_57d)}); + } + _572(this); + }); + }; + $.fn.searchbox.methods={options:function(jq){ + var opts=jq.textbox("options"); + return $.extend($.data(jq[0],"searchbox").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); + },menu:function(jq){ + return $.data(jq[0],"searchbox").menu; + },getName:function(jq){ + return $.data(jq[0],"searchbox").searchbox.find("input.textbox-value").attr("name"); + },selectName:function(jq,name){ + return jq.each(function(){ + var menu=$.data(this,"searchbox").menu; + if(menu){ + menu.children("div.menu-item").each(function(){ + var item=menu.menu("getItem",this); + if(item.name==name){ + $(this).triggerHandler("click"); + return false; + } + }); + } + }); + },destroy:function(jq){ + return jq.each(function(){ + var menu=$(this).searchbox("menu"); + if(menu){ + menu.menu("destroy"); + } + $(this).textbox("destroy"); + }); + }}; + $.fn.searchbox.parseOptions=function(_581){ + var t=$(_581); + return $.extend({},$.fn.textbox.parseOptions(_581),$.parser.parseOptions(_581,["menu"]),{searcher:(t.attr("searcher")?eval(t.attr("searcher")):undefined)}); + }; + $.fn.searchbox.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:$.extend({},$.fn.textbox.defaults.inputEvents,{keydown:function(e){ + if(e.keyCode==13){ + e.preventDefault(); + var t=$(e.data.target); + var opts=t.searchbox("options"); + t.searchbox("setValue",$(this).val()); + opts.searcher.call(e.data.target,t.searchbox("getValue"),t.searchbox("getName")); + return false; + } + }}),buttonAlign:"left",menu:null,searcher:function(_582,name){ + }}); +})(jQuery); +(function($){ + function _583(_584,_585){ + var opts=$.data(_584,"form").options; + $.extend(opts,_585||{}); + var _586=$.extend({},opts.queryParams); + if(opts.onSubmit.call(_584,_586)==false){ + return; + } + var _587=$(_584).find(".textbox-text:focus"); + _587.triggerHandler("blur"); + _587.focus(); + var _588=null; + if(opts.dirty){ + var ff=[]; + $.map(opts.dirtyFields,function(f){ + if($(f).hasClass("textbox-f")){ + $(f).next().find(".textbox-value").each(function(){ + ff.push(this); + }); + }else{ + ff.push(f); + } + }); + _588=$(_584).find("input[name]:enabled,textarea[name]:enabled,select[name]:enabled").filter(function(){ + return $.inArray(this,ff)==-1; + }); + _588.attr("disabled","disabled"); + } + if(opts.ajax){ + if(opts.iframe){ + _589(_584,_586); + }else{ + if(window.FormData!==undefined){ + _58a(_584,_586); + }else{ + _589(_584,_586); + } + } + }else{ + $(_584).submit(); + } + if(opts.dirty){ + _588.removeAttr("disabled"); + } + }; + function _589(_58b,_58c){ + var opts=$.data(_58b,"form").options; + var _58d="easyui_frame_"+(new Date().getTime()); + var _58e=$("").appendTo("body"); + _58e.attr("src",window.ActiveXObject?"javascript:false":"about:blank"); + _58e.css({position:"absolute",top:-1000,left:-1000}); + _58e.bind("load",cb); + _58f(_58c); + function _58f(_590){ + var form=$(_58b); + if(opts.url){ + form.attr("action",opts.url); + } + var t=form.attr("target"),a=form.attr("action"); + form.attr("target",_58d); + var _591=$(); + try{ + for(var n in _590){ + var _592=$("").val(_590[n]).appendTo(form); + _591=_591.add(_592); + } + _593(); + form[0].submit(); + } + finally{ + form.attr("action",a); + t?form.attr("target",t):form.removeAttr("target"); + _591.remove(); + } + }; + function _593(){ + var f=$("#"+_58d); + if(!f.length){ + return; + } + try{ + var s=f.contents()[0].readyState; + if(s&&s.toLowerCase()=="uninitialized"){ + setTimeout(_593,100); + } + } + catch(e){ + cb(); + } + }; + var _594=10; + function cb(){ + var f=$("#"+_58d); + if(!f.length){ + return; + } + f.unbind(); + var data=""; + try{ + var body=f.contents().find("body"); + data=body.html(); + if(data==""){ + if(--_594){ + setTimeout(cb,100); + return; + } + } + var ta=body.find(">textarea"); + if(ta.length){ + data=ta.val(); + }else{ + var pre=body.find(">pre"); + if(pre.length){ + data=pre.html(); + } + } + } + catch(e){ + } + opts.success.call(_58b,data); + setTimeout(function(){ + f.unbind(); + f.remove(); + },100); + }; + }; + function _58a(_595,_596){ + var opts=$.data(_595,"form").options; + var _597=new FormData($(_595)[0]); + for(var name in _596){ + _597.append(name,_596[name]); + } + $.ajax({url:opts.url,type:"post",xhr:function(){ + var xhr=$.ajaxSettings.xhr(); + if(xhr.upload){ + xhr.upload.addEventListener("progress",function(e){ + if(e.lengthComputable){ + var _598=e.total; + var _599=e.loaded||e.position; + var _59a=Math.ceil(_599*100/_598); + opts.onProgress.call(_595,_59a); + } + },false); + } + return xhr; + },data:_597,dataType:"html",cache:false,contentType:false,processData:false,complete:function(res){ + opts.success.call(_595,res.responseText); + }}); + }; + function load(_59b,data){ + var opts=$.data(_59b,"form").options; + if(typeof data=="string"){ + var _59c={}; + if(opts.onBeforeLoad.call(_59b,_59c)==false){ + return; + } + $.ajax({url:data,data:_59c,dataType:"json",success:function(data){ + _59d(data); + },error:function(){ + opts.onLoadError.apply(_59b,arguments); + }}); + }else{ + _59d(data); + } + function _59d(data){ + var form=$(_59b); + for(var name in data){ + var val=data[name]; + if(!_59e(name,val)){ + if(!_59f(name,val)){ + form.find("input[name=\""+name+"\"]").val(val); + form.find("textarea[name=\""+name+"\"]").val(val); + form.find("select[name=\""+name+"\"]").val(val); + } + } + } + opts.onLoadSuccess.call(_59b,data); + form.form("validate"); + }; + function _59e(name,val){ + var cc=$(_59b).find("[switchbuttonName=\""+name+"\"]"); + if(cc.length){ + cc.switchbutton("uncheck"); + cc.each(function(){ + if(_5a0($(this).switchbutton("options").value,val)){ + $(this).switchbutton("check"); + } + }); + return true; + } + cc=$(_59b).find("input[name=\""+name+"\"][type=radio], input[name=\""+name+"\"][type=checkbox]"); + if(cc.length){ + cc._propAttr("checked",false); + cc.each(function(){ + if(_5a0($(this).val(),val)){ + $(this)._propAttr("checked",true); + } + }); + return true; + } + return false; + }; + function _5a0(v,val){ + if(v==String(val)||$.inArray(v,$.isArray(val)?val:[val])>=0){ + return true; + }else{ + return false; + } + }; + function _59f(name,val){ + var _5a1=$(_59b).find("[textboxName=\""+name+"\"],[sliderName=\""+name+"\"]"); + if(_5a1.length){ + for(var i=0;i=0;i--){ + var type=opts.fieldTypes[i]; + var _5a9=form.find("."+type+"-f"); + if(_5a9.length&&_5a9[type]){ + _5a9[type]("reset"); + } + } + form.form("validate"); + }; + function _5aa(_5ab){ + var _5ac=$.data(_5ab,"form").options; + $(_5ab).unbind(".form"); + if(_5ac.ajax){ + $(_5ab).bind("submit.form",function(){ + setTimeout(function(){ + _583(_5ab,_5ac); + },0); + return false; + }); + } + $(_5ab).bind("_change.form",function(e,t){ + if($.inArray(t,_5ac.dirtyFields)==-1){ + _5ac.dirtyFields.push(t); + } + _5ac.onChange.call(this,t); + }).bind("change.form",function(e){ + var t=e.target; + if(!$(t).hasClass("textbox-text")){ + if($.inArray(t,_5ac.dirtyFields)==-1){ + _5ac.dirtyFields.push(t); + } + _5ac.onChange.call(this,t); + } + }); + _5ad(_5ab,_5ac.novalidate); + }; + function _5ae(_5af,_5b0){ + _5b0=_5b0||{}; + var _5b1=$.data(_5af,"form"); + if(_5b1){ + $.extend(_5b1.options,_5b0); + }else{ + $.data(_5af,"form",{options:$.extend({},$.fn.form.defaults,$.fn.form.parseOptions(_5af),_5b0)}); + } + }; + function _5b2(_5b3){ + if($.fn.validatebox){ + var t=$(_5b3); + t.find(".validatebox-text:not(:disabled)").validatebox("validate"); + var _5b4=t.find(".validatebox-invalid"); + _5b4.filter(":not(:disabled):first").focus(); + return _5b4.length==0; + } + return true; + }; + function _5ad(_5b5,_5b6){ + var opts=$.data(_5b5,"form").options; + opts.novalidate=_5b6; + $(_5b5).find(".validatebox-text:not(:disabled)").validatebox(_5b6?"disableValidation":"enableValidation"); + }; + $.fn.form=function(_5b7,_5b8){ + if(typeof _5b7=="string"){ + this.each(function(){ + _5ae(this); + }); + return $.fn.form.methods[_5b7](this,_5b8); + } + return this.each(function(){ + _5ae(this,_5b7); + _5aa(this); + }); + }; + $.fn.form.methods={options:function(jq){ + return $.data(jq[0],"form").options; + },submit:function(jq,_5b9){ + return jq.each(function(){ + _583(this,_5b9); + }); + },load:function(jq,data){ + return jq.each(function(){ + load(this,data); + }); + },clear:function(jq){ + return jq.each(function(){ + _5a3(this); + }); + },reset:function(jq){ + return jq.each(function(){ + _5a7(this); + }); + },validate:function(jq){ + return _5b2(jq[0]); + },disableValidation:function(jq){ + return jq.each(function(){ + _5ad(this,true); + }); + },enableValidation:function(jq){ + return jq.each(function(){ + _5ad(this,false); + }); + },resetValidation:function(jq){ + return jq.each(function(){ + $(this).find(".validatebox-text:not(:disabled)").validatebox("resetValidation"); + }); + },resetDirty:function(jq){ + return jq.each(function(){ + $(this).form("options").dirtyFields=[]; + }); + }}; + $.fn.form.parseOptions=function(_5ba){ + var t=$(_5ba); + return $.extend({},$.parser.parseOptions(_5ba,[{ajax:"boolean",dirty:"boolean"}]),{url:(t.attr("action")?t.attr("action"):undefined)}); + }; + $.fn.form.defaults={fieldTypes:["tagbox","combobox","combotree","combogrid","combotreegrid","datetimebox","datebox","combo","datetimespinner","timespinner","numberspinner","spinner","slider","searchbox","numberbox","passwordbox","filebox","textbox","switchbutton"],novalidate:false,ajax:true,iframe:true,dirty:false,dirtyFields:[],url:null,queryParams:{},onSubmit:function(_5bb){ + return $(this).form("validate"); + },onProgress:function(_5bc){ + },success:function(data){ + },onBeforeLoad:function(_5bd){ + },onLoadSuccess:function(data){ + },onLoadError:function(){ + },onChange:function(_5be){ + }}; +})(jQuery); +(function($){ + function _5bf(_5c0){ + var _5c1=$.data(_5c0,"numberbox"); + var opts=_5c1.options; + $(_5c0).addClass("numberbox-f").textbox(opts); + $(_5c0).textbox("textbox").css({imeMode:"disabled"}); + $(_5c0).attr("numberboxName",$(_5c0).attr("textboxName")); + _5c1.numberbox=$(_5c0).next(); + _5c1.numberbox.addClass("numberbox"); + var _5c2=opts.parser.call(_5c0,opts.value); + var _5c3=opts.formatter.call(_5c0,_5c2); + $(_5c0).numberbox("initValue",_5c2).numberbox("setText",_5c3); + }; + function _5c4(_5c5,_5c6){ + var _5c7=$.data(_5c5,"numberbox"); + var opts=_5c7.options; + opts.value=parseFloat(_5c6); + var _5c6=opts.parser.call(_5c5,_5c6); + var text=opts.formatter.call(_5c5,_5c6); + opts.value=_5c6; + $(_5c5).textbox("setText",text).textbox("setValue",_5c6); + text=opts.formatter.call(_5c5,$(_5c5).textbox("getValue")); + $(_5c5).textbox("setText",text); + }; + $.fn.numberbox=function(_5c8,_5c9){ + if(typeof _5c8=="string"){ + var _5ca=$.fn.numberbox.methods[_5c8]; + if(_5ca){ + return _5ca(this,_5c9); + }else{ + return this.textbox(_5c8,_5c9); + } + } + _5c8=_5c8||{}; + return this.each(function(){ + var _5cb=$.data(this,"numberbox"); + if(_5cb){ + $.extend(_5cb.options,_5c8); + }else{ + _5cb=$.data(this,"numberbox",{options:$.extend({},$.fn.numberbox.defaults,$.fn.numberbox.parseOptions(this),_5c8)}); + } + _5bf(this); + }); + }; + $.fn.numberbox.methods={options:function(jq){ + var opts=jq.data("textbox")?jq.textbox("options"):{}; + return $.extend($.data(jq[0],"numberbox").options,{width:opts.width,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); + },fix:function(jq){ + return jq.each(function(){ + var opts=$(this).numberbox("options"); + opts.value=null; + var _5cc=opts.parser.call(this,$(this).numberbox("getText")); + $(this).numberbox("setValue",_5cc); + }); + },setValue:function(jq,_5cd){ + return jq.each(function(){ + _5c4(this,_5cd); + }); + },clear:function(jq){ + return jq.each(function(){ + $(this).textbox("clear"); + $(this).numberbox("options").value=""; + }); + },reset:function(jq){ + return jq.each(function(){ + $(this).textbox("reset"); + $(this).numberbox("setValue",$(this).numberbox("getValue")); + }); + }}; + $.fn.numberbox.parseOptions=function(_5ce){ + var t=$(_5ce); + return $.extend({},$.fn.textbox.parseOptions(_5ce),$.parser.parseOptions(_5ce,["decimalSeparator","groupSeparator","suffix",{min:"number",max:"number",precision:"number"}]),{prefix:(t.attr("prefix")?t.attr("prefix"):undefined)}); + }; + $.fn.numberbox.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:{keypress:function(e){ + var _5cf=e.data.target; + var opts=$(_5cf).numberbox("options"); + return opts.filter.call(_5cf,e); + },blur:function(e){ + $(e.data.target).numberbox("fix"); + },keydown:function(e){ + if(e.keyCode==13){ + $(e.data.target).numberbox("fix"); + } + }},min:null,max:null,precision:0,decimalSeparator:".",groupSeparator:"",prefix:"",suffix:"",filter:function(e){ + var opts=$(this).numberbox("options"); + var s=$(this).numberbox("getText"); + if(e.metaKey||e.ctrlKey){ + return true; + } + if($.inArray(String(e.which),["46","8","13","0"])>=0){ + return true; + } + var tmp=$(""); + tmp.html(String.fromCharCode(e.which)); + var c=tmp.text(); + tmp.remove(); + if(!c){ + return true; + } + if(c=="-"||c==opts.decimalSeparator){ + return (s.indexOf(c)==-1)?true:false; + }else{ + if(c==opts.groupSeparator){ + return true; + }else{ + if("0123456789".indexOf(c)>=0){ + return true; + }else{ + return false; + } + } + } + },formatter:function(_5d0){ + if(!_5d0){ + return _5d0; + } + _5d0=_5d0+""; + var opts=$(this).numberbox("options"); + var s1=_5d0,s2=""; + var dpos=_5d0.indexOf("."); + if(dpos>=0){ + s1=_5d0.substring(0,dpos); + s2=_5d0.substring(dpos+1,_5d0.length); + } + if(opts.groupSeparator){ + var p=/(\d+)(\d{3})/; + while(p.test(s1)){ + s1=s1.replace(p,"$1"+opts.groupSeparator+"$2"); + } + } + if(s2){ + return opts.prefix+s1+opts.decimalSeparator+s2+opts.suffix; + }else{ + return opts.prefix+s1+opts.suffix; + } + },parser:function(s){ + s=s+""; + var opts=$(this).numberbox("options"); + if(opts.prefix){ + s=$.trim(s.replace(new RegExp("\\"+$.trim(opts.prefix),"g"),"")); + } + if(opts.suffix){ + s=$.trim(s.replace(new RegExp("\\"+$.trim(opts.suffix),"g"),"")); + } + if(parseFloat(s)!=opts.value){ + if(opts.groupSeparator){ + s=$.trim(s.replace(new RegExp("\\"+opts.groupSeparator,"g"),"")); + } + if(opts.decimalSeparator){ + s=$.trim(s.replace(new RegExp("\\"+opts.decimalSeparator,"g"),".")); + } + s=s.replace(/\s/g,""); + } + var val=parseFloat(s).toFixed(opts.precision); + if(isNaN(val)){ + val=""; + }else{ + if(typeof (opts.min)=="number"&&valopts.max){ + val=opts.max.toFixed(opts.precision); + } + } + } + return val; + }}); +})(jQuery); +(function($){ + function _5d1(_5d2,_5d3){ + var opts=$.data(_5d2,"calendar").options; + var t=$(_5d2); + if(_5d3){ + $.extend(opts,{width:_5d3.width,height:_5d3.height}); + } + t._size(opts,t.parent()); + t.find(".calendar-body")._outerHeight(t.height()-t.find(".calendar-header")._outerHeight()); + if(t.find(".calendar-menu").is(":visible")){ + _5d4(_5d2); + } + }; + function init(_5d5){ + $(_5d5).addClass("calendar").html("
        "+"
        "+"
        "+"
        "+"
        "+"
        "+""+"
        "+"
        "+"
        "+"
        "+"
        "+""+""+""+"
        "+"
        "+"
        "+"
        "+"
        "); + $(_5d5).bind("_resize",function(e,_5d6){ + if($(this).hasClass("easyui-fluid")||_5d6){ + _5d1(_5d5); + } + return false; + }); + }; + function _5d7(_5d8){ + var opts=$.data(_5d8,"calendar").options; + var menu=$(_5d8).find(".calendar-menu"); + menu.find(".calendar-menu-year").unbind(".calendar").bind("keypress.calendar",function(e){ + if(e.keyCode==13){ + _5d9(true); + } + }); + $(_5d8).unbind(".calendar").bind("mouseover.calendar",function(e){ + var t=_5da(e.target); + if(t.hasClass("calendar-nav")||t.hasClass("calendar-text")||(t.hasClass("calendar-day")&&!t.hasClass("calendar-disabled"))){ + t.addClass("calendar-nav-hover"); + } + }).bind("mouseout.calendar",function(e){ + var t=_5da(e.target); + if(t.hasClass("calendar-nav")||t.hasClass("calendar-text")||(t.hasClass("calendar-day")&&!t.hasClass("calendar-disabled"))){ + t.removeClass("calendar-nav-hover"); + } + }).bind("click.calendar",function(e){ + var t=_5da(e.target); + if(t.hasClass("calendar-menu-next")||t.hasClass("calendar-nextyear")){ + _5db(1); + }else{ + if(t.hasClass("calendar-menu-prev")||t.hasClass("calendar-prevyear")){ + _5db(-1); + }else{ + if(t.hasClass("calendar-menu-month")){ + menu.find(".calendar-selected").removeClass("calendar-selected"); + t.addClass("calendar-selected"); + _5d9(true); + }else{ + if(t.hasClass("calendar-prevmonth")){ + _5dc(-1); + }else{ + if(t.hasClass("calendar-nextmonth")){ + _5dc(1); + }else{ + if(t.hasClass("calendar-text")){ + if(menu.is(":visible")){ + menu.hide(); + }else{ + _5d4(_5d8); + } + }else{ + if(t.hasClass("calendar-day")){ + if(t.hasClass("calendar-disabled")){ + return; + } + var _5dd=opts.current; + t.closest("div.calendar-body").find(".calendar-selected").removeClass("calendar-selected"); + t.addClass("calendar-selected"); + var _5de=t.attr("abbr").split(","); + var y=parseInt(_5de[0]); + var m=parseInt(_5de[1]); + var d=parseInt(_5de[2]); + opts.current=new Date(y,m-1,d); + opts.onSelect.call(_5d8,opts.current); + if(!_5dd||_5dd.getTime()!=opts.current.getTime()){ + opts.onChange.call(_5d8,opts.current,_5dd); + } + if(opts.year!=y||opts.month!=m){ + opts.year=y; + opts.month=m; + show(_5d8); + } + } + } + } + } + } + } + } + }); + function _5da(t){ + var day=$(t).closest(".calendar-day"); + if(day.length){ + return day; + }else{ + return $(t); + } + }; + function _5d9(_5df){ + var menu=$(_5d8).find(".calendar-menu"); + var year=menu.find(".calendar-menu-year").val(); + var _5e0=menu.find(".calendar-selected").attr("abbr"); + if(!isNaN(year)){ + opts.year=parseInt(year); + opts.month=parseInt(_5e0); + show(_5d8); + } + if(_5df){ + menu.hide(); + } + }; + function _5db(_5e1){ + opts.year+=_5e1; + show(_5d8); + menu.find(".calendar-menu-year").val(opts.year); + }; + function _5dc(_5e2){ + opts.month+=_5e2; + if(opts.month>12){ + opts.year++; + opts.month=1; + }else{ + if(opts.month<1){ + opts.year--; + opts.month=12; + } + } + show(_5d8); + menu.find("td.calendar-selected").removeClass("calendar-selected"); + menu.find("td:eq("+(opts.month-1)+")").addClass("calendar-selected"); + }; + }; + function _5d4(_5e3){ + var opts=$.data(_5e3,"calendar").options; + $(_5e3).find(".calendar-menu").show(); + if($(_5e3).find(".calendar-menu-month-inner").is(":empty")){ + $(_5e3).find(".calendar-menu-month-inner").empty(); + var t=$("
        ").appendTo($(_5e3).find(".calendar-menu-month-inner")); + var idx=0; + for(var i=0;i<3;i++){ + var tr=$("").appendTo(t); + for(var j=0;j<4;j++){ + $("").html(opts.months[idx++]).attr("abbr",idx).appendTo(tr); + } + } + } + var body=$(_5e3).find(".calendar-body"); + var sele=$(_5e3).find(".calendar-menu"); + var _5e4=sele.find(".calendar-menu-year-inner"); + var _5e5=sele.find(".calendar-menu-month-inner"); + _5e4.find("input").val(opts.year).focus(); + _5e5.find("td.calendar-selected").removeClass("calendar-selected"); + _5e5.find("td:eq("+(opts.month-1)+")").addClass("calendar-selected"); + sele._outerWidth(body._outerWidth()); + sele._outerHeight(body._outerHeight()); + _5e5._outerHeight(sele.height()-_5e4._outerHeight()); + }; + function _5e6(_5e7,year,_5e8){ + var opts=$.data(_5e7,"calendar").options; + var _5e9=[]; + var _5ea=new Date(year,_5e8,0).getDate(); + for(var i=1;i<=_5ea;i++){ + _5e9.push([year,_5e8,i]); + } + var _5eb=[],week=[]; + var _5ec=-1; + while(_5e9.length>0){ + var date=_5e9.shift(); + week.push(date); + var day=new Date(date[0],date[1]-1,date[2]).getDay(); + if(_5ec==day){ + day=0; + }else{ + if(day==(opts.firstDay==0?7:opts.firstDay)-1){ + _5eb.push(week); + week=[]; + } + } + _5ec=day; + } + if(week.length){ + _5eb.push(week); + } + var _5ed=_5eb[0]; + if(_5ed.length<7){ + while(_5ed.length<7){ + var _5ee=_5ed[0]; + var date=new Date(_5ee[0],_5ee[1]-1,_5ee[2]-1); + _5ed.unshift([date.getFullYear(),date.getMonth()+1,date.getDate()]); + } + }else{ + var _5ee=_5ed[0]; + var week=[]; + for(var i=1;i<=7;i++){ + var date=new Date(_5ee[0],_5ee[1]-1,_5ee[2]-i); + week.unshift([date.getFullYear(),date.getMonth()+1,date.getDate()]); + } + _5eb.unshift(week); + } + var _5ef=_5eb[_5eb.length-1]; + while(_5ef.length<7){ + var _5f0=_5ef[_5ef.length-1]; + var date=new Date(_5f0[0],_5f0[1]-1,_5f0[2]+1); + _5ef.push([date.getFullYear(),date.getMonth()+1,date.getDate()]); + } + if(_5eb.length<6){ + var _5f0=_5ef[_5ef.length-1]; + var week=[]; + for(var i=1;i<=7;i++){ + var date=new Date(_5f0[0],_5f0[1]-1,_5f0[2]+i); + week.push([date.getFullYear(),date.getMonth()+1,date.getDate()]); + } + _5eb.push(week); + } + return _5eb; + }; + function show(_5f1){ + var opts=$.data(_5f1,"calendar").options; + if(opts.current&&!opts.validator.call(_5f1,opts.current)){ + opts.current=null; + } + var now=new Date(); + var _5f2=now.getFullYear()+","+(now.getMonth()+1)+","+now.getDate(); + var _5f3=opts.current?(opts.current.getFullYear()+","+(opts.current.getMonth()+1)+","+opts.current.getDate()):""; + var _5f4=6-opts.firstDay; + var _5f5=_5f4+1; + if(_5f4>=7){ + _5f4-=7; + } + if(_5f5>=7){ + _5f5-=7; + } + $(_5f1).find(".calendar-title span").html(opts.months[opts.month-1]+" "+opts.year); + var body=$(_5f1).find("div.calendar-body"); + body.children("table").remove(); + var data=[""]; + data.push(""); + if(opts.showWeek){ + data.push(""); + } + for(var i=opts.firstDay;i"+opts.weeks[i]+""); + } + for(var i=0;i"+opts.weeks[i]+""); + } + data.push(""); + data.push(""); + var _5f6=_5e6(_5f1,opts.year,opts.month); + for(var i=0;i<_5f6.length;i++){ + var week=_5f6[i]; + var cls=""; + if(i==0){ + cls="calendar-first"; + }else{ + if(i==_5f6.length-1){ + cls="calendar-last"; + } + } + data.push(""); + if(opts.showWeek){ + var _5f7=opts.getWeekNumber(new Date(week[0][0],parseInt(week[0][1])-1,week[0][2])); + data.push(""); + } + for(var j=0;j"+d+""); + } + data.push(""); + } + data.push(""); + data.push("
        "+opts.weekNumberHeader+"
        "+_5f7+"
        "); + body.append(data.join("")); + body.children("table.calendar-dtable").prependTo(body); + opts.onNavigate.call(_5f1,opts.year,opts.month); + }; + $.fn.calendar=function(_5fb,_5fc){ + if(typeof _5fb=="string"){ + return $.fn.calendar.methods[_5fb](this,_5fc); + } + _5fb=_5fb||{}; + return this.each(function(){ + var _5fd=$.data(this,"calendar"); + if(_5fd){ + $.extend(_5fd.options,_5fb); + }else{ + _5fd=$.data(this,"calendar",{options:$.extend({},$.fn.calendar.defaults,$.fn.calendar.parseOptions(this),_5fb)}); + init(this); + } + if(_5fd.options.border==false){ + $(this).addClass("calendar-noborder"); + } + _5d1(this); + _5d7(this); + show(this); + $(this).find("div.calendar-menu").hide(); + }); + }; + $.fn.calendar.methods={options:function(jq){ + return $.data(jq[0],"calendar").options; + },resize:function(jq,_5fe){ + return jq.each(function(){ + _5d1(this,_5fe); + }); + },moveTo:function(jq,date){ + return jq.each(function(){ + if(!date){ + var now=new Date(); + $(this).calendar({year:now.getFullYear(),month:now.getMonth()+1,current:date}); + return; + } + var opts=$(this).calendar("options"); + if(opts.validator.call(this,date)){ + var _5ff=opts.current; + $(this).calendar({year:date.getFullYear(),month:date.getMonth()+1,current:date}); + if(!_5ff||_5ff.getTime()!=date.getTime()){ + opts.onChange.call(this,opts.current,_5ff); + } + } + }); + }}; + $.fn.calendar.parseOptions=function(_600){ + var t=$(_600); + return $.extend({},$.parser.parseOptions(_600,["weekNumberHeader",{firstDay:"number",fit:"boolean",border:"boolean",showWeek:"boolean"}])); + }; + $.fn.calendar.defaults={width:180,height:180,fit:false,border:true,showWeek:false,firstDay:0,weeks:["S","M","T","W","T","F","S"],months:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],year:new Date().getFullYear(),month:new Date().getMonth()+1,current:(function(){ + var d=new Date(); + return new Date(d.getFullYear(),d.getMonth(),d.getDate()); + })(),weekNumberHeader:"",getWeekNumber:function(date){ + var _601=new Date(date.getTime()); + _601.setDate(_601.getDate()+4-(_601.getDay()||7)); + var time=_601.getTime(); + _601.setMonth(0); + _601.setDate(1); + return Math.floor(Math.round((time-_601)/86400000)/7)+1; + },formatter:function(date){ + return date.getDate(); + },styler:function(date){ + return ""; + },validator:function(date){ + return true; + },onSelect:function(date){ + },onChange:function(_602,_603){ + },onNavigate:function(year,_604){ + }}; +})(jQuery); +(function($){ + function _605(_606){ + var _607=$.data(_606,"spinner"); + var opts=_607.options; + var _608=$.extend(true,[],opts.icons); + if(opts.spinAlign=="left"||opts.spinAlign=="right"){ + opts.spinArrow=true; + opts.iconAlign=opts.spinAlign; + var _609={iconCls:"spinner-arrow",handler:function(e){ + var spin=$(e.target).closest(".spinner-arrow-up,.spinner-arrow-down"); + _613(e.data.target,spin.hasClass("spinner-arrow-down")); + }}; + if(opts.spinAlign=="left"){ + _608.unshift(_609); + }else{ + _608.push(_609); + } + }else{ + opts.spinArrow=false; + if(opts.spinAlign=="vertical"){ + if(opts.buttonAlign!="top"){ + opts.buttonAlign="bottom"; + } + opts.clsLeft="textbox-button-bottom"; + opts.clsRight="textbox-button-top"; + }else{ + opts.clsLeft="textbox-button-left"; + opts.clsRight="textbox-button-right"; + } + } + $(_606).addClass("spinner-f").textbox($.extend({},opts,{icons:_608,doSize:false,onResize:function(_60a,_60b){ + if(!opts.spinArrow){ + var span=$(this).next(); + var btn=span.find(".textbox-button:not(.spinner-button)"); + if(btn.length){ + var _60c=btn.outerWidth(); + var _60d=btn.outerHeight(); + var _60e=span.find(".spinner-button."+opts.clsLeft); + var _60f=span.find(".spinner-button."+opts.clsRight); + if(opts.buttonAlign=="right"){ + _60f.css("marginRight",_60c+"px"); + }else{ + if(opts.buttonAlign=="left"){ + _60e.css("marginLeft",_60c+"px"); + }else{ + if(opts.buttonAlign=="top"){ + _60f.css("marginTop",_60d+"px"); + }else{ + _60e.css("marginBottom",_60d+"px"); + } + } + } + } + } + opts.onResize.call(this,_60a,_60b); + }})); + $(_606).attr("spinnerName",$(_606).attr("textboxName")); + _607.spinner=$(_606).next(); + _607.spinner.addClass("spinner"); + if(opts.spinArrow){ + var _610=_607.spinner.find(".spinner-arrow"); + _610.append(""); + _610.append(""); + }else{ + var _611=$("").addClass(opts.clsLeft).appendTo(_607.spinner); + var _612=$("").addClass(opts.clsRight).appendTo(_607.spinner); + _611.linkbutton({iconCls:opts.reversed?"spinner-button-up":"spinner-button-down",onClick:function(){ + _613(_606,!opts.reversed); + }}); + _612.linkbutton({iconCls:opts.reversed?"spinner-button-down":"spinner-button-up",onClick:function(){ + _613(_606,opts.reversed); + }}); + if(opts.disabled){ + $(_606).spinner("disable"); + } + if(opts.readonly){ + $(_606).spinner("readonly"); + } + } + $(_606).spinner("resize"); + }; + function _613(_614,down){ + var opts=$(_614).spinner("options"); + opts.spin.call(_614,down); + opts[down?"onSpinDown":"onSpinUp"].call(_614); + $(_614).spinner("validate"); + }; + $.fn.spinner=function(_615,_616){ + if(typeof _615=="string"){ + var _617=$.fn.spinner.methods[_615]; + if(_617){ + return _617(this,_616); + }else{ + return this.textbox(_615,_616); + } + } + _615=_615||{}; + return this.each(function(){ + var _618=$.data(this,"spinner"); + if(_618){ + $.extend(_618.options,_615); + }else{ + _618=$.data(this,"spinner",{options:$.extend({},$.fn.spinner.defaults,$.fn.spinner.parseOptions(this),_615)}); + } + _605(this); + }); + }; + $.fn.spinner.methods={options:function(jq){ + var opts=jq.textbox("options"); + return $.extend($.data(jq[0],"spinner").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); + }}; + $.fn.spinner.parseOptions=function(_619){ + return $.extend({},$.fn.textbox.parseOptions(_619),$.parser.parseOptions(_619,["min","max","spinAlign",{increment:"number",reversed:"boolean"}])); + }; + $.fn.spinner.defaults=$.extend({},$.fn.textbox.defaults,{min:null,max:null,increment:1,spinAlign:"right",reversed:false,spin:function(down){ + },onSpinUp:function(){ + },onSpinDown:function(){ + }}); +})(jQuery); +(function($){ + function _61a(_61b){ + $(_61b).addClass("numberspinner-f"); + var opts=$.data(_61b,"numberspinner").options; + $(_61b).numberbox($.extend({},opts,{doSize:false})).spinner(opts); + $(_61b).numberbox("setValue",opts.value); + }; + function _61c(_61d,down){ + var opts=$.data(_61d,"numberspinner").options; + var v=parseFloat($(_61d).numberbox("getValue")||opts.value)||0; + if(down){ + v-=opts.increment; + }else{ + v+=opts.increment; + } + $(_61d).numberbox("setValue",v); + }; + $.fn.numberspinner=function(_61e,_61f){ + if(typeof _61e=="string"){ + var _620=$.fn.numberspinner.methods[_61e]; + if(_620){ + return _620(this,_61f); + }else{ + return this.numberbox(_61e,_61f); + } + } + _61e=_61e||{}; + return this.each(function(){ + var _621=$.data(this,"numberspinner"); + if(_621){ + $.extend(_621.options,_61e); + }else{ + $.data(this,"numberspinner",{options:$.extend({},$.fn.numberspinner.defaults,$.fn.numberspinner.parseOptions(this),_61e)}); + } + _61a(this); + }); + }; + $.fn.numberspinner.methods={options:function(jq){ + var opts=jq.numberbox("options"); + return $.extend($.data(jq[0],"numberspinner").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); + }}; + $.fn.numberspinner.parseOptions=function(_622){ + return $.extend({},$.fn.spinner.parseOptions(_622),$.fn.numberbox.parseOptions(_622),{}); + }; + $.fn.numberspinner.defaults=$.extend({},$.fn.spinner.defaults,$.fn.numberbox.defaults,{spin:function(down){ + _61c(this,down); + }}); +})(jQuery); +(function($){ + function _623(_624){ + var opts=$.data(_624,"timespinner").options; + $(_624).addClass("timespinner-f").spinner(opts); + var _625=opts.formatter.call(_624,opts.parser.call(_624,opts.value)); + $(_624).timespinner("initValue",_625); + }; + function _626(e){ + var _627=e.data.target; + var opts=$.data(_627,"timespinner").options; + var _628=$(_627).timespinner("getSelectionStart"); + for(var i=0;i=_629[0]&&_628<=_629[1]){ + _62a(_627,i); + return; + } + } + }; + function _62a(_62b,_62c){ + var opts=$.data(_62b,"timespinner").options; + if(_62c!=undefined){ + opts.highlight=_62c; + } + var _62d=opts.selections[opts.highlight]; + if(_62d){ + var tb=$(_62b).timespinner("textbox"); + $(_62b).timespinner("setSelectionRange",{start:_62d[0],end:_62d[1]}); + tb.focus(); + } + }; + function _62e(_62f,_630){ + var opts=$.data(_62f,"timespinner").options; + var _630=opts.parser.call(_62f,_630); + var text=opts.formatter.call(_62f,_630); + $(_62f).spinner("setValue",text); + }; + function _631(_632,down){ + var opts=$.data(_632,"timespinner").options; + var s=$(_632).timespinner("getValue"); + var _633=opts.selections[opts.highlight]; + var s1=s.substring(0,_633[0]); + var s2=s.substring(_633[0],_633[1]); + var s3=s.substring(_633[1]); + var v=s1+((parseInt(s2,10)||0)+opts.increment*(down?-1:1))+s3; + $(_632).timespinner("setValue",v); + _62a(_632); + }; + $.fn.timespinner=function(_634,_635){ + if(typeof _634=="string"){ + var _636=$.fn.timespinner.methods[_634]; + if(_636){ + return _636(this,_635); + }else{ + return this.spinner(_634,_635); + } + } + _634=_634||{}; + return this.each(function(){ + var _637=$.data(this,"timespinner"); + if(_637){ + $.extend(_637.options,_634); + }else{ + $.data(this,"timespinner",{options:$.extend({},$.fn.timespinner.defaults,$.fn.timespinner.parseOptions(this),_634)}); + } + _623(this); + }); + }; + $.fn.timespinner.methods={options:function(jq){ + var opts=jq.data("spinner")?jq.spinner("options"):{}; + return $.extend($.data(jq[0],"timespinner").options,{width:opts.width,value:opts.value,originalValue:opts.originalValue,disabled:opts.disabled,readonly:opts.readonly}); + },setValue:function(jq,_638){ + return jq.each(function(){ + _62e(this,_638); + }); + },getHours:function(jq){ + var opts=$.data(jq[0],"timespinner").options; + var vv=jq.timespinner("getValue").split(opts.separator); + return parseInt(vv[0],10); + },getMinutes:function(jq){ + var opts=$.data(jq[0],"timespinner").options; + var vv=jq.timespinner("getValue").split(opts.separator); + return parseInt(vv[1],10); + },getSeconds:function(jq){ + var opts=$.data(jq[0],"timespinner").options; + var vv=jq.timespinner("getValue").split(opts.separator); + return parseInt(vv[2],10)||0; + }}; + $.fn.timespinner.parseOptions=function(_639){ + return $.extend({},$.fn.spinner.parseOptions(_639),$.parser.parseOptions(_639,["separator",{showSeconds:"boolean",highlight:"number"}])); + }; + $.fn.timespinner.defaults=$.extend({},$.fn.spinner.defaults,{inputEvents:$.extend({},$.fn.spinner.defaults.inputEvents,{click:function(e){ + _626.call(this,e); + },blur:function(e){ + var t=$(e.data.target); + t.timespinner("setValue",t.timespinner("getText")); + },keydown:function(e){ + if(e.keyCode==13){ + var t=$(e.data.target); + t.timespinner("setValue",t.timespinner("getText")); + } + }}),formatter:function(date){ + if(!date){ + return ""; + } + var opts=$(this).timespinner("options"); + var tt=[_63a(date.getHours()),_63a(date.getMinutes())]; + if(opts.showSeconds){ + tt.push(_63a(date.getSeconds())); + } + return tt.join(opts.separator); + function _63a(_63b){ + return (_63b<10?"0":"")+_63b; + }; + },parser:function(s){ + var opts=$(this).timespinner("options"); + var date=_63c(s); + if(date){ + var min=_63c(opts.min); + var max=_63c(opts.max); + if(min&&min>date){ + date=min; + } + if(max&&max"]; + for(var i=0;i<_651.length;i++){ + _650.cache[_651[i][0]]={width:_651[i][1]}; + } + var _652=0; + for(var s in _650.cache){ + var item=_650.cache[s]; + item.index=_652++; + ss.push(s+"{width:"+item.width+"}"); + } + ss.push(""); + $(ss.join("\n")).appendTo(cc); + cc.children("style[easyui]:not(:last)").remove(); + },getRule:function(_653){ + var _654=cc.children("style[easyui]:last")[0]; + var _655=_654.styleSheet?_654.styleSheet:(_654.sheet||document.styleSheets[document.styleSheets.length-1]); + var _656=_655.cssRules||_655.rules; + return _656[_653]; + },set:function(_657,_658){ + var item=_650.cache[_657]; + if(item){ + item.width=_658; + var rule=this.getRule(item.index); + if(rule){ + rule.style["width"]=_658; + } + } + },remove:function(_659){ + var tmp=[]; + for(var s in _650.cache){ + if(s.indexOf(_659)==-1){ + tmp.push([s,_650.cache[s].width]); + } + } + _650.cache={}; + this.add(tmp); + },dirty:function(_65a){ + if(_65a){ + _650.dirty.push(_65a); + } + },clean:function(){ + for(var i=0;i<_650.dirty.length;i++){ + this.remove(_650.dirty[i]); + } + _650.dirty=[]; + }}; + }; + function _65b(_65c,_65d){ + var _65e=$.data(_65c,"datagrid"); + var opts=_65e.options; + var _65f=_65e.panel; + if(_65d){ + $.extend(opts,_65d); + } + if(opts.fit==true){ + var p=_65f.panel("panel").parent(); + opts.width=p.width(); + opts.height=p.height(); + } + _65f.panel("resize",opts); + }; + function _660(_661){ + var _662=$.data(_661,"datagrid"); + var opts=_662.options; + var dc=_662.dc; + var wrap=_662.panel; + var _663=wrap.width(); + var _664=wrap.height(); + var view=dc.view; + var _665=dc.view1; + var _666=dc.view2; + var _667=_665.children("div.datagrid-header"); + var _668=_666.children("div.datagrid-header"); + var _669=_667.find("table"); + var _66a=_668.find("table"); + view.width(_663); + var _66b=_667.children("div.datagrid-header-inner").show(); + _665.width(_66b.find("table").width()); + if(!opts.showHeader){ + _66b.hide(); + } + _666.width(_663-_665._outerWidth()); + _665.children()._outerWidth(_665.width()); + _666.children()._outerWidth(_666.width()); + var all=_667.add(_668).add(_669).add(_66a); + all.css("height",""); + var hh=Math.max(_669.height(),_66a.height()); + all._outerHeight(hh); + view.children(".datagrid-empty").css("top",hh+"px"); + dc.body1.add(dc.body2).children("table.datagrid-btable-frozen").css({position:"absolute",top:dc.header2._outerHeight()}); + var _66c=dc.body2.children("table.datagrid-btable-frozen")._outerHeight(); + var _66d=_66c+_668._outerHeight()+_666.children(".datagrid-footer")._outerHeight(); + wrap.children(":not(.datagrid-view,.datagrid-mask,.datagrid-mask-msg)").each(function(){ + _66d+=$(this)._outerHeight(); + }); + var _66e=wrap.outerHeight()-wrap.height(); + var _66f=wrap._size("minHeight")||""; + var _670=wrap._size("maxHeight")||""; + _665.add(_666).children("div.datagrid-body").css({marginTop:_66c,height:(isNaN(parseInt(opts.height))?"":(_664-_66d)),minHeight:(_66f?_66f-_66e-_66d:""),maxHeight:(_670?_670-_66e-_66d:"")}); + view.height(_666.height()); + }; + function _671(_672,_673,_674){ + var rows=$.data(_672,"datagrid").data.rows; + var opts=$.data(_672,"datagrid").options; + var dc=$.data(_672,"datagrid").dc; + if(!dc.body1.is(":empty")&&(!opts.nowrap||opts.autoRowHeight||_674)){ + if(_673!=undefined){ + var tr1=opts.finder.getTr(_672,_673,"body",1); + var tr2=opts.finder.getTr(_672,_673,"body",2); + _675(tr1,tr2); + }else{ + var tr1=opts.finder.getTr(_672,0,"allbody",1); + var tr2=opts.finder.getTr(_672,0,"allbody",2); + _675(tr1,tr2); + if(opts.showFooter){ + var tr1=opts.finder.getTr(_672,0,"allfooter",1); + var tr2=opts.finder.getTr(_672,0,"allfooter",2); + _675(tr1,tr2); + } + } + } + _660(_672); + if(opts.height=="auto"){ + var _676=dc.body1.parent(); + var _677=dc.body2; + var _678=_679(_677); + var _67a=_678.height; + if(_678.width>_677.width()){ + _67a+=18; + } + _67a-=parseInt(_677.css("marginTop"))||0; + _676.height(_67a); + _677.height(_67a); + dc.view.height(dc.view2.height()); + } + dc.body2.triggerHandler("scroll"); + function _675(trs1,trs2){ + for(var i=0;i"); + } + _682(true); + _682(false); + _660(_67f); + function _682(_683){ + var _684=_683?1:2; + var tr=opts.finder.getTr(_67f,_680,"body",_684); + (_683?dc.body1:dc.body2).children("table.datagrid-btable-frozen").append(tr); + }; + }; + function _685(_686,_687){ + function _688(){ + var _689=[]; + var _68a=[]; + $(_686).children("thead").each(function(){ + var opt=$.parser.parseOptions(this,[{frozen:"boolean"}]); + $(this).find("tr").each(function(){ + var cols=[]; + $(this).find("th").each(function(){ + var th=$(this); + var col=$.extend({},$.parser.parseOptions(this,["id","field","align","halign","order","width",{sortable:"boolean",checkbox:"boolean",resizable:"boolean",fixed:"boolean"},{rowspan:"number",colspan:"number"}]),{title:(th.html()||undefined),hidden:(th.attr("hidden")?true:undefined),formatter:(th.attr("formatter")?eval(th.attr("formatter")):undefined),styler:(th.attr("styler")?eval(th.attr("styler")):undefined),sorter:(th.attr("sorter")?eval(th.attr("sorter")):undefined)}); + if(col.width&&String(col.width).indexOf("%")==-1){ + col.width=parseInt(col.width); + } + if(th.attr("editor")){ + var s=$.trim(th.attr("editor")); + if(s.substr(0,1)=="{"){ + col.editor=eval("("+s+")"); + }else{ + col.editor=s; + } + } + cols.push(col); + }); + opt.frozen?_689.push(cols):_68a.push(cols); + }); + }); + return [_689,_68a]; + }; + var _68b=$("
        "+"
        "+"
        "+"
        "+"
        "+"
        "+"
        "+"
        "+"
        "+"
        "+""+"
        "+"
        "+"
        "+"
        "+"
        "+"
        "+"
        "+"
        "+""+"
        "+"
        "+"
        "+"
        ").insertAfter(_686); + _68b.panel({doSize:false,cls:"datagrid"}); + $(_686).addClass("datagrid-f").hide().appendTo(_68b.children("div.datagrid-view")); + var cc=_688(); + var view=_68b.children("div.datagrid-view"); + var _68c=view.children("div.datagrid-view1"); + var _68d=view.children("div.datagrid-view2"); + return {panel:_68b,frozenColumns:cc[0],columns:cc[1],dc:{view:view,view1:_68c,view2:_68d,header1:_68c.children("div.datagrid-header").children("div.datagrid-header-inner"),header2:_68d.children("div.datagrid-header").children("div.datagrid-header-inner"),body1:_68c.children("div.datagrid-body").children("div.datagrid-body-inner"),body2:_68d.children("div.datagrid-body"),footer1:_68c.children("div.datagrid-footer").children("div.datagrid-footer-inner"),footer2:_68d.children("div.datagrid-footer").children("div.datagrid-footer-inner")}}; + }; + function _68e(_68f){ + var _690=$.data(_68f,"datagrid"); + var opts=_690.options; + var dc=_690.dc; + var _691=_690.panel; + _690.ss=$(_68f).datagrid("createStyleSheet"); + _691.panel($.extend({},opts,{id:null,doSize:false,onResize:function(_692,_693){ + if($.data(_68f,"datagrid")){ + _660(_68f); + $(_68f).datagrid("fitColumns"); + opts.onResize.call(_691,_692,_693); + } + },onExpand:function(){ + if($.data(_68f,"datagrid")){ + $(_68f).datagrid("fixRowHeight").datagrid("fitColumns"); + opts.onExpand.call(_691); + } + }})); + _690.rowIdPrefix="datagrid-row-r"+(++_646); + _690.cellClassPrefix="datagrid-cell-c"+_646; + _694(dc.header1,opts.frozenColumns,true); + _694(dc.header2,opts.columns,false); + _695(); + dc.header1.add(dc.header2).css("display",opts.showHeader?"block":"none"); + dc.footer1.add(dc.footer2).css("display",opts.showFooter?"block":"none"); + if(opts.toolbar){ + if($.isArray(opts.toolbar)){ + $("div.datagrid-toolbar",_691).remove(); + var tb=$("
        ").prependTo(_691); + var tr=tb.find("tr"); + for(var i=0;i
        ").appendTo(tr); + }else{ + var td=$("").appendTo(tr); + var tool=$("").appendTo(td); + tool[0].onclick=eval(btn.handler||function(){ + }); + tool.linkbutton($.extend({},btn,{plain:true})); + } + } + }else{ + $(opts.toolbar).addClass("datagrid-toolbar").prependTo(_691); + $(opts.toolbar).show(); + } + }else{ + $("div.datagrid-toolbar",_691).remove(); + } + $("div.datagrid-pager",_691).remove(); + if(opts.pagination){ + var _696=$("
        "); + if(opts.pagePosition=="bottom"){ + _696.appendTo(_691); + }else{ + if(opts.pagePosition=="top"){ + _696.addClass("datagrid-pager-top").prependTo(_691); + }else{ + var ptop=$("
        ").prependTo(_691); + _696.appendTo(_691); + _696=_696.add(ptop); + } + } + _696.pagination({total:0,pageNumber:opts.pageNumber,pageSize:opts.pageSize,pageList:opts.pageList,onSelectPage:function(_697,_698){ + opts.pageNumber=_697||1; + opts.pageSize=_698; + _696.pagination("refresh",{pageNumber:_697,pageSize:_698}); + _6e0(_68f); + }}); + opts.pageSize=_696.pagination("options").pageSize; + } + function _694(_699,_69a,_69b){ + if(!_69a){ + return; + } + $(_699).show(); + $(_699).empty(); + var tmp=$("
        ").appendTo("body"); + tmp._outerWidth(99); + var _69c=100-parseInt(tmp[0].style.width); + tmp.remove(); + var _69d=[]; + var _69e=[]; + var _69f=[]; + if(opts.sortName){ + _69d=opts.sortName.split(","); + _69e=opts.sortOrder.split(","); + } + var t=$("
        ").appendTo(_699); + for(var i=0;i<_69a.length;i++){ + var tr=$("").appendTo($("tbody",t)); + var cols=_69a[i]; + for(var j=0;j").appendTo(tr); + if(col.checkbox){ + td.attr("field",col.field); + $("
        ").html("").appendTo(td); + }else{ + if(col.field){ + td.attr("field",col.field); + td.append("
        "); + td.find("span:first").html(col.title); + var cell=td.find("div.datagrid-cell"); + var pos=_647(_69d,col.field); + if(pos>=0){ + cell.addClass("datagrid-sort-"+_69e[pos]); + } + if(col.sortable){ + cell.addClass("datagrid-sort"); + } + if(col.resizable==false){ + cell.attr("resizable","false"); + } + if(col.width){ + var _6a0=$.parser.parseValue("width",col.width,dc.view,opts.scrollbarSize+(opts.rownumbers?opts.rownumberWidth:0)); + col.deltaWidth=_69c; + col.boxWidth=_6a0-_69c; + }else{ + col.auto=true; + } + cell.css("text-align",(col.halign||col.align||"")); + col.cellClass=_690.cellClassPrefix+"-"+col.field.replace(/[\.|\s]/g,"-"); + cell.addClass(col.cellClass); + }else{ + $("
        ").html(col.title).appendTo(td); + } + } + if(col.hidden){ + td.hide(); + _69f.push(col.field); + } + } + } + if(_69b&&opts.rownumbers){ + var td=$("
        "); + if($("tr",t).length==0){ + td.wrap("").parent().appendTo($("tbody",t)); + }else{ + td.prependTo($("tr:first",t)); + } + } + for(var i=0;i<_69f.length;i++){ + _6e2(_68f,_69f[i],-1); + } + }; + function _695(){ + var _6a1=[[".datagrid-header-rownumber",(opts.rownumberWidth-1)+"px"],[".datagrid-cell-rownumber",(opts.rownumberWidth-1)+"px"]]; + var _6a2=_6a3(_68f,true).concat(_6a3(_68f)); + for(var i=0;i<_6a2.length;i++){ + var col=_6a4(_68f,_6a2[i]); + if(col&&!col.checkbox){ + _6a1.push(["."+col.cellClass,col.boxWidth?col.boxWidth+"px":"auto"]); + } + } + _690.ss.add(_6a1); + _690.ss.dirty(_690.cellSelectorPrefix); + _690.cellSelectorPrefix="."+_690.cellClassPrefix; + }; + }; + function _6a5(_6a6){ + var _6a7=$.data(_6a6,"datagrid"); + var _6a8=_6a7.panel; + var opts=_6a7.options; + var dc=_6a7.dc; + var _6a9=dc.header1.add(dc.header2); + _6a9.unbind(".datagrid"); + for(var _6aa in opts.headerEvents){ + _6a9.bind(_6aa+".datagrid",opts.headerEvents[_6aa]); + } + var _6ab=_6a9.find("div.datagrid-cell"); + var _6ac=opts.resizeHandle=="right"?"e":(opts.resizeHandle=="left"?"w":"e,w"); + _6ab.each(function(){ + $(this).resizable({handles:_6ac,edge:opts.resizeEdge,disabled:($(this).attr("resizable")?$(this).attr("resizable")=="false":false),minWidth:25,onStartResize:function(e){ + _6a7.resizing=true; + _6a9.css("cursor",$("body").css("cursor")); + if(!_6a7.proxy){ + _6a7.proxy=$("
        ").appendTo(dc.view); + } + if(e.data.dir=="e"){ + e.data.deltaEdge=$(this)._outerWidth()-(e.pageX-$(this).offset().left); + }else{ + e.data.deltaEdge=$(this).offset().left-e.pageX-1; + } + _6a7.proxy.css({left:e.pageX-$(_6a8).offset().left-1+e.data.deltaEdge,display:"none"}); + setTimeout(function(){ + if(_6a7.proxy){ + _6a7.proxy.show(); + } + },500); + },onResize:function(e){ + _6a7.proxy.css({left:e.pageX-$(_6a8).offset().left-1+e.data.deltaEdge,display:"block"}); + return false; + },onStopResize:function(e){ + _6a9.css("cursor",""); + $(this).css("height",""); + var _6ad=$(this).parent().attr("field"); + var col=_6a4(_6a6,_6ad); + col.width=$(this)._outerWidth()+1; + col.boxWidth=col.width-col.deltaWidth; + col.auto=undefined; + $(this).css("width",""); + $(_6a6).datagrid("fixColumnSize",_6ad); + _6a7.proxy.remove(); + _6a7.proxy=null; + if($(this).parents("div:first.datagrid-header").parent().hasClass("datagrid-view1")){ + _660(_6a6); + } + $(_6a6).datagrid("fitColumns"); + opts.onResizeColumn.call(_6a6,_6ad,col.width); + setTimeout(function(){ + _6a7.resizing=false; + },0); + }}); + }); + var bb=dc.body1.add(dc.body2); + bb.unbind(); + for(var _6aa in opts.rowEvents){ + bb.bind(_6aa,opts.rowEvents[_6aa]); + } + dc.body1.bind("mousewheel DOMMouseScroll",function(e){ + e.preventDefault(); + var e1=e.originalEvent||window.event; + var _6ae=e1.wheelDelta||e1.detail*(-1); + if("deltaY" in e1){ + _6ae=e1.deltaY*-1; + } + var dg=$(e.target).closest("div.datagrid-view").children(".datagrid-f"); + var dc=dg.data("datagrid").dc; + dc.body2.scrollTop(dc.body2.scrollTop()-_6ae); + }); + dc.body2.bind("scroll",function(){ + var b1=dc.view1.children("div.datagrid-body"); + b1.scrollTop($(this).scrollTop()); + var c1=dc.body1.children(":first"); + var c2=dc.body2.children(":first"); + if(c1.length&&c2.length){ + var top1=c1.offset().top; + var top2=c2.offset().top; + if(top1!=top2){ + b1.scrollTop(b1.scrollTop()+top1-top2); + } + } + dc.view2.children("div.datagrid-header,div.datagrid-footer")._scrollLeft($(this)._scrollLeft()); + dc.body2.children("table.datagrid-btable-frozen").css("left",-$(this)._scrollLeft()); + }); + }; + function _6af(_6b0){ + return function(e){ + var td=$(e.target).closest("td[field]"); + if(td.length){ + var _6b1=_6b2(td); + if(!$(_6b1).data("datagrid").resizing&&_6b0){ + td.addClass("datagrid-header-over"); + }else{ + td.removeClass("datagrid-header-over"); + } + } + }; + }; + function _6b3(e){ + var _6b4=_6b2(e.target); + var opts=$(_6b4).datagrid("options"); + var ck=$(e.target).closest("input[type=checkbox]"); + if(ck.length){ + if(opts.singleSelect&&opts.selectOnCheck){ + return false; + } + if(ck.is(":checked")){ + _6b5(_6b4); + }else{ + _6b6(_6b4); + } + e.stopPropagation(); + }else{ + var cell=$(e.target).closest(".datagrid-cell"); + if(cell.length){ + var p1=cell.offset().left+5; + var p2=cell.offset().left+cell._outerWidth()-5; + if(e.pageXp1){ + _6b7(_6b4,cell.parent().attr("field")); + } + } + } + }; + function _6b8(e){ + var _6b9=_6b2(e.target); + var opts=$(_6b9).datagrid("options"); + var cell=$(e.target).closest(".datagrid-cell"); + if(cell.length){ + var p1=cell.offset().left+5; + var p2=cell.offset().left+cell._outerWidth()-5; + var cond=opts.resizeHandle=="right"?(e.pageX>p2):(opts.resizeHandle=="left"?(e.pageXp2)); + if(cond){ + var _6ba=cell.parent().attr("field"); + var col=_6a4(_6b9,_6ba); + if(col.resizable==false){ + return; + } + $(_6b9).datagrid("autoSizeColumn",_6ba); + col.auto=false; + } + } + }; + function _6bb(e){ + var _6bc=_6b2(e.target); + var opts=$(_6bc).datagrid("options"); + var td=$(e.target).closest("td[field]"); + opts.onHeaderContextMenu.call(_6bc,e,td.attr("field")); + }; + function _6bd(_6be){ + return function(e){ + var tr=_6bf(e.target); + if(!tr){ + return; + } + var _6c0=_6b2(tr); + if($.data(_6c0,"datagrid").resizing){ + return; + } + var _6c1=_6c2(tr); + if(_6be){ + _6c3(_6c0,_6c1); + }else{ + var opts=$.data(_6c0,"datagrid").options; + opts.finder.getTr(_6c0,_6c1).removeClass("datagrid-row-over"); + } + }; + }; + function _6c4(e){ + var tr=_6bf(e.target); + if(!tr){ + return; + } + var _6c5=_6b2(tr); + var opts=$.data(_6c5,"datagrid").options; + var _6c6=_6c2(tr); + var tt=$(e.target); + if(tt.parent().hasClass("datagrid-cell-check")){ + if(opts.singleSelect&&opts.selectOnCheck){ + tt._propAttr("checked",!tt.is(":checked")); + _6c7(_6c5,_6c6); + }else{ + if(tt.is(":checked")){ + tt._propAttr("checked",false); + _6c7(_6c5,_6c6); + }else{ + tt._propAttr("checked",true); + _6c8(_6c5,_6c6); + } + } + }else{ + var row=opts.finder.getRow(_6c5,_6c6); + var td=tt.closest("td[field]",tr); + if(td.length){ + var _6c9=td.attr("field"); + opts.onClickCell.call(_6c5,_6c6,_6c9,row[_6c9]); + } + if(opts.singleSelect==true){ + _6ca(_6c5,_6c6); + }else{ + if(opts.ctrlSelect){ + if(e.metaKey||e.ctrlKey){ + if(tr.hasClass("datagrid-row-selected")){ + _6cb(_6c5,_6c6); + }else{ + _6ca(_6c5,_6c6); + } + }else{ + if(e.shiftKey){ + $(_6c5).datagrid("clearSelections"); + var _6cc=Math.min(opts.lastSelectedIndex||0,_6c6); + var _6cd=Math.max(opts.lastSelectedIndex||0,_6c6); + for(var i=_6cc;i<=_6cd;i++){ + _6ca(_6c5,i); + } + }else{ + $(_6c5).datagrid("clearSelections"); + _6ca(_6c5,_6c6); + opts.lastSelectedIndex=_6c6; + } + } + }else{ + if(tr.hasClass("datagrid-row-selected")){ + _6cb(_6c5,_6c6); + }else{ + _6ca(_6c5,_6c6); + } + } + } + opts.onClickRow.apply(_6c5,_64a(_6c5,[_6c6,row])); + } + }; + function _6ce(e){ + var tr=_6bf(e.target); + if(!tr){ + return; + } + var _6cf=_6b2(tr); + var opts=$.data(_6cf,"datagrid").options; + var _6d0=_6c2(tr); + var row=opts.finder.getRow(_6cf,_6d0); + var td=$(e.target).closest("td[field]",tr); + if(td.length){ + var _6d1=td.attr("field"); + opts.onDblClickCell.call(_6cf,_6d0,_6d1,row[_6d1]); + } + opts.onDblClickRow.apply(_6cf,_64a(_6cf,[_6d0,row])); + }; + function _6d2(e){ + var tr=_6bf(e.target); + if(tr){ + var _6d3=_6b2(tr); + var opts=$.data(_6d3,"datagrid").options; + var _6d4=_6c2(tr); + var row=opts.finder.getRow(_6d3,_6d4); + opts.onRowContextMenu.call(_6d3,e,_6d4,row); + }else{ + var body=_6bf(e.target,".datagrid-body"); + if(body){ + var _6d3=_6b2(body); + var opts=$.data(_6d3,"datagrid").options; + opts.onRowContextMenu.call(_6d3,e,-1,null); + } + } + }; + function _6b2(t){ + return $(t).closest("div.datagrid-view").children(".datagrid-f")[0]; + }; + function _6bf(t,_6d5){ + var tr=$(t).closest(_6d5||"tr.datagrid-row"); + if(tr.length&&tr.parent().length){ + return tr; + }else{ + return undefined; + } + }; + function _6c2(tr){ + if(tr.attr("datagrid-row-index")){ + return parseInt(tr.attr("datagrid-row-index")); + }else{ + return tr.attr("node-id"); + } + }; + function _6b7(_6d6,_6d7){ + var _6d8=$.data(_6d6,"datagrid"); + var opts=_6d8.options; + _6d7=_6d7||{}; + var _6d9={sortName:opts.sortName,sortOrder:opts.sortOrder}; + if(typeof _6d7=="object"){ + $.extend(_6d9,_6d7); + } + var _6da=[]; + var _6db=[]; + if(_6d9.sortName){ + _6da=_6d9.sortName.split(","); + _6db=_6d9.sortOrder.split(","); + } + if(typeof _6d7=="string"){ + var _6dc=_6d7; + var col=_6a4(_6d6,_6dc); + if(!col.sortable||_6d8.resizing){ + return; + } + var _6dd=col.order||"asc"; + var pos=_647(_6da,_6dc); + if(pos>=0){ + var _6de=_6db[pos]=="asc"?"desc":"asc"; + if(opts.multiSort&&_6de==_6dd){ + _6da.splice(pos,1); + _6db.splice(pos,1); + }else{ + _6db[pos]=_6de; + } + }else{ + if(opts.multiSort){ + _6da.push(_6dc); + _6db.push(_6dd); + }else{ + _6da=[_6dc]; + _6db=[_6dd]; + } + } + _6d9.sortName=_6da.join(","); + _6d9.sortOrder=_6db.join(","); + } + if(opts.onBeforeSortColumn.call(_6d6,_6d9.sortName,_6d9.sortOrder)==false){ + return; + } + $.extend(opts,_6d9); + var dc=_6d8.dc; + var _6df=dc.header1.add(dc.header2); + _6df.find("div.datagrid-cell").removeClass("datagrid-sort-asc datagrid-sort-desc"); + for(var i=0;i<_6da.length;i++){ + var col=_6a4(_6d6,_6da[i]); + _6df.find("div."+col.cellClass).addClass("datagrid-sort-"+_6db[i]); + } + if(opts.remoteSort){ + _6e0(_6d6); + }else{ + _6e1(_6d6,$(_6d6).datagrid("getData")); + } + opts.onSortColumn.call(_6d6,opts.sortName,opts.sortOrder); + }; + function _6e2(_6e3,_6e4,_6e5){ + _6e6(true); + _6e6(false); + function _6e6(_6e7){ + var aa=_6e8(_6e3,_6e7); + if(aa.length){ + var _6e9=aa[aa.length-1]; + var _6ea=_647(_6e9,_6e4); + if(_6ea>=0){ + for(var _6eb=0;_6eb=_6f0.find("table").width()){ + dc.body2.css("overflow-x","hidden"); + } + function _6f3(){ + if(!opts.fitColumns){ + return; + } + if(!_6ef.leftWidth){ + _6ef.leftWidth=0; + } + var _6f4=0; + var cc=[]; + var _6f5=_6a3(_6ee,false); + for(var i=0;i<_6f5.length;i++){ + var col=_6a4(_6ee,_6f5[i]); + if(_6f6(col)){ + _6f4+=col.width; + cc.push({field:col.field,col:col,addingWidth:0}); + } + } + if(!_6f4){ + return; + } + cc[cc.length-1].addingWidth-=_6ef.leftWidth; + var _6f7=_6f0.children("div.datagrid-header-inner").show(); + var _6f8=_6f0.width()-_6f0.find("table").width()-opts.scrollbarSize+_6ef.leftWidth; + var rate=_6f8/_6f4; + if(!opts.showHeader){ + _6f7.hide(); + } + for(var i=0;i0){ + c.col.boxWidth+=c.addingWidth; + c.col.width+=c.addingWidth; + } + } + _6ef.leftWidth=_6f8; + $(_6ee).datagrid("fixColumnSize"); + }; + function _6f2(){ + var _6fa=false; + var _6fb=_6a3(_6ee,true).concat(_6a3(_6ee,false)); + $.map(_6fb,function(_6fc){ + var col=_6a4(_6ee,_6fc); + if(String(col.width||"").indexOf("%")>=0){ + var _6fd=$.parser.parseValue("width",col.width,dc.view,opts.scrollbarSize+(opts.rownumbers?opts.rownumberWidth:0))-col.deltaWidth; + if(_6fd>0){ + col.boxWidth=_6fd; + _6fa=true; + } + } + }); + if(_6fa){ + $(_6ee).datagrid("fixColumnSize"); + } + }; + function _6f1(fit){ + var _6fe=dc.header1.add(dc.header2).find(".datagrid-cell-group"); + if(_6fe.length){ + _6fe.each(function(){ + $(this)._outerWidth(fit?$(this).parent().width():10); + }); + if(fit){ + _660(_6ee); + } + } + }; + function _6f6(col){ + if(String(col.width||"").indexOf("%")>=0){ + return false; + } + if(!col.hidden&&!col.checkbox&&!col.auto&&!col.fixed){ + return true; + } + }; + }; + function _6ff(_700,_701){ + var _702=$.data(_700,"datagrid"); + var opts=_702.options; + var dc=_702.dc; + var tmp=$("
        ").appendTo("body"); + if(_701){ + _65b(_701); + $(_700).datagrid("fitColumns"); + }else{ + var _703=false; + var _704=_6a3(_700,true).concat(_6a3(_700,false)); + for(var i=0;i<_704.length;i++){ + var _701=_704[i]; + var col=_6a4(_700,_701); + if(col.auto){ + _65b(_701); + _703=true; + } + } + if(_703){ + $(_700).datagrid("fitColumns"); + } + } + tmp.remove(); + function _65b(_705){ + var _706=dc.view.find("div.datagrid-header td[field=\""+_705+"\"] div.datagrid-cell"); + _706.css("width",""); + var col=$(_700).datagrid("getColumnOption",_705); + col.width=undefined; + col.boxWidth=undefined; + col.auto=true; + $(_700).datagrid("fixColumnSize",_705); + var _707=Math.max(_708("header"),_708("allbody"),_708("allfooter"))+1; + _706._outerWidth(_707-1); + col.width=_707; + col.boxWidth=parseInt(_706[0].style.width); + col.deltaWidth=_707-col.boxWidth; + _706.css("width",""); + $(_700).datagrid("fixColumnSize",_705); + opts.onResizeColumn.call(_700,_705,col.width); + function _708(type){ + var _709=0; + if(type=="header"){ + _709=_70a(_706); + }else{ + opts.finder.getTr(_700,0,type).find("td[field=\""+_705+"\"] div.datagrid-cell").each(function(){ + var w=_70a($(this)); + if(_7091){ + var col=_6a4(_713,td.attr("field")); + var _715=col.boxWidth+col.deltaWidth-1; + for(var i=1;i<_714;i++){ + td=td.next(); + col=_6a4(_713,td.attr("field")); + _715+=col.boxWidth+col.deltaWidth; + } + $(this).children("div.datagrid-cell")._outerWidth(_715); + } + }); + }; + function _711(_716){ + var dc=$.data(_716,"datagrid").dc; + dc.view.find("div.datagrid-editable").each(function(){ + var cell=$(this); + var _717=cell.parent().attr("field"); + var col=$(_716).datagrid("getColumnOption",_717); + cell._outerWidth(col.boxWidth+col.deltaWidth-1); + var ed=$.data(this,"datagrid.editor"); + if(ed.actions.resize){ + ed.actions.resize(ed.target,cell.width()); + } + }); + }; + function _6a4(_718,_719){ + function find(_71a){ + if(_71a){ + for(var i=0;i<_71a.length;i++){ + var cc=_71a[i]; + for(var j=0;j=0){ + var _723=col.field||col.id||""; + for(var c=0;c<(col.colspan||1);c++){ + for(var r=0;r<(col.rowspan||1);r++){ + aa[_720+r][_721]=_723; + } + _721++; + } + } + }); + } + return aa; + function _71f(){ + var _724=0; + $.map(_71d[0]||[],function(col){ + _724+=col.colspan||1; + }); + return _724; + }; + function _722(a){ + for(var i=0;ib?1:-1); + }; + r=_72b(r1[sn],r2[sn])*(so=="asc"?1:-1); + if(r!=0){ + return r; + } + } + return r; + }); + } + if(opts.view.onBeforeRender){ + opts.view.onBeforeRender.call(opts.view,_727,data.rows); + } + opts.view.render.call(opts.view,_727,dc.body2,false); + opts.view.render.call(opts.view,_727,dc.body1,true); + if(opts.showFooter){ + opts.view.renderFooter.call(opts.view,_727,dc.footer2,false); + opts.view.renderFooter.call(opts.view,_727,dc.footer1,true); + } + if(opts.view.onAfterRender){ + opts.view.onAfterRender.call(opts.view,_727); + } + _728.ss.clean(); + var _72c=$(_727).datagrid("getPager"); + if(_72c.length){ + var _72d=_72c.pagination("options"); + if(_72d.total!=data.total){ + _72c.pagination("refresh",{pageNumber:opts.pageNumber,total:data.total}); + if(opts.pageNumber!=_72d.pageNumber&&_72d.pageNumber>0){ + opts.pageNumber=_72d.pageNumber; + _6e0(_727); + } + } + } + _671(_727); + dc.body2.triggerHandler("scroll"); + $(_727).datagrid("setSelectionState"); + $(_727).datagrid("autoSizeColumn"); + opts.onLoadSuccess.call(_727,data); + }; + function _72e(_72f){ + var _730=$.data(_72f,"datagrid"); + var opts=_730.options; + var dc=_730.dc; + dc.header1.add(dc.header2).find("input[type=checkbox]")._propAttr("checked",false); + if(opts.idField){ + var _731=$.data(_72f,"treegrid")?true:false; + var _732=opts.onSelect; + var _733=opts.onCheck; + opts.onSelect=opts.onCheck=function(){ + }; + var rows=opts.finder.getRows(_72f); + for(var i=0;i_744.height()-_745){ + _744.scrollTop(_744.scrollTop()+top+tr._outerHeight()-_744.height()+_745); + } + } + } + }; + function _6c3(_747,_748){ + var _749=$.data(_747,"datagrid"); + var opts=_749.options; + opts.finder.getTr(_747,_749.highlightIndex).removeClass("datagrid-row-over"); + opts.finder.getTr(_747,_748).addClass("datagrid-row-over"); + _749.highlightIndex=_748; + }; + function _6ca(_74a,_74b,_74c,_74d){ + var _74e=$.data(_74a,"datagrid"); + var opts=_74e.options; + var row=opts.finder.getRow(_74a,_74b); + if(!row){ + return; + } + if(opts.onBeforeSelect.apply(_74a,_64a(_74a,[_74b,row]))==false){ + return; + } + if(opts.singleSelect){ + _74f(_74a,true); + _74e.selectedRows=[]; + } + if(!_74c&&opts.checkOnSelect){ + _6c7(_74a,_74b,true); + } + if(opts.idField){ + _649(_74e.selectedRows,opts.idField,row); + } + opts.finder.getTr(_74a,_74b).addClass("datagrid-row-selected"); + opts.onSelect.apply(_74a,_64a(_74a,[_74b,row])); + if(!_74d&&opts.scrollOnSelect){ + _73f(_74a,_74b); + } + }; + function _6cb(_750,_751,_752){ + var _753=$.data(_750,"datagrid"); + var dc=_753.dc; + var opts=_753.options; + var row=opts.finder.getRow(_750,_751); + if(!row){ + return; + } + if(opts.onBeforeUnselect.apply(_750,_64a(_750,[_751,row]))==false){ + return; + } + if(!_752&&opts.checkOnSelect){ + _6c8(_750,_751,true); + } + opts.finder.getTr(_750,_751).removeClass("datagrid-row-selected"); + if(opts.idField){ + _648(_753.selectedRows,opts.idField,row[opts.idField]); + } + opts.onUnselect.apply(_750,_64a(_750,[_751,row])); + }; + function _754(_755,_756){ + var _757=$.data(_755,"datagrid"); + var opts=_757.options; + var rows=opts.finder.getRows(_755); + var _758=$.data(_755,"datagrid").selectedRows; + if(!_756&&opts.checkOnSelect){ + _6b5(_755,true); + } + opts.finder.getTr(_755,"","allbody").addClass("datagrid-row-selected"); + if(opts.idField){ + for(var _759=0;_759"); + cell.children("table").bind("click dblclick contextmenu",function(e){ + e.stopPropagation(); + }); + $.data(cell[0],"datagrid.editor",{actions:_78e,target:_78e.init(cell.find("td"),$.extend({height:opts.editorHeight},_78d)),field:_78b,type:_78c,oldHtml:_78f}); + } + } + }); + _671(_789,_78a,true); + }; + function _780(_791,_792){ + var opts=$.data(_791,"datagrid").options; + var tr=opts.finder.getTr(_791,_792); + tr.children("td").each(function(){ + var cell=$(this).find("div.datagrid-editable"); + if(cell.length){ + var ed=$.data(cell[0],"datagrid.editor"); + if(ed.actions.destroy){ + ed.actions.destroy(ed.target); + } + cell.html(ed.oldHtml); + $.removeData(cell[0],"datagrid.editor"); + cell.removeClass("datagrid-editable"); + cell.css("width",""); + } + }); + }; + function _773(_793,_794){ + var tr=$.data(_793,"datagrid").options.finder.getTr(_793,_794); + if(!tr.hasClass("datagrid-row-editing")){ + return true; + } + var vbox=tr.find(".validatebox-text"); + vbox.validatebox("validate"); + vbox.trigger("mouseleave"); + var _795=tr.find(".validatebox-invalid"); + return _795.length==0; + }; + function _796(_797,_798){ + var _799=$.data(_797,"datagrid").insertedRows; + var _79a=$.data(_797,"datagrid").deletedRows; + var _79b=$.data(_797,"datagrid").updatedRows; + if(!_798){ + var rows=[]; + rows=rows.concat(_799); + rows=rows.concat(_79a); + rows=rows.concat(_79b); + return rows; + }else{ + if(_798=="inserted"){ + return _799; + }else{ + if(_798=="deleted"){ + return _79a; + }else{ + if(_798=="updated"){ + return _79b; + } + } + } + } + return []; + }; + function _79c(_79d,_79e){ + var _79f=$.data(_79d,"datagrid"); + var opts=_79f.options; + var data=_79f.data; + var _7a0=_79f.insertedRows; + var _7a1=_79f.deletedRows; + $(_79d).datagrid("cancelEdit",_79e); + var row=opts.finder.getRow(_79d,_79e); + if(_647(_7a0,row)>=0){ + _648(_7a0,row); + }else{ + _7a1.push(row); + } + _648(_79f.selectedRows,opts.idField,row[opts.idField]); + _648(_79f.checkedRows,opts.idField,row[opts.idField]); + opts.view.deleteRow.call(opts.view,_79d,_79e); + if(opts.height=="auto"){ + _671(_79d); + } + $(_79d).datagrid("getPager").pagination("refresh",{total:data.total}); + }; + function _7a2(_7a3,_7a4){ + var data=$.data(_7a3,"datagrid").data; + var view=$.data(_7a3,"datagrid").options.view; + var _7a5=$.data(_7a3,"datagrid").insertedRows; + view.insertRow.call(view,_7a3,_7a4.index,_7a4.row); + _7a5.push(_7a4.row); + $(_7a3).datagrid("getPager").pagination("refresh",{total:data.total}); + }; + function _7a6(_7a7,row){ + var data=$.data(_7a7,"datagrid").data; + var view=$.data(_7a7,"datagrid").options.view; + var _7a8=$.data(_7a7,"datagrid").insertedRows; + view.insertRow.call(view,_7a7,null,row); + _7a8.push(row); + $(_7a7).datagrid("getPager").pagination("refresh",{total:data.total}); + }; + function _7a9(_7aa,_7ab){ + var _7ac=$.data(_7aa,"datagrid"); + var opts=_7ac.options; + var row=opts.finder.getRow(_7aa,_7ab.index); + var _7ad=false; + _7ab.row=_7ab.row||{}; + for(var _7ae in _7ab.row){ + if(row[_7ae]!==_7ab.row[_7ae]){ + _7ad=true; + break; + } + } + if(_7ad){ + if(_647(_7ac.insertedRows,row)==-1){ + if(_647(_7ac.updatedRows,row)==-1){ + _7ac.updatedRows.push(row); + } + } + opts.view.updateRow.call(opts.view,_7aa,_7ab.index,_7ab.row); + } + }; + function _7af(_7b0){ + var _7b1=$.data(_7b0,"datagrid"); + var data=_7b1.data; + var rows=data.rows; + var _7b2=[]; + for(var i=0;i=0){ + (_7bf=="s"?_6ca:_6c7)(_7b6,_7c0,true); + } + } + }; + for(var i=0;i0){ + $(this).datagrid("loadData",data); + }else{ + $(this).datagrid("autoSizeColumn"); + } + } + _6e0(this); + }); + }; + function _7d0(_7d1){ + var _7d2={}; + $.map(_7d1,function(name){ + _7d2[name]=_7d3(name); + }); + return _7d2; + function _7d3(name){ + function isA(_7d4){ + return $.data($(_7d4)[0],name)!=undefined; + }; + return {init:function(_7d5,_7d6){ + var _7d7=$("").appendTo(_7d5); + if(_7d7[name]&&name!="text"){ + return _7d7[name](_7d6); + }else{ + return _7d7; + } + },destroy:function(_7d8){ + if(isA(_7d8,name)){ + $(_7d8)[name]("destroy"); + } + },getValue:function(_7d9){ + if(isA(_7d9,name)){ + var opts=$(_7d9)[name]("options"); + if(opts.multiple){ + return $(_7d9)[name]("getValues").join(opts.separator); + }else{ + return $(_7d9)[name]("getValue"); + } + }else{ + return $(_7d9).val(); + } + },setValue:function(_7da,_7db){ + if(isA(_7da,name)){ + var opts=$(_7da)[name]("options"); + if(opts.multiple){ + if(_7db){ + $(_7da)[name]("setValues",_7db.split(opts.separator)); + }else{ + $(_7da)[name]("clear"); + } + }else{ + $(_7da)[name]("setValue",_7db); + } + }else{ + $(_7da).val(_7db); + } + },resize:function(_7dc,_7dd){ + if(isA(_7dc,name)){ + $(_7dc)[name]("resize",_7dd); + }else{ + $(_7dc)._size({width:_7dd,height:$.fn.datagrid.defaults.editorHeight}); + } + }}; + }; + }; + var _7de=$.extend({},_7d0(["text","textbox","passwordbox","filebox","numberbox","numberspinner","combobox","combotree","combogrid","combotreegrid","datebox","datetimebox","timespinner","datetimespinner"]),{textarea:{init:function(_7df,_7e0){ + var _7e1=$("").appendTo(_7df); + _7e1.css("vertical-align","middle")._outerHeight(_7e0.height); + return _7e1; + },getValue:function(_7e2){ + return $(_7e2).val(); + },setValue:function(_7e3,_7e4){ + $(_7e3).val(_7e4); + },resize:function(_7e5,_7e6){ + $(_7e5)._outerWidth(_7e6); + }},checkbox:{init:function(_7e7,_7e8){ + var _7e9=$("").appendTo(_7e7); + _7e9.val(_7e8.on); + _7e9.attr("offval",_7e8.off); + return _7e9; + },getValue:function(_7ea){ + if($(_7ea).is(":checked")){ + return $(_7ea).val(); + }else{ + return $(_7ea).attr("offval"); + } + },setValue:function(_7eb,_7ec){ + var _7ed=false; + if($(_7eb).val()==_7ec){ + _7ed=true; + } + $(_7eb)._propAttr("checked",_7ed); + }},validatebox:{init:function(_7ee,_7ef){ + var _7f0=$("").appendTo(_7ee); + _7f0.validatebox(_7ef); + return _7f0; + },destroy:function(_7f1){ + $(_7f1).validatebox("destroy"); + },getValue:function(_7f2){ + return $(_7f2).val(); + },setValue:function(_7f3,_7f4){ + $(_7f3).val(_7f4); + },resize:function(_7f5,_7f6){ + $(_7f5)._outerWidth(_7f6)._outerHeight($.fn.datagrid.defaults.editorHeight); + }}}); + $.fn.datagrid.methods={options:function(jq){ + var _7f7=$.data(jq[0],"datagrid").options; + var _7f8=$.data(jq[0],"datagrid").panel.panel("options"); + var opts=$.extend(_7f7,{width:_7f8.width,height:_7f8.height,closed:_7f8.closed,collapsed:_7f8.collapsed,minimized:_7f8.minimized,maximized:_7f8.maximized}); + return opts; + },setSelectionState:function(jq){ + return jq.each(function(){ + _72e(this); + }); + },createStyleSheet:function(jq){ + return _64c(jq[0]); + },getPanel:function(jq){ + return $.data(jq[0],"datagrid").panel; + },getPager:function(jq){ + return $.data(jq[0],"datagrid").panel.children("div.datagrid-pager"); + },getColumnFields:function(jq,_7f9){ + return _6a3(jq[0],_7f9); + },getColumnOption:function(jq,_7fa){ + return _6a4(jq[0],_7fa); + },resize:function(jq,_7fb){ + return jq.each(function(){ + _65b(this,_7fb); + }); + },load:function(jq,_7fc){ + return jq.each(function(){ + var opts=$(this).datagrid("options"); + if(typeof _7fc=="string"){ + opts.url=_7fc; + _7fc=null; + } + opts.pageNumber=1; + var _7fd=$(this).datagrid("getPager"); + _7fd.pagination("refresh",{pageNumber:1}); + _6e0(this,_7fc); + }); + },reload:function(jq,_7fe){ + return jq.each(function(){ + var opts=$(this).datagrid("options"); + if(typeof _7fe=="string"){ + opts.url=_7fe; + _7fe=null; + } + _6e0(this,_7fe); + }); + },reloadFooter:function(jq,_7ff){ + return jq.each(function(){ + var opts=$.data(this,"datagrid").options; + var dc=$.data(this,"datagrid").dc; + if(_7ff){ + $.data(this,"datagrid").footer=_7ff; + } + if(opts.showFooter){ + opts.view.renderFooter.call(opts.view,this,dc.footer2,false); + opts.view.renderFooter.call(opts.view,this,dc.footer1,true); + if(opts.view.onAfterRender){ + opts.view.onAfterRender.call(opts.view,this); + } + $(this).datagrid("fixRowHeight"); + } + }); + },loading:function(jq){ + return jq.each(function(){ + var opts=$.data(this,"datagrid").options; + $(this).datagrid("getPager").pagination("loading"); + if(opts.loadMsg){ + var _800=$(this).datagrid("getPanel"); + if(!_800.children("div.datagrid-mask").length){ + $("
        ").appendTo(_800); + var msg=$("
        ").html(opts.loadMsg).appendTo(_800); + msg._outerHeight(40); + msg.css({marginLeft:(-msg.outerWidth()/2),lineHeight:(msg.height()+"px")}); + } + } + }); + },loaded:function(jq){ + return jq.each(function(){ + $(this).datagrid("getPager").pagination("loaded"); + var _801=$(this).datagrid("getPanel"); + _801.children("div.datagrid-mask-msg").remove(); + _801.children("div.datagrid-mask").remove(); + }); + },fitColumns:function(jq){ + return jq.each(function(){ + _6ed(this); + }); + },fixColumnSize:function(jq,_802){ + return jq.each(function(){ + _70b(this,_802); + }); + },fixRowHeight:function(jq,_803){ + return jq.each(function(){ + _671(this,_803); + }); + },freezeRow:function(jq,_804){ + return jq.each(function(){ + _67e(this,_804); + }); + },autoSizeColumn:function(jq,_805){ + return jq.each(function(){ + _6ff(this,_805); + }); + },loadData:function(jq,data){ + return jq.each(function(){ + _6e1(this,data); + _7af(this); + }); + },getData:function(jq){ + return $.data(jq[0],"datagrid").data; + },getRows:function(jq){ + return $.data(jq[0],"datagrid").data.rows; + },getFooterRows:function(jq){ + return $.data(jq[0],"datagrid").footer; + },getRowIndex:function(jq,id){ + return _736(jq[0],id); + },getChecked:function(jq){ + return _73c(jq[0]); + },getSelected:function(jq){ + var rows=_739(jq[0]); + return rows.length>0?rows[0]:null; + },getSelections:function(jq){ + return _739(jq[0]); + },clearSelections:function(jq){ + return jq.each(function(){ + var _806=$.data(this,"datagrid"); + var _807=_806.selectedRows; + var _808=_806.checkedRows; + _807.splice(0,_807.length); + _74f(this); + if(_806.options.checkOnSelect){ + _808.splice(0,_808.length); + } + }); + },clearChecked:function(jq){ + return jq.each(function(){ + var _809=$.data(this,"datagrid"); + var _80a=_809.selectedRows; + var _80b=_809.checkedRows; + _80b.splice(0,_80b.length); + _6b6(this); + if(_809.options.selectOnCheck){ + _80a.splice(0,_80a.length); + } + }); + },scrollTo:function(jq,_80c){ + return jq.each(function(){ + _73f(this,_80c); + }); + },highlightRow:function(jq,_80d){ + return jq.each(function(){ + _6c3(this,_80d); + _73f(this,_80d); + }); + },selectAll:function(jq){ + return jq.each(function(){ + _754(this); + }); + },unselectAll:function(jq){ + return jq.each(function(){ + _74f(this); + }); + },selectRow:function(jq,_80e){ + return jq.each(function(){ + _6ca(this,_80e); + }); + },selectRecord:function(jq,id){ + return jq.each(function(){ + var opts=$.data(this,"datagrid").options; + if(opts.idField){ + var _80f=_736(this,id); + if(_80f>=0){ + $(this).datagrid("selectRow",_80f); + } + } + }); + },unselectRow:function(jq,_810){ + return jq.each(function(){ + _6cb(this,_810); + }); + },checkRow:function(jq,_811){ + return jq.each(function(){ + _6c7(this,_811); + }); + },uncheckRow:function(jq,_812){ + return jq.each(function(){ + _6c8(this,_812); + }); + },checkAll:function(jq){ + return jq.each(function(){ + _6b5(this); + }); + },uncheckAll:function(jq){ + return jq.each(function(){ + _6b6(this); + }); + },beginEdit:function(jq,_813){ + return jq.each(function(){ + _76e(this,_813); + }); + },endEdit:function(jq,_814){ + return jq.each(function(){ + _774(this,_814,false); + }); + },cancelEdit:function(jq,_815){ + return jq.each(function(){ + _774(this,_815,true); + }); + },getEditors:function(jq,_816){ + return _781(jq[0],_816); + },getEditor:function(jq,_817){ + return _785(jq[0],_817); + },refreshRow:function(jq,_818){ + return jq.each(function(){ + var opts=$.data(this,"datagrid").options; + opts.view.refreshRow.call(opts.view,this,_818); + }); + },validateRow:function(jq,_819){ + return _773(jq[0],_819); + },updateRow:function(jq,_81a){ + return jq.each(function(){ + _7a9(this,_81a); + }); + },appendRow:function(jq,row){ + return jq.each(function(){ + _7a6(this,row); + }); + },insertRow:function(jq,_81b){ + return jq.each(function(){ + _7a2(this,_81b); + }); + },deleteRow:function(jq,_81c){ + return jq.each(function(){ + _79c(this,_81c); + }); + },getChanges:function(jq,_81d){ + return _796(jq[0],_81d); + },acceptChanges:function(jq){ + return jq.each(function(){ + _7b3(this); + }); + },rejectChanges:function(jq){ + return jq.each(function(){ + _7b5(this); + }); + },mergeCells:function(jq,_81e){ + return jq.each(function(){ + _7c7(this,_81e); + }); + },showColumn:function(jq,_81f){ + return jq.each(function(){ + var col=$(this).datagrid("getColumnOption",_81f); + if(col.hidden){ + col.hidden=false; + $(this).datagrid("getPanel").find("td[field=\""+_81f+"\"]").show(); + _6e2(this,_81f,1); + $(this).datagrid("fitColumns"); + } + }); + },hideColumn:function(jq,_820){ + return jq.each(function(){ + var col=$(this).datagrid("getColumnOption",_820); + if(!col.hidden){ + col.hidden=true; + $(this).datagrid("getPanel").find("td[field=\""+_820+"\"]").hide(); + _6e2(this,_820,-1); + $(this).datagrid("fitColumns"); + } + }); + },sort:function(jq,_821){ + return jq.each(function(){ + _6b7(this,_821); + }); + },gotoPage:function(jq,_822){ + return jq.each(function(){ + var _823=this; + var page,cb; + if(typeof _822=="object"){ + page=_822.page; + cb=_822.callback; + }else{ + page=_822; + } + $(_823).datagrid("options").pageNumber=page; + $(_823).datagrid("getPager").pagination("refresh",{pageNumber:page}); + _6e0(_823,null,function(){ + if(cb){ + cb.call(_823,page); + } + }); + }); + }}; + $.fn.datagrid.parseOptions=function(_824){ + var t=$(_824); + return $.extend({},$.fn.panel.parseOptions(_824),$.parser.parseOptions(_824,["url","toolbar","idField","sortName","sortOrder","pagePosition","resizeHandle",{sharedStyleSheet:"boolean",fitColumns:"boolean",autoRowHeight:"boolean",striped:"boolean",nowrap:"boolean"},{rownumbers:"boolean",singleSelect:"boolean",ctrlSelect:"boolean",checkOnSelect:"boolean",selectOnCheck:"boolean"},{pagination:"boolean",pageSize:"number",pageNumber:"number"},{multiSort:"boolean",remoteSort:"boolean",showHeader:"boolean",showFooter:"boolean"},{scrollbarSize:"number",scrollOnSelect:"boolean"}]),{pageList:(t.attr("pageList")?eval(t.attr("pageList")):undefined),loadMsg:(t.attr("loadMsg")!=undefined?t.attr("loadMsg"):undefined),rowStyler:(t.attr("rowStyler")?eval(t.attr("rowStyler")):undefined)}); + }; + $.fn.datagrid.parseData=function(_825){ + var t=$(_825); + var data={total:0,rows:[]}; + var _826=t.datagrid("getColumnFields",true).concat(t.datagrid("getColumnFields",false)); + t.find("tbody tr").each(function(){ + data.total++; + var row={}; + $.extend(row,$.parser.parseOptions(this,["iconCls","state"])); + for(var i=0;i<_826.length;i++){ + row[_826[i]]=$(this).find("td:eq("+i+")").html(); + } + data.rows.push(row); + }); + return data; + }; + var _827={render:function(_828,_829,_82a){ + var rows=$(_828).datagrid("getRows"); + $(_829).empty().html(this.renderTable(_828,0,rows,_82a)); + },renderFooter:function(_82b,_82c,_82d){ + var opts=$.data(_82b,"datagrid").options; + var rows=$.data(_82b,"datagrid").footer||[]; + var _82e=$(_82b).datagrid("getColumnFields",_82d); + var _82f=[""]; + for(var i=0;i"); + _82f.push(this.renderRow.call(this,_82b,_82e,_82d,i,rows[i])); + _82f.push(""); + } + _82f.push("
        "); + $(_82c).html(_82f.join("")); + },renderTable:function(_830,_831,rows,_832){ + var _833=$.data(_830,"datagrid"); + var opts=_833.options; + if(_832){ + if(!(opts.rownumbers||(opts.frozenColumns&&opts.frozenColumns.length))){ + return ""; + } + } + var _834=$(_830).datagrid("getColumnFields",_832); + var _835=[""]; + for(var i=0;i"); + _835.push(this.renderRow.call(this,_830,_834,_832,_831,row)); + _835.push(""); + _831++; + } + _835.push("
        "); + return _835.join(""); + },renderRow:function(_838,_839,_83a,_83b,_83c){ + var opts=$.data(_838,"datagrid").options; + var cc=[]; + if(_83a&&opts.rownumbers){ + var _83d=_83b+1; + if(opts.pagination){ + _83d+=(opts.pageNumber-1)*opts.pageSize; + } + cc.push("
        "+_83d+"
        "); + } + for(var i=0;i<_839.length;i++){ + var _83e=_839[i]; + var col=$(_838).datagrid("getColumnOption",_83e); + if(col){ + var _83f=_83c[_83e]; + var css=col.styler?(col.styler.call(_838,_83f,_83c,_83b)||""):""; + var cs=this.getStyleValue(css); + var cls=cs.c?"class=\""+cs.c+"\"":""; + var _840=col.hidden?"style=\"display:none;"+cs.s+"\"":(cs.s?"style=\""+cs.s+"\"":""); + cc.push(""); + var _840=""; + if(!col.checkbox){ + if(col.align){ + _840+="text-align:"+col.align+";"; + } + if(!opts.nowrap){ + _840+="white-space:normal;height:auto;"; + }else{ + if(opts.autoRowHeight){ + _840+="height:auto;"; + } + } + } + cc.push("
        "); + if(col.checkbox){ + cc.push(""); + }else{ + if(col.formatter){ + cc.push(col.formatter(_83f,_83c,_83b)); + }else{ + cc.push(_83f); + } + } + cc.push("
        "); + cc.push(""); + } + } + return cc.join(""); + },getStyleValue:function(css){ + var _841=""; + var _842=""; + if(typeof css=="string"){ + _842=css; + }else{ + if(css){ + _841=css["class"]||""; + _842=css["style"]||""; + } + } + return {c:_841,s:_842}; + },refreshRow:function(_843,_844){ + this.updateRow.call(this,_843,_844,{}); + },updateRow:function(_845,_846,row){ + var opts=$.data(_845,"datagrid").options; + var _847=opts.finder.getRow(_845,_846); + $.extend(_847,row); + var cs=_848.call(this,_846); + var _849=cs.s; + var cls="datagrid-row "+(_846%2&&opts.striped?"datagrid-row-alt ":" ")+cs.c; + function _848(_84a){ + var css=opts.rowStyler?opts.rowStyler.call(_845,_84a,_847):""; + return this.getStyleValue(css); + }; + function _84b(_84c){ + var tr=opts.finder.getTr(_845,_846,"body",(_84c?1:2)); + if(!tr.length){ + return; + } + var _84d=$(_845).datagrid("getColumnFields",_84c); + var _84e=tr.find("div.datagrid-cell-check input[type=checkbox]").is(":checked"); + tr.html(this.renderRow.call(this,_845,_84d,_84c,_846,_847)); + var _84f=(tr.hasClass("datagrid-row-checked")?" datagrid-row-checked":"")+(tr.hasClass("datagrid-row-selected")?" datagrid-row-selected":""); + tr.attr("style",_849).attr("class",cls+_84f); + if(_84e){ + tr.find("div.datagrid-cell-check input[type=checkbox]")._propAttr("checked",true); + } + }; + _84b.call(this,true); + _84b.call(this,false); + $(_845).datagrid("fixRowHeight",_846); + },insertRow:function(_850,_851,row){ + var _852=$.data(_850,"datagrid"); + var opts=_852.options; + var dc=_852.dc; + var data=_852.data; + if(_851==undefined||_851==null){ + _851=data.rows.length; + } + if(_851>data.rows.length){ + _851=data.rows.length; + } + function _853(_854){ + var _855=_854?1:2; + for(var i=data.rows.length-1;i>=_851;i--){ + var tr=opts.finder.getTr(_850,i,"body",_855); + tr.attr("datagrid-row-index",i+1); + tr.attr("id",_852.rowIdPrefix+"-"+_855+"-"+(i+1)); + if(_854&&opts.rownumbers){ + var _856=i+2; + if(opts.pagination){ + _856+=(opts.pageNumber-1)*opts.pageSize; + } + tr.find("div.datagrid-cell-rownumber").html(_856); + } + if(opts.striped){ + tr.removeClass("datagrid-row-alt").addClass((i+1)%2?"datagrid-row-alt":""); + } + } + }; + function _857(_858){ + var _859=_858?1:2; + var _85a=$(_850).datagrid("getColumnFields",_858); + var _85b=_852.rowIdPrefix+"-"+_859+"-"+_851; + var tr=""; + if(_851>=data.rows.length){ + if(data.rows.length){ + opts.finder.getTr(_850,"","last",_859).after(tr); + }else{ + var cc=_858?dc.body1:dc.body2; + cc.html(""+tr+"
        "); + } + }else{ + opts.finder.getTr(_850,_851+1,"body",_859).before(tr); + } + }; + _853.call(this,true); + _853.call(this,false); + _857.call(this,true); + _857.call(this,false); + data.total+=1; + data.rows.splice(_851,0,row); + this.setEmptyMsg(_850); + this.refreshRow.call(this,_850,_851); + },deleteRow:function(_85c,_85d){ + var _85e=$.data(_85c,"datagrid"); + var opts=_85e.options; + var data=_85e.data; + function _85f(_860){ + var _861=_860?1:2; + for(var i=_85d+1;i
        ").appendTo(_868.dc.view); + d.html(opts.emptyMsg).css("top",h+"px"); + } + } + },renderEmptyRow:function(_86a){ + var cols=$.map($(_86a).datagrid("getColumnFields"),function(_86b){ + return $(_86a).datagrid("getColumnOption",_86b); + }); + $.map(cols,function(col){ + col.formatter1=col.formatter; + col.styler1=col.styler; + col.formatter=col.styler=undefined; + }); + var _86c=$.data(_86a,"datagrid").dc.body2; + _86c.html(this.renderTable(_86a,0,[{}],false)); + _86c.find("tbody *").css({height:1,borderColor:"transparent",background:"transparent"}); + var tr=_86c.find(".datagrid-row"); + tr.removeClass("datagrid-row").removeAttr("datagrid-row-index"); + tr.find(".datagrid-cell,.datagrid-cell-check").empty(); + $.map(cols,function(col){ + col.formatter=col.formatter1; + col.styler=col.styler1; + col.formatter1=col.styler1=undefined; + }); + }}; + $.fn.datagrid.defaults=$.extend({},$.fn.panel.defaults,{sharedStyleSheet:false,frozenColumns:undefined,columns:undefined,fitColumns:false,resizeHandle:"right",resizeEdge:5,autoRowHeight:true,toolbar:null,striped:false,method:"post",nowrap:true,idField:null,url:null,data:null,loadMsg:"Processing, please wait ...",emptyMsg:"",rownumbers:false,singleSelect:false,ctrlSelect:false,selectOnCheck:true,checkOnSelect:true,pagination:false,pagePosition:"bottom",pageNumber:1,pageSize:10,pageList:[10,20,30,40,50],queryParams:{},sortName:null,sortOrder:"asc",multiSort:false,remoteSort:true,showHeader:true,showFooter:false,scrollOnSelect:true,scrollbarSize:18,rownumberWidth:30,editorHeight:24,headerEvents:{mouseover:_6af(true),mouseout:_6af(false),click:_6b3,dblclick:_6b8,contextmenu:_6bb},rowEvents:{mouseover:_6bd(true),mouseout:_6bd(false),click:_6c4,dblclick:_6ce,contextmenu:_6d2},rowStyler:function(_86d,_86e){ + },loader:function(_86f,_870,_871){ + var opts=$(this).datagrid("options"); + if(!opts.url){ + return false; + } + $.ajax({type:opts.method,url:opts.url,data:_86f,dataType:"json",success:function(data){ + _870(data); + },error:function(){ + _871.apply(this,arguments); + }}); + },loadFilter:function(data){ + return data; + },editors:_7de,finder:{getTr:function(_872,_873,type,_874){ + type=type||"body"; + _874=_874||0; + var _875=$.data(_872,"datagrid"); + var dc=_875.dc; + var opts=_875.options; + if(_874==0){ + var tr1=opts.finder.getTr(_872,_873,type,1); + var tr2=opts.finder.getTr(_872,_873,type,2); + return tr1.add(tr2); + }else{ + if(type=="body"){ + var tr=$("#"+_875.rowIdPrefix+"-"+_874+"-"+_873); + if(!tr.length){ + tr=(_874==1?dc.body1:dc.body2).find(">table>tbody>tr[datagrid-row-index="+_873+"]"); + } + return tr; + }else{ + if(type=="footer"){ + return (_874==1?dc.footer1:dc.footer2).find(">table>tbody>tr[datagrid-row-index="+_873+"]"); + }else{ + if(type=="selected"){ + return (_874==1?dc.body1:dc.body2).find(">table>tbody>tr.datagrid-row-selected"); + }else{ + if(type=="highlight"){ + return (_874==1?dc.body1:dc.body2).find(">table>tbody>tr.datagrid-row-over"); + }else{ + if(type=="checked"){ + return (_874==1?dc.body1:dc.body2).find(">table>tbody>tr.datagrid-row-checked"); + }else{ + if(type=="editing"){ + return (_874==1?dc.body1:dc.body2).find(">table>tbody>tr.datagrid-row-editing"); + }else{ + if(type=="last"){ + return (_874==1?dc.body1:dc.body2).find(">table>tbody>tr[datagrid-row-index]:last"); + }else{ + if(type=="allbody"){ + return (_874==1?dc.body1:dc.body2).find(">table>tbody>tr[datagrid-row-index]"); + }else{ + if(type=="allfooter"){ + return (_874==1?dc.footer1:dc.footer2).find(">table>tbody>tr[datagrid-row-index]"); + } + } + } + } + } + } + } + } + } + } + },getRow:function(_876,p){ + var _877=(typeof p=="object")?p.attr("datagrid-row-index"):p; + return $.data(_876,"datagrid").data.rows[parseInt(_877)]; + },getRows:function(_878){ + return $(_878).datagrid("getRows"); + }},view:_827,onBeforeLoad:function(_879){ + },onLoadSuccess:function(){ + },onLoadError:function(){ + },onClickRow:function(_87a,_87b){ + },onDblClickRow:function(_87c,_87d){ + },onClickCell:function(_87e,_87f,_880){ + },onDblClickCell:function(_881,_882,_883){ + },onBeforeSortColumn:function(sort,_884){ + },onSortColumn:function(sort,_885){ + },onResizeColumn:function(_886,_887){ + },onBeforeSelect:function(_888,_889){ + },onSelect:function(_88a,_88b){ + },onBeforeUnselect:function(_88c,_88d){ + },onUnselect:function(_88e,_88f){ + },onSelectAll:function(rows){ + },onUnselectAll:function(rows){ + },onBeforeCheck:function(_890,_891){ + },onCheck:function(_892,_893){ + },onBeforeUncheck:function(_894,_895){ + },onUncheck:function(_896,_897){ + },onCheckAll:function(rows){ + },onUncheckAll:function(rows){ + },onBeforeEdit:function(_898,_899){ + },onBeginEdit:function(_89a,_89b){ + },onEndEdit:function(_89c,_89d,_89e){ + },onAfterEdit:function(_89f,_8a0,_8a1){ + },onCancelEdit:function(_8a2,_8a3){ + },onHeaderContextMenu:function(e,_8a4){ + },onRowContextMenu:function(e,_8a5,_8a6){ + }}); +})(jQuery); +(function($){ + var _8a7; + $(document).unbind(".propertygrid").bind("mousedown.propertygrid",function(e){ + var p=$(e.target).closest("div.datagrid-view,div.combo-panel"); + if(p.length){ + return; + } + _8a8(_8a7); + _8a7=undefined; + }); + function _8a9(_8aa){ + var _8ab=$.data(_8aa,"propertygrid"); + var opts=$.data(_8aa,"propertygrid").options; + $(_8aa).datagrid($.extend({},opts,{cls:"propertygrid",view:(opts.showGroup?opts.groupView:opts.view),onBeforeEdit:function(_8ac,row){ + if(opts.onBeforeEdit.call(_8aa,_8ac,row)==false){ + return false; + } + var dg=$(this); + var row=dg.datagrid("getRows")[_8ac]; + var col=dg.datagrid("getColumnOption","value"); + col.editor=row.editor; + },onClickCell:function(_8ad,_8ae,_8af){ + if(_8a7!=this){ + _8a8(_8a7); + _8a7=this; + } + if(opts.editIndex!=_8ad){ + _8a8(_8a7); + $(this).datagrid("beginEdit",_8ad); + var ed=$(this).datagrid("getEditor",{index:_8ad,field:_8ae}); + if(!ed){ + ed=$(this).datagrid("getEditor",{index:_8ad,field:"value"}); + } + if(ed){ + var t=$(ed.target); + var _8b0=t.data("textbox")?t.textbox("textbox"):t; + _8b0.focus(); + opts.editIndex=_8ad; + } + } + opts.onClickCell.call(_8aa,_8ad,_8ae,_8af); + },loadFilter:function(data){ + _8a8(this); + return opts.loadFilter.call(this,data); + }})); + }; + function _8a8(_8b1){ + var t=$(_8b1); + if(!t.length){ + return; + } + var opts=$.data(_8b1,"propertygrid").options; + opts.finder.getTr(_8b1,null,"editing").each(function(){ + var _8b2=parseInt($(this).attr("datagrid-row-index")); + if(t.datagrid("validateRow",_8b2)){ + t.datagrid("endEdit",_8b2); + }else{ + t.datagrid("cancelEdit",_8b2); + } + }); + opts.editIndex=undefined; + }; + $.fn.propertygrid=function(_8b3,_8b4){ + if(typeof _8b3=="string"){ + var _8b5=$.fn.propertygrid.methods[_8b3]; + if(_8b5){ + return _8b5(this,_8b4); + }else{ + return this.datagrid(_8b3,_8b4); + } + } + _8b3=_8b3||{}; + return this.each(function(){ + var _8b6=$.data(this,"propertygrid"); + if(_8b6){ + $.extend(_8b6.options,_8b3); + }else{ + var opts=$.extend({},$.fn.propertygrid.defaults,$.fn.propertygrid.parseOptions(this),_8b3); + opts.frozenColumns=$.extend(true,[],opts.frozenColumns); + opts.columns=$.extend(true,[],opts.columns); + $.data(this,"propertygrid",{options:opts}); + } + _8a9(this); + }); + }; + $.fn.propertygrid.methods={options:function(jq){ + return $.data(jq[0],"propertygrid").options; + }}; + $.fn.propertygrid.parseOptions=function(_8b7){ + return $.extend({},$.fn.datagrid.parseOptions(_8b7),$.parser.parseOptions(_8b7,[{showGroup:"boolean"}])); + }; + var _8b8=$.extend({},$.fn.datagrid.defaults.view,{render:function(_8b9,_8ba,_8bb){ + var _8bc=[]; + var _8bd=this.groups; + for(var i=0;i<_8bd.length;i++){ + _8bc.push(this.renderGroup.call(this,_8b9,i,_8bd[i],_8bb)); + } + $(_8ba).html(_8bc.join("")); + },renderGroup:function(_8be,_8bf,_8c0,_8c1){ + var _8c2=$.data(_8be,"datagrid"); + var opts=_8c2.options; + var _8c3=$(_8be).datagrid("getColumnFields",_8c1); + var _8c4=[]; + _8c4.push("
        "); + if((_8c1&&(opts.rownumbers||opts.frozenColumns.length))||(!_8c1&&!(opts.rownumbers||opts.frozenColumns.length))){ + _8c4.push(""); + _8c4.push(" "); + _8c4.push(""); + } + if(!_8c1){ + _8c4.push(""); + _8c4.push(opts.groupFormatter.call(_8be,_8c0.value,_8c0.rows)); + _8c4.push(""); + } + _8c4.push("
        "); + _8c4.push(""); + var _8c5=_8c0.startIndex; + for(var j=0;j<_8c0.rows.length;j++){ + var css=opts.rowStyler?opts.rowStyler.call(_8be,_8c5,_8c0.rows[j]):""; + var _8c6=""; + var _8c7=""; + if(typeof css=="string"){ + _8c7=css; + }else{ + if(css){ + _8c6=css["class"]||""; + _8c7=css["style"]||""; + } + } + var cls="class=\"datagrid-row "+(_8c5%2&&opts.striped?"datagrid-row-alt ":" ")+_8c6+"\""; + var _8c8=_8c7?"style=\""+_8c7+"\"":""; + var _8c9=_8c2.rowIdPrefix+"-"+(_8c1?1:2)+"-"+_8c5; + _8c4.push(""); + _8c4.push(this.renderRow.call(this,_8be,_8c3,_8c1,_8c5,_8c0.rows[j])); + _8c4.push(""); + _8c5++; + } + _8c4.push("
        "); + return _8c4.join(""); + },bindEvents:function(_8ca){ + var _8cb=$.data(_8ca,"datagrid"); + var dc=_8cb.dc; + var body=dc.body1.add(dc.body2); + var _8cc=($.data(body[0],"events")||$._data(body[0],"events")).click[0].handler; + body.unbind("click").bind("click",function(e){ + var tt=$(e.target); + var _8cd=tt.closest("span.datagrid-row-expander"); + if(_8cd.length){ + var _8ce=_8cd.closest("div.datagrid-group").attr("group-index"); + if(_8cd.hasClass("datagrid-row-collapse")){ + $(_8ca).datagrid("collapseGroup",_8ce); + }else{ + $(_8ca).datagrid("expandGroup",_8ce); + } + }else{ + _8cc(e); + } + e.stopPropagation(); + }); + },onBeforeRender:function(_8cf,rows){ + var _8d0=$.data(_8cf,"datagrid"); + var opts=_8d0.options; + _8d1(); + var _8d2=[]; + for(var i=0;i"+".datagrid-group{height:"+opts.groupHeight+"px;overflow:hidden;font-weight:bold;border-bottom:1px solid #ccc;}"+".datagrid-group-title,.datagrid-group-expander{display:inline-block;vertical-align:bottom;height:100%;line-height:"+opts.groupHeight+"px;padding:0 4px;}"+".datagrid-group-expander{width:"+opts.expanderWidth+"px;text-align:center;padding:0}"+".datagrid-row-expander{margin:"+Math.floor((opts.groupHeight-16)/2)+"px 0;display:inline-block;width:16px;height:16px;cursor:pointer}"+""); + } + }; + }}); + $.extend($.fn.datagrid.methods,{groups:function(jq){ + return jq.datagrid("options").view.groups; + },expandGroup:function(jq,_8d9){ + return jq.each(function(){ + var view=$.data(this,"datagrid").dc.view; + var _8da=view.find(_8d9!=undefined?"div.datagrid-group[group-index=\""+_8d9+"\"]":"div.datagrid-group"); + var _8db=_8da.find("span.datagrid-row-expander"); + if(_8db.hasClass("datagrid-row-expand")){ + _8db.removeClass("datagrid-row-expand").addClass("datagrid-row-collapse"); + _8da.next("table").show(); + } + $(this).datagrid("fixRowHeight"); + }); + },collapseGroup:function(jq,_8dc){ + return jq.each(function(){ + var view=$.data(this,"datagrid").dc.view; + var _8dd=view.find(_8dc!=undefined?"div.datagrid-group[group-index=\""+_8dc+"\"]":"div.datagrid-group"); + var _8de=_8dd.find("span.datagrid-row-expander"); + if(_8de.hasClass("datagrid-row-collapse")){ + _8de.removeClass("datagrid-row-collapse").addClass("datagrid-row-expand"); + _8dd.next("table").hide(); + } + $(this).datagrid("fixRowHeight"); + }); + }}); + $.extend(_8b8,{refreshGroupTitle:function(_8df,_8e0){ + var _8e1=$.data(_8df,"datagrid"); + var opts=_8e1.options; + var dc=_8e1.dc; + var _8e2=this.groups[_8e0]; + var span=dc.body2.children("div.datagrid-group[group-index="+_8e0+"]").find("span.datagrid-group-title"); + span.html(opts.groupFormatter.call(_8df,_8e2.value,_8e2.rows)); + },insertRow:function(_8e3,_8e4,row){ + var _8e5=$.data(_8e3,"datagrid"); + var opts=_8e5.options; + var dc=_8e5.dc; + var _8e6=null; + var _8e7; + if(!_8e5.data.rows.length){ + $(_8e3).datagrid("loadData",[row]); + return; + } + for(var i=0;i_8e6.startIndex+_8e6.rows.length){ + _8e4=_8e6.startIndex+_8e6.rows.length; + } + } + $.fn.datagrid.defaults.view.insertRow.call(this,_8e3,_8e4,row); + if(_8e4>=_8e6.startIndex+_8e6.rows.length){ + _8e8(_8e4,true); + _8e8(_8e4,false); + } + _8e6.rows.splice(_8e4-_8e6.startIndex,0,row); + }else{ + _8e6={value:row[opts.groupField],rows:[row],startIndex:_8e5.data.rows.length}; + _8e7=this.groups.length; + dc.body1.append(this.renderGroup.call(this,_8e3,_8e7,_8e6,true)); + dc.body2.append(this.renderGroup.call(this,_8e3,_8e7,_8e6,false)); + this.groups.push(_8e6); + _8e5.data.rows.push(row); + } + this.refreshGroupTitle(_8e3,_8e7); + function _8e8(_8e9,_8ea){ + var _8eb=_8ea?1:2; + var _8ec=opts.finder.getTr(_8e3,_8e9-1,"body",_8eb); + var tr=opts.finder.getTr(_8e3,_8e9,"body",_8eb); + tr.insertAfter(_8ec); + }; + },updateRow:function(_8ed,_8ee,row){ + var opts=$.data(_8ed,"datagrid").options; + $.fn.datagrid.defaults.view.updateRow.call(this,_8ed,_8ee,row); + var tb=opts.finder.getTr(_8ed,_8ee,"body",2).closest("table.datagrid-btable"); + var _8ef=parseInt(tb.prev().attr("group-index")); + this.refreshGroupTitle(_8ed,_8ef); + },deleteRow:function(_8f0,_8f1){ + var _8f2=$.data(_8f0,"datagrid"); + var opts=_8f2.options; + var dc=_8f2.dc; + var body=dc.body1.add(dc.body2); + var tb=opts.finder.getTr(_8f0,_8f1,"body",2).closest("table.datagrid-btable"); + var _8f3=parseInt(tb.prev().attr("group-index")); + $.fn.datagrid.defaults.view.deleteRow.call(this,_8f0,_8f1); + var _8f4=this.groups[_8f3]; + if(_8f4.rows.length>1){ + _8f4.rows.splice(_8f1-_8f4.startIndex,1); + this.refreshGroupTitle(_8f0,_8f3); + }else{ + body.children("div.datagrid-group[group-index="+_8f3+"]").remove(); + for(var i=_8f3+1;i").insertBefore(tr.find(".tree-title")); + } + if(row.checkState=="checked"){ + _918(_92c,_92d,true,true); + }else{ + if(row.checkState=="unchecked"){ + _918(_92c,_92d,false,true); + }else{ + var flag=_92a(row); + if(flag===0){ + _918(_92c,_92d,false,true); + }else{ + if(flag===1){ + _918(_92c,_92d,true,true); + } + } + } + } + }else{ + ck.remove(); + row.checkState=undefined; + row.checked=undefined; + _921(_92c,row); + } + }; + function _92e(_92f,_930){ + var opts=$.data(_92f,"treegrid").options; + var tr1=opts.finder.getTr(_92f,_930,"body",1); + var tr2=opts.finder.getTr(_92f,_930,"body",2); + var _931=$(_92f).datagrid("getColumnFields",true).length+(opts.rownumbers?1:0); + var _932=$(_92f).datagrid("getColumnFields",false).length; + _933(tr1,_931); + _933(tr2,_932); + function _933(tr,_934){ + $(""+""+"
        "+""+"").insertAfter(tr); + }; + }; + function _935(_936,_937,data,_938,_939){ + var _93a=$.data(_936,"treegrid"); + var opts=_93a.options; + var dc=_93a.dc; + data=opts.loadFilter.call(_936,data,_937); + var node=find(_936,_937); + if(node){ + var _93b=opts.finder.getTr(_936,_937,"body",1); + var _93c=opts.finder.getTr(_936,_937,"body",2); + var cc1=_93b.next("tr.treegrid-tr-tree").children("td").children("div"); + var cc2=_93c.next("tr.treegrid-tr-tree").children("td").children("div"); + if(!_938){ + node.children=[]; + } + }else{ + var cc1=dc.body1; + var cc2=dc.body2; + if(!_938){ + _93a.data=[]; + } + } + if(!_938){ + cc1.empty(); + cc2.empty(); + } + if(opts.view.onBeforeRender){ + opts.view.onBeforeRender.call(opts.view,_936,_937,data); + } + opts.view.render.call(opts.view,_936,cc1,true); + opts.view.render.call(opts.view,_936,cc2,false); + if(opts.showFooter){ + opts.view.renderFooter.call(opts.view,_936,dc.footer1,true); + opts.view.renderFooter.call(opts.view,_936,dc.footer2,false); + } + if(opts.view.onAfterRender){ + opts.view.onAfterRender.call(opts.view,_936); + } + if(!_937&&opts.pagination){ + var _93d=$.data(_936,"treegrid").total; + var _93e=$(_936).datagrid("getPager"); + if(_93e.pagination("options").total!=_93d){ + _93e.pagination({total:_93d}); + } + } + _907(_936); + _90f(_936); + $(_936).treegrid("showLines"); + $(_936).treegrid("setSelectionState"); + $(_936).treegrid("autoSizeColumn"); + if(!_939){ + opts.onLoadSuccess.call(_936,node,data); + } + }; + function _906(_93f,_940,_941,_942,_943){ + var opts=$.data(_93f,"treegrid").options; + var body=$(_93f).datagrid("getPanel").find("div.datagrid-body"); + if(_940==undefined&&opts.queryParams){ + opts.queryParams.id=undefined; + } + if(_941){ + opts.queryParams=_941; + } + var _944=$.extend({},opts.queryParams); + if(opts.pagination){ + $.extend(_944,{page:opts.pageNumber,rows:opts.pageSize}); + } + if(opts.sortName){ + $.extend(_944,{sort:opts.sortName,order:opts.sortOrder}); + } + var row=find(_93f,_940); + if(opts.onBeforeLoad.call(_93f,row,_944)==false){ + return; + } + var _945=body.find("tr[node-id=\""+_940+"\"] span.tree-folder"); + _945.addClass("tree-loading"); + $(_93f).treegrid("loading"); + var _946=opts.loader.call(_93f,_944,function(data){ + _945.removeClass("tree-loading"); + $(_93f).treegrid("loaded"); + _935(_93f,_940,data,_942); + if(_943){ + _943(); + } + },function(){ + _945.removeClass("tree-loading"); + $(_93f).treegrid("loaded"); + opts.onLoadError.apply(_93f,arguments); + if(_943){ + _943(); + } + }); + if(_946==false){ + _945.removeClass("tree-loading"); + $(_93f).treegrid("loaded"); + } + }; + function _947(_948){ + var _949=_94a(_948); + return _949.length?_949[0]:null; + }; + function _94a(_94b){ + return $.data(_94b,"treegrid").data; + }; + function _929(_94c,_94d){ + var row=find(_94c,_94d); + if(row._parentId){ + return find(_94c,row._parentId); + }else{ + return null; + } + }; + function _90b(_94e,_94f){ + var data=$.data(_94e,"treegrid").data; + if(_94f){ + var _950=find(_94e,_94f); + data=_950?(_950.children||[]):[]; + } + var _951=[]; + $.easyui.forEach(data,true,function(node){ + _951.push(node); + }); + return _951; + }; + function _952(_953,_954){ + var opts=$.data(_953,"treegrid").options; + var tr=opts.finder.getTr(_953,_954); + var node=tr.children("td[field=\""+opts.treeField+"\"]"); + return node.find("span.tree-indent,span.tree-hit").length; + }; + function find(_955,_956){ + var _957=$.data(_955,"treegrid"); + var opts=_957.options; + var _958=null; + $.easyui.forEach(_957.data,true,function(node){ + if(node[opts.idField]==_956){ + _958=node; + return false; + } + }); + return _958; + }; + function _959(_95a,_95b){ + var opts=$.data(_95a,"treegrid").options; + var row=find(_95a,_95b); + var tr=opts.finder.getTr(_95a,_95b); + var hit=tr.find("span.tree-hit"); + if(hit.length==0){ + return; + } + if(hit.hasClass("tree-collapsed")){ + return; + } + if(opts.onBeforeCollapse.call(_95a,row)==false){ + return; + } + hit.removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed"); + hit.next().removeClass("tree-folder-open"); + row.state="closed"; + tr=tr.next("tr.treegrid-tr-tree"); + var cc=tr.children("td").children("div"); + if(opts.animate){ + cc.slideUp("normal",function(){ + $(_95a).treegrid("autoSizeColumn"); + _907(_95a,_95b); + opts.onCollapse.call(_95a,row); + }); + }else{ + cc.hide(); + $(_95a).treegrid("autoSizeColumn"); + _907(_95a,_95b); + opts.onCollapse.call(_95a,row); + } + }; + function _95c(_95d,_95e){ + var opts=$.data(_95d,"treegrid").options; + var tr=opts.finder.getTr(_95d,_95e); + var hit=tr.find("span.tree-hit"); + var row=find(_95d,_95e); + if(hit.length==0){ + return; + } + if(hit.hasClass("tree-expanded")){ + return; + } + if(opts.onBeforeExpand.call(_95d,row)==false){ + return; + } + hit.removeClass("tree-collapsed tree-collapsed-hover").addClass("tree-expanded"); + hit.next().addClass("tree-folder-open"); + var _95f=tr.next("tr.treegrid-tr-tree"); + if(_95f.length){ + var cc=_95f.children("td").children("div"); + _960(cc); + }else{ + _92e(_95d,row[opts.idField]); + var _95f=tr.next("tr.treegrid-tr-tree"); + var cc=_95f.children("td").children("div"); + cc.hide(); + var _961=$.extend({},opts.queryParams||{}); + _961.id=row[opts.idField]; + _906(_95d,row[opts.idField],_961,true,function(){ + if(cc.is(":empty")){ + _95f.remove(); + }else{ + _960(cc); + } + }); + } + function _960(cc){ + row.state="open"; + if(opts.animate){ + cc.slideDown("normal",function(){ + $(_95d).treegrid("autoSizeColumn"); + _907(_95d,_95e); + opts.onExpand.call(_95d,row); + }); + }else{ + cc.show(); + $(_95d).treegrid("autoSizeColumn"); + _907(_95d,_95e); + opts.onExpand.call(_95d,row); + } + }; + }; + function _917(_962,_963){ + var opts=$.data(_962,"treegrid").options; + var tr=opts.finder.getTr(_962,_963); + var hit=tr.find("span.tree-hit"); + if(hit.hasClass("tree-expanded")){ + _959(_962,_963); + }else{ + _95c(_962,_963); + } + }; + function _964(_965,_966){ + var opts=$.data(_965,"treegrid").options; + var _967=_90b(_965,_966); + if(_966){ + _967.unshift(find(_965,_966)); + } + for(var i=0;i<_967.length;i++){ + _959(_965,_967[i][opts.idField]); + } + }; + function _968(_969,_96a){ + var opts=$.data(_969,"treegrid").options; + var _96b=_90b(_969,_96a); + if(_96a){ + _96b.unshift(find(_969,_96a)); + } + for(var i=0;i<_96b.length;i++){ + _95c(_969,_96b[i][opts.idField]); + } + }; + function _96c(_96d,_96e){ + var opts=$.data(_96d,"treegrid").options; + var ids=[]; + var p=_929(_96d,_96e); + while(p){ + var id=p[opts.idField]; + ids.unshift(id); + p=_929(_96d,id); + } + for(var i=0;i").insertBefore(_973); + if(hit.prev().length){ + hit.prev().remove(); + } + } + } + _935(_970,_971.parent,_971.data,_972.data.length>0,true); + }; + function _974(_975,_976){ + var ref=_976.before||_976.after; + var opts=$.data(_975,"treegrid").options; + var _977=_929(_975,ref); + _96f(_975,{parent:(_977?_977[opts.idField]:null),data:[_976.data]}); + var _978=_977?_977.children:$(_975).treegrid("getRoots"); + for(var i=0;i<_978.length;i++){ + if(_978[i][opts.idField]==ref){ + var _979=_978[_978.length-1]; + _978.splice(_976.before?i:(i+1),0,_979); + _978.splice(_978.length-1,1); + break; + } + } + _97a(true); + _97a(false); + _90f(_975); + $(_975).treegrid("showLines"); + function _97a(_97b){ + var _97c=_97b?1:2; + var tr=opts.finder.getTr(_975,_976.data[opts.idField],"body",_97c); + var _97d=tr.closest("table.datagrid-btable"); + tr=tr.parent().children(); + var dest=opts.finder.getTr(_975,ref,"body",_97c); + if(_976.before){ + tr.insertBefore(dest); + }else{ + var sub=dest.next("tr.treegrid-tr-tree"); + tr.insertAfter(sub.length?sub:dest); + } + _97d.remove(); + }; + }; + function _97e(_97f,_980){ + var _981=$.data(_97f,"treegrid"); + var opts=_981.options; + var prow=_929(_97f,_980); + $(_97f).datagrid("deleteRow",_980); + $.easyui.removeArrayItem(_981.checkedRows,opts.idField,_980); + _90f(_97f); + if(prow){ + _92b(_97f,prow[opts.idField]); + } + _981.total-=1; + $(_97f).datagrid("getPager").pagination("refresh",{total:_981.total}); + $(_97f).treegrid("showLines"); + }; + function _982(_983){ + var t=$(_983); + var opts=t.treegrid("options"); + if(opts.lines){ + t.treegrid("getPanel").addClass("tree-lines"); + }else{ + t.treegrid("getPanel").removeClass("tree-lines"); + return; + } + t.treegrid("getPanel").find("span.tree-indent").removeClass("tree-line tree-join tree-joinbottom"); + t.treegrid("getPanel").find("div.datagrid-cell").removeClass("tree-node-last tree-root-first tree-root-one"); + var _984=t.treegrid("getRoots"); + if(_984.length>1){ + _985(_984[0]).addClass("tree-root-first"); + }else{ + if(_984.length==1){ + _985(_984[0]).addClass("tree-root-one"); + } + } + _986(_984); + _987(_984); + function _986(_988){ + $.map(_988,function(node){ + if(node.children&&node.children.length){ + _986(node.children); + }else{ + var cell=_985(node); + cell.find(".tree-icon").prev().addClass("tree-join"); + } + }); + if(_988.length){ + var cell=_985(_988[_988.length-1]); + cell.addClass("tree-node-last"); + cell.find(".tree-join").removeClass("tree-join").addClass("tree-joinbottom"); + } + }; + function _987(_989){ + $.map(_989,function(node){ + if(node.children&&node.children.length){ + _987(node.children); + } + }); + for(var i=0;i<_989.length-1;i++){ + var node=_989[i]; + var _98a=t.treegrid("getLevel",node[opts.idField]); + var tr=opts.finder.getTr(_983,node[opts.idField]); + var cc=tr.next().find("tr.datagrid-row td[field=\""+opts.treeField+"\"] div.datagrid-cell"); + cc.find("span:eq("+(_98a-1)+")").addClass("tree-line"); + } + }; + function _985(node){ + var tr=opts.finder.getTr(_983,node[opts.idField]); + var cell=tr.find("td[field=\""+opts.treeField+"\"] div.datagrid-cell"); + return cell; + }; + }; + $.fn.treegrid=function(_98b,_98c){ + if(typeof _98b=="string"){ + var _98d=$.fn.treegrid.methods[_98b]; + if(_98d){ + return _98d(this,_98c); + }else{ + return this.datagrid(_98b,_98c); + } + } + _98b=_98b||{}; + return this.each(function(){ + var _98e=$.data(this,"treegrid"); + if(_98e){ + $.extend(_98e.options,_98b); + }else{ + _98e=$.data(this,"treegrid",{options:$.extend({},$.fn.treegrid.defaults,$.fn.treegrid.parseOptions(this),_98b),data:[],checkedRows:[],tmpIds:[]}); + } + _8f6(this); + if(_98e.options.data){ + $(this).treegrid("loadData",_98e.options.data); + } + _906(this); + }); + }; + $.fn.treegrid.methods={options:function(jq){ + return $.data(jq[0],"treegrid").options; + },resize:function(jq,_98f){ + return jq.each(function(){ + $(this).datagrid("resize",_98f); + }); + },fixRowHeight:function(jq,_990){ + return jq.each(function(){ + _907(this,_990); + }); + },loadData:function(jq,data){ + return jq.each(function(){ + _935(this,data.parent,data); + }); + },load:function(jq,_991){ + return jq.each(function(){ + $(this).treegrid("options").pageNumber=1; + $(this).treegrid("getPager").pagination({pageNumber:1}); + $(this).treegrid("reload",_991); + }); + },reload:function(jq,id){ + return jq.each(function(){ + var opts=$(this).treegrid("options"); + var _992={}; + if(typeof id=="object"){ + _992=id; + }else{ + _992=$.extend({},opts.queryParams); + _992.id=id; + } + if(_992.id){ + var node=$(this).treegrid("find",_992.id); + if(node.children){ + node.children.splice(0,node.children.length); + } + opts.queryParams=_992; + var tr=opts.finder.getTr(this,_992.id); + tr.next("tr.treegrid-tr-tree").remove(); + tr.find("span.tree-hit").removeClass("tree-expanded tree-expanded-hover").addClass("tree-collapsed"); + _95c(this,_992.id); + }else{ + _906(this,null,_992); + } + }); + },reloadFooter:function(jq,_993){ + return jq.each(function(){ + var opts=$.data(this,"treegrid").options; + var dc=$.data(this,"datagrid").dc; + if(_993){ + $.data(this,"treegrid").footer=_993; + } + if(opts.showFooter){ + opts.view.renderFooter.call(opts.view,this,dc.footer1,true); + opts.view.renderFooter.call(opts.view,this,dc.footer2,false); + if(opts.view.onAfterRender){ + opts.view.onAfterRender.call(opts.view,this); + } + $(this).treegrid("fixRowHeight"); + } + }); + },getData:function(jq){ + return $.data(jq[0],"treegrid").data; + },getFooterRows:function(jq){ + return $.data(jq[0],"treegrid").footer; + },getRoot:function(jq){ + return _947(jq[0]); + },getRoots:function(jq){ + return _94a(jq[0]); + },getParent:function(jq,id){ + return _929(jq[0],id); + },getChildren:function(jq,id){ + return _90b(jq[0],id); + },getLevel:function(jq,id){ + return _952(jq[0],id); + },find:function(jq,id){ + return find(jq[0],id); + },isLeaf:function(jq,id){ + var opts=$.data(jq[0],"treegrid").options; + var tr=opts.finder.getTr(jq[0],id); + var hit=tr.find("span.tree-hit"); + return hit.length==0; + },select:function(jq,id){ + return jq.each(function(){ + $(this).datagrid("selectRow",id); + }); + },unselect:function(jq,id){ + return jq.each(function(){ + $(this).datagrid("unselectRow",id); + }); + },collapse:function(jq,id){ + return jq.each(function(){ + _959(this,id); + }); + },expand:function(jq,id){ + return jq.each(function(){ + _95c(this,id); + }); + },toggle:function(jq,id){ + return jq.each(function(){ + _917(this,id); + }); + },collapseAll:function(jq,id){ + return jq.each(function(){ + _964(this,id); + }); + },expandAll:function(jq,id){ + return jq.each(function(){ + _968(this,id); + }); + },expandTo:function(jq,id){ + return jq.each(function(){ + _96c(this,id); + }); + },append:function(jq,_994){ + return jq.each(function(){ + _96f(this,_994); + }); + },insert:function(jq,_995){ + return jq.each(function(){ + _974(this,_995); + }); + },remove:function(jq,id){ + return jq.each(function(){ + _97e(this,id); + }); + },pop:function(jq,id){ + var row=jq.treegrid("find",id); + jq.treegrid("remove",id); + return row; + },refresh:function(jq,id){ + return jq.each(function(){ + var opts=$.data(this,"treegrid").options; + opts.view.refreshRow.call(opts.view,this,id); + }); + },update:function(jq,_996){ + return jq.each(function(){ + var opts=$.data(this,"treegrid").options; + var row=_996.row; + opts.view.updateRow.call(opts.view,this,_996.id,row); + if(row.checked!=undefined){ + row=find(this,_996.id); + $.extend(row,{checkState:row.checked?"checked":(row.checked===false?"unchecked":undefined)}); + _92b(this,_996.id); + } + }); + },beginEdit:function(jq,id){ + return jq.each(function(){ + $(this).datagrid("beginEdit",id); + $(this).treegrid("fixRowHeight",id); + }); + },endEdit:function(jq,id){ + return jq.each(function(){ + $(this).datagrid("endEdit",id); + }); + },cancelEdit:function(jq,id){ + return jq.each(function(){ + $(this).datagrid("cancelEdit",id); + }); + },showLines:function(jq){ + return jq.each(function(){ + _982(this); + }); + },setSelectionState:function(jq){ + return jq.each(function(){ + $(this).datagrid("setSelectionState"); + var _997=$(this).data("treegrid"); + for(var i=0;i<_997.tmpIds.length;i++){ + _918(this,_997.tmpIds[i],true,true); + } + _997.tmpIds=[]; + }); + },getCheckedNodes:function(jq,_998){ + _998=_998||"checked"; + var rows=[]; + $.easyui.forEach(jq.data("treegrid").checkedRows,false,function(row){ + if(row.checkState==_998){ + rows.push(row); + } + }); + return rows; + },checkNode:function(jq,id){ + return jq.each(function(){ + _918(this,id,true); + }); + },uncheckNode:function(jq,id){ + return jq.each(function(){ + _918(this,id,false); + }); + },clearChecked:function(jq){ + return jq.each(function(){ + var _999=this; + var opts=$(_999).treegrid("options"); + $(_999).datagrid("clearChecked"); + $.map($(_999).treegrid("getCheckedNodes"),function(row){ + _918(_999,row[opts.idField],false,true); + }); + }); + }}; + $.fn.treegrid.parseOptions=function(_99a){ + return $.extend({},$.fn.datagrid.parseOptions(_99a),$.parser.parseOptions(_99a,["treeField",{checkbox:"boolean",cascadeCheck:"boolean",onlyLeafCheck:"boolean"},{animate:"boolean"}])); + }; + var _99b=$.extend({},$.fn.datagrid.defaults.view,{render:function(_99c,_99d,_99e){ + var opts=$.data(_99c,"treegrid").options; + var _99f=$(_99c).datagrid("getColumnFields",_99e); + var _9a0=$.data(_99c,"datagrid").rowIdPrefix; + if(_99e){ + if(!(opts.rownumbers||(opts.frozenColumns&&opts.frozenColumns.length))){ + return; + } + } + var view=this; + if(this.treeNodes&&this.treeNodes.length){ + var _9a1=_9a2.call(this,_99e,this.treeLevel,this.treeNodes); + $(_99d).append(_9a1.join("")); + } + function _9a2(_9a3,_9a4,_9a5){ + var _9a6=$(_99c).treegrid("getParent",_9a5[0][opts.idField]); + var _9a7=(_9a6?_9a6.children.length:$(_99c).treegrid("getRoots").length)-_9a5.length; + var _9a8=[""]; + for(var i=0;i<_9a5.length;i++){ + var row=_9a5[i]; + if(row.state!="open"&&row.state!="closed"){ + row.state="open"; + } + var css=opts.rowStyler?opts.rowStyler.call(_99c,row):""; + var cs=this.getStyleValue(css); + var cls="class=\"datagrid-row "+(_9a7++%2&&opts.striped?"datagrid-row-alt ":" ")+cs.c+"\""; + var _9a9=cs.s?"style=\""+cs.s+"\"":""; + var _9aa=_9a0+"-"+(_9a3?1:2)+"-"+row[opts.idField]; + _9a8.push(""); + _9a8=_9a8.concat(view.renderRow.call(view,_99c,_99f,_9a3,_9a4,row)); + _9a8.push(""); + if(row.children&&row.children.length){ + var tt=_9a2.call(this,_9a3,_9a4+1,row.children); + var v=row.state=="closed"?"none":"block"; + _9a8.push(""); + } + } + _9a8.push("
        "); + _9a8=_9a8.concat(tt); + _9a8.push("
        "); + return _9a8; + }; + },renderFooter:function(_9ab,_9ac,_9ad){ + var opts=$.data(_9ab,"treegrid").options; + var rows=$.data(_9ab,"treegrid").footer||[]; + var _9ae=$(_9ab).datagrid("getColumnFields",_9ad); + var _9af=[""]; + for(var i=0;i"); + _9af.push(this.renderRow.call(this,_9ab,_9ae,_9ad,0,row)); + _9af.push(""); + } + _9af.push("
        "); + $(_9ac).html(_9af.join("")); + },renderRow:function(_9b0,_9b1,_9b2,_9b3,row){ + var _9b4=$.data(_9b0,"treegrid"); + var opts=_9b4.options; + var cc=[]; + if(_9b2&&opts.rownumbers){ + cc.push("
        0
        "); + } + for(var i=0;i<_9b1.length;i++){ + var _9b5=_9b1[i]; + var col=$(_9b0).datagrid("getColumnOption",_9b5); + if(col){ + var css=col.styler?(col.styler(row[_9b5],row)||""):""; + var cs=this.getStyleValue(css); + var cls=cs.c?"class=\""+cs.c+"\"":""; + var _9b6=col.hidden?"style=\"display:none;"+cs.s+"\"":(cs.s?"style=\""+cs.s+"\"":""); + cc.push(""); + var _9b6=""; + if(!col.checkbox){ + if(col.align){ + _9b6+="text-align:"+col.align+";"; + } + if(!opts.nowrap){ + _9b6+="white-space:normal;height:auto;"; + }else{ + if(opts.autoRowHeight){ + _9b6+="height:auto;"; + } + } + } + cc.push("
        "); + if(col.checkbox){ + if(row.checked){ + cc.push(""); + }else{ + var val=null; + if(col.formatter){ + val=col.formatter(row[_9b5],row); + }else{ + val=row[_9b5]; + } + if(_9b5==opts.treeField){ + for(var j=0;j<_9b3;j++){ + cc.push(""); + } + if(row.state=="closed"){ + cc.push(""); + cc.push(""); + }else{ + if(row.children&&row.children.length){ + cc.push(""); + cc.push(""); + }else{ + cc.push(""); + cc.push(""); + } + } + if(this.hasCheckbox(_9b0,row)){ + var flag=0; + var crow=$.easyui.getArrayItem(_9b4.checkedRows,opts.idField,row[opts.idField]); + if(crow){ + flag=crow.checkState=="checked"?1:2; + row.checkState=crow.checkState; + row.checked=crow.checked; + $.easyui.addArrayItem(_9b4.checkedRows,opts.idField,row); + }else{ + var prow=$.easyui.getArrayItem(_9b4.checkedRows,opts.idField,row._parentId); + if(prow&&prow.checkState=="checked"&&opts.cascadeCheck){ + flag=1; + row.checked=true; + $.easyui.addArrayItem(_9b4.checkedRows,opts.idField,row); + }else{ + if(row.checked){ + $.easyui.addArrayItem(_9b4.tmpIds,row[opts.idField]); + } + } + row.checkState=flag?"checked":"unchecked"; + } + cc.push(""); + }else{ + row.checkState=undefined; + row.checked=undefined; + } + cc.push(""+val+""); + }else{ + cc.push(val); + } + } + cc.push("
        "); + cc.push(""); + } + } + return cc.join(""); + },hasCheckbox:function(_9b7,row){ + var opts=$.data(_9b7,"treegrid").options; + if(opts.checkbox){ + if($.isFunction(opts.checkbox)){ + if(opts.checkbox.call(_9b7,row)){ + return true; + }else{ + return false; + } + }else{ + if(opts.onlyLeafCheck){ + if(row.state=="open"&&!(row.children&&row.children.length)){ + return true; + } + }else{ + return true; + } + } + } + return false; + },refreshRow:function(_9b8,id){ + this.updateRow.call(this,_9b8,id,{}); + },updateRow:function(_9b9,id,row){ + var opts=$.data(_9b9,"treegrid").options; + var _9ba=$(_9b9).treegrid("find",id); + $.extend(_9ba,row); + var _9bb=$(_9b9).treegrid("getLevel",id)-1; + var _9bc=opts.rowStyler?opts.rowStyler.call(_9b9,_9ba):""; + var _9bd=$.data(_9b9,"datagrid").rowIdPrefix; + var _9be=_9ba[opts.idField]; + function _9bf(_9c0){ + var _9c1=$(_9b9).treegrid("getColumnFields",_9c0); + var tr=opts.finder.getTr(_9b9,id,"body",(_9c0?1:2)); + var _9c2=tr.find("div.datagrid-cell-rownumber").html(); + var _9c3=tr.find("div.datagrid-cell-check input[type=checkbox]").is(":checked"); + tr.html(this.renderRow(_9b9,_9c1,_9c0,_9bb,_9ba)); + tr.attr("style",_9bc||""); + tr.find("div.datagrid-cell-rownumber").html(_9c2); + if(_9c3){ + tr.find("div.datagrid-cell-check input[type=checkbox]")._propAttr("checked",true); + } + if(_9be!=id){ + tr.attr("id",_9bd+"-"+(_9c0?1:2)+"-"+_9be); + tr.attr("node-id",_9be); + } + }; + _9bf.call(this,true); + _9bf.call(this,false); + $(_9b9).treegrid("fixRowHeight",id); + },deleteRow:function(_9c4,id){ + var opts=$.data(_9c4,"treegrid").options; + var tr=opts.finder.getTr(_9c4,id); + tr.next("tr.treegrid-tr-tree").remove(); + tr.remove(); + var _9c5=del(id); + if(_9c5){ + if(_9c5.children.length==0){ + tr=opts.finder.getTr(_9c4,_9c5[opts.idField]); + tr.next("tr.treegrid-tr-tree").remove(); + var cell=tr.children("td[field=\""+opts.treeField+"\"]").children("div.datagrid-cell"); + cell.find(".tree-icon").removeClass("tree-folder").addClass("tree-file"); + cell.find(".tree-hit").remove(); + $("").prependTo(cell); + } + } + this.setEmptyMsg(_9c4); + function del(id){ + var cc; + var _9c6=$(_9c4).treegrid("getParent",id); + if(_9c6){ + cc=_9c6.children; + }else{ + cc=$(_9c4).treegrid("getData"); + } + for(var i=0;ib?1:-1); + }; + r=_9d1(r1[sn],r2[sn])*(so=="asc"?1:-1); + if(r!=0){ + return r; + } + } + return r; + }); + for(var i=0;i"); + if(!_9f4){ + _9f7.push(""); + _9f7.push(opts.groupFormatter.call(_9f1,_9f3.value,_9f3.rows)); + _9f7.push(""); + } + _9f7.push("
        "); + _9f7.push(this.renderTable(_9f1,_9f3.startIndex,_9f3.rows,_9f4)); + return _9f7.join(""); + },groupRows:function(_9f8,rows){ + var _9f9=$.data(_9f8,"datagrid"); + var opts=_9f9.options; + var _9fa=[]; + for(var i=0;idiv.combo-p>div.combo-panel:visible").panel("close"); + }); + }); + function _a0a(_a0b){ + var _a0c=$.data(_a0b,"combo"); + var opts=_a0c.options; + if(!_a0c.panel){ + _a0c.panel=$("
        ").appendTo("body"); + _a0c.panel.panel({minWidth:opts.panelMinWidth,maxWidth:opts.panelMaxWidth,minHeight:opts.panelMinHeight,maxHeight:opts.panelMaxHeight,doSize:false,closed:true,cls:"combo-p",style:{position:"absolute",zIndex:10},onOpen:function(){ + var _a0d=$(this).panel("options").comboTarget; + var _a0e=$.data(_a0d,"combo"); + if(_a0e){ + _a0e.options.onShowPanel.call(_a0d); + } + },onBeforeClose:function(){ + _a09($(this).parent()); + },onClose:function(){ + var _a0f=$(this).panel("options").comboTarget; + var _a10=$(_a0f).data("combo"); + if(_a10){ + _a10.options.onHidePanel.call(_a0f); + } + }}); + } + var _a11=$.extend(true,[],opts.icons); + if(opts.hasDownArrow){ + _a11.push({iconCls:"combo-arrow",handler:function(e){ + _a15(e.data.target); + }}); + } + $(_a0b).addClass("combo-f").textbox($.extend({},opts,{icons:_a11,onChange:function(){ + }})); + $(_a0b).attr("comboName",$(_a0b).attr("textboxName")); + _a0c.combo=$(_a0b).next(); + _a0c.combo.addClass("combo"); + }; + function _a12(_a13){ + var _a14=$.data(_a13,"combo"); + var opts=_a14.options; + var p=_a14.panel; + if(p.is(":visible")){ + p.panel("close"); + } + if(!opts.cloned){ + p.panel("destroy"); + } + $(_a13).textbox("destroy"); + }; + function _a15(_a16){ + var _a17=$.data(_a16,"combo").panel; + if(_a17.is(":visible")){ + var _a18=_a17.combo("combo"); + _a19(_a18); + if(_a18!=_a16){ + $(_a16).combo("showPanel"); + } + }else{ + var p=$(_a16).closest("div.combo-p").children(".combo-panel"); + $("div.combo-panel:visible").not(_a17).not(p).panel("close"); + $(_a16).combo("showPanel"); + } + $(_a16).combo("textbox").focus(); + }; + function _a09(_a1a){ + $(_a1a).find(".combo-f").each(function(){ + var p=$(this).combo("panel"); + if(p.is(":visible")){ + p.panel("close"); + } + }); + }; + function _a1b(e){ + var _a1c=e.data.target; + var _a1d=$.data(_a1c,"combo"); + var opts=_a1d.options; + if(!opts.editable){ + _a15(_a1c); + }else{ + var p=$(_a1c).closest("div.combo-p").children(".combo-panel"); + $("div.combo-panel:visible").not(p).each(function(){ + var _a1e=$(this).combo("combo"); + if(_a1e!=_a1c){ + _a19(_a1e); + } + }); + } + }; + function _a1f(e){ + var _a20=e.data.target; + var t=$(_a20); + var _a21=t.data("combo"); + var opts=t.combo("options"); + _a21.panel.panel("options").comboTarget=_a20; + switch(e.keyCode){ + case 38: + opts.keyHandler.up.call(_a20,e); + break; + case 40: + opts.keyHandler.down.call(_a20,e); + break; + case 37: + opts.keyHandler.left.call(_a20,e); + break; + case 39: + opts.keyHandler.right.call(_a20,e); + break; + case 13: + e.preventDefault(); + opts.keyHandler.enter.call(_a20,e); + return false; + case 9: + case 27: + _a19(_a20); + break; + default: + if(opts.editable){ + if(_a21.timer){ + clearTimeout(_a21.timer); + } + _a21.timer=setTimeout(function(){ + var q=t.combo("getText"); + if(_a21.previousText!=q){ + _a21.previousText=q; + t.combo("showPanel"); + opts.keyHandler.query.call(_a20,q,e); + t.combo("validate"); + } + },opts.delay); + } + } + }; + function _a22(_a23){ + var _a24=$.data(_a23,"combo"); + var _a25=_a24.combo; + var _a26=_a24.panel; + var opts=$(_a23).combo("options"); + var _a27=_a26.panel("options"); + _a27.comboTarget=_a23; + if(_a27.closed){ + _a26.panel("panel").show().css({zIndex:($.fn.menu?$.fn.menu.defaults.zIndex++:($.fn.window?$.fn.window.defaults.zIndex++:99)),left:-999999}); + _a26.panel("resize",{width:(opts.panelWidth?opts.panelWidth:_a25._outerWidth()),height:opts.panelHeight}); + _a26.panel("panel").hide(); + _a26.panel("open"); + } + (function(){ + if(_a27.comboTarget==_a23&&_a26.is(":visible")){ + _a26.panel("move",{left:_a28(),top:_a29()}); + setTimeout(arguments.callee,200); + } + })(); + function _a28(){ + var left=_a25.offset().left; + if(opts.panelAlign=="right"){ + left+=_a25._outerWidth()-_a26._outerWidth(); + } + if(left+_a26._outerWidth()>$(window)._outerWidth()+$(document).scrollLeft()){ + left=$(window)._outerWidth()+$(document).scrollLeft()-_a26._outerWidth(); + } + if(left<0){ + left=0; + } + return left; + }; + function _a29(){ + var top=_a25.offset().top+_a25._outerHeight(); + if(top+_a26._outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){ + top=_a25.offset().top-_a26._outerHeight(); + } + if(top<$(document).scrollTop()){ + top=_a25.offset().top+_a25._outerHeight(); + } + return top; + }; + }; + function _a19(_a2a){ + var _a2b=$.data(_a2a,"combo").panel; + _a2b.panel("close"); + }; + function _a2c(_a2d,text){ + var _a2e=$.data(_a2d,"combo"); + var _a2f=$(_a2d).textbox("getText"); + if(_a2f!=text){ + $(_a2d).textbox("setText",text); + } + _a2e.previousText=text; + }; + function _a30(_a31){ + var _a32=$.data(_a31,"combo"); + var opts=_a32.options; + var _a33=$(_a31).next(); + var _a34=[]; + _a33.find(".textbox-value").each(function(){ + _a34.push($(this).val()); + }); + if(opts.multivalue){ + return _a34; + }else{ + return _a34.length?_a34[0].split(opts.separator):_a34; + } + }; + function _a35(_a36,_a37){ + var _a38=$.data(_a36,"combo"); + var _a39=_a38.combo; + var opts=$(_a36).combo("options"); + if(!$.isArray(_a37)){ + _a37=_a37.split(opts.separator); + } + var _a3a=_a30(_a36); + _a39.find(".textbox-value").remove(); + if(_a37.length){ + if(opts.multivalue){ + for(var i=0;i<_a37.length;i++){ + _a3b(_a37[i]); + } + }else{ + _a3b(_a37.join(opts.separator)); + } + } + function _a3b(_a3c){ + var name=$(_a36).attr("textboxName")||""; + var _a3d=$("").appendTo(_a39); + _a3d.attr("name",name); + if(opts.disabled){ + _a3d.attr("disabled","disabled"); + } + _a3d.val(_a3c); + }; + var _a3e=(function(){ + if(_a3a.length!=_a37.length){ + return true; + } + for(var i=0;i<_a37.length;i++){ + if(_a37[i]!=_a3a[i]){ + return true; + } + } + return false; + })(); + if(_a3e){ + $(_a36).val(_a37.join(opts.separator)); + if(opts.multiple){ + opts.onChange.call(_a36,_a37,_a3a); + }else{ + opts.onChange.call(_a36,_a37[0],_a3a[0]); + } + $(_a36).closest("form").trigger("_change",[_a36]); + } + }; + function _a3f(_a40){ + var _a41=_a30(_a40); + return _a41[0]; + }; + function _a42(_a43,_a44){ + _a35(_a43,[_a44]); + }; + function _a45(_a46){ + var opts=$.data(_a46,"combo").options; + var _a47=opts.onChange; + opts.onChange=function(){ + }; + if(opts.multiple){ + _a35(_a46,opts.value?opts.value:[]); + }else{ + _a42(_a46,opts.value); + } + opts.onChange=_a47; + }; + $.fn.combo=function(_a48,_a49){ + if(typeof _a48=="string"){ + var _a4a=$.fn.combo.methods[_a48]; + if(_a4a){ + return _a4a(this,_a49); + }else{ + return this.textbox(_a48,_a49); + } + } + _a48=_a48||{}; + return this.each(function(){ + var _a4b=$.data(this,"combo"); + if(_a4b){ + $.extend(_a4b.options,_a48); + if(_a48.value!=undefined){ + _a4b.options.originalValue=_a48.value; + } + }else{ + _a4b=$.data(this,"combo",{options:$.extend({},$.fn.combo.defaults,$.fn.combo.parseOptions(this),_a48),previousText:""}); + if(_a4b.options.multiple&&_a4b.options.value==""){ + _a4b.options.originalValue=[]; + }else{ + _a4b.options.originalValue=_a4b.options.value; + } + } + _a0a(this); + _a45(this); + }); + }; + $.fn.combo.methods={options:function(jq){ + var opts=jq.textbox("options"); + return $.extend($.data(jq[0],"combo").options,{width:opts.width,height:opts.height,disabled:opts.disabled,readonly:opts.readonly}); + },cloneFrom:function(jq,from){ + return jq.each(function(){ + $(this).textbox("cloneFrom",from); + $.data(this,"combo",{options:$.extend(true,{cloned:true},$(from).combo("options")),combo:$(this).next(),panel:$(from).combo("panel")}); + $(this).addClass("combo-f").attr("comboName",$(this).attr("textboxName")); + }); + },combo:function(jq){ + return jq.closest(".combo-panel").panel("options").comboTarget; + },panel:function(jq){ + return $.data(jq[0],"combo").panel; + },destroy:function(jq){ + return jq.each(function(){ + _a12(this); + }); + },showPanel:function(jq){ + return jq.each(function(){ + _a22(this); + }); + },hidePanel:function(jq){ + return jq.each(function(){ + _a19(this); + }); + },clear:function(jq){ + return jq.each(function(){ + $(this).textbox("setText",""); + var opts=$.data(this,"combo").options; + if(opts.multiple){ + $(this).combo("setValues",[]); + }else{ + $(this).combo("setValue",""); + } + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$.data(this,"combo").options; + if(opts.multiple){ + $(this).combo("setValues",opts.originalValue); + }else{ + $(this).combo("setValue",opts.originalValue); + } + }); + },setText:function(jq,text){ + return jq.each(function(){ + _a2c(this,text); + }); + },getValues:function(jq){ + return _a30(jq[0]); + },setValues:function(jq,_a4c){ + return jq.each(function(){ + _a35(this,_a4c); + }); + },getValue:function(jq){ + return _a3f(jq[0]); + },setValue:function(jq,_a4d){ + return jq.each(function(){ + _a42(this,_a4d); + }); + }}; + $.fn.combo.parseOptions=function(_a4e){ + var t=$(_a4e); + return $.extend({},$.fn.textbox.parseOptions(_a4e),$.parser.parseOptions(_a4e,["separator","panelAlign",{panelWidth:"number",hasDownArrow:"boolean",delay:"number",reversed:"boolean",multivalue:"boolean",selectOnNavigation:"boolean"},{panelMinWidth:"number",panelMaxWidth:"number",panelMinHeight:"number",panelMaxHeight:"number"}]),{panelHeight:(t.attr("panelHeight")=="auto"?"auto":parseInt(t.attr("panelHeight"))||undefined),multiple:(t.attr("multiple")?true:undefined)}); + }; + $.fn.combo.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:{click:_a1b,keyup:_a1f,paste:_a1f,drop:_a1f},panelWidth:null,panelHeight:200,panelMinWidth:null,panelMaxWidth:null,panelMinHeight:null,panelMaxHeight:null,panelAlign:"left",reversed:false,multiple:false,multivalue:true,selectOnNavigation:true,separator:",",hasDownArrow:true,delay:200,keyHandler:{up:function(e){ + },down:function(e){ + },left:function(e){ + },right:function(e){ + },enter:function(e){ + },query:function(q,e){ + }},onShowPanel:function(){ + },onHidePanel:function(){ + },onChange:function(_a4f,_a50){ + }}); +})(jQuery); +(function($){ + function _a51(_a52,_a53){ + var _a54=$.data(_a52,"combobox"); + return $.easyui.indexOfArray(_a54.data,_a54.options.valueField,_a53); + }; + function _a55(_a56,_a57){ + var opts=$.data(_a56,"combobox").options; + var _a58=$(_a56).combo("panel"); + var item=opts.finder.getEl(_a56,_a57); + if(item.length){ + if(item.position().top<=0){ + var h=_a58.scrollTop()+item.position().top; + _a58.scrollTop(h); + }else{ + if(item.position().top+item.outerHeight()>_a58.height()){ + var h=_a58.scrollTop()+item.position().top+item.outerHeight()-_a58.height(); + _a58.scrollTop(h); + } + } + } + _a58.triggerHandler("scroll"); + }; + function nav(_a59,dir){ + var opts=$.data(_a59,"combobox").options; + var _a5a=$(_a59).combobox("panel"); + var item=_a5a.children("div.combobox-item-hover"); + if(!item.length){ + item=_a5a.children("div.combobox-item-selected"); + } + item.removeClass("combobox-item-hover"); + var _a5b="div.combobox-item:visible:not(.combobox-item-disabled):first"; + var _a5c="div.combobox-item:visible:not(.combobox-item-disabled):last"; + if(!item.length){ + item=_a5a.children(dir=="next"?_a5b:_a5c); + }else{ + if(dir=="next"){ + item=item.nextAll(_a5b); + if(!item.length){ + item=_a5a.children(_a5b); + } + }else{ + item=item.prevAll(_a5b); + if(!item.length){ + item=_a5a.children(_a5c); + } + } + } + if(item.length){ + item.addClass("combobox-item-hover"); + var row=opts.finder.getRow(_a59,item); + if(row){ + $(_a59).combobox("scrollTo",row[opts.valueField]); + if(opts.selectOnNavigation){ + _a5d(_a59,row[opts.valueField]); + } + } + } + }; + function _a5d(_a5e,_a5f,_a60){ + var opts=$.data(_a5e,"combobox").options; + var _a61=$(_a5e).combo("getValues"); + if($.inArray(_a5f+"",_a61)==-1){ + if(opts.multiple){ + _a61.push(_a5f); + }else{ + _a61=[_a5f]; + } + _a62(_a5e,_a61,_a60); + } + }; + function _a63(_a64,_a65){ + var opts=$.data(_a64,"combobox").options; + var _a66=$(_a64).combo("getValues"); + var _a67=$.inArray(_a65+"",_a66); + if(_a67>=0){ + _a66.splice(_a67,1); + _a62(_a64,_a66); + } + }; + function _a62(_a68,_a69,_a6a){ + var opts=$.data(_a68,"combobox").options; + var _a6b=$(_a68).combo("panel"); + if(!$.isArray(_a69)){ + _a69=_a69.split(opts.separator); + } + if(!opts.multiple){ + _a69=_a69.length?[_a69[0]]:[""]; + } + var _a6c=$(_a68).combo("getValues"); + if(_a6b.is(":visible")){ + _a6b.find(".combobox-item-selected").each(function(){ + var row=opts.finder.getRow(_a68,$(this)); + if(row){ + if($.easyui.indexOfArray(_a6c,row[opts.valueField])==-1){ + $(this).removeClass("combobox-item-selected"); + } + } + }); + } + $.map(_a6c,function(v){ + if($.easyui.indexOfArray(_a69,v)==-1){ + var el=opts.finder.getEl(_a68,v); + if(el.hasClass("combobox-item-selected")){ + el.removeClass("combobox-item-selected"); + opts.onUnselect.call(_a68,opts.finder.getRow(_a68,v)); + } + } + }); + var _a6d=null; + var vv=[],ss=[]; + for(var i=0;i<_a69.length;i++){ + var v=_a69[i]; + var s=v; + var row=opts.finder.getRow(_a68,v); + if(row){ + s=row[opts.textField]; + _a6d=row; + var el=opts.finder.getEl(_a68,v); + if(!el.hasClass("combobox-item-selected")){ + el.addClass("combobox-item-selected"); + opts.onSelect.call(_a68,row); + } + } + vv.push(v); + ss.push(s); + } + if(!_a6a){ + $(_a68).combo("setText",ss.join(opts.separator)); + } + if(opts.showItemIcon){ + var tb=$(_a68).combobox("textbox"); + tb.removeClass("textbox-bgicon "+opts.textboxIconCls); + if(_a6d&&_a6d.iconCls){ + tb.addClass("textbox-bgicon "+_a6d.iconCls); + opts.textboxIconCls=_a6d.iconCls; + } + } + $(_a68).combo("setValues",vv); + _a6b.triggerHandler("scroll"); + }; + function _a6e(_a6f,data,_a70){ + var _a71=$.data(_a6f,"combobox"); + var opts=_a71.options; + _a71.data=opts.loadFilter.call(_a6f,data); + opts.view.render.call(opts.view,_a6f,$(_a6f).combo("panel"),_a71.data); + var vv=$(_a6f).combobox("getValues"); + $.easyui.forEach(_a71.data,false,function(row){ + if(row["selected"]){ + $.easyui.addArrayItem(vv,row[opts.valueField]+""); + } + }); + if(opts.multiple){ + _a62(_a6f,vv,_a70); + }else{ + _a62(_a6f,vv.length?[vv[vv.length-1]]:[],_a70); + } + opts.onLoadSuccess.call(_a6f,data); + }; + function _a72(_a73,url,_a74,_a75){ + var opts=$.data(_a73,"combobox").options; + if(url){ + opts.url=url; + } + _a74=$.extend({},opts.queryParams,_a74||{}); + if(opts.onBeforeLoad.call(_a73,_a74)==false){ + return; + } + opts.loader.call(_a73,_a74,function(data){ + _a6e(_a73,data,_a75); + },function(){ + opts.onLoadError.apply(this,arguments); + }); + }; + function _a76(_a77,q){ + var _a78=$.data(_a77,"combobox"); + var opts=_a78.options; + var _a79=$(); + var qq=opts.multiple?q.split(opts.separator):[q]; + if(opts.mode=="remote"){ + _a7a(qq); + _a72(_a77,null,{q:q},true); + }else{ + var _a7b=$(_a77).combo("panel"); + _a7b.find(".combobox-item-hover").removeClass("combobox-item-hover"); + _a7b.find(".combobox-item,.combobox-group").hide(); + var data=_a78.data; + var vv=[]; + $.map(qq,function(q){ + q=$.trim(q); + var _a7c=q; + var _a7d=undefined; + _a79=$(); + for(var i=0;i=0){ + vv.push(v); + } + }); + t.combobox("setValues",vv); + if(!opts.multiple){ + t.combobox("hidePanel"); + } + }; + function _a82(_a83){ + var _a84=$.data(_a83,"combobox"); + var opts=_a84.options; + $(_a83).addClass("combobox-f"); + $(_a83).combo($.extend({},opts,{onShowPanel:function(){ + $(this).combo("panel").find("div.combobox-item:hidden,div.combobox-group:hidden").show(); + _a62(this,$(this).combobox("getValues"),true); + $(this).combobox("scrollTo",$(this).combobox("getValue")); + opts.onShowPanel.call(this); + }})); + var p=$(_a83).combo("panel"); + p.unbind(".combobox"); + for(var _a85 in opts.panelEvents){ + p.bind(_a85+".combobox",{target:_a83},opts.panelEvents[_a85]); + } + }; + function _a86(e){ + $(this).children("div.combobox-item-hover").removeClass("combobox-item-hover"); + var item=$(e.target).closest("div.combobox-item"); + if(!item.hasClass("combobox-item-disabled")){ + item.addClass("combobox-item-hover"); + } + e.stopPropagation(); + }; + function _a87(e){ + $(e.target).closest("div.combobox-item").removeClass("combobox-item-hover"); + e.stopPropagation(); + }; + function _a88(e){ + var _a89=$(this).panel("options").comboTarget; + if(!_a89){ + return; + } + var opts=$(_a89).combobox("options"); + var item=$(e.target).closest("div.combobox-item"); + if(!item.length||item.hasClass("combobox-item-disabled")){ + return; + } + var row=opts.finder.getRow(_a89,item); + if(!row){ + return; + } + if(opts.blurTimer){ + clearTimeout(opts.blurTimer); + opts.blurTimer=null; + } + opts.onClick.call(_a89,row); + var _a8a=row[opts.valueField]; + if(opts.multiple){ + if(item.hasClass("combobox-item-selected")){ + _a63(_a89,_a8a); + }else{ + _a5d(_a89,_a8a); + } + }else{ + $(_a89).combobox("setValue",_a8a).combobox("hidePanel"); + } + e.stopPropagation(); + }; + function _a8b(e){ + var _a8c=$(this).panel("options").comboTarget; + if(!_a8c){ + return; + } + var opts=$(_a8c).combobox("options"); + if(opts.groupPosition=="sticky"){ + var _a8d=$(this).children(".combobox-stick"); + if(!_a8d.length){ + _a8d=$("
        ").appendTo(this); + } + _a8d.hide(); + var _a8e=$(_a8c).data("combobox"); + $(this).children(".combobox-group:visible").each(function(){ + var g=$(this); + var _a8f=opts.finder.getGroup(_a8c,g); + var _a90=_a8e.data[_a8f.startIndex+_a8f.count-1]; + var last=opts.finder.getEl(_a8c,_a90[opts.valueField]); + if(g.position().top<0&&last.position().top>0){ + _a8d.show().html(g.html()); + return false; + } + }); + } + }; + $.fn.combobox=function(_a91,_a92){ + if(typeof _a91=="string"){ + var _a93=$.fn.combobox.methods[_a91]; + if(_a93){ + return _a93(this,_a92); + }else{ + return this.combo(_a91,_a92); + } + } + _a91=_a91||{}; + return this.each(function(){ + var _a94=$.data(this,"combobox"); + if(_a94){ + $.extend(_a94.options,_a91); + }else{ + _a94=$.data(this,"combobox",{options:$.extend({},$.fn.combobox.defaults,$.fn.combobox.parseOptions(this),_a91),data:[]}); + } + _a82(this); + if(_a94.options.data){ + _a6e(this,_a94.options.data); + }else{ + var data=$.fn.combobox.parseData(this); + if(data.length){ + _a6e(this,data); + } + } + _a72(this); + }); + }; + $.fn.combobox.methods={options:function(jq){ + var _a95=jq.combo("options"); + return $.extend($.data(jq[0],"combobox").options,{width:_a95.width,height:_a95.height,originalValue:_a95.originalValue,disabled:_a95.disabled,readonly:_a95.readonly}); + },cloneFrom:function(jq,from){ + return jq.each(function(){ + $(this).combo("cloneFrom",from); + $.data(this,"combobox",$(from).data("combobox")); + $(this).addClass("combobox-f").attr("comboboxName",$(this).attr("textboxName")); + }); + },getData:function(jq){ + return $.data(jq[0],"combobox").data; + },setValues:function(jq,_a96){ + return jq.each(function(){ + _a62(this,_a96); + }); + },setValue:function(jq,_a97){ + return jq.each(function(){ + _a62(this,$.isArray(_a97)?_a97:[_a97]); + }); + },clear:function(jq){ + return jq.each(function(){ + _a62(this,[]); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).combobox("options"); + if(opts.multiple){ + $(this).combobox("setValues",opts.originalValue); + }else{ + $(this).combobox("setValue",opts.originalValue); + } + }); + },loadData:function(jq,data){ + return jq.each(function(){ + _a6e(this,data); + }); + },reload:function(jq,url){ + return jq.each(function(){ + if(typeof url=="string"){ + _a72(this,url); + }else{ + if(url){ + var opts=$(this).combobox("options"); + opts.queryParams=url; + } + _a72(this); + } + }); + },select:function(jq,_a98){ + return jq.each(function(){ + _a5d(this,_a98); + }); + },unselect:function(jq,_a99){ + return jq.each(function(){ + _a63(this,_a99); + }); + },scrollTo:function(jq,_a9a){ + return jq.each(function(){ + _a55(this,_a9a); + }); + }}; + $.fn.combobox.parseOptions=function(_a9b){ + var t=$(_a9b); + return $.extend({},$.fn.combo.parseOptions(_a9b),$.parser.parseOptions(_a9b,["valueField","textField","groupField","groupPosition","mode","method","url",{showItemIcon:"boolean",limitToList:"boolean"}])); + }; + $.fn.combobox.parseData=function(_a9c){ + var data=[]; + var opts=$(_a9c).combobox("options"); + $(_a9c).children().each(function(){ + if(this.tagName.toLowerCase()=="optgroup"){ + var _a9d=$(this).attr("label"); + $(this).children().each(function(){ + _a9e(this,_a9d); + }); + }else{ + _a9e(this); + } + }); + return data; + function _a9e(el,_a9f){ + var t=$(el); + var row={}; + row[opts.valueField]=t.attr("value")!=undefined?t.attr("value"):t.text(); + row[opts.textField]=t.text(); + row["iconCls"]=$.parser.parseOptions(el,["iconCls"]).iconCls; + row["selected"]=t.is(":selected"); + row["disabled"]=t.is(":disabled"); + if(_a9f){ + opts.groupField=opts.groupField||"group"; + row[opts.groupField]=_a9f; + } + data.push(row); + }; + }; + var _aa0=0; + var _aa1={render:function(_aa2,_aa3,data){ + var _aa4=$.data(_aa2,"combobox"); + var opts=_aa4.options; + _aa0++; + _aa4.itemIdPrefix="_easyui_combobox_i"+_aa0; + _aa4.groupIdPrefix="_easyui_combobox_g"+_aa0; + _aa4.groups=[]; + var dd=[]; + var _aa5=undefined; + for(var i=0;i"); + dd.push(opts.groupFormatter?opts.groupFormatter.call(_aa2,g):g); + dd.push("
        "); + }else{ + _aa4.groups[_aa4.groups.length-1].count++; + } + }else{ + _aa5=undefined; + } + var cls="combobox-item"+(row.disabled?" combobox-item-disabled":"")+(g?" combobox-gitem":""); + dd.push("
        "); + if(opts.showItemIcon&&row.iconCls){ + dd.push(""); + } + dd.push(opts.formatter?opts.formatter.call(_aa2,row):s); + dd.push("
        "); + } + $(_aa3).html(dd.join("")); + }}; + $.fn.combobox.defaults=$.extend({},$.fn.combo.defaults,{valueField:"value",textField:"text",groupPosition:"static",groupField:null,groupFormatter:function(_aa6){ + return _aa6; + },mode:"local",method:"post",url:null,data:null,queryParams:{},showItemIcon:false,limitToList:false,view:_aa1,keyHandler:{up:function(e){ + nav(this,"prev"); + e.preventDefault(); + },down:function(e){ + nav(this,"next"); + e.preventDefault(); + },left:function(e){ + },right:function(e){ + },enter:function(e){ + _a7e(this); + },query:function(q,e){ + _a76(this,q); + }},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){ + var _aa7=e.data.target; + var opts=$(_aa7).combobox("options"); + if(opts.reversed||opts.limitToList){ + if(opts.blurTimer){ + clearTimeout(opts.blurTimer); + } + opts.blurTimer=setTimeout(function(){ + var _aa8=$(_aa7).parent().length; + if(_aa8){ + if(opts.reversed){ + $(_aa7).combobox("setValues",$(_aa7).combobox("getValues")); + }else{ + if(opts.limitToList){ + var vv=[]; + $.map($(_aa7).combobox("getValues"),function(v){ + var _aa9=$.easyui.indexOfArray($(_aa7).combobox("getData"),opts.valueField,v); + if(_aa9>=0){ + vv.push(v); + } + }); + $(_aa7).combobox("setValues",vv); + } + } + opts.blurTimer=null; + } + },50); + } + }}),panelEvents:{mouseover:_a86,mouseout:_a87,click:_a88,scroll:_a8b},filter:function(q,row){ + var opts=$(this).combobox("options"); + return row[opts.textField].toLowerCase().indexOf(q.toLowerCase())>=0; + },formatter:function(row){ + var opts=$(this).combobox("options"); + return row[opts.textField]; + },loader:function(_aaa,_aab,_aac){ + var opts=$(this).combobox("options"); + if(!opts.url){ + return false; + } + $.ajax({type:opts.method,url:opts.url,data:_aaa,dataType:"json",success:function(data){ + _aab(data); + },error:function(){ + _aac.apply(this,arguments); + }}); + },loadFilter:function(data){ + return data; + },finder:{getEl:function(_aad,_aae){ + var _aaf=_a51(_aad,_aae); + var id=$.data(_aad,"combobox").itemIdPrefix+"_"+_aaf; + return $("#"+id); + },getGroupEl:function(_ab0,_ab1){ + var _ab2=$.data(_ab0,"combobox"); + var _ab3=$.easyui.indexOfArray(_ab2.groups,"value",_ab1); + var id=_ab2.groupIdPrefix+"_"+_ab3; + return $("#"+id); + },getGroup:function(_ab4,p){ + var _ab5=$.data(_ab4,"combobox"); + var _ab6=p.attr("id").substr(_ab5.groupIdPrefix.length+1); + return _ab5.groups[parseInt(_ab6)]; + },getRow:function(_ab7,p){ + var _ab8=$.data(_ab7,"combobox"); + var _ab9=(p instanceof $)?p.attr("id").substr(_ab8.itemIdPrefix.length+1):_a51(_ab7,p); + return _ab8.data[parseInt(_ab9)]; + }},onBeforeLoad:function(_aba){ + },onLoadSuccess:function(data){ + },onLoadError:function(){ + },onSelect:function(_abb){ + },onUnselect:function(_abc){ + },onClick:function(_abd){ + }}); +})(jQuery); +(function($){ + function _abe(_abf){ + var _ac0=$.data(_abf,"combotree"); + var opts=_ac0.options; + var tree=_ac0.tree; + $(_abf).addClass("combotree-f"); + $(_abf).combo($.extend({},opts,{onShowPanel:function(){ + if(opts.editable){ + tree.tree("doFilter",""); + } + opts.onShowPanel.call(this); + }})); + var _ac1=$(_abf).combo("panel"); + if(!tree){ + tree=$("
          ").appendTo(_ac1); + _ac0.tree=tree; + } + tree.tree($.extend({},opts,{checkbox:opts.multiple,onLoadSuccess:function(node,data){ + var _ac2=$(_abf).combotree("getValues"); + if(opts.multiple){ + $.map(tree.tree("getChecked"),function(node){ + $.easyui.addArrayItem(_ac2,node.id); + }); + } + _ac7(_abf,_ac2,_ac0.remainText); + opts.onLoadSuccess.call(this,node,data); + },onClick:function(node){ + if(opts.multiple){ + $(this).tree(node.checked?"uncheck":"check",node.target); + }else{ + $(_abf).combo("hidePanel"); + } + _ac0.remainText=false; + _ac4(_abf); + opts.onClick.call(this,node); + },onCheck:function(node,_ac3){ + _ac0.remainText=false; + _ac4(_abf); + opts.onCheck.call(this,node,_ac3); + }})); + }; + function _ac4(_ac5){ + var _ac6=$.data(_ac5,"combotree"); + var opts=_ac6.options; + var tree=_ac6.tree; + var vv=[]; + if(opts.multiple){ + vv=$.map(tree.tree("getChecked"),function(node){ + return node.id; + }); + }else{ + var node=tree.tree("getSelected"); + if(node){ + vv.push(node.id); + } + } + vv=vv.concat(opts.unselectedValues); + _ac7(_ac5,vv,_ac6.remainText); + }; + function _ac7(_ac8,_ac9,_aca){ + var _acb=$.data(_ac8,"combotree"); + var opts=_acb.options; + var tree=_acb.tree; + var _acc=tree.tree("options"); + var _acd=_acc.onBeforeCheck; + var _ace=_acc.onCheck; + var _acf=_acc.onSelect; + _acc.onBeforeCheck=_acc.onCheck=_acc.onSelect=function(){ + }; + if(!$.isArray(_ac9)){ + _ac9=_ac9.split(opts.separator); + } + if(!opts.multiple){ + _ac9=_ac9.length?[_ac9[0]]:[""]; + } + var vv=$.map(_ac9,function(_ad0){ + return String(_ad0); + }); + tree.find("div.tree-node-selected").removeClass("tree-node-selected"); + $.map(tree.tree("getChecked"),function(node){ + if($.inArray(String(node.id),vv)==-1){ + tree.tree("uncheck",node.target); + } + }); + var ss=[]; + opts.unselectedValues=[]; + $.map(vv,function(v){ + var node=tree.tree("find",v); + if(node){ + tree.tree("check",node.target).tree("select",node.target); + ss.push(_ad1(node)); + }else{ + ss.push(_ad2(v,opts.mappingRows)||v); + opts.unselectedValues.push(v); + } + }); + if(opts.multiple){ + $.map(tree.tree("getChecked"),function(node){ + var id=String(node.id); + if($.inArray(id,vv)==-1){ + vv.push(id); + ss.push(_ad1(node)); + } + }); + } + _acc.onBeforeCheck=_acd; + _acc.onCheck=_ace; + _acc.onSelect=_acf; + if(!_aca){ + var s=ss.join(opts.separator); + if($(_ac8).combo("getText")!=s){ + $(_ac8).combo("setText",s); + } + } + $(_ac8).combo("setValues",vv); + function _ad2(_ad3,a){ + var item=$.easyui.getArrayItem(a,"id",_ad3); + return item?_ad1(item):undefined; + }; + function _ad1(node){ + return node[opts.textField||""]||node.text; + }; + }; + function _ad4(_ad5,q){ + var _ad6=$.data(_ad5,"combotree"); + var opts=_ad6.options; + var tree=_ad6.tree; + _ad6.remainText=true; + tree.tree("doFilter",opts.multiple?q.split(opts.separator):q); + }; + function _ad7(_ad8){ + var _ad9=$.data(_ad8,"combotree"); + _ad9.remainText=false; + $(_ad8).combotree("setValues",$(_ad8).combotree("getValues")); + $(_ad8).combotree("hidePanel"); + }; + $.fn.combotree=function(_ada,_adb){ + if(typeof _ada=="string"){ + var _adc=$.fn.combotree.methods[_ada]; + if(_adc){ + return _adc(this,_adb); + }else{ + return this.combo(_ada,_adb); + } + } + _ada=_ada||{}; + return this.each(function(){ + var _add=$.data(this,"combotree"); + if(_add){ + $.extend(_add.options,_ada); + }else{ + $.data(this,"combotree",{options:$.extend({},$.fn.combotree.defaults,$.fn.combotree.parseOptions(this),_ada)}); + } + _abe(this); + }); + }; + $.fn.combotree.methods={options:function(jq){ + var _ade=jq.combo("options"); + return $.extend($.data(jq[0],"combotree").options,{width:_ade.width,height:_ade.height,originalValue:_ade.originalValue,disabled:_ade.disabled,readonly:_ade.readonly}); + },clone:function(jq,_adf){ + var t=jq.combo("clone",_adf); + t.data("combotree",{options:$.extend(true,{},jq.combotree("options")),tree:jq.combotree("tree")}); + return t; + },tree:function(jq){ + return $.data(jq[0],"combotree").tree; + },loadData:function(jq,data){ + return jq.each(function(){ + var opts=$.data(this,"combotree").options; + opts.data=data; + var tree=$.data(this,"combotree").tree; + tree.tree("loadData",data); + }); + },reload:function(jq,url){ + return jq.each(function(){ + var opts=$.data(this,"combotree").options; + var tree=$.data(this,"combotree").tree; + if(url){ + opts.url=url; + } + tree.tree({url:opts.url}); + }); + },setValues:function(jq,_ae0){ + return jq.each(function(){ + var opts=$(this).combotree("options"); + if($.isArray(_ae0)){ + _ae0=$.map(_ae0,function(_ae1){ + if(_ae1&&typeof _ae1=="object"){ + $.easyui.addArrayItem(opts.mappingRows,"id",_ae1); + return _ae1.id; + }else{ + return _ae1; + } + }); + } + _ac7(this,_ae0); + }); + },setValue:function(jq,_ae2){ + return jq.each(function(){ + $(this).combotree("setValues",$.isArray(_ae2)?_ae2:[_ae2]); + }); + },clear:function(jq){ + return jq.each(function(){ + $(this).combotree("setValues",[]); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).combotree("options"); + if(opts.multiple){ + $(this).combotree("setValues",opts.originalValue); + }else{ + $(this).combotree("setValue",opts.originalValue); + } + }); + }}; + $.fn.combotree.parseOptions=function(_ae3){ + return $.extend({},$.fn.combo.parseOptions(_ae3),$.fn.tree.parseOptions(_ae3)); + }; + $.fn.combotree.defaults=$.extend({},$.fn.combo.defaults,$.fn.tree.defaults,{editable:false,textField:null,unselectedValues:[],mappingRows:[],keyHandler:{up:function(e){ + },down:function(e){ + },left:function(e){ + },right:function(e){ + },enter:function(e){ + _ad7(this); + },query:function(q,e){ + _ad4(this,q); + }}}); +})(jQuery); +(function($){ + function _ae4(_ae5){ + var _ae6=$.data(_ae5,"combogrid"); + var opts=_ae6.options; + var grid=_ae6.grid; + $(_ae5).addClass("combogrid-f").combo($.extend({},opts,{onShowPanel:function(){ + _afb(this,$(this).combogrid("getValues"),true); + var p=$(this).combogrid("panel"); + var _ae7=p.outerHeight()-p.height(); + var _ae8=p._size("minHeight"); + var _ae9=p._size("maxHeight"); + var dg=$(this).combogrid("grid"); + dg.datagrid("resize",{width:"100%",height:(isNaN(parseInt(opts.panelHeight))?"auto":"100%"),minHeight:(_ae8?_ae8-_ae7:""),maxHeight:(_ae9?_ae9-_ae7:"")}); + var row=dg.datagrid("getSelected"); + if(row){ + dg.datagrid("scrollTo",dg.datagrid("getRowIndex",row)); + } + opts.onShowPanel.call(this); + }})); + var _aea=$(_ae5).combo("panel"); + if(!grid){ + grid=$("
          ").appendTo(_aea); + _ae6.grid=grid; + } + grid.datagrid($.extend({},opts,{border:false,singleSelect:(!opts.multiple),onLoadSuccess:_aeb,onClickRow:_aec,onSelect:_aed("onSelect"),onUnselect:_aed("onUnselect"),onSelectAll:_aed("onSelectAll"),onUnselectAll:_aed("onUnselectAll")})); + function _aee(dg){ + return $(dg).closest(".combo-panel").panel("options").comboTarget||_ae5; + }; + function _aeb(data){ + var _aef=_aee(this); + var _af0=$(_aef).data("combogrid"); + var opts=_af0.options; + var _af1=$(_aef).combo("getValues"); + _afb(_aef,_af1,_af0.remainText); + opts.onLoadSuccess.call(this,data); + }; + function _aec(_af2,row){ + var _af3=_aee(this); + var _af4=$(_af3).data("combogrid"); + var opts=_af4.options; + _af4.remainText=false; + _af5.call(this); + if(!opts.multiple){ + $(_af3).combo("hidePanel"); + } + opts.onClickRow.call(this,_af2,row); + }; + function _aed(_af6){ + return function(_af7,row){ + var _af8=_aee(this); + var opts=$(_af8).combogrid("options"); + if(_af6=="onUnselectAll"){ + if(opts.multiple){ + _af5.call(this); + } + }else{ + _af5.call(this); + } + opts[_af6].call(this,_af7,row); + }; + }; + function _af5(){ + var dg=$(this); + var _af9=_aee(dg); + var _afa=$(_af9).data("combogrid"); + var opts=_afa.options; + var vv=$.map(dg.datagrid("getSelections"),function(row){ + return row[opts.idField]; + }); + vv=vv.concat(opts.unselectedValues); + _afb(_af9,vv,_afa.remainText); + }; + }; + function nav(_afc,dir){ + var _afd=$.data(_afc,"combogrid"); + var opts=_afd.options; + var grid=_afd.grid; + var _afe=grid.datagrid("getRows").length; + if(!_afe){ + return; + } + var tr=opts.finder.getTr(grid[0],null,"highlight"); + if(!tr.length){ + tr=opts.finder.getTr(grid[0],null,"selected"); + } + var _aff; + if(!tr.length){ + _aff=(dir=="next"?0:_afe-1); + }else{ + var _aff=parseInt(tr.attr("datagrid-row-index")); + _aff+=(dir=="next"?1:-1); + if(_aff<0){ + _aff=_afe-1; + } + if(_aff>=_afe){ + _aff=0; + } + } + grid.datagrid("highlightRow",_aff); + if(opts.selectOnNavigation){ + _afd.remainText=false; + grid.datagrid("selectRow",_aff); + } + }; + function _afb(_b00,_b01,_b02){ + var _b03=$.data(_b00,"combogrid"); + var opts=_b03.options; + var grid=_b03.grid; + var _b04=$(_b00).combo("getValues"); + var _b05=$(_b00).combo("options"); + var _b06=_b05.onChange; + _b05.onChange=function(){ + }; + var _b07=grid.datagrid("options"); + var _b08=_b07.onSelect; + var _b09=_b07.onUnselectAll; + _b07.onSelect=_b07.onUnselectAll=function(){ + }; + if(!$.isArray(_b01)){ + _b01=_b01.split(opts.separator); + } + if(!opts.multiple){ + _b01=_b01.length?[_b01[0]]:[""]; + } + var vv=$.map(_b01,function(_b0a){ + return String(_b0a); + }); + vv=$.grep(vv,function(v,_b0b){ + return _b0b===$.inArray(v,vv); + }); + var _b0c=$.grep(grid.datagrid("getSelections"),function(row,_b0d){ + return $.inArray(String(row[opts.idField]),vv)>=0; + }); + grid.datagrid("clearSelections"); + grid.data("datagrid").selectedRows=_b0c; + var ss=[]; + opts.unselectedValues=[]; + $.map(vv,function(v){ + var _b0e=grid.datagrid("getRowIndex",v); + if(_b0e>=0){ + grid.datagrid("selectRow",_b0e); + }else{ + opts.unselectedValues.push(v); + } + ss.push(_b0f(v,grid.datagrid("getRows"))||_b0f(v,_b0c)||_b0f(v,opts.mappingRows)||v); + }); + $(_b00).combo("setValues",_b04); + _b05.onChange=_b06; + _b07.onSelect=_b08; + _b07.onUnselectAll=_b09; + if(!_b02){ + var s=ss.join(opts.separator); + if($(_b00).combo("getText")!=s){ + $(_b00).combo("setText",s); + } + } + $(_b00).combo("setValues",_b01); + function _b0f(_b10,a){ + var item=$.easyui.getArrayItem(a,opts.idField,_b10); + return item?item[opts.textField]:undefined; + }; + }; + function _b11(_b12,q){ + var _b13=$.data(_b12,"combogrid"); + var opts=_b13.options; + var grid=_b13.grid; + _b13.remainText=true; + var qq=opts.multiple?q.split(opts.separator):[q]; + qq=$.grep(qq,function(q){ + return $.trim(q)!=""; + }); + if(opts.mode=="remote"){ + _b14(qq); + grid.datagrid("load",$.extend({},opts.queryParams,{q:q})); + }else{ + grid.datagrid("highlightRow",-1); + var rows=grid.datagrid("getRows"); + var vv=[]; + $.map(qq,function(q){ + q=$.trim(q); + var _b15=q; + _b16(opts.mappingRows,q); + _b16(grid.datagrid("getSelections"),q); + var _b17=_b16(rows,q); + if(_b17>=0){ + if(opts.reversed){ + grid.datagrid("highlightRow",_b17); + } + }else{ + $.map(rows,function(row,i){ + if(opts.filter.call(_b12,q,row)){ + grid.datagrid("highlightRow",i); + } + }); + } + }); + _b14(vv); + } + function _b16(rows,q){ + for(var i=0;i=0){ + $.easyui.addArrayItem(vv,v); + } + }); + $(_b19).combogrid("setValues",vv); + if(!opts.multiple){ + $(_b19).combogrid("hidePanel"); + } + }; + $.fn.combogrid=function(_b1c,_b1d){ + if(typeof _b1c=="string"){ + var _b1e=$.fn.combogrid.methods[_b1c]; + if(_b1e){ + return _b1e(this,_b1d); + }else{ + return this.combo(_b1c,_b1d); + } + } + _b1c=_b1c||{}; + return this.each(function(){ + var _b1f=$.data(this,"combogrid"); + if(_b1f){ + $.extend(_b1f.options,_b1c); + }else{ + _b1f=$.data(this,"combogrid",{options:$.extend({},$.fn.combogrid.defaults,$.fn.combogrid.parseOptions(this),_b1c)}); + } + _ae4(this); + }); + }; + $.fn.combogrid.methods={options:function(jq){ + var _b20=jq.combo("options"); + return $.extend($.data(jq[0],"combogrid").options,{width:_b20.width,height:_b20.height,originalValue:_b20.originalValue,disabled:_b20.disabled,readonly:_b20.readonly}); + },cloneFrom:function(jq,from){ + return jq.each(function(){ + $(this).combo("cloneFrom",from); + $.data(this,"combogrid",{options:$.extend(true,{cloned:true},$(from).combogrid("options")),combo:$(this).next(),panel:$(from).combo("panel"),grid:$(from).combogrid("grid")}); + }); + },grid:function(jq){ + return $.data(jq[0],"combogrid").grid; + },setValues:function(jq,_b21){ + return jq.each(function(){ + var opts=$(this).combogrid("options"); + if($.isArray(_b21)){ + _b21=$.map(_b21,function(_b22){ + if(_b22&&typeof _b22=="object"){ + $.easyui.addArrayItem(opts.mappingRows,opts.idField,_b22); + return _b22[opts.idField]; + }else{ + return _b22; + } + }); + } + _afb(this,_b21); + }); + },setValue:function(jq,_b23){ + return jq.each(function(){ + $(this).combogrid("setValues",$.isArray(_b23)?_b23:[_b23]); + }); + },clear:function(jq){ + return jq.each(function(){ + $(this).combogrid("setValues",[]); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).combogrid("options"); + if(opts.multiple){ + $(this).combogrid("setValues",opts.originalValue); + }else{ + $(this).combogrid("setValue",opts.originalValue); + } + }); + }}; + $.fn.combogrid.parseOptions=function(_b24){ + var t=$(_b24); + return $.extend({},$.fn.combo.parseOptions(_b24),$.fn.datagrid.parseOptions(_b24),$.parser.parseOptions(_b24,["idField","textField","mode"])); + }; + $.fn.combogrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.datagrid.defaults,{loadMsg:null,idField:null,textField:null,unselectedValues:[],mappingRows:[],mode:"local",keyHandler:{up:function(e){ + nav(this,"prev"); + e.preventDefault(); + },down:function(e){ + nav(this,"next"); + e.preventDefault(); + },left:function(e){ + },right:function(e){ + },enter:function(e){ + _b18(this); + },query:function(q,e){ + _b11(this,q); + }},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){ + var _b25=e.data.target; + var opts=$(_b25).combogrid("options"); + if(opts.reversed){ + $(_b25).combogrid("setValues",$(_b25).combogrid("getValues")); + } + }}),filter:function(q,row){ + var opts=$(this).combogrid("options"); + return (row[opts.textField]||"").toLowerCase().indexOf(q.toLowerCase())>=0; + }}); +})(jQuery); +(function($){ + function _b26(_b27){ + var _b28=$.data(_b27,"combotreegrid"); + var opts=_b28.options; + $(_b27).addClass("combotreegrid-f").combo($.extend({},opts,{onShowPanel:function(){ + var p=$(this).combotreegrid("panel"); + var _b29=p.outerHeight()-p.height(); + var _b2a=p._size("minHeight"); + var _b2b=p._size("maxHeight"); + var dg=$(this).combotreegrid("grid"); + dg.treegrid("resize",{width:"100%",height:(isNaN(parseInt(opts.panelHeight))?"auto":"100%"),minHeight:(_b2a?_b2a-_b29:""),maxHeight:(_b2b?_b2b-_b29:"")}); + var row=dg.treegrid("getSelected"); + if(row){ + dg.treegrid("scrollTo",row[opts.idField]); + } + opts.onShowPanel.call(this); + }})); + if(!_b28.grid){ + var _b2c=$(_b27).combo("panel"); + _b28.grid=$("
          ").appendTo(_b2c); + } + _b28.grid.treegrid($.extend({},opts,{border:false,checkbox:opts.multiple,onLoadSuccess:function(row,data){ + var _b2d=$(_b27).combotreegrid("getValues"); + if(opts.multiple){ + $.map($(this).treegrid("getCheckedNodes"),function(row){ + $.easyui.addArrayItem(_b2d,row[opts.idField]); + }); + } + _b32(_b27,_b2d); + opts.onLoadSuccess.call(this,row,data); + _b28.remainText=false; + },onClickRow:function(row){ + if(opts.multiple){ + $(this).treegrid(row.checked?"uncheckNode":"checkNode",row[opts.idField]); + $(this).treegrid("unselect",row[opts.idField]); + }else{ + $(_b27).combo("hidePanel"); + } + _b2f(_b27); + opts.onClickRow.call(this,row); + },onCheckNode:function(row,_b2e){ + _b2f(_b27); + opts.onCheckNode.call(this,row,_b2e); + }})); + }; + function _b2f(_b30){ + var _b31=$.data(_b30,"combotreegrid"); + var opts=_b31.options; + var grid=_b31.grid; + var vv=[]; + if(opts.multiple){ + vv=$.map(grid.treegrid("getCheckedNodes"),function(row){ + return row[opts.idField]; + }); + }else{ + var row=grid.treegrid("getSelected"); + if(row){ + vv.push(row[opts.idField]); + } + } + vv=vv.concat(opts.unselectedValues); + _b32(_b30,vv); + }; + function _b32(_b33,_b34){ + var _b35=$.data(_b33,"combotreegrid"); + var opts=_b35.options; + var grid=_b35.grid; + if(!$.isArray(_b34)){ + _b34=_b34.split(opts.separator); + } + if(!opts.multiple){ + _b34=_b34.length?[_b34[0]]:[""]; + } + var vv=$.map(_b34,function(_b36){ + return String(_b36); + }); + vv=$.grep(vv,function(v,_b37){ + return _b37===$.inArray(v,vv); + }); + var _b38=grid.treegrid("getSelected"); + if(_b38){ + grid.treegrid("unselect",_b38[opts.idField]); + } + $.map(grid.treegrid("getCheckedNodes"),function(row){ + if($.inArray(String(row[opts.idField]),vv)==-1){ + grid.treegrid("uncheckNode",row[opts.idField]); + } + }); + var ss=[]; + opts.unselectedValues=[]; + $.map(vv,function(v){ + var row=grid.treegrid("find",v); + if(row){ + if(opts.multiple){ + grid.treegrid("checkNode",v); + }else{ + grid.treegrid("select",v); + } + ss.push(_b39(row)); + }else{ + ss.push(_b3a(v,opts.mappingRows)||v); + opts.unselectedValues.push(v); + } + }); + if(opts.multiple){ + $.map(grid.treegrid("getCheckedNodes"),function(row){ + var id=String(row[opts.idField]); + if($.inArray(id,vv)==-1){ + vv.push(id); + ss.push(_b39(row)); + } + }); + } + if(!_b35.remainText){ + var s=ss.join(opts.separator); + if($(_b33).combo("getText")!=s){ + $(_b33).combo("setText",s); + } + } + $(_b33).combo("setValues",vv); + function _b3a(_b3b,a){ + var item=$.easyui.getArrayItem(a,opts.idField,_b3b); + return item?_b39(item):undefined; + }; + function _b39(row){ + return row[opts.textField||""]||row[opts.treeField]; + }; + }; + function _b3c(_b3d,q){ + var _b3e=$.data(_b3d,"combotreegrid"); + var opts=_b3e.options; + var grid=_b3e.grid; + _b3e.remainText=true; + grid.treegrid("clearSelections").treegrid("clearChecked").treegrid("highlightRow",-1); + if(opts.mode=="remote"){ + $(_b3d).combotreegrid("clear"); + grid.treegrid("load",$.extend({},opts.queryParams,{q:q})); + }else{ + if(q){ + var data=grid.treegrid("getData"); + var vv=[]; + var qq=opts.multiple?q.split(opts.separator):[q]; + $.map(qq,function(q){ + q=$.trim(q); + if(q){ + var v=undefined; + $.easyui.forEach(data,true,function(row){ + if(q.toLowerCase()==String(row[opts.treeField]).toLowerCase()){ + v=row[opts.idField]; + return false; + }else{ + if(opts.filter.call(_b3d,q,row)){ + grid.treegrid("expandTo",row[opts.idField]); + grid.treegrid("highlightRow",row[opts.idField]); + return false; + } + } + }); + if(v==undefined){ + $.easyui.forEach(opts.mappingRows,false,function(row){ + if(q.toLowerCase()==String(row[opts.treeField])){ + v=row[opts.idField]; + return false; + } + }); + } + if(v!=undefined){ + vv.push(v); + } + } + }); + _b32(_b3d,vv); + _b3e.remainText=false; + } + } + }; + function _b3f(_b40){ + _b2f(_b40); + }; + $.fn.combotreegrid=function(_b41,_b42){ + if(typeof _b41=="string"){ + var _b43=$.fn.combotreegrid.methods[_b41]; + if(_b43){ + return _b43(this,_b42); + }else{ + return this.combo(_b41,_b42); + } + } + _b41=_b41||{}; + return this.each(function(){ + var _b44=$.data(this,"combotreegrid"); + if(_b44){ + $.extend(_b44.options,_b41); + }else{ + _b44=$.data(this,"combotreegrid",{options:$.extend({},$.fn.combotreegrid.defaults,$.fn.combotreegrid.parseOptions(this),_b41)}); + } + _b26(this); + }); + }; + $.fn.combotreegrid.methods={options:function(jq){ + var _b45=jq.combo("options"); + return $.extend($.data(jq[0],"combotreegrid").options,{width:_b45.width,height:_b45.height,originalValue:_b45.originalValue,disabled:_b45.disabled,readonly:_b45.readonly}); + },grid:function(jq){ + return $.data(jq[0],"combotreegrid").grid; + },setValues:function(jq,_b46){ + return jq.each(function(){ + var opts=$(this).combotreegrid("options"); + if($.isArray(_b46)){ + _b46=$.map(_b46,function(_b47){ + if(_b47&&typeof _b47=="object"){ + $.easyui.addArrayItem(opts.mappingRows,opts.idField,_b47); + return _b47[opts.idField]; + }else{ + return _b47; + } + }); + } + _b32(this,_b46); + }); + },setValue:function(jq,_b48){ + return jq.each(function(){ + $(this).combotreegrid("setValues",$.isArray(_b48)?_b48:[_b48]); + }); + },clear:function(jq){ + return jq.each(function(){ + $(this).combotreegrid("setValues",[]); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).combotreegrid("options"); + if(opts.multiple){ + $(this).combotreegrid("setValues",opts.originalValue); + }else{ + $(this).combotreegrid("setValue",opts.originalValue); + } + }); + }}; + $.fn.combotreegrid.parseOptions=function(_b49){ + var t=$(_b49); + return $.extend({},$.fn.combo.parseOptions(_b49),$.fn.treegrid.parseOptions(_b49),$.parser.parseOptions(_b49,["mode",{limitToGrid:"boolean"}])); + }; + $.fn.combotreegrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.treegrid.defaults,{editable:false,singleSelect:true,limitToGrid:false,unselectedValues:[],mappingRows:[],mode:"local",textField:null,keyHandler:{up:function(e){ + },down:function(e){ + },left:function(e){ + },right:function(e){ + },enter:function(e){ + _b3f(this); + },query:function(q,e){ + _b3c(this,q); + }},inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){ + var _b4a=e.data.target; + var opts=$(_b4a).combotreegrid("options"); + if(opts.limitToGrid){ + _b3f(_b4a); + } + }}),filter:function(q,row){ + var opts=$(this).combotreegrid("options"); + return (row[opts.treeField]||"").toLowerCase().indexOf(q.toLowerCase())>=0; + }}); +})(jQuery); +(function($){ + function _b4b(_b4c){ + var _b4d=$.data(_b4c,"tagbox"); + var opts=_b4d.options; + $(_b4c).addClass("tagbox-f").combobox($.extend({},opts,{cls:"tagbox",reversed:true,onChange:function(_b4e,_b4f){ + _b50(); + $(this).combobox("hidePanel"); + opts.onChange.call(_b4c,_b4e,_b4f); + },onResizing:function(_b51,_b52){ + var _b53=$(this).combobox("textbox"); + var tb=$(this).data("textbox").textbox; + tb.css({height:"",paddingLeft:_b53.css("marginLeft"),paddingRight:_b53.css("marginRight")}); + _b53.css("margin",0); + tb._size({width:opts.width},$(this).parent()); + _b66(_b4c); + _b58(this); + opts.onResizing.call(_b4c,_b51,_b52); + },onLoadSuccess:function(data){ + _b50(); + opts.onLoadSuccess.call(_b4c,data); + }})); + _b50(); + _b66(_b4c); + function _b50(){ + $(_b4c).next().find(".tagbox-label").remove(); + var _b54=$(_b4c).tagbox("textbox"); + var ss=[]; + $.map($(_b4c).tagbox("getValues"),function(_b55,_b56){ + var row=opts.finder.getRow(_b4c,_b55); + var text=opts.tagFormatter.call(_b4c,_b55,row); + var cs={}; + var css=opts.tagStyler.call(_b4c,_b55,row)||""; + if(typeof css=="string"){ + cs={s:css}; + }else{ + cs={c:css["class"]||"",s:css["style"]||""}; + } + var _b57=$("").insertBefore(_b54).html(text); + _b57.attr("tagbox-index",_b56); + _b57.attr("style",cs.s).addClass(cs.c); + $("").appendTo(_b57); + }); + _b58(_b4c); + $(_b4c).combobox("setText",""); + }; + }; + function _b58(_b59,_b5a){ + var span=$(_b59).next(); + var _b5b=_b5a?$(_b5a):span.find(".tagbox-label"); + if(_b5b.length){ + var _b5c=$(_b59).tagbox("textbox"); + var _b5d=$(_b5b[0]); + var _b5e=_b5d.outerHeight(true)-_b5d.outerHeight(); + var _b5f=_b5c.outerHeight()-_b5e*2; + _b5b.css({height:_b5f+"px",lineHeight:_b5f+"px"}); + var _b60=span.find(".textbox-addon").css("height","100%"); + _b60.find(".textbox-icon").css("height","100%"); + span.find(".textbox-button").linkbutton("resize",{height:"100%"}); + } + }; + function _b61(_b62){ + var span=$(_b62).next(); + span.unbind(".tagbox").bind("click.tagbox",function(e){ + var opts=$(_b62).tagbox("options"); + if(opts.disabled||opts.readonly){ + return; + } + if($(e.target).hasClass("tagbox-remove")){ + var _b63=parseInt($(e.target).parent().attr("tagbox-index")); + var _b64=$(_b62).tagbox("getValues"); + if(opts.onBeforeRemoveTag.call(_b62,_b64[_b63])==false){ + return; + } + opts.onRemoveTag.call(_b62,_b64[_b63]); + _b64.splice(_b63,1); + $(_b62).tagbox("setValues",_b64); + }else{ + var _b65=$(e.target).closest(".tagbox-label"); + if(_b65.length){ + var _b63=parseInt(_b65.attr("tagbox-index")); + var _b64=$(_b62).tagbox("getValues"); + opts.onClickTag.call(_b62,_b64[_b63]); + } + } + $(this).find(".textbox-text").focus(); + }).bind("keyup.tagbox",function(e){ + _b66(_b62); + }).bind("mouseover.tagbox",function(e){ + if($(e.target).closest(".textbox-button,.textbox-addon,.tagbox-label").length){ + $(this).triggerHandler("mouseleave"); + }else{ + $(this).find(".textbox-text").triggerHandler("mouseenter"); + } + }).bind("mouseleave.tagbox",function(e){ + $(this).find(".textbox-text").triggerHandler("mouseleave"); + }); + }; + function _b66(_b67){ + var opts=$(_b67).tagbox("options"); + var _b68=$(_b67).tagbox("textbox"); + var span=$(_b67).next(); + var tmp=$("").appendTo("body"); + tmp.attr("style",_b68.attr("style")); + tmp.css({position:"absolute",top:-9999,left:-9999,width:"auto",fontFamily:_b68.css("fontFamily"),fontSize:_b68.css("fontSize"),fontWeight:_b68.css("fontWeight"),whiteSpace:"nowrap"}); + var _b69=_b6a(_b68.val()); + var _b6b=_b6a(opts.prompt||""); + tmp.remove(); + var _b6c=Math.min(Math.max(_b69,_b6b)+20,span.width()); + _b68._outerWidth(_b6c); + span.find(".textbox-button").linkbutton("resize",{height:"100%"}); + function _b6a(val){ + var s=val.replace(/&/g,"&").replace(/\s/g," ").replace(//g,">"); + tmp.html(s); + return tmp.outerWidth(); + }; + }; + function _b6d(_b6e){ + var t=$(_b6e); + var opts=t.tagbox("options"); + if(opts.limitToList){ + var _b6f=t.tagbox("panel"); + var item=_b6f.children("div.combobox-item-hover"); + if(item.length){ + item.removeClass("combobox-item-hover"); + var row=opts.finder.getRow(_b6e,item); + var _b70=row[opts.valueField]; + $(_b6e).tagbox(item.hasClass("combobox-item-selected")?"unselect":"select",_b70); + } + $(_b6e).tagbox("hidePanel"); + }else{ + var v=$.trim($(_b6e).tagbox("getText")); + if(v!==""){ + var _b71=$(_b6e).tagbox("getValues"); + _b71.push(v); + $(_b6e).tagbox("setValues",_b71); + } + } + }; + function _b72(_b73,_b74){ + $(_b73).combobox("setText",""); + _b66(_b73); + $(_b73).combobox("setValues",_b74); + $(_b73).combobox("setText",""); + $(_b73).tagbox("validate"); + }; + $.fn.tagbox=function(_b75,_b76){ + if(typeof _b75=="string"){ + var _b77=$.fn.tagbox.methods[_b75]; + if(_b77){ + return _b77(this,_b76); + }else{ + return this.combobox(_b75,_b76); + } + } + _b75=_b75||{}; + return this.each(function(){ + var _b78=$.data(this,"tagbox"); + if(_b78){ + $.extend(_b78.options,_b75); + }else{ + $.data(this,"tagbox",{options:$.extend({},$.fn.tagbox.defaults,$.fn.tagbox.parseOptions(this),_b75)}); + } + _b4b(this); + _b61(this); + }); + }; + $.fn.tagbox.methods={options:function(jq){ + var _b79=jq.combobox("options"); + return $.extend($.data(jq[0],"tagbox").options,{width:_b79.width,height:_b79.height,originalValue:_b79.originalValue,disabled:_b79.disabled,readonly:_b79.readonly}); + },setValues:function(jq,_b7a){ + return jq.each(function(){ + _b72(this,_b7a); + }); + },reset:function(jq){ + return jq.each(function(){ + $(this).combobox("reset").combobox("setText",""); + }); + }}; + $.fn.tagbox.parseOptions=function(_b7b){ + return $.extend({},$.fn.combobox.parseOptions(_b7b),$.parser.parseOptions(_b7b,[])); + }; + $.fn.tagbox.defaults=$.extend({},$.fn.combobox.defaults,{hasDownArrow:false,multiple:true,reversed:true,selectOnNavigation:false,tipOptions:$.extend({},$.fn.textbox.defaults.tipOptions,{showDelay:200}),val:function(_b7c){ + var vv=$(_b7c).parent().prev().tagbox("getValues"); + if($(_b7c).is(":focus")){ + vv.push($(_b7c).val()); + } + return vv.join(","); + },inputEvents:$.extend({},$.fn.combo.defaults.inputEvents,{blur:function(e){ + var _b7d=e.data.target; + var opts=$(_b7d).tagbox("options"); + if(opts.limitToList){ + _b6d(_b7d); + } + }}),keyHandler:$.extend({},$.fn.combobox.defaults.keyHandler,{enter:function(e){ + _b6d(this); + },query:function(q,e){ + var opts=$(this).tagbox("options"); + if(opts.limitToList){ + $.fn.combobox.defaults.keyHandler.query.call(this,q,e); + }else{ + $(this).combobox("hidePanel"); + } + }}),tagFormatter:function(_b7e,row){ + var opts=$(this).tagbox("options"); + return row?row[opts.textField]:_b7e; + },tagStyler:function(_b7f,row){ + return ""; + },onClickTag:function(_b80){ + },onBeforeRemoveTag:function(_b81){ + },onRemoveTag:function(_b82){ + }}); +})(jQuery); +(function($){ + function _b83(_b84){ + var _b85=$.data(_b84,"datebox"); + var opts=_b85.options; + $(_b84).addClass("datebox-f").combo($.extend({},opts,{onShowPanel:function(){ + _b86(this); + _b87(this); + _b88(this); + _b96(this,$(this).datebox("getText"),true); + opts.onShowPanel.call(this); + }})); + if(!_b85.calendar){ + var _b89=$(_b84).combo("panel").css("overflow","hidden"); + _b89.panel("options").onBeforeDestroy=function(){ + var c=$(this).find(".calendar-shared"); + if(c.length){ + c.insertBefore(c[0].pholder); + } + }; + var cc=$("
          ").prependTo(_b89); + if(opts.sharedCalendar){ + var c=$(opts.sharedCalendar); + if(!c[0].pholder){ + c[0].pholder=$("
          ").insertAfter(c); + } + c.addClass("calendar-shared").appendTo(cc); + if(!c.hasClass("calendar")){ + c.calendar(); + } + _b85.calendar=c; + }else{ + _b85.calendar=$("
          ").appendTo(cc).calendar(); + } + $.extend(_b85.calendar.calendar("options"),{fit:true,border:false,onSelect:function(date){ + var _b8a=this.target; + var opts=$(_b8a).datebox("options"); + _b96(_b8a,opts.formatter.call(_b8a,date)); + $(_b8a).combo("hidePanel"); + opts.onSelect.call(_b8a,date); + }}); + } + $(_b84).combo("textbox").parent().addClass("datebox"); + $(_b84).datebox("initValue",opts.value); + function _b86(_b8b){ + var opts=$(_b8b).datebox("options"); + var _b8c=$(_b8b).combo("panel"); + _b8c.unbind(".datebox").bind("click.datebox",function(e){ + if($(e.target).hasClass("datebox-button-a")){ + var _b8d=parseInt($(e.target).attr("datebox-button-index")); + opts.buttons[_b8d].handler.call(e.target,_b8b); + } + }); + }; + function _b87(_b8e){ + var _b8f=$(_b8e).combo("panel"); + if(_b8f.children("div.datebox-button").length){ + return; + } + var _b90=$("
          ").appendTo(_b8f); + var tr=_b90.find("tr"); + for(var i=0;i").appendTo(tr); + var btn=opts.buttons[i]; + var t=$("").html($.isFunction(btn.text)?btn.text(_b8e):btn.text).appendTo(td); + t.attr("datebox-button-index",i); + } + tr.find("td").css("width",(100/opts.buttons.length)+"%"); + }; + function _b88(_b91){ + var _b92=$(_b91).combo("panel"); + var cc=_b92.children("div.datebox-calendar-inner"); + _b92.children()._outerWidth(_b92.width()); + _b85.calendar.appendTo(cc); + _b85.calendar[0].target=_b91; + if(opts.panelHeight!="auto"){ + var _b93=_b92.height(); + _b92.children().not(cc).each(function(){ + _b93-=$(this).outerHeight(); + }); + cc._outerHeight(_b93); + } + _b85.calendar.calendar("resize"); + }; + }; + function _b94(_b95,q){ + _b96(_b95,q,true); + }; + function _b97(_b98){ + var _b99=$.data(_b98,"datebox"); + var opts=_b99.options; + var _b9a=_b99.calendar.calendar("options").current; + if(_b9a){ + _b96(_b98,opts.formatter.call(_b98,_b9a)); + $(_b98).combo("hidePanel"); + } + }; + function _b96(_b9b,_b9c,_b9d){ + var _b9e=$.data(_b9b,"datebox"); + var opts=_b9e.options; + var _b9f=_b9e.calendar; + _b9f.calendar("moveTo",opts.parser.call(_b9b,_b9c)); + if(_b9d){ + $(_b9b).combo("setValue",_b9c); + }else{ + if(_b9c){ + _b9c=opts.formatter.call(_b9b,_b9f.calendar("options").current); + } + $(_b9b).combo("setText",_b9c).combo("setValue",_b9c); + } + }; + $.fn.datebox=function(_ba0,_ba1){ + if(typeof _ba0=="string"){ + var _ba2=$.fn.datebox.methods[_ba0]; + if(_ba2){ + return _ba2(this,_ba1); + }else{ + return this.combo(_ba0,_ba1); + } + } + _ba0=_ba0||{}; + return this.each(function(){ + var _ba3=$.data(this,"datebox"); + if(_ba3){ + $.extend(_ba3.options,_ba0); + }else{ + $.data(this,"datebox",{options:$.extend({},$.fn.datebox.defaults,$.fn.datebox.parseOptions(this),_ba0)}); + } + _b83(this); + }); + }; + $.fn.datebox.methods={options:function(jq){ + var _ba4=jq.combo("options"); + return $.extend($.data(jq[0],"datebox").options,{width:_ba4.width,height:_ba4.height,originalValue:_ba4.originalValue,disabled:_ba4.disabled,readonly:_ba4.readonly}); + },cloneFrom:function(jq,from){ + return jq.each(function(){ + $(this).combo("cloneFrom",from); + $.data(this,"datebox",{options:$.extend(true,{},$(from).datebox("options")),calendar:$(from).datebox("calendar")}); + $(this).addClass("datebox-f"); + }); + },calendar:function(jq){ + return $.data(jq[0],"datebox").calendar; + },initValue:function(jq,_ba5){ + return jq.each(function(){ + var opts=$(this).datebox("options"); + var _ba6=opts.value; + if(_ba6){ + _ba6=opts.formatter.call(this,opts.parser.call(this,_ba6)); + } + $(this).combo("initValue",_ba6).combo("setText",_ba6); + }); + },setValue:function(jq,_ba7){ + return jq.each(function(){ + _b96(this,_ba7); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).datebox("options"); + $(this).datebox("setValue",opts.originalValue); + }); + }}; + $.fn.datebox.parseOptions=function(_ba8){ + return $.extend({},$.fn.combo.parseOptions(_ba8),$.parser.parseOptions(_ba8,["sharedCalendar"])); + }; + $.fn.datebox.defaults=$.extend({},$.fn.combo.defaults,{panelWidth:180,panelHeight:"auto",sharedCalendar:null,keyHandler:{up:function(e){ + },down:function(e){ + },left:function(e){ + },right:function(e){ + },enter:function(e){ + _b97(this); + },query:function(q,e){ + _b94(this,q); + }},currentText:"Today",closeText:"Close",okText:"Ok",buttons:[{text:function(_ba9){ + return $(_ba9).datebox("options").currentText; + },handler:function(_baa){ + var now=new Date(); + $(_baa).datebox("calendar").calendar({year:now.getFullYear(),month:now.getMonth()+1,current:new Date(now.getFullYear(),now.getMonth(),now.getDate())}); + _b97(_baa); + }},{text:function(_bab){ + return $(_bab).datebox("options").closeText; + },handler:function(_bac){ + $(this).closest("div.combo-panel").panel("close"); + }}],formatter:function(date){ + var y=date.getFullYear(); + var m=date.getMonth()+1; + var d=date.getDate(); + return (m<10?("0"+m):m)+"/"+(d<10?("0"+d):d)+"/"+y; + },parser:function(s){ + if(!s){ + return new Date(); + } + var ss=s.split("/"); + var m=parseInt(ss[0],10); + var d=parseInt(ss[1],10); + var y=parseInt(ss[2],10); + if(!isNaN(y)&&!isNaN(m)&&!isNaN(d)){ + return new Date(y,m-1,d); + }else{ + return new Date(); + } + },onSelect:function(date){ + }}); +})(jQuery); +(function($){ + function _bad(_bae){ + var _baf=$.data(_bae,"datetimebox"); + var opts=_baf.options; + $(_bae).datebox($.extend({},opts,{onShowPanel:function(){ + var _bb0=$(this).datetimebox("getValue"); + _bb6(this,_bb0,true); + opts.onShowPanel.call(this); + },formatter:$.fn.datebox.defaults.formatter,parser:$.fn.datebox.defaults.parser})); + $(_bae).removeClass("datebox-f").addClass("datetimebox-f"); + $(_bae).datebox("calendar").calendar({onSelect:function(date){ + opts.onSelect.call(this.target,date); + }}); + if(!_baf.spinner){ + var _bb1=$(_bae).datebox("panel"); + var p=$("
          ").insertAfter(_bb1.children("div.datebox-calendar-inner")); + _baf.spinner=p.children("input"); + } + _baf.spinner.timespinner({width:opts.spinnerWidth,showSeconds:opts.showSeconds,separator:opts.timeSeparator}); + $(_bae).datetimebox("initValue",opts.value); + }; + function _bb2(_bb3){ + var c=$(_bb3).datetimebox("calendar"); + var t=$(_bb3).datetimebox("spinner"); + var date=c.calendar("options").current; + return new Date(date.getFullYear(),date.getMonth(),date.getDate(),t.timespinner("getHours"),t.timespinner("getMinutes"),t.timespinner("getSeconds")); + }; + function _bb4(_bb5,q){ + _bb6(_bb5,q,true); + }; + function _bb7(_bb8){ + var opts=$.data(_bb8,"datetimebox").options; + var date=_bb2(_bb8); + _bb6(_bb8,opts.formatter.call(_bb8,date)); + $(_bb8).combo("hidePanel"); + }; + function _bb6(_bb9,_bba,_bbb){ + var opts=$.data(_bb9,"datetimebox").options; + $(_bb9).combo("setValue",_bba); + if(!_bbb){ + if(_bba){ + var date=opts.parser.call(_bb9,_bba); + $(_bb9).combo("setText",opts.formatter.call(_bb9,date)); + $(_bb9).combo("setValue",opts.formatter.call(_bb9,date)); + }else{ + $(_bb9).combo("setText",_bba); + } + } + var date=opts.parser.call(_bb9,_bba); + $(_bb9).datetimebox("calendar").calendar("moveTo",date); + $(_bb9).datetimebox("spinner").timespinner("setValue",_bbc(date)); + function _bbc(date){ + function _bbd(_bbe){ + return (_bbe<10?"0":"")+_bbe; + }; + var tt=[_bbd(date.getHours()),_bbd(date.getMinutes())]; + if(opts.showSeconds){ + tt.push(_bbd(date.getSeconds())); + } + return tt.join($(_bb9).datetimebox("spinner").timespinner("options").separator); + }; + }; + $.fn.datetimebox=function(_bbf,_bc0){ + if(typeof _bbf=="string"){ + var _bc1=$.fn.datetimebox.methods[_bbf]; + if(_bc1){ + return _bc1(this,_bc0); + }else{ + return this.datebox(_bbf,_bc0); + } + } + _bbf=_bbf||{}; + return this.each(function(){ + var _bc2=$.data(this,"datetimebox"); + if(_bc2){ + $.extend(_bc2.options,_bbf); + }else{ + $.data(this,"datetimebox",{options:$.extend({},$.fn.datetimebox.defaults,$.fn.datetimebox.parseOptions(this),_bbf)}); + } + _bad(this); + }); + }; + $.fn.datetimebox.methods={options:function(jq){ + var _bc3=jq.datebox("options"); + return $.extend($.data(jq[0],"datetimebox").options,{originalValue:_bc3.originalValue,disabled:_bc3.disabled,readonly:_bc3.readonly}); + },cloneFrom:function(jq,from){ + return jq.each(function(){ + $(this).datebox("cloneFrom",from); + $.data(this,"datetimebox",{options:$.extend(true,{},$(from).datetimebox("options")),spinner:$(from).datetimebox("spinner")}); + $(this).removeClass("datebox-f").addClass("datetimebox-f"); + }); + },spinner:function(jq){ + return $.data(jq[0],"datetimebox").spinner; + },initValue:function(jq,_bc4){ + return jq.each(function(){ + var opts=$(this).datetimebox("options"); + var _bc5=opts.value; + if(_bc5){ + _bc5=opts.formatter.call(this,opts.parser.call(this,_bc5)); + } + $(this).combo("initValue",_bc5).combo("setText",_bc5); + }); + },setValue:function(jq,_bc6){ + return jq.each(function(){ + _bb6(this,_bc6); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).datetimebox("options"); + $(this).datetimebox("setValue",opts.originalValue); + }); + }}; + $.fn.datetimebox.parseOptions=function(_bc7){ + var t=$(_bc7); + return $.extend({},$.fn.datebox.parseOptions(_bc7),$.parser.parseOptions(_bc7,["timeSeparator","spinnerWidth",{showSeconds:"boolean"}])); + }; + $.fn.datetimebox.defaults=$.extend({},$.fn.datebox.defaults,{spinnerWidth:"100%",showSeconds:true,timeSeparator:":",keyHandler:{up:function(e){ + },down:function(e){ + },left:function(e){ + },right:function(e){ + },enter:function(e){ + _bb7(this); + },query:function(q,e){ + _bb4(this,q); + }},buttons:[{text:function(_bc8){ + return $(_bc8).datetimebox("options").currentText; + },handler:function(_bc9){ + var opts=$(_bc9).datetimebox("options"); + _bb6(_bc9,opts.formatter.call(_bc9,new Date())); + $(_bc9).datetimebox("hidePanel"); + }},{text:function(_bca){ + return $(_bca).datetimebox("options").okText; + },handler:function(_bcb){ + _bb7(_bcb); + }},{text:function(_bcc){ + return $(_bcc).datetimebox("options").closeText; + },handler:function(_bcd){ + $(_bcd).datetimebox("hidePanel"); + }}],formatter:function(date){ + var h=date.getHours(); + var M=date.getMinutes(); + var s=date.getSeconds(); + function _bce(_bcf){ + return (_bcf<10?"0":"")+_bcf; + }; + var _bd0=$(this).datetimebox("spinner").timespinner("options").separator; + var r=$.fn.datebox.defaults.formatter(date)+" "+_bce(h)+_bd0+_bce(M); + if($(this).datetimebox("options").showSeconds){ + r+=_bd0+_bce(s); + } + return r; + },parser:function(s){ + if($.trim(s)==""){ + return new Date(); + } + var dt=s.split(" "); + var d=$.fn.datebox.defaults.parser(dt[0]); + if(dt.length<2){ + return d; + } + var _bd1=$(this).datetimebox("spinner").timespinner("options").separator; + var tt=dt[1].split(_bd1); + var hour=parseInt(tt[0],10)||0; + var _bd2=parseInt(tt[1],10)||0; + var _bd3=parseInt(tt[2],10)||0; + return new Date(d.getFullYear(),d.getMonth(),d.getDate(),hour,_bd2,_bd3); + }}); +})(jQuery); +(function($){ + function init(_bd4){ + var _bd5=$("
          "+"
          "+""+""+"
          "+"
          "+"
          "+"
          "+""+"
          ").insertAfter(_bd4); + var t=$(_bd4); + t.addClass("slider-f").hide(); + var name=t.attr("name"); + if(name){ + _bd5.find("input.slider-value").attr("name",name); + t.removeAttr("name").attr("sliderName",name); + } + _bd5.bind("_resize",function(e,_bd6){ + if($(this).hasClass("easyui-fluid")||_bd6){ + _bd7(_bd4); + } + return false; + }); + return _bd5; + }; + function _bd7(_bd8,_bd9){ + var _bda=$.data(_bd8,"slider"); + var opts=_bda.options; + var _bdb=_bda.slider; + if(_bd9){ + if(_bd9.width){ + opts.width=_bd9.width; + } + if(_bd9.height){ + opts.height=_bd9.height; + } + } + _bdb._size(opts); + if(opts.mode=="h"){ + _bdb.css("height",""); + _bdb.children("div").css("height",""); + }else{ + _bdb.css("width",""); + _bdb.children("div").css("width",""); + _bdb.children("div.slider-rule,div.slider-rulelabel,div.slider-inner")._outerHeight(_bdb._outerHeight()); + } + _bdc(_bd8); + }; + function _bdd(_bde){ + var _bdf=$.data(_bde,"slider"); + var opts=_bdf.options; + var _be0=_bdf.slider; + var aa=opts.mode=="h"?opts.rule:opts.rule.slice(0).reverse(); + if(opts.reversed){ + aa=aa.slice(0).reverse(); + } + _be1(aa); + function _be1(aa){ + var rule=_be0.find("div.slider-rule"); + var _be2=_be0.find("div.slider-rulelabel"); + rule.empty(); + _be2.empty(); + for(var i=0;i").appendTo(rule); + span.css((opts.mode=="h"?"left":"top"),_be3); + if(aa[i]!="|"){ + span=$("").appendTo(_be2); + span.html(aa[i]); + if(opts.mode=="h"){ + span.css({left:_be3,marginLeft:-Math.round(span.outerWidth()/2)}); + }else{ + span.css({top:_be3,marginTop:-Math.round(span.outerHeight()/2)}); + } + } + } + }; + }; + function _be4(_be5){ + var _be6=$.data(_be5,"slider"); + var opts=_be6.options; + var _be7=_be6.slider; + _be7.removeClass("slider-h slider-v slider-disabled"); + _be7.addClass(opts.mode=="h"?"slider-h":"slider-v"); + _be7.addClass(opts.disabled?"slider-disabled":""); + var _be8=_be7.find(".slider-inner"); + _be8.html(""+""); + if(opts.range){ + _be8.append(""+""); + } + _be7.find("a.slider-handle").draggable({axis:opts.mode,cursor:"pointer",disabled:opts.disabled,onDrag:function(e){ + var left=e.data.left; + var _be9=_be7.width(); + if(opts.mode!="h"){ + left=e.data.top; + _be9=_be7.height(); + } + if(left<0||left>_be9){ + return false; + }else{ + _bea(left,this); + return false; + } + },onStartDrag:function(){ + _be6.isDragging=true; + opts.onSlideStart.call(_be5,opts.value); + },onStopDrag:function(e){ + _bea(opts.mode=="h"?e.data.left:e.data.top,this); + opts.onSlideEnd.call(_be5,opts.value); + opts.onComplete.call(_be5,opts.value); + _be6.isDragging=false; + }}); + _be7.find("div.slider-inner").unbind(".slider").bind("mousedown.slider",function(e){ + if(_be6.isDragging||opts.disabled){ + return; + } + var pos=$(this).offset(); + _bea(opts.mode=="h"?(e.pageX-pos.left):(e.pageY-pos.top)); + opts.onComplete.call(_be5,opts.value); + }); + function _bea(pos,_beb){ + var _bec=_bed(_be5,pos); + var s=Math.abs(_bec%opts.step); + if(s0; + if(_bec<=v2&&_bee){ + v1=_bec; + }else{ + if(_bec>=v1&&(!_bee)){ + v2=_bec; + } + } + }else{ + if(_becv2){ + v2=_bec; + }else{ + _becopts.max){ + _bf6=opts.max; + } + var _bf7=$("").appendTo(_bf3); + _bf7.attr("name",name); + _bf7.val(_bf6); + _bf5.push(_bf6); + var _bf8=_bf3.find(".slider-handle:eq("+i+")"); + var tip=_bf8.next(); + var pos=_bf9(_bf0,_bf6); + if(opts.showTip){ + tip.show(); + tip.html(opts.tipFormatter.call(_bf0,_bf6)); + }else{ + tip.hide(); + } + if(opts.mode=="h"){ + var _bfa="left:"+pos+"px;"; + _bf8.attr("style",_bfa); + tip.attr("style",_bfa+"margin-left:"+(-Math.round(tip.outerWidth()/2))+"px"); + }else{ + var _bfa="top:"+pos+"px;"; + _bf8.attr("style",_bfa); + tip.attr("style",_bfa+"margin-left:"+(-Math.round(tip.outerWidth()))+"px"); + } + } + opts.value=opts.range?_bf5:_bf5[0]; + $(_bf0).val(opts.range?_bf5.join(opts.separator):_bf5[0]); + if(_bf4.join(",")!=_bf5.join(",")){ + opts.onChange.call(_bf0,opts.value,(opts.range?_bf4:_bf4[0])); + } + }; + function _bdc(_bfb){ + var opts=$.data(_bfb,"slider").options; + var fn=opts.onChange; + opts.onChange=function(){ + }; + _bef(_bfb,opts.value); + opts.onChange=fn; + }; + function _bf9(_bfc,_bfd){ + var _bfe=$.data(_bfc,"slider"); + var opts=_bfe.options; + var _bff=_bfe.slider; + var size=opts.mode=="h"?_bff.width():_bff.height(); + var pos=opts.converter.toPosition.call(_bfc,_bfd,size); + if(opts.mode=="v"){ + pos=_bff.height()-pos; + } + if(opts.reversed){ + pos=size-pos; + } + return pos.toFixed(0); + }; + function _bed(_c00,pos){ + var _c01=$.data(_c00,"slider"); + var opts=_c01.options; + var _c02=_c01.slider; + var size=opts.mode=="h"?_c02.width():_c02.height(); + var pos=opts.mode=="h"?(opts.reversed?(size-pos):pos):(opts.reversed?pos:(size-pos)); + var _c03=opts.converter.toValue.call(_c00,pos,size); + return _c03.toFixed(0); + }; + $.fn.slider=function(_c04,_c05){ + if(typeof _c04=="string"){ + return $.fn.slider.methods[_c04](this,_c05); + } + _c04=_c04||{}; + return this.each(function(){ + var _c06=$.data(this,"slider"); + if(_c06){ + $.extend(_c06.options,_c04); + }else{ + _c06=$.data(this,"slider",{options:$.extend({},$.fn.slider.defaults,$.fn.slider.parseOptions(this),_c04),slider:init(this)}); + $(this).removeAttr("disabled"); + } + var opts=_c06.options; + opts.min=parseFloat(opts.min); + opts.max=parseFloat(opts.max); + if(opts.range){ + if(!$.isArray(opts.value)){ + opts.value=$.map(String(opts.value).split(opts.separator),function(v){ + return parseFloat(v); + }); + } + if(opts.value.length<2){ + opts.value.push(opts.max); + } + }else{ + opts.value=parseFloat(opts.value); + } + opts.step=parseFloat(opts.step); + opts.originalValue=opts.value; + _be4(this); + _bdd(this); + _bd7(this); + }); + }; + $.fn.slider.methods={options:function(jq){ + return $.data(jq[0],"slider").options; + },destroy:function(jq){ + return jq.each(function(){ + $.data(this,"slider").slider.remove(); + $(this).remove(); + }); + },resize:function(jq,_c07){ + return jq.each(function(){ + _bd7(this,_c07); + }); + },getValue:function(jq){ + return jq.slider("options").value; + },getValues:function(jq){ + return jq.slider("options").value; + },setValue:function(jq,_c08){ + return jq.each(function(){ + _bef(this,[_c08]); + }); + },setValues:function(jq,_c09){ + return jq.each(function(){ + _bef(this,_c09); + }); + },clear:function(jq){ + return jq.each(function(){ + var opts=$(this).slider("options"); + _bef(this,opts.range?[opts.min,opts.max]:[opts.min]); + }); + },reset:function(jq){ + return jq.each(function(){ + var opts=$(this).slider("options"); + $(this).slider(opts.range?"setValues":"setValue",opts.originalValue); + }); + },enable:function(jq){ + return jq.each(function(){ + $.data(this,"slider").options.disabled=false; + _be4(this); + }); + },disable:function(jq){ + return jq.each(function(){ + $.data(this,"slider").options.disabled=true; + _be4(this); + }); + }}; + $.fn.slider.parseOptions=function(_c0a){ + var t=$(_c0a); + return $.extend({},$.parser.parseOptions(_c0a,["width","height","mode",{reversed:"boolean",showTip:"boolean",range:"boolean",min:"number",max:"number",step:"number"}]),{value:(t.val()||undefined),disabled:(t.attr("disabled")?true:undefined),rule:(t.attr("rule")?eval(t.attr("rule")):undefined)}); + }; + $.fn.slider.defaults={width:"auto",height:"auto",mode:"h",reversed:false,showTip:false,disabled:false,range:false,value:0,separator:",",min:0,max:100,step:1,rule:[],tipFormatter:function(_c0b){ + return _c0b; + },converter:{toPosition:function(_c0c,size){ + var opts=$(this).slider("options"); + return (_c0c-opts.min)/(opts.max-opts.min)*size; + },toValue:function(pos,size){ + var opts=$(this).slider("options"); + return opts.min+(opts.max-opts.min)*(pos/size); + }},onChange:function(_c0d,_c0e){ + },onSlideStart:function(_c0f){ + },onSlideEnd:function(_c10){ + },onComplete:function(_c11){ + }}; +})(jQuery); diff --git a/novel-front/src/main/resources/static/javascript/ycUtils.js b/novel-front/src/main/resources/static/javascript/ycUtils.js new file mode 100644 index 0000000..94a6954 --- /dev/null +++ b/novel-front/src/main/resources/static/javascript/ycUtils.js @@ -0,0 +1,58 @@ +var SCYC = { +} + +$.extend($.fn.validatebox.defaults.rules, { + checkBookName: { + validator: function (value, param) { + var url = "/aspx/book/booklist.aspx"; + var data = { bid: param, bname: value, act: "getbooknamerepeat" }; + var bool = false; + $.ajax({ + type: "post", + dataType: 'html', + async: false, + url: url, + data: data, + cache: false, + success: function (result) { + if (result == "1") { + $.fn.validatebox.defaults.rules.checkBookName.message = '该书名已存在,请重新输入'; + bool = false; + } else { + $.fn.validatebox.defaults.rules.checkBookName.message = ''; + bool = true; + } + } + }); + return bool; + message: ''; + } + }, + checkNiceName: { + validator: function (value, param) { + var url = "/author/checkPenName"; + var data = { penName: value}; + var bool = false; + $.ajax({ + type: "post", + dataType: 'json', + async: false, + url: url, + data: data, + cache: false, + success: function (result) { + if (result.data) { + $.fn.validatebox.defaults.rules.checkNiceName.message = '笔名已存在,请重新输入'; + bool = false; + } else { + $.fn.validatebox.defaults.rules.checkNiceName.message = ''; + bool = true; + } + } + }); + return bool; + message: ''; + } + } + +}); \ No newline at end of file diff --git a/novel-front/src/main/resources/static/wangEditor/.eslintignore b/novel-front/src/main/resources/static/wangEditor/.eslintignore new file mode 100644 index 0000000..c02d109 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/.eslintrc.json b/novel-front/src/main/resources/static/wangEditor/.eslintrc.json new file mode 100644 index 0000000..0148b38 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/.gitattributes b/novel-front/src/main/resources/static/wangEditor/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/.gitignore b/novel-front/src/main/resources/static/wangEditor/.gitignore new file mode 100644 index 0000000..481571c --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/.npmignore b/novel-front/src/main/resources/static/wangEditor/.npmignore new file mode 100644 index 0000000..333dd25 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/ISSUE.md b/novel-front/src/main/resources/static/wangEditor/ISSUE.md new file mode 100644 index 0000000..796cbee --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/LICENSE b/novel-front/src/main/resources/static/wangEditor/LICENSE new file mode 100644 index 0000000..5239660 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/README.md b/novel-front/src/main/resources/static/wangEditor/README.md new file mode 100644 index 0000000..0ab9445 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/bower.json b/novel-front/src/main/resources/static/wangEditor/bower.json new file mode 100644 index 0000000..0c4ed0d --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/dev/README.md b/novel-front/src/main/resources/static/wangEditor/docs/dev/README.md new file mode 100644 index 0000000..473dbcb --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/01-demo.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/01-demo.md new file mode 100644 index 0000000..b71612f --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/02-use-module.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/02-use-module.md new file mode 100644 index 0000000..0356a68 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/03-sperate.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/03-sperate.md new file mode 100644 index 0000000..0fcd276 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/04-multi.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/01-getstart/04-multi.md new file mode 100644 index 0000000..aee3540 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/02-content/01-set-content.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/01-set-content.md new file mode 100644 index 0000000..7631f6f --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/02-content/02-get-content.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/02-get-content.md new file mode 100644 index 0000000..e21c277 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/02-content/03-use-textarea.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/03-use-textarea.md new file mode 100644 index 0000000..1707e13 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/02-content/04-get-json.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/02-content/04-get-json.md new file mode 100644 index 0000000..d623ac4 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/03-config/01-menu.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/01-menu.md new file mode 100644 index 0000000..bce6ba7 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/03-config/02-debug.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/02-debug.md new file mode 100644 index 0000000..e94d7a4 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/03-config/03-onchange.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/03-onchange.md new file mode 100644 index 0000000..296091c --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/03-config/04-z-index.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/04-z-index.md new file mode 100644 index 0000000..129bf1c --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/03-config/05-lang.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/05-lang.md new file mode 100644 index 0000000..01900fe --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/05-lang.md @@ -0,0 +1,30 @@ +# 多语言 + +可以通过`lang`配置项配置多语言,其实就是通过该配置项中的配置,将编辑器显示的文字,替换成你需要的文字。 + +```html +
          +

          欢迎使用 wangEditor 富文本编辑器

          +
          + + + +``` + +**注意,以上代码中的`链接文字`要写在`链接`前面,`上传图片`要写在`上传`前面,因为前者包含后者。如果不这样做,可能会出现替换不全的问题,切记切记!** diff --git a/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/06-paste.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/06-paste.md new file mode 100644 index 0000000..a7126c8 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/03-config/07-linkImgCallback.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/07-linkImgCallback.md new file mode 100644 index 0000000..52169e8 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/03-config/08-linkCheck.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/08-linkCheck.md new file mode 100644 index 0000000..b581438 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/03-config/09-onfocus.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/09-onfocus.md new file mode 100644 index 0000000..7caba6b --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/03-config/10-onblur.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/10-onblur.md new file mode 100644 index 0000000..f7544bc --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/03-config/11-linkImgCheck.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/11-linkImgCheck.md new file mode 100644 index 0000000..efb3320 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/03-config/12-colors.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/12-colors.md new file mode 100644 index 0000000..e86e57d --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/03-config/13-emot.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/03-config/13-emot.md new file mode 100644 index 0000000..5363834 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/01-show-tab.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/01-show-tab.md new file mode 100644 index 0000000..8261950 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/02-base64.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/02-base64.md new file mode 100644 index 0000000..3a2d71a --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/03-upload-config.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/03-upload-config.md new file mode 100644 index 0000000..6720ce6 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/04-qiniu.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/04-uploadimg/04-qiniu.md new file mode 100644 index 0000000..e5c2ca4 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/05-other/01-全屏-预览-查看源码.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/01-全屏-预览-查看源码.md new file mode 100644 index 0000000..27588c8 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/05-other/02-上传附件.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/02-上传附件.md new file mode 100644 index 0000000..1f3cc88 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/05-other/03-markdown.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/03-markdown.md new file mode 100644 index 0000000..c723347 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/05-other/04-xss.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/04-xss.md new file mode 100644 index 0000000..286337f --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/05-other/05-react.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/05-react.md new file mode 100644 index 0000000..8dcc2d4 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/05-other/06-vue.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/06-vue.md new file mode 100644 index 0000000..47e167a --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/05-other/07-ng.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/07-ng.md new file mode 100644 index 0000000..1d59afc --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/05-other/08-api.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/05-other/08-api.md new file mode 100644 index 0000000..e8b4f6d --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/docs/usage/README.md b/novel-front/src/main/resources/static/wangEditor/docs/usage/README.md new file mode 100644 index 0000000..4c801e6 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/README.md b/novel-front/src/main/resources/static/wangEditor/example/README.md new file mode 100644 index 0000000..6e17ca0 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/README.md @@ -0,0 +1 @@ +wangEditor demo diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/package.json b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/package.json new file mode 100644 index 0000000..054d5cd --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-react/public/favicon.ico b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-react/public/manifest.json b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/public/manifest.json new file mode 100644 index 0000000..be607e4 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.css b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.css new file mode 100644 index 0000000..15adfdc --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.js new file mode 100644 index 0000000..95b21fb --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.test.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/App.test.js new file mode 100644 index 0000000..b84af98 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-react/src/index.css b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/index.css new file mode 100644 index 0000000..b4cc725 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-react/src/index.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/index.js new file mode 100644 index 0000000..53c7688 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-react/src/logo.svg b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/logo.svg new file mode 100644 index 0000000..6b60c10 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/registerServiceWorker.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-react/src/registerServiceWorker.js new file mode 100644 index 0000000..9966897 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/.babelrc b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.babelrc new file mode 100644 index 0000000..13f0e47 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/.editorconfig b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.editorconfig new file mode 100644 index 0000000..9d08a1a --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/.postcssrc.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/.postcssrc.js new file mode 100644 index 0000000..ea9a5ab --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/build.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/build.js new file mode 100644 index 0000000..6b8add1 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/check-versions.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/check-versions.js new file mode 100644 index 0000000..100f3a0 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-client.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-client.js new file mode 100644 index 0000000..18aa1e2 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-server.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/dev-server.js new file mode 100644 index 0000000..782dc6f --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/utils.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/utils.js new file mode 100644 index 0000000..b1d54b4 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/vue-loader.conf.js b/novel-front/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-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.base.conf.js b/novel-front/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-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.dev.conf.js b/novel-front/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-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/build/webpack.prod.conf.js b/novel-front/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-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/dev.env.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/dev.env.js new file mode 100644 index 0000000..efead7c --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/index.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/index.js new file mode 100644 index 0000000..196da1f --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/prod.env.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/config/prod.env.js new file mode 100644 index 0000000..773d263 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/index.html b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/index.html new file mode 100644 index 0000000..47ae14a --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/index.html @@ -0,0 +1,11 @@ + + + + + wangeditor-in-vue + + +
          + + + diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/package.json b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/package.json new file mode 100644 index 0000000..80cf68f --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/App.vue b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/App.vue new file mode 100644 index 0000000..27d15ff --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/App.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/assets/logo.png b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Hello.vue b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Hello.vue new file mode 100644 index 0000000..2d80539 --- /dev/null +++ b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/components/Hello.vue @@ -0,0 +1,53 @@ + + + + + + diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/main.js b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/src/main.js new file mode 100644 index 0000000..7b7fec7 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/in-vue/static/.gitkeep b/novel-front/src/main/resources/static/wangEditor/example/demo/in-vue/static/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/novel-front/src/main/resources/static/wangEditor/example/demo/test-amd-main.js b/novel-front/src/main/resources/static/wangEditor/example/demo/test-amd-main.js new file mode 100644 index 0000000..444b2da --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-amd.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-amd.html new file mode 100644 index 0000000..6a3d666 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-css-reset.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-css-reset.html new file mode 100644 index 0000000..c01a10d --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-emot.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-emot.html new file mode 100644 index 0000000..02d8f7f --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-fullscreen.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-fullscreen.html new file mode 100644 index 0000000..cbbaa01 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-get-content.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-get-content.html new file mode 100644 index 0000000..012c81c --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-getJSON.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-getJSON.html new file mode 100644 index 0000000..68cd155 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-lang.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-lang.html new file mode 100644 index 0000000..6c77826 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-menus.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-menus.html new file mode 100644 index 0000000..4afd45f --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-mult.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-mult.html new file mode 100644 index 0000000..bd6f7e1 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-onblur.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-onblur.html new file mode 100644 index 0000000..a6644bf --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-onchange.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-onchange.html new file mode 100644 index 0000000..231de10 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-onfocus.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-onfocus.html new file mode 100644 index 0000000..7d95de0 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-paste.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-paste.html new file mode 100644 index 0000000..a3a7477 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-set-content.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-set-content.html new file mode 100644 index 0000000..42eff3b --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-sperate.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-sperate.html new file mode 100644 index 0000000..0d0b857 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-textarea.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-textarea.html new file mode 100644 index 0000000..8e41119 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/demo/test-uploadimg.html b/novel-front/src/main/resources/static/wangEditor/example/demo/test-uploadimg.html new file mode 100644 index 0000000..97246ca --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/favicon.ico b/novel-front/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-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.eot b/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.eot new file mode 100644 index 0000000000000000000000000000000000000000..0d144fdfa4924f18e0bb237e911d7b4847e3f4fe GIT binary patch literal 5656 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 literal 0 HcmV?d00001 diff --git a/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.svg b/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.svg new file mode 100644 index 0000000..21be016 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.ttf b/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..80be9ad27182d62f562b8181714691ace353524a GIT binary patch literal 5492 zcma)AeQX@X6`$F;+r2yA*WTUUIX?S*ckA=nIPur{e1SOjh6JZ3j&Z&W0n*w@oWv-x z9mjzrMePc;Rn`2_lp+MGs#u~$s4bgA*71vgpu}pcC>W{LIDAoKcbHAJ2Ez{{WW}w5L%1z zrw7N5O`{JIBA^o2!NVsH{6v2K-xyZ|{pg|bvHiXeUYj8#^aSR+4*?;)$==8KJjM-& zj?A8zmKb=4E@S-Y;i-LN9iMbN2nip?SUWOyVw&7WUcvY`7$+ykj*LHjxBDxMv7Y{5 zdg|CLj^>qfB{0d0zRYG8gm(CI6y-gFg*cJFMy5mTIpY9I-h1=h?o=sis8AqxcI zQgpQU3VeT7R)G=`1#;){dpq}^*pFZ5y~pnyo}L~?Wd1>DLh1Izt|o0w_3-J} zA7Z+aEvQeL`kAhto{7`LE!ze*)QqYldk^3K(Cep%EA~mk_qiSmtQAcMAKahkT&RBg;k_g3Xw8O!Z7p1co-S*?kX0Z<>E0-u zIziTBm(mf`bgPih@~xD#DEX<>OH(UPU1;6DURBp`Z{eNbl1V8kxm2^Vnpg8-C8wzQ0-&6t z0F&boD%AzJQMnqLrs;+b!_loG5FI~bi5Ob(lTPjN9@LLbPNiwsn_RbdjHsjy7ErM_ zwR{VP1wWHlfUlRp)VJjGTW(gFt}hY(V_J#8e0e!wMPqJ@bAWs#f*1v9G76jZ9FVm{Zdn5s5`3FclU4Rif|i1j?F8U?muUy0NPOw9Ny=^i@yT zr8YFEhPu0>W4Fq|`vR*2fxvyu&5>MfZ7yOoHwOZ+i&t+k9cT%bnb1uxsp0-_-rr!P zGnupn-5U%BTEK9&Iie`wH`@$)$z}fVR`Y>CnG4qmvTNz?!z4@AkbnUbi;cBG?YWOidDsdzsxMeZnXSk#&Ve#N0-Yi%$2FJ z46+#zP($7ekvM69Y`xUF0=T~=T_d+qIA9A6tFjFWZ`LN8`uF5bgX;M`{Y{(9?~UKq z)6;z5?Af!cdwc1->78vHzo>Jn{#n}3-OU+S_|{b$ec)85)|I88Qi7EjVa<{)U-# zlP!3h)NM%T_co*&@Y|d38XWBE8q_GG7%WGpkcWwM)voN=9YB7LBZiVNLUjQ(Q_-_< zDx5>5EX7n*9;6JzidA+O3>HZ+85HzjQ42B-7WE*6Di;CIDvI|M)fWkWJMotUAs)zK z=k9AV#2`gIkcG8IAW=_%5fdayW-!XgV?k>;f%k zwIaV*i61NV7C)oR&{&D%iu{}k88uJGi;m`pZiz>p!;7~9Y3qJQ;Fct;K0d!Ft6DwiPw6kaUXt0M1bbsXU;JLUP1Wi43rF!V9E^ zv=ZXB@BR84k5SyUgg{nOlcgZ&G8Uyn=6^-W<*XCM3l~JO&gqgw>Jdd@0=$dw+D8z$ zmgx6EDb|W0n7<%O5@?;~XPn;rszQrSZrhZ{ANDWU!0%y;xDhqY4Ut!(gN~b5 zjGGDP!2Yx<*IBcwGq=j;lH4AjR}OkYR8q|EM4?7^DD3xpt0c)E&*y8ZJ36X;lH_(* zd4mCWhze9-upC!N_W3-VsD=}@cU1d9VvlrrY@ZkqQxdH;`XJ`o$bT%my1XAyb*vdaw#nA3Mx zivC^j`CKl)-{Yx*Buu0gq&{yzcDb-x^bWt`l_-_GuMB%ZB1+K`w-N~zMBhEdi<`Wn zAW*kU#w^d@Wa%7RV&{-=ZpW3|suQl>Gwse%sI;C&ZIpEZT*vtMZC(A?&zcg6nl}au zcYUL)D^HK4nu}k=8nbOw7##fe=I-uPDkwX`kzg<+yJN0ED6A-Tb%{hXI~T8MYRH*S z_rop*2HNSC`r?Z%_4U4{Q(FgX;;n6W+_8xT{8d#RPc##+k!4Sn!y&*nt@2LCC+=?r zdOjmn4r~1O*dM;j0lQy1=b+5Mko%Wiu+I8_4njOmzU1I9{_9J<&B;dcWqe#wjS86K zwTkhM3YgRJs#oAhCCoCU50$Vthy=XK?Em=iJRHGaoP*>E@(%Uj4L42S5=3EGIK>?7 z6no1dIJzA}j%OYJake|}bL!4tIX@Pk6)#I4xO%PA)RUL&Tz>V`l_&I*-GPQ1O85-bA0r38BrvwlSIza)nn7(ZrgSO9#m1T(@Mc}uWU=RLl^NWdnQ%9zzCdmZZN2bUT)G0DKGCp%`Vrnwk(b`T%$T*oH z$3TDy@aaJ8Y`^KMnoFc~8=H>K>Knw(7@9G@JY8Jiv7pWJ&g vIk0bPD`aaW{np;I*!>{bOj;6+ky-Tnf!j+?q8+dfu+=^QkMB6;EzAD^U9ut9 literal 0 HcmV?d00001 diff --git a/novel-front/src/main/resources/static/wangEditor/example/icomoon/fonts/icomoon.woff b/novel-front/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-front/src/main/resources/static/wangEditor/example/pay.png b/novel-front/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-front/src/main/resources/static/wangEditor/example/server/index.js b/novel-front/src/main/resources/static/wangEditor/example/server/index.js new file mode 100644 index 0000000..28d8a60 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/example/server/util.js b/novel-front/src/main/resources/static/wangEditor/example/server/util.js new file mode 100644 index 0000000..62477f2 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/gulpfile.js b/novel-front/src/main/resources/static/wangEditor/gulpfile.js new file mode 100644 index 0000000..171e7e5 --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/package.json b/novel-front/src/main/resources/static/wangEditor/package.json new file mode 100644 index 0000000..b42d94d --- /dev/null +++ b/novel-front/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-front/src/main/resources/static/wangEditor/release/fonts/w-e-icon.woff b/novel-front/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 代码添加到 + + + +
                +
                +
                + +
                + +
                + + + +
                +
                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                +
                + 我是网络小说写手,我要注册为小说精品屋签约作者:
                +
                邀请码: + * 小说精品屋分配给作者的邀请码 +
                + 作者笔名: + + + + + * 长度为2到8位的中英文 +
                + 手机号码: + + + + * 小说精品屋的编辑会通过这个号码与您联系 +
                + QQ或微信: + + + + * 小说精品屋的编辑会通过这个号码与您联系 +
                + 电子邮箱: + + + + * 长度为2到15位的中英文,数字 +
                + 男女主角: + + + + * 请选择作品方向 +
                +
                + + + + + + + +
                +
                + + +
                +
                + + +
                + +
                +
                + + + + diff --git a/novel-front/src/main/resources/templates/book/book_content.html b/novel-front/src/main/resources/templates/book/book_content.html index ec9505e..4d6168c 100644 --- a/novel-front/src/main/resources/templates/book/book_content.html +++ b/novel-front/src/main/resources/templates/book/book_content.html @@ -86,7 +86,42 @@ 作者:
              -
              +
              +
              +

              + +

              + + +
              +
              +

              此章为VIP章节,需要订阅后才能继续阅读

              +
              +
              + +
              + +
              + + + +
              +
                +
              • 价格:10屋币(1元=100屋币)
              • +
              • 购买
              • + +
              + + + +
              +
              +
              +
              diff --git a/novel-front/src/main/resources/templates/book/book_index.html b/novel-front/src/main/resources/templates/book/book_index.html index 84f029d..c6146a1 100644 --- a/novel-front/src/main/resources/templates/book/book_index.html +++ b/novel-front/src/main/resources/templates/book/book_index.html @@ -44,7 +44,11 @@

              diff --git a/novel-front/src/main/resources/templates/common/top.html b/novel-front/src/main/resources/templates/common/top.html index 0b78dc1..a2738b4 100644 --- a/novel-front/src/main/resources/templates/common/top.html +++ b/novel-front/src/main/resources/templates/common/top.html @@ -43,7 +43,7 @@
            • 全部作品
            • 排行榜
            • 充值
            • -
            • 作家专区
            • +
            • 作家专区