From db00cafd84f748789fb32fbee055b0ea9180d0e9 Mon Sep 17 00:00:00 2001 From: wangwenrui Date: Wed, 30 Jan 2019 18:17:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=BC=80=E5=88=86=E6=94=AF=E6=95=B4?= =?UTF-8?q?=E7=90=86=E4=BB=A3=E7=A0=81=EF=BC=9A=201.=E5=B8=AE=E5=8A=A9?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E4=BF=AE=E6=94=B9=E5=8A=9F=E8=83=BD=202.?= =?UTF-8?q?=E5=B8=AE=E5=8A=A9=E6=96=87=E6=A1=A3=E4=B8=8E=E4=B8=8A=E4=B8=80?= =?UTF-8?q?=E7=89=88=E5=AF=B9=E6=AF=94=E5=8A=9F=E8=83=BD=203.=E5=8D=95?= =?UTF-8?q?=E7=82=B9=E9=97=AE=E9=A2=98=E8=A7=A3=E5=86=B3=204.markdown?= =?UTF-8?q?=E5=B8=AE=E5=8A=A9=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Conflicts: src/main/resources/messages/message_en.properties src/main/resources/messages/message_ru.properties src/main/resources/messages/message_zh_CN.properties --- .../nis/domain/configuration/HelpInfo.java | 34 + .../com/nis/util/redis/RedisPoolHelper.java | 69 + .../nis/util/redis/SaveHelpInfoThread.java | 38 + .../nis/web/controller/SystemController.java | 102 +- .../web/dao/configuration/HelpInfoDao.java | 18 + .../nis/web/dao/configuration/HelpInfoDao.xml | 34 + .../configuration/HelpInfoService.java | 208 + .../resources/messages/message_en.properties | 5 +- .../resources/messages/message_ru.properties | 5 +- .../messages/message_zh_CN.properties | 5 +- src/main/webapp/WEB-INF/views/help.jsp | 128 +- .../webapp/online-help/Markdown Helper.docx | Bin 0 -> 593427 bytes .../online-help/app/DNS_feature_advance.md | 22 + .../online-help/app/HTTP_feature_advance.md | 33 + .../online-help/app/IP_feature_advance.md | 22 + src/main/webapp/online-help/app/app.md | 43 + .../webapp/online-help/app/basic_protocol.md | 41 + .../online-help/app/domain_feature_advance.md | 20 + .../app/payload_feature_advance.md | 34 + .../online-help/app/ssl_feature_advance.md | 33 + .../webapp/online-help/app/tunnel_behavior.md | 42 + src/main/webapp/online-help/editHelp.html | 114 + src/main/webapp/online-help/ntc/BGP.md | 44 + src/main/webapp/online-help/ntc/DNS.md | 45 + src/main/webapp/online-help/ntc/FTP.md | 46 + src/main/webapp/online-help/ntc/HTTP_URL.md | 34 + .../webapp/online-help/ntc/HTTP_advanced.md | 54 + .../webapp/online-help/ntc/HTTP_website.md | 36 + src/main/webapp/online-help/ntc/Mail.md | 45 + .../webapp/online-help/ntc/Mail_advanced.md | 46 + src/main/webapp/online-help/ntc/SSL.md | 47 + src/main/webapp/online-help/ntc/ip_address.md | 46 + .../webapp/online-help/ntc/ip_white_list.md | 34 + src/main/webapp/online-help/ntc/p2p.md | 54 + .../webapp/online-help/ntc/stream_media.md | 45 + src/main/webapp/online-help/ntc/voip.md | 46 + .../webapp/online-help/proxy/cache_policy.md | 32 + .../online-help/proxy/control_policy.md | 24 + .../proxy/domain_intercept_policy.md | 34 + .../online-help/proxy/https_block_log.md | 71 + .../online-help/proxy/https_block_policy.md | 49 + .../online-help/proxy/https_monitor_log.md | 71 + .../online-help/proxy/https_monitor_policy.md | 52 + .../online-help/proxy/https_redirect_log.md | 71 + .../proxy/https_redirect_policy.md | 49 + .../online-help/proxy/https_replace_log.md | 71 + .../online-help/proxy/https_replace_policy.md | 43 + .../proxy/https_whiteList_policy.md | 39 + .../online-help/proxy/intercept_policy.md | 19 + .../online-help/proxy/ip_intercept_policy.md | 45 + .../online-help/proxy/proxy_policy_object.md | 154 + .../webapp/online-help/ysp/audio_sample.md | 37 + .../webapp/online-help/ysp/file_digest.md | 35 + .../webapp/online-help/ysp/picture_sample.md | 33 + .../webapp/online-help/ysp/video_sample.md | 38 + .../webapp/online-help/ysp/video_scene.md | 34 + .../webapp/online-help/ysp/voip_sample.md | 35 + .../plugins/editor.md-master/.gitignore | 15 + .../global/plugins/editor.md-master/.jshintrc | 20 + .../global/plugins/editor.md-master/BUGS.md | 22 + .../global/plugins/editor.md-master/CHANGE.md | 534 + .../plugins/editor.md-master/Gulpfile.js | 342 + .../global/plugins/editor.md-master/LICENSE | 22 + .../global/plugins/editor.md-master/README.md | 119 + .../plugins/editor.md-master/bower.json | 24 + .../plugins/editor.md-master/css/editormd.css | 4450 +++++++++ .../editor.md-master/css/editormd.logo.css | 98 + .../css/editormd.logo.min.css | 2 + .../editor.md-master/css/editormd.min.css | 5 + .../editor.md-master/css/editormd.preview.css | 3554 +++++++ .../css/editormd.preview.min.css | 5 + .../editor.md-master/docs/editormd.js.html | 4407 +++++++++ .../docs/fonts/OpenSans-Bold-webfont.eot | Bin 0 -> 19544 bytes .../docs/fonts/OpenSans-Bold-webfont.svg | 1830 ++++ .../docs/fonts/OpenSans-Bold-webfont.woff | Bin 0 -> 22432 bytes .../fonts/OpenSans-BoldItalic-webfont.eot | Bin 0 -> 20133 bytes .../fonts/OpenSans-BoldItalic-webfont.svg | 1830 ++++ .../fonts/OpenSans-BoldItalic-webfont.woff | Bin 0 -> 23048 bytes .../docs/fonts/OpenSans-Italic-webfont.eot | Bin 0 -> 20265 bytes .../docs/fonts/OpenSans-Italic-webfont.svg | 1830 ++++ .../docs/fonts/OpenSans-Italic-webfont.woff | Bin 0 -> 23188 bytes .../docs/fonts/OpenSans-Light-webfont.eot | Bin 0 -> 19514 bytes .../docs/fonts/OpenSans-Light-webfont.svg | 1831 ++++ .../docs/fonts/OpenSans-Light-webfont.woff | Bin 0 -> 22248 bytes .../fonts/OpenSans-LightItalic-webfont.eot | Bin 0 -> 20535 bytes .../fonts/OpenSans-LightItalic-webfont.svg | 1835 ++++ .../fonts/OpenSans-LightItalic-webfont.woff | Bin 0 -> 23400 bytes .../docs/fonts/OpenSans-Regular-webfont.eot | Bin 0 -> 19836 bytes .../docs/fonts/OpenSans-Regular-webfont.svg | 1831 ++++ .../docs/fonts/OpenSans-Regular-webfont.woff | Bin 0 -> 22660 bytes .../plugins/editor.md-master/docs/index.html | 65 + .../docs/scripts/linenumber.js | 25 + .../scripts/prettify/Apache-License-2.0.txt | 202 + .../docs/scripts/prettify/lang-css.js | 2 + .../docs/scripts/prettify/prettify.js | 28 + .../docs/styles/jsdoc-default.css | 353 + .../docs/styles/prettify-jsdoc.css | 111 + .../docs/styles/prettify-tomorrow.css | 132 + .../plugins/editor.md-master/editormd.amd.js | 4667 +++++++++ .../editor.md-master/editormd.amd.min.js | 4 + .../plugins/editor.md-master/editormd.js | 4598 +++++++++ .../plugins/editor.md-master/editormd.min.js | 3 + .../editor.md-master/examples/@links.html | 135 + .../examples/auto-height.html | 53 + .../examples/change-mode.html | 508 + .../editor.md-master/examples/code-fold.html | 44 + .../examples/css/editormd.min.css | 5 + .../editor.md-master/examples/css/style.css | 94 + .../examples/custom-keyboard-shortcuts.html | 118 + .../examples/custom-toolbar.html | 178 + .../examples/define-plugin.html | 151 + .../examples/delay-renderer-preview.html | 56 + .../examples/dynamic-create-editormd.html | 47 + .../editor.md-master/examples/emoji.html | 191 + .../editor.md-master/examples/extends.html | 153 + .../examples/external-use.html | 119 + .../editor.md-master/examples/flowchart.html | 53 + .../examples/form-get-value.html | 92 + .../editor.md-master/examples/full.html | 231 + .../editor.md-master/examples/goto-line.html | 84 + ...markdown-to-html-custom-toc-container.html | 180 + .../html-preview-markdown-to-html.html | 142 + .../examples/html-tags-decode.html | 119 + .../examples/image-cross-domain-upload.html | 109 + .../examples/image-upload.html | 68 + .../editor.md-master/examples/images/4.jpg | Bin 0 -> 121969 bytes .../editor.md-master/examples/images/7.jpg | Bin 0 -> 95090 bytes .../editor.md-master/examples/images/8.jpg | Bin 0 -> 17555 bytes .../examples/images/editormd-screenshot.png | Bin 0 -> 81096 bytes .../editor.md-master/examples/index.html | 356 + .../examples/js/jquery.min.js | 4 + .../examples/js/require.min.js | 36 + .../editor.md-master/examples/js/sea.js | 2 + .../examples/js/seajs-main.js | 74 + .../editor.md-master/examples/js/zepto.min.js | 2 + .../editor.md-master/examples/katex.html | 192 + .../examples/manually-load-modules.html | 109 + .../examples/multi-editormd.html | 64 + .../examples/multi-languages.html | 89 + .../editor.md-master/examples/on-off.html | 103 + .../editor.md-master/examples/onchange.html | 49 + .../examples/onfullscreen.html | 55 + .../editor.md-master/examples/onload.html | 52 + .../examples/onpreviewing-onpreviewed.html | 55 + .../editor.md-master/examples/onresize.html | 49 + .../examples/onscroll-onpreviewscroll.html | 63 + .../examples/onwatch-onunwatch.html | 51 + .../editor.md-master/examples/page-break.html | 87 + .../examples/php/cross-domain-upload.php | 54 + .../examples/php/editormd.uploader.class.php | 341 + .../editor.md-master/examples/php/post.php | 18 + .../editor.md-master/examples/php/upload.php | 51 + .../examples/php/upload_callback.html | 35 + .../editor.md-master/examples/readonly.html | 60 + .../editor.md-master/examples/resettings.html | 144 + .../examples/search-replace.html | 46 + .../examples/sequence-diagram.html | 65 + .../examples/set-get-replace-selection.html | 110 + .../editor.md-master/examples/simple.html | 76 + .../examples/sync-scrolling.html | 70 + .../editor.md-master/examples/task-lists.html | 65 + .../plugins/editor.md-master/examples/test.md | 365 + .../editor.md-master/examples/themes.html | 207 + .../editor.md-master/examples/toc.html | 199 + .../examples/toolbar-auto-fixed.html | 122 + .../examples/use-requirejs.html | 174 + .../editor.md-master/examples/use-seajs.html | 176 + .../editor.md-master/examples/use-zepto.html | 126 + .../editor.md-master/fonts/FontAwesome.otf | Bin 0 -> 93888 bytes .../editor.md-master/fonts/editormd-logo.eot | Bin 0 -> 1320 bytes .../editor.md-master/fonts/editormd-logo.svg | 11 + .../editor.md-master/fonts/editormd-logo.ttf | Bin 0 -> 1156 bytes .../editor.md-master/fonts/editormd-logo.woff | Bin 0 -> 1232 bytes .../fonts/fontawesome-webfont.eot | Bin 0 -> 60767 bytes .../fonts/fontawesome-webfont.svg | 565 ++ .../fonts/fontawesome-webfont.ttf | Bin 0 -> 122092 bytes .../fonts/fontawesome-webfont.woff | Bin 0 -> 71508 bytes .../fonts/fontawesome-webfont.woff2 | Bin 0 -> 56780 bytes .../editor.md-master/images/loading.gif | Bin 0 -> 7726 bytes .../editor.md-master/images/loading@2x.gif | Bin 0 -> 16166 bytes .../editor.md-master/images/loading@3x.gif | Bin 0 -> 21727 bytes .../images/logos/editormd-favicon-16x16.ico | Bin 0 -> 1150 bytes .../images/logos/editormd-favicon-24x24.ico | Bin 0 -> 1150 bytes .../images/logos/editormd-favicon-32x32.ico | Bin 0 -> 5430 bytes .../images/logos/editormd-favicon-48x48.ico | Bin 0 -> 15086 bytes .../images/logos/editormd-favicon-64x64.ico | Bin 0 -> 32038 bytes .../images/logos/editormd-logo-114x114.png | Bin 0 -> 5869 bytes .../images/logos/editormd-logo-120x120.png | Bin 0 -> 6141 bytes .../images/logos/editormd-logo-144x144.png | Bin 0 -> 7545 bytes .../images/logos/editormd-logo-16x16.png | Bin 0 -> 1448 bytes .../images/logos/editormd-logo-180x180.png | Bin 0 -> 7963 bytes .../images/logos/editormd-logo-240x240.png | Bin 0 -> 10470 bytes .../images/logos/editormd-logo-24x24.png | Bin 0 -> 1790 bytes .../images/logos/editormd-logo-320x320.png | Bin 0 -> 14714 bytes .../images/logos/editormd-logo-32x32.png | Bin 0 -> 2064 bytes .../images/logos/editormd-logo-48x48.png | Bin 0 -> 2701 bytes .../images/logos/editormd-logo-57x57.png | Bin 0 -> 3054 bytes .../images/logos/editormd-logo-64x64.png | Bin 0 -> 3408 bytes .../images/logos/editormd-logo-72x72.png | Bin 0 -> 3691 bytes .../images/logos/editormd-logo-96x96.png | Bin 0 -> 4857 bytes .../editor.md-master/images/logos/vi.png | Bin 0 -> 46203 bytes .../plugins/editor.md-master/languages/en.js | 127 + .../editor.md-master/languages/zh-tw.js | 127 + .../editor.md-master/lib/codemirror/AUTHORS | 436 + .../editor.md-master/lib/codemirror/LICENSE | 19 + .../editor.md-master/lib/codemirror/README.md | 12 + .../lib/codemirror/addon/comment/comment.js | 183 + .../addon/comment/continuecomment.js | 85 + .../lib/codemirror/addon/dialog/dialog.css | 32 + .../lib/codemirror/addon/dialog/dialog.js | 155 + .../codemirror/addon/display/fullscreen.css | 6 + .../codemirror/addon/display/fullscreen.js | 41 + .../lib/codemirror/addon/display/panel.js | 94 + .../codemirror/addon/display/placeholder.js | 58 + .../lib/codemirror/addon/display/rulers.js | 64 + .../codemirror/addon/edit/closebrackets.js | 161 + .../lib/codemirror/addon/edit/closetag.js | 166 + .../lib/codemirror/addon/edit/continuelist.js | 51 + .../codemirror/addon/edit/matchbrackets.js | 120 + .../lib/codemirror/addon/edit/matchtags.js | 66 + .../codemirror/addon/edit/trailingspace.js | 27 + .../lib/codemirror/addon/fold/brace-fold.js | 105 + .../lib/codemirror/addon/fold/comment-fold.js | 57 + .../lib/codemirror/addon/fold/foldcode.js | 149 + .../lib/codemirror/addon/fold/foldgutter.css | 20 + .../lib/codemirror/addon/fold/foldgutter.js | 144 + .../lib/codemirror/addon/fold/indent-fold.js | 44 + .../codemirror/addon/fold/markdown-fold.js | 49 + .../lib/codemirror/addon/fold/xml-fold.js | 182 + .../lib/codemirror/addon/hint/anyword-hint.js | 41 + .../lib/codemirror/addon/hint/css-hint.js | 56 + .../lib/codemirror/addon/hint/html-hint.js | 348 + .../codemirror/addon/hint/javascript-hint.js | 146 + .../lib/codemirror/addon/hint/show-hint.css | 38 + .../lib/codemirror/addon/hint/show-hint.js | 394 + .../lib/codemirror/addon/hint/sql-hint.js | 240 + .../lib/codemirror/addon/hint/xml-hint.js | 110 + .../addon/lint/coffeescript-lint.js | 41 + .../lib/codemirror/addon/lint/css-lint.js | 35 + .../codemirror/addon/lint/javascript-lint.js | 136 + .../lib/codemirror/addon/lint/json-lint.js | 31 + .../lib/codemirror/addon/lint/lint.css | 73 + .../lib/codemirror/addon/lint/lint.js | 205 + .../lib/codemirror/addon/lint/yaml-lint.js | 28 + .../lib/codemirror/addon/merge/merge.css | 112 + .../lib/codemirror/addon/merge/merge.js | 735 ++ .../lib/codemirror/addon/mode/loadmode.js | 64 + .../lib/codemirror/addon/mode/multiplex.js | 118 + .../codemirror/addon/mode/multiplex_test.js | 33 + .../lib/codemirror/addon/mode/overlay.js | 85 + .../lib/codemirror/addon/mode/simple.js | 213 + .../lib/codemirror/addon/runmode/colorize.js | 40 + .../addon/runmode/runmode-standalone.js | 157 + .../lib/codemirror/addon/runmode/runmode.js | 72 + .../codemirror/addon/runmode/runmode.node.js | 120 + .../addon/scroll/annotatescrollbar.js | 100 + .../codemirror/addon/scroll/scrollpastend.js | 46 + .../addon/scroll/simplescrollbars.css | 66 + .../addon/scroll/simplescrollbars.js | 141 + .../addon/search/match-highlighter.js | 128 + .../addon/search/matchesonscrollbar.css | 8 + .../addon/search/matchesonscrollbar.js | 95 + .../lib/codemirror/addon/search/search.js | 164 + .../codemirror/addon/search/searchcursor.js | 189 + .../codemirror/addon/selection/active-line.js | 71 + .../addon/selection/mark-selection.js | 118 + .../addon/selection/selection-pointer.js | 98 + .../lib/codemirror/addon/tern/tern.css | 86 + .../lib/codemirror/addon/tern/tern.js | 697 ++ .../lib/codemirror/addon/tern/worker.js | 44 + .../lib/codemirror/addon/wrap/hardwrap.js | 139 + .../lib/codemirror/addons.min.js | 4 + .../lib/codemirror/bower.json | 16 + .../lib/codemirror/codemirror.min.css | 3 + .../lib/codemirror/codemirror.min.js | 54 + .../lib/codemirror/lib/codemirror.css | 331 + .../lib/codemirror/lib/codemirror.js | 8645 +++++++++++++++++ .../lib/codemirror/mode/apl/apl.js | 175 + .../lib/codemirror/mode/apl/index.html | 72 + .../lib/codemirror/mode/asterisk/asterisk.js | 198 + .../lib/codemirror/mode/asterisk/index.html | 154 + .../lib/codemirror/mode/clike/clike.js | 493 + .../lib/codemirror/mode/clike/index.html | 251 + .../lib/codemirror/mode/clike/scala.html | 767 ++ .../lib/codemirror/mode/clojure/clojure.js | 243 + .../lib/codemirror/mode/clojure/index.html | 88 + .../lib/codemirror/mode/cobol/cobol.js | 255 + .../lib/codemirror/mode/cobol/index.html | 210 + .../mode/coffeescript/coffeescript.js | 369 + .../codemirror/mode/coffeescript/index.html | 740 ++ .../codemirror/mode/commonlisp/commonlisp.js | 122 + .../lib/codemirror/mode/commonlisp/index.html | 177 + .../lib/codemirror/mode/css/css.js | 766 ++ .../lib/codemirror/mode/css/index.html | 75 + .../lib/codemirror/mode/css/less.html | 152 + .../lib/codemirror/mode/css/less_test.js | 51 + .../lib/codemirror/mode/css/scss.html | 157 + .../lib/codemirror/mode/css/scss_test.js | 110 + .../lib/codemirror/mode/css/test.js | 195 + .../lib/codemirror/mode/cypher/cypher.js | 146 + .../lib/codemirror/mode/cypher/index.html | 63 + .../lib/codemirror/mode/d/d.js | 218 + .../lib/codemirror/mode/d/index.html | 273 + .../lib/codemirror/mode/dart/dart.js | 50 + .../lib/codemirror/mode/dart/index.html | 71 + .../lib/codemirror/mode/diff/diff.js | 47 + .../lib/codemirror/mode/diff/index.html | 117 + .../lib/codemirror/mode/django/django.js | 67 + .../lib/codemirror/mode/django/index.html | 63 + .../codemirror/mode/dockerfile/dockerfile.js | 76 + .../lib/codemirror/mode/dockerfile/index.html | 73 + .../lib/codemirror/mode/dtd/dtd.js | 142 + .../lib/codemirror/mode/dtd/index.html | 89 + .../lib/codemirror/mode/dylan/dylan.js | 299 + .../lib/codemirror/mode/dylan/index.html | 407 + .../lib/codemirror/mode/ebnf/ebnf.js | 195 + .../lib/codemirror/mode/ebnf/index.html | 102 + .../lib/codemirror/mode/ecl/ecl.js | 207 + .../lib/codemirror/mode/ecl/index.html | 52 + .../lib/codemirror/mode/eiffel/eiffel.js | 162 + .../lib/codemirror/mode/eiffel/index.html | 429 + .../lib/codemirror/mode/erlang/erlang.js | 622 ++ .../lib/codemirror/mode/erlang/index.html | 76 + .../lib/codemirror/mode/forth/forth.js | 180 + .../lib/codemirror/mode/forth/index.html | 75 + .../lib/codemirror/mode/fortran/fortran.js | 188 + .../lib/codemirror/mode/fortran/index.html | 81 + .../lib/codemirror/mode/gas/gas.js | 345 + .../lib/codemirror/mode/gas/index.html | 68 + .../lib/codemirror/mode/gfm/gfm.js | 123 + .../lib/codemirror/mode/gfm/index.html | 93 + .../lib/codemirror/mode/gfm/test.js | 213 + .../lib/codemirror/mode/gherkin/gherkin.js | 178 + .../lib/codemirror/mode/gherkin/index.html | 48 + .../lib/codemirror/mode/go/go.js | 185 + .../lib/codemirror/mode/go/index.html | 85 + .../lib/codemirror/mode/groovy/groovy.js | 226 + .../lib/codemirror/mode/groovy/index.html | 84 + .../lib/codemirror/mode/haml/haml.js | 159 + .../lib/codemirror/mode/haml/index.html | 79 + .../lib/codemirror/mode/haml/test.js | 97 + .../lib/codemirror/mode/haskell/haskell.js | 267 + .../lib/codemirror/mode/haskell/index.html | 73 + .../lib/codemirror/mode/haxe/haxe.js | 518 + .../lib/codemirror/mode/haxe/index.html | 124 + .../mode/htmlembedded/htmlembedded.js | 86 + .../codemirror/mode/htmlembedded/index.html | 58 + .../codemirror/mode/htmlmixed/htmlmixed.js | 121 + .../lib/codemirror/mode/htmlmixed/index.html | 89 + .../lib/codemirror/mode/http/http.js | 113 + .../lib/codemirror/mode/http/index.html | 45 + .../lib/codemirror/mode/idl/idl.js | 290 + .../lib/codemirror/mode/idl/index.html | 64 + .../lib/codemirror/mode/index.html | 134 + .../lib/codemirror/mode/jade/index.html | 70 + .../lib/codemirror/mode/jade/jade.js | 590 ++ .../lib/codemirror/mode/javascript/index.html | 114 + .../codemirror/mode/javascript/javascript.js | 692 ++ .../codemirror/mode/javascript/json-ld.html | 72 + .../lib/codemirror/mode/javascript/test.js | 200 + .../mode/javascript/typescript.html | 61 + .../lib/codemirror/mode/jinja2/index.html | 54 + .../lib/codemirror/mode/jinja2/jinja2.js | 142 + .../lib/codemirror/mode/julia/index.html | 195 + .../lib/codemirror/mode/julia/julia.js | 301 + .../lib/codemirror/mode/kotlin/index.html | 89 + .../lib/codemirror/mode/kotlin/kotlin.js | 280 + .../lib/codemirror/mode/livescript/index.html | 459 + .../codemirror/mode/livescript/livescript.js | 280 + .../lib/codemirror/mode/lua/index.html | 85 + .../lib/codemirror/mode/lua/lua.js | 159 + .../lib/codemirror/mode/markdown/index.html | 359 + .../lib/codemirror/mode/markdown/markdown.js | 765 ++ .../lib/codemirror/mode/markdown/test.js | 754 ++ .../lib/codemirror/mode/meta.js | 177 + .../lib/codemirror/mode/mirc/index.html | 160 + .../lib/codemirror/mode/mirc/mirc.js | 193 + .../lib/codemirror/mode/mllike/index.html | 179 + .../lib/codemirror/mode/mllike/mllike.js | 205 + .../lib/codemirror/mode/modelica/index.html | 67 + .../lib/codemirror/mode/modelica/modelica.js | 245 + .../lib/codemirror/mode/nginx/index.html | 181 + .../lib/codemirror/mode/nginx/nginx.js | 178 + .../lib/codemirror/mode/ntriples/index.html | 45 + .../lib/codemirror/mode/ntriples/ntriples.js | 186 + .../lib/codemirror/mode/octave/index.html | 83 + .../lib/codemirror/mode/octave/octave.js | 135 + .../lib/codemirror/mode/pascal/index.html | 61 + .../lib/codemirror/mode/pascal/pascal.js | 109 + .../lib/codemirror/mode/pegjs/index.html | 66 + .../lib/codemirror/mode/pegjs/pegjs.js | 114 + .../lib/codemirror/mode/perl/index.html | 75 + .../lib/codemirror/mode/perl/perl.js | 837 ++ .../lib/codemirror/mode/php/index.html | 64 + .../lib/codemirror/mode/php/php.js | 226 + .../lib/codemirror/mode/php/test.js | 154 + .../lib/codemirror/mode/pig/index.html | 55 + .../lib/codemirror/mode/pig/pig.js | 188 + .../lib/codemirror/mode/properties/index.html | 53 + .../codemirror/mode/properties/properties.js | 78 + .../lib/codemirror/mode/puppet/index.html | 121 + .../lib/codemirror/mode/puppet/puppet.js | 220 + .../lib/codemirror/mode/python/index.html | 198 + .../lib/codemirror/mode/python/python.js | 359 + .../lib/codemirror/mode/q/index.html | 144 + .../lib/codemirror/mode/q/q.js | 139 + .../lib/codemirror/mode/r/index.html | 85 + .../lib/codemirror/mode/r/r.js | 162 + .../codemirror/mode/rpm/changes/index.html | 66 + .../lib/codemirror/mode/rpm/index.html | 149 + .../lib/codemirror/mode/rpm/rpm.js | 101 + .../lib/codemirror/mode/rst/index.html | 535 + .../lib/codemirror/mode/rst/rst.js | 557 ++ .../lib/codemirror/mode/ruby/index.html | 183 + .../lib/codemirror/mode/ruby/ruby.js | 285 + .../lib/codemirror/mode/ruby/test.js | 14 + .../lib/codemirror/mode/rust/index.html | 60 + .../lib/codemirror/mode/rust/rust.js | 451 + .../lib/codemirror/mode/sass/index.html | 66 + .../lib/codemirror/mode/sass/sass.js | 414 + .../lib/codemirror/mode/scheme/index.html | 77 + .../lib/codemirror/mode/scheme/scheme.js | 248 + .../lib/codemirror/mode/shell/index.html | 66 + .../lib/codemirror/mode/shell/shell.js | 139 + .../lib/codemirror/mode/shell/test.js | 58 + .../lib/codemirror/mode/sieve/index.html | 93 + .../lib/codemirror/mode/sieve/sieve.js | 193 + .../lib/codemirror/mode/slim/index.html | 96 + .../lib/codemirror/mode/slim/slim.js | 575 ++ .../lib/codemirror/mode/slim/test.js | 96 + .../lib/codemirror/mode/smalltalk/index.html | 68 + .../codemirror/mode/smalltalk/smalltalk.js | 168 + .../lib/codemirror/mode/smarty/index.html | 136 + .../lib/codemirror/mode/smarty/smarty.js | 221 + .../codemirror/mode/smartymixed/index.html | 114 + .../mode/smartymixed/smartymixed.js | 197 + .../lib/codemirror/mode/solr/index.html | 57 + .../lib/codemirror/mode/solr/solr.js | 104 + .../lib/codemirror/mode/soy/index.html | 68 + .../lib/codemirror/mode/soy/soy.js | 198 + .../lib/codemirror/mode/sparql/index.html | 61 + .../lib/codemirror/mode/sparql/sparql.js | 174 + .../codemirror/mode/spreadsheet/index.html | 42 + .../mode/spreadsheet/spreadsheet.js | 109 + .../lib/codemirror/mode/sql/index.html | 84 + .../lib/codemirror/mode/sql/sql.js | 391 + .../lib/codemirror/mode/stex/index.html | 110 + .../lib/codemirror/mode/stex/stex.js | 251 + .../lib/codemirror/mode/stex/test.js | 123 + .../lib/codemirror/mode/stylus/index.html | 104 + .../lib/codemirror/mode/stylus/stylus.js | 444 + .../lib/codemirror/mode/tcl/index.html | 142 + .../lib/codemirror/mode/tcl/tcl.js | 147 + .../lib/codemirror/mode/textile/index.html | 191 + .../lib/codemirror/mode/textile/test.js | 417 + .../lib/codemirror/mode/textile/textile.js | 469 + .../lib/codemirror/mode/tiddlywiki/index.html | 154 + .../codemirror/mode/tiddlywiki/tiddlywiki.css | 14 + .../codemirror/mode/tiddlywiki/tiddlywiki.js | 369 + .../lib/codemirror/mode/tiki/index.html | 95 + .../lib/codemirror/mode/tiki/tiki.css | 26 + .../lib/codemirror/mode/tiki/tiki.js | 323 + .../lib/codemirror/mode/toml/index.html | 73 + .../lib/codemirror/mode/toml/toml.js | 88 + .../lib/codemirror/mode/tornado/index.html | 63 + .../lib/codemirror/mode/tornado/tornado.js | 68 + .../lib/codemirror/mode/turtle/index.html | 50 + .../lib/codemirror/mode/turtle/turtle.js | 162 + .../lib/codemirror/mode/vb/index.html | 102 + .../lib/codemirror/mode/vb/vb.js | 274 + .../lib/codemirror/mode/vbscript/index.html | 55 + .../lib/codemirror/mode/vbscript/vbscript.js | 350 + .../lib/codemirror/mode/velocity/index.html | 118 + .../lib/codemirror/mode/velocity/velocity.js | 201 + .../lib/codemirror/mode/verilog/index.html | 120 + .../lib/codemirror/mode/verilog/test.js | 273 + .../lib/codemirror/mode/verilog/verilog.js | 537 + .../lib/codemirror/mode/xml/index.html | 57 + .../lib/codemirror/mode/xml/test.js | 51 + .../lib/codemirror/mode/xml/xml.js | 384 + .../lib/codemirror/mode/xquery/index.html | 210 + .../lib/codemirror/mode/xquery/test.js | 67 + .../lib/codemirror/mode/xquery/xquery.js | 447 + .../lib/codemirror/mode/yaml/index.html | 80 + .../lib/codemirror/mode/yaml/yaml.js | 117 + .../lib/codemirror/mode/z80/index.html | 52 + .../lib/codemirror/mode/z80/z80.js | 100 + .../lib/codemirror/modes.min.js | 10 + .../lib/codemirror/package.json | 21 + .../lib/codemirror/theme/3024-day.css | 40 + .../lib/codemirror/theme/3024-night.css | 39 + .../lib/codemirror/theme/ambiance-mobile.css | 5 + .../lib/codemirror/theme/ambiance.css | 75 + .../lib/codemirror/theme/base16-dark.css | 38 + .../lib/codemirror/theme/base16-light.css | 38 + .../lib/codemirror/theme/blackboard.css | 32 + .../lib/codemirror/theme/cobalt.css | 25 + .../lib/codemirror/theme/colorforth.css | 33 + .../lib/codemirror/theme/eclipse.css | 23 + .../lib/codemirror/theme/elegant.css | 13 + .../lib/codemirror/theme/erlang-dark.css | 34 + .../lib/codemirror/theme/lesser-dark.css | 47 + .../lib/codemirror/theme/mbo.css | 37 + .../lib/codemirror/theme/mdn-like.css | 46 + .../lib/codemirror/theme/midnight.css | 47 + .../lib/codemirror/theme/monokai.css | 33 + .../lib/codemirror/theme/neat.css | 12 + .../lib/codemirror/theme/neo.css | 43 + .../lib/codemirror/theme/night.css | 28 + .../lib/codemirror/theme/paraiso-dark.css | 38 + .../lib/codemirror/theme/paraiso-light.css | 38 + .../lib/codemirror/theme/pastel-on-dark.css | 53 + .../lib/codemirror/theme/rubyblue.css | 25 + .../lib/codemirror/theme/solarized.css | 165 + .../lib/codemirror/theme/the-matrix.css | 30 + .../theme/tomorrow-night-bright.css | 35 + .../theme/tomorrow-night-eighties.css | 38 + .../lib/codemirror/theme/twilight.css | 32 + .../lib/codemirror/theme/vibrant-ink.css | 34 + .../lib/codemirror/theme/xq-dark.css | 53 + .../lib/codemirror/theme/xq-light.css | 43 + .../lib/codemirror/theme/zenburn.css | 37 + .../editor.md-master/lib/flowchart.min.js | 5 + .../lib/jquery.flowchart.min.js | 2 + .../editor.md-master/lib/marked.min.js | 9 + .../editor.md-master/lib/prettify.min.js | 15 + .../editor.md-master/lib/raphael.min.js | 11 + .../lib/sequence-diagram.min.js | 7 + .../editor.md-master/lib/underscore.min.js | 5 + .../plugins/editor.md-master/package.json | 42 + .../code-block-dialog/code-block-dialog.js | 237 + .../plugins/emoji-dialog/emoji-dialog.js | 327 + .../plugins/emoji-dialog/emoji.json | 28 + .../goto-line-dialog/goto-line-dialog.js | 157 + .../plugins/help-dialog/help-dialog.js | 102 + .../plugins/help-dialog/help.md | 77 + .../html-entities-dialog.js | 173 + .../html-entities-dialog/html-entities.json | 936 ++ .../plugins/image-dialog/image-dialog.js | 221 + .../plugins/link-dialog/link-dialog.js | 133 + .../plugins/plugin-template.js | 111 + .../preformatted-text-dialog.js | 172 + .../reference-link-dialog.js | 153 + .../plugins/table-dialog/table-dialog.js | 218 + .../plugins/test-plugin/test-plugin.js | 66 + .../scss/editormd.codemirror.scss | 90 + .../scss/editormd.dialog.scss | 184 + .../editor.md-master/scss/editormd.form.scss | 130 + .../editor.md-master/scss/editormd.grid.scss | 36 + .../editor.md-master/scss/editormd.logo.scss | 89 + .../editor.md-master/scss/editormd.menu.scss | 113 + .../scss/editormd.preview.scss | 322 + .../scss/editormd.preview.themes.scss | 131 + .../editor.md-master/scss/editormd.scss | 137 + .../editor.md-master/scss/editormd.tab.scss | 49 + .../scss/editormd.themes.scss | 28 + .../editor.md-master/scss/font-awesome.scss | 1801 ++++ .../scss/github-markdown.scss | 665 ++ .../editor.md-master/scss/lib/prefixes.scss | 784 ++ .../editor.md-master/scss/lib/variables.scss | 11 + .../editor.md-master/scss/prettify.scss | 53 + .../plugins/editor.md-master/src/editormd.js | 4588 +++++++++ .../tests/bootstrap-test.html | 63 + .../tests/codemirror-searchbox-test.html | 109 + .../tests/codemirror-test.html | 75 + .../tests/css/bootstrap-theme.min.css | 5 + .../tests/css/bootstrap.min.css | 5 + .../tests/js/bootstrap.min.js | 7 + .../editor.md-master/tests/js/searchbox.js | 674 ++ .../editor.md-master/tests/katex-tests.html | 132 + .../tests/marked-@at-test.html | 221 + .../tests/marked-emoji-test.html | 231 + .../tests/marked-heading-link-test.html | 138 + .../tests/marked-todo-list-test.html | 61 + .../tests/qunit/qunit-1.16.0.css | 264 + .../tests/qunit/qunit-1.16.0.js | 2819 ++++++ .../plugins/showdown-master/CHANGELOG.md | 767 ++ .../plugins/showdown-master/CONTRIBUTING.md | 74 + .../global/plugins/showdown-master/CREDITS.md | 52 + .../plugins/showdown-master/DONATIONS.md | 57 + .../global/plugins/showdown-master/LICENSE | 21 + .../global/plugins/showdown-master/README.md | 521 + .../plugins/showdown-master/TASKS.TODO.md | 140 + .../plugins/showdown-master/bin/showdown.js | 2 + .../global/plugins/showdown-master/bower.json | 32 + .../plugins/showdown-master/dist/showdown.js | 5460 +++++++++++ .../showdown-master/dist/showdown.js.map | 1 + .../showdown-master/dist/showdown.min.js | 3 + .../showdown-master/dist/showdown.min.js.map | 1 + .../showdown-master/docs/event_system.md | 149 + .../plugins/showdown-master/docs/index.md | 9 + .../plugins/showdown-master/package-lock.json | 4317 ++++++++ .../plugins/showdown-master/package.json | 65 + .../plugins/showdown-master/src/cli/cli.js | 45 + .../showdown-master/src/cli/makehtml.cmd.js | 195 + .../showdown-master/src/cli/messenger.js | 40 + .../plugins/showdown-master/src/converter.js | 602 ++ .../plugins/showdown-master/src/helpers.js | 1687 ++++ .../plugins/showdown-master/src/loader.js | 17 + .../plugins/showdown-master/src/options.js | 187 + .../plugins/showdown-master/src/showdown.js | 379 + .../src/subParsers/makehtml/blockGamut.js | 32 + .../src/subParsers/makehtml/blockQuotes.js | 42 + .../src/subParsers/makehtml/codeBlocks.js | 38 + .../src/subParsers/makehtml/codeSpans.js | 48 + .../makehtml/completeHTMLDocument.js | 62 + .../src/subParsers/makehtml/detab.js | 33 + .../src/subParsers/makehtml/ellipsis.js | 11 + .../src/subParsers/makehtml/emoji.js | 27 + .../makehtml/encodeAmpsAndAngles.js | 23 + .../makehtml/encodeBackslashEscapes.js | 21 + .../src/subParsers/makehtml/encodeCode.js | 23 + .../escapeSpecialCharsWithinTagAttributes.js | 26 + .../subParsers/makehtml/githubCodeBlocks.js | 46 + .../src/subParsers/makehtml/hashBlock.js | 8 + .../src/subParsers/makehtml/hashCodeTags.js | 18 + .../src/subParsers/makehtml/hashElement.js | 19 + .../src/subParsers/makehtml/hashHTMLBlocks.js | 98 + .../src/subParsers/makehtml/hashHTMLSpans.js | 58 + .../subParsers/makehtml/hashPreCodeTags.js | 19 + .../src/subParsers/makehtml/headers.js | 126 + .../src/subParsers/makehtml/horizontalRule.js | 18 + .../src/subParsers/makehtml/images.js | 104 + .../src/subParsers/makehtml/italicsAndBold.js | 66 + .../src/subParsers/makehtml/links.js | 419 + .../src/subParsers/makehtml/lists.js | 216 + .../src/subParsers/makehtml/metadata.js | 49 + .../src/subParsers/makehtml/outdent.js | 17 + .../src/subParsers/makehtml/paragraphs.js | 70 + .../src/subParsers/makehtml/runExtension.js | 20 + .../src/subParsers/makehtml/spanGamut.js | 50 + .../src/subParsers/makehtml/strikethrough.js | 11 + .../makehtml/stripLinkDefinitions.js | 53 + .../src/subParsers/makehtml/tables.js | 143 + .../src/subParsers/makehtml/underline.js | 32 + .../makehtml/unescapeSpecialChars.js | 15 + .../src/subParsers/makemarkdown/blockquote.js | 22 + .../src/subParsers/makemarkdown/codeBlock.js | 7 + .../src/subParsers/makemarkdown/codeSpan.js | 5 + .../src/subParsers/makemarkdown/emphasis.js | 15 + .../src/subParsers/makemarkdown/header.js | 17 + .../src/subParsers/makemarkdown/hr.js | 5 + .../src/subParsers/makemarkdown/image.js | 18 + .../src/subParsers/makemarkdown/links.js | 20 + .../src/subParsers/makemarkdown/list.js | 31 + .../src/subParsers/makemarkdown/listItem.js | 25 + .../src/subParsers/makemarkdown/node.js | 120 + .../src/subParsers/makemarkdown/paragraph.js | 17 + .../src/subParsers/makemarkdown/pre.js | 6 + .../subParsers/makemarkdown/strikethrough.js | 15 + .../src/subParsers/makemarkdown/strong.js | 15 + .../src/subParsers/makemarkdown/table.js | 70 + .../src/subParsers/makemarkdown/tableCell.js | 15 + .../src/subParsers/makemarkdown/txt.js | 43 + 654 files changed, 138408 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/nis/domain/configuration/HelpInfo.java create mode 100644 src/main/java/com/nis/util/redis/RedisPoolHelper.java create mode 100644 src/main/java/com/nis/util/redis/SaveHelpInfoThread.java create mode 100644 src/main/java/com/nis/web/dao/configuration/HelpInfoDao.java create mode 100644 src/main/java/com/nis/web/dao/configuration/HelpInfoDao.xml create mode 100644 src/main/java/com/nis/web/service/configuration/HelpInfoService.java create mode 100644 src/main/webapp/online-help/Markdown Helper.docx create mode 100644 src/main/webapp/online-help/app/DNS_feature_advance.md create mode 100644 src/main/webapp/online-help/app/HTTP_feature_advance.md create mode 100644 src/main/webapp/online-help/app/IP_feature_advance.md create mode 100644 src/main/webapp/online-help/app/app.md create mode 100644 src/main/webapp/online-help/app/basic_protocol.md create mode 100644 src/main/webapp/online-help/app/domain_feature_advance.md create mode 100644 src/main/webapp/online-help/app/payload_feature_advance.md create mode 100644 src/main/webapp/online-help/app/ssl_feature_advance.md create mode 100644 src/main/webapp/online-help/app/tunnel_behavior.md create mode 100644 src/main/webapp/online-help/editHelp.html create mode 100644 src/main/webapp/online-help/ntc/BGP.md create mode 100644 src/main/webapp/online-help/ntc/DNS.md create mode 100644 src/main/webapp/online-help/ntc/FTP.md create mode 100644 src/main/webapp/online-help/ntc/HTTP_URL.md create mode 100644 src/main/webapp/online-help/ntc/HTTP_advanced.md create mode 100644 src/main/webapp/online-help/ntc/HTTP_website.md create mode 100644 src/main/webapp/online-help/ntc/Mail.md create mode 100644 src/main/webapp/online-help/ntc/Mail_advanced.md create mode 100644 src/main/webapp/online-help/ntc/SSL.md create mode 100644 src/main/webapp/online-help/ntc/ip_address.md create mode 100644 src/main/webapp/online-help/ntc/ip_white_list.md create mode 100644 src/main/webapp/online-help/ntc/p2p.md create mode 100644 src/main/webapp/online-help/ntc/stream_media.md create mode 100644 src/main/webapp/online-help/ntc/voip.md create mode 100644 src/main/webapp/online-help/proxy/cache_policy.md create mode 100644 src/main/webapp/online-help/proxy/control_policy.md create mode 100644 src/main/webapp/online-help/proxy/domain_intercept_policy.md create mode 100644 src/main/webapp/online-help/proxy/https_block_log.md create mode 100644 src/main/webapp/online-help/proxy/https_block_policy.md create mode 100644 src/main/webapp/online-help/proxy/https_monitor_log.md create mode 100644 src/main/webapp/online-help/proxy/https_monitor_policy.md create mode 100644 src/main/webapp/online-help/proxy/https_redirect_log.md create mode 100644 src/main/webapp/online-help/proxy/https_redirect_policy.md create mode 100644 src/main/webapp/online-help/proxy/https_replace_log.md create mode 100644 src/main/webapp/online-help/proxy/https_replace_policy.md create mode 100644 src/main/webapp/online-help/proxy/https_whiteList_policy.md create mode 100644 src/main/webapp/online-help/proxy/intercept_policy.md create mode 100644 src/main/webapp/online-help/proxy/ip_intercept_policy.md create mode 100644 src/main/webapp/online-help/proxy/proxy_policy_object.md create mode 100644 src/main/webapp/online-help/ysp/audio_sample.md create mode 100644 src/main/webapp/online-help/ysp/file_digest.md create mode 100644 src/main/webapp/online-help/ysp/picture_sample.md create mode 100644 src/main/webapp/online-help/ysp/video_sample.md create mode 100644 src/main/webapp/online-help/ysp/video_scene.md create mode 100644 src/main/webapp/online-help/ysp/voip_sample.md create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/.gitignore create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/.jshintrc create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/BUGS.md create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/CHANGE.md create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/Gulpfile.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/LICENSE create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/README.md create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/bower.json create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/css/editormd.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/css/editormd.logo.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/css/editormd.logo.min.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/css/editormd.min.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/css/editormd.preview.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/css/editormd.preview.min.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/editormd.js.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-Bold-webfont.eot create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-Bold-webfont.svg create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-Bold-webfont.woff create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-BoldItalic-webfont.eot create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-BoldItalic-webfont.svg create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-BoldItalic-webfont.woff create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-Italic-webfont.eot create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-Italic-webfont.svg create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-Italic-webfont.woff create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-Light-webfont.eot create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-Light-webfont.svg create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-Light-webfont.woff create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-LightItalic-webfont.eot create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-LightItalic-webfont.svg create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-LightItalic-webfont.woff create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-Regular-webfont.eot create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-Regular-webfont.svg create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/fonts/OpenSans-Regular-webfont.woff create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/scripts/linenumber.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/scripts/prettify/Apache-License-2.0.txt create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/scripts/prettify/lang-css.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/scripts/prettify/prettify.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/styles/jsdoc-default.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/styles/prettify-jsdoc.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/docs/styles/prettify-tomorrow.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/editormd.amd.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/editormd.amd.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/editormd.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/editormd.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/@links.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/auto-height.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/change-mode.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/code-fold.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/css/editormd.min.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/css/style.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/custom-keyboard-shortcuts.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/custom-toolbar.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/define-plugin.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/delay-renderer-preview.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/dynamic-create-editormd.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/emoji.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/extends.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/external-use.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/flowchart.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/form-get-value.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/full.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/goto-line.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/html-preview-markdown-to-html-custom-toc-container.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/html-preview-markdown-to-html.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/html-tags-decode.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/image-cross-domain-upload.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/image-upload.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/images/4.jpg create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/images/7.jpg create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/images/8.jpg create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/images/editormd-screenshot.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/js/jquery.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/js/require.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/js/sea.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/js/seajs-main.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/js/zepto.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/katex.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/manually-load-modules.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/multi-editormd.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/multi-languages.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/on-off.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/onchange.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/onfullscreen.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/onload.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/onpreviewing-onpreviewed.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/onresize.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/onscroll-onpreviewscroll.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/onwatch-onunwatch.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/page-break.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/php/cross-domain-upload.php create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/php/editormd.uploader.class.php create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/php/post.php create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/php/upload.php create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/php/upload_callback.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/readonly.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/resettings.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/search-replace.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/sequence-diagram.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/set-get-replace-selection.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/simple.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/sync-scrolling.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/task-lists.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/test.md create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/themes.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/toc.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/toolbar-auto-fixed.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/use-requirejs.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/use-seajs.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/examples/use-zepto.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/fonts/FontAwesome.otf create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/fonts/editormd-logo.eot create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/fonts/editormd-logo.svg create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/fonts/editormd-logo.ttf create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/fonts/editormd-logo.woff create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/fonts/fontawesome-webfont.eot create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/fonts/fontawesome-webfont.svg create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/fonts/fontawesome-webfont.ttf create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/fonts/fontawesome-webfont.woff create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/fonts/fontawesome-webfont.woff2 create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/loading.gif create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/loading@2x.gif create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/loading@3x.gif create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-favicon-16x16.ico create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-favicon-24x24.ico create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-favicon-32x32.ico create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-favicon-48x48.ico create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-favicon-64x64.ico create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-logo-114x114.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-logo-120x120.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-logo-144x144.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-logo-16x16.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-logo-180x180.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-logo-240x240.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-logo-24x24.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-logo-320x320.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-logo-32x32.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-logo-48x48.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-logo-57x57.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-logo-64x64.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-logo-72x72.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/editormd-logo-96x96.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/images/logos/vi.png create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/languages/en.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/languages/zh-tw.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/AUTHORS create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/LICENSE create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/README.md create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/comment/comment.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/comment/continuecomment.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/dialog/dialog.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/dialog/dialog.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/display/fullscreen.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/display/fullscreen.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/display/panel.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/display/placeholder.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/display/rulers.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/edit/closebrackets.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/edit/closetag.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/edit/continuelist.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/edit/matchbrackets.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/edit/matchtags.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/edit/trailingspace.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/fold/brace-fold.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/fold/comment-fold.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/fold/foldcode.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/fold/foldgutter.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/fold/foldgutter.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/fold/indent-fold.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/fold/markdown-fold.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/fold/xml-fold.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/hint/anyword-hint.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/hint/css-hint.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/hint/html-hint.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/hint/javascript-hint.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/hint/show-hint.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/hint/show-hint.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/hint/sql-hint.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/hint/xml-hint.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/lint/coffeescript-lint.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/lint/css-lint.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/lint/javascript-lint.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/lint/json-lint.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/lint/lint.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/lint/lint.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/lint/yaml-lint.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/merge/merge.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/merge/merge.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/mode/loadmode.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/mode/multiplex.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/mode/multiplex_test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/mode/overlay.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/mode/simple.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/runmode/colorize.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/runmode/runmode-standalone.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/runmode/runmode.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/runmode/runmode.node.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/scroll/annotatescrollbar.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/scroll/scrollpastend.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/scroll/simplescrollbars.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/scroll/simplescrollbars.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/search/match-highlighter.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/search/matchesonscrollbar.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/search/matchesonscrollbar.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/search/search.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/search/searchcursor.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/selection/active-line.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/selection/mark-selection.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/selection/selection-pointer.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/tern/tern.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/tern/tern.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/tern/worker.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addon/wrap/hardwrap.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/addons.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/bower.json create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/codemirror.min.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/codemirror.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/lib/codemirror.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/lib/codemirror.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/apl/apl.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/apl/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/asterisk/asterisk.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/asterisk/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/clike/clike.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/clike/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/clike/scala.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/clojure/clojure.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/clojure/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/cobol/cobol.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/cobol/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/coffeescript/coffeescript.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/coffeescript/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/commonlisp/commonlisp.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/commonlisp/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/css/css.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/css/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/css/less.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/css/less_test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/css/scss.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/css/scss_test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/css/test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/cypher/cypher.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/cypher/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/d/d.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/d/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/dart/dart.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/dart/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/diff/diff.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/diff/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/django/django.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/django/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/dockerfile/dockerfile.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/dockerfile/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/dtd/dtd.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/dtd/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/dylan/dylan.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/dylan/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/ebnf/ebnf.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/ebnf/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/ecl/ecl.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/ecl/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/eiffel/eiffel.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/eiffel/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/erlang/erlang.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/erlang/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/forth/forth.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/forth/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/fortran/fortran.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/fortran/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/gas/gas.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/gas/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/gfm/gfm.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/gfm/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/gfm/test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/gherkin/gherkin.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/gherkin/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/go/go.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/go/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/groovy/groovy.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/groovy/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/haml/haml.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/haml/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/haml/test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/haskell/haskell.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/haskell/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/haxe/haxe.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/haxe/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/htmlembedded/htmlembedded.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/htmlembedded/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/htmlmixed/htmlmixed.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/htmlmixed/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/http/http.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/http/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/idl/idl.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/idl/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/jade/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/jade/jade.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/javascript/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/javascript/javascript.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/javascript/json-ld.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/javascript/test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/javascript/typescript.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/jinja2/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/jinja2/jinja2.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/julia/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/julia/julia.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/kotlin/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/kotlin/kotlin.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/livescript/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/livescript/livescript.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/lua/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/lua/lua.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/markdown/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/markdown/markdown.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/markdown/test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/meta.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/mirc/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/mirc/mirc.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/mllike/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/mllike/mllike.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/modelica/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/modelica/modelica.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/nginx/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/nginx/nginx.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/ntriples/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/ntriples/ntriples.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/octave/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/octave/octave.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/pascal/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/pascal/pascal.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/pegjs/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/pegjs/pegjs.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/perl/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/perl/perl.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/php/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/php/php.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/php/test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/pig/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/pig/pig.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/properties/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/properties/properties.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/puppet/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/puppet/puppet.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/python/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/python/python.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/q/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/q/q.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/r/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/r/r.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/rpm/changes/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/rpm/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/rpm/rpm.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/rst/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/rst/rst.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/ruby/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/ruby/ruby.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/ruby/test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/rust/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/rust/rust.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/sass/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/sass/sass.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/scheme/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/scheme/scheme.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/shell/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/shell/shell.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/shell/test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/sieve/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/sieve/sieve.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/slim/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/slim/slim.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/slim/test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/smalltalk/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/smalltalk/smalltalk.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/smarty/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/smarty/smarty.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/smartymixed/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/smartymixed/smartymixed.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/solr/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/solr/solr.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/soy/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/soy/soy.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/sparql/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/sparql/sparql.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/spreadsheet/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/spreadsheet/spreadsheet.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/sql/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/sql/sql.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/stex/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/stex/stex.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/stex/test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/stylus/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/stylus/stylus.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/tcl/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/tcl/tcl.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/textile/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/textile/test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/textile/textile.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/tiddlywiki/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/tiddlywiki/tiddlywiki.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/tiddlywiki/tiddlywiki.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/tiki/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/tiki/tiki.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/tiki/tiki.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/toml/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/toml/toml.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/tornado/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/tornado/tornado.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/turtle/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/turtle/turtle.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/vb/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/vb/vb.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/vbscript/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/vbscript/vbscript.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/velocity/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/velocity/velocity.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/verilog/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/verilog/test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/verilog/verilog.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/xml/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/xml/test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/xml/xml.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/xquery/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/xquery/test.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/xquery/xquery.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/yaml/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/yaml/yaml.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/z80/index.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/mode/z80/z80.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/modes.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/package.json create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/3024-day.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/3024-night.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/ambiance-mobile.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/ambiance.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/base16-dark.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/base16-light.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/blackboard.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/cobalt.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/colorforth.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/eclipse.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/elegant.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/erlang-dark.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/lesser-dark.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/mbo.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/mdn-like.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/midnight.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/monokai.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/neat.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/neo.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/night.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/paraiso-dark.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/paraiso-light.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/pastel-on-dark.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/rubyblue.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/solarized.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/the-matrix.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/tomorrow-night-bright.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/tomorrow-night-eighties.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/twilight.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/vibrant-ink.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/xq-dark.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/xq-light.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/codemirror/theme/zenburn.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/flowchart.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/jquery.flowchart.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/marked.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/prettify.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/raphael.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/sequence-diagram.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/lib/underscore.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/package.json create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/code-block-dialog/code-block-dialog.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/emoji-dialog/emoji-dialog.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/emoji-dialog/emoji.json create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/goto-line-dialog/goto-line-dialog.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/help-dialog/help-dialog.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/help-dialog/help.md create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/html-entities-dialog/html-entities-dialog.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/html-entities-dialog/html-entities.json create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/image-dialog/image-dialog.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/link-dialog/link-dialog.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/plugin-template.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/preformatted-text-dialog/preformatted-text-dialog.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/reference-link-dialog/reference-link-dialog.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/table-dialog/table-dialog.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/plugins/test-plugin/test-plugin.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/editormd.codemirror.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/editormd.dialog.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/editormd.form.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/editormd.grid.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/editormd.logo.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/editormd.menu.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/editormd.preview.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/editormd.preview.themes.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/editormd.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/editormd.tab.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/editormd.themes.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/font-awesome.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/github-markdown.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/lib/prefixes.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/lib/variables.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/scss/prettify.scss create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/src/editormd.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/tests/bootstrap-test.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/tests/codemirror-searchbox-test.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/tests/codemirror-test.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/tests/css/bootstrap-theme.min.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/tests/css/bootstrap.min.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/tests/js/bootstrap.min.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/tests/js/searchbox.js create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/tests/katex-tests.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/tests/marked-@at-test.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/tests/marked-emoji-test.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/tests/marked-heading-link-test.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/tests/marked-todo-list-test.html create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/tests/qunit/qunit-1.16.0.css create mode 100644 src/main/webapp/static/global/plugins/editor.md-master/tests/qunit/qunit-1.16.0.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/CHANGELOG.md create mode 100644 src/main/webapp/static/global/plugins/showdown-master/CONTRIBUTING.md create mode 100644 src/main/webapp/static/global/plugins/showdown-master/CREDITS.md create mode 100644 src/main/webapp/static/global/plugins/showdown-master/DONATIONS.md create mode 100644 src/main/webapp/static/global/plugins/showdown-master/LICENSE create mode 100644 src/main/webapp/static/global/plugins/showdown-master/README.md create mode 100644 src/main/webapp/static/global/plugins/showdown-master/TASKS.TODO.md create mode 100644 src/main/webapp/static/global/plugins/showdown-master/bin/showdown.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/bower.json create mode 100644 src/main/webapp/static/global/plugins/showdown-master/dist/showdown.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/dist/showdown.js.map create mode 100644 src/main/webapp/static/global/plugins/showdown-master/dist/showdown.min.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/dist/showdown.min.js.map create mode 100644 src/main/webapp/static/global/plugins/showdown-master/docs/event_system.md create mode 100644 src/main/webapp/static/global/plugins/showdown-master/docs/index.md create mode 100644 src/main/webapp/static/global/plugins/showdown-master/package-lock.json create mode 100644 src/main/webapp/static/global/plugins/showdown-master/package.json create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/cli/cli.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/cli/makehtml.cmd.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/cli/messenger.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/converter.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/helpers.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/loader.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/options.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/showdown.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/blockGamut.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/blockQuotes.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/codeBlocks.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/codeSpans.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/completeHTMLDocument.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/detab.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/ellipsis.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/emoji.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/encodeAmpsAndAngles.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/encodeBackslashEscapes.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/encodeCode.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/escapeSpecialCharsWithinTagAttributes.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/githubCodeBlocks.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/hashBlock.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/hashCodeTags.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/hashElement.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/hashHTMLBlocks.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/hashHTMLSpans.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/hashPreCodeTags.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/headers.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/horizontalRule.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/images.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/italicsAndBold.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/links.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/lists.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/metadata.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/outdent.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/paragraphs.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/runExtension.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/spanGamut.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/strikethrough.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/stripLinkDefinitions.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/tables.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/underline.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makehtml/unescapeSpecialChars.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/blockquote.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/codeBlock.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/codeSpan.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/emphasis.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/header.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/hr.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/image.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/links.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/list.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/listItem.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/node.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/paragraph.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/pre.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/strikethrough.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/strong.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/table.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/tableCell.js create mode 100644 src/main/webapp/static/global/plugins/showdown-master/src/subParsers/makemarkdown/txt.js diff --git a/src/main/java/com/nis/domain/configuration/HelpInfo.java b/src/main/java/com/nis/domain/configuration/HelpInfo.java new file mode 100644 index 000000000..7a57a82a6 --- /dev/null +++ b/src/main/java/com/nis/domain/configuration/HelpInfo.java @@ -0,0 +1,34 @@ +package com.nis.domain.configuration; + +import java.util.Date; + +import com.nis.domain.BaseEntity; +import com.nis.util.excel.ExcelField; + +public class HelpInfo extends BaseEntity{ + + private static final long serialVersionUID = 2451757008384840494L; + private String fileName; + private String fileComment; + private String backFileComment; + public String getFileName() { + return fileName; + } + public void setFileName(String fileName) { + this.fileName = fileName; + } + public String getFileComment() { + return fileComment; + } + public void setFileComment(String fileComment) { + this.fileComment = fileComment; + } + public String getBackFileComment() { + return backFileComment; + } + public void setBackFileComment(String backFileComment) { + this.backFileComment = backFileComment; + } + + +} diff --git a/src/main/java/com/nis/util/redis/RedisPoolHelper.java b/src/main/java/com/nis/util/redis/RedisPoolHelper.java new file mode 100644 index 000000000..79c375f3e --- /dev/null +++ b/src/main/java/com/nis/util/redis/RedisPoolHelper.java @@ -0,0 +1,69 @@ +package com.nis.util.redis; + +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import org.apache.log4j.Logger; + +import com.nis.util.Configurations; + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; + +public class RedisPoolHelper { + private Logger logger=Logger.getLogger(RedisPoolHelper.class); + private JedisPool jedisPool; + private String host; + private int timeout; + public RedisPoolHelper(){ + init(); + } + private void init() { + synchronized (this) { + if (jedisPool == null) { + host=Configurations.getStringProperty("redis.host", "127.0.0.1:6379"); + timeout=Configurations.getIntProperty("redis.timeout", 10000); + String[] hostAndPort = host.split(":"); + jedisPool = new JedisPool(getPoolConfig(), hostAndPort[0], Integer.parseInt(hostAndPort[1]), timeout); + logger.info("redis pool init complate! host-->"+hostAndPort[0]+" port:"+Integer.parseInt(hostAndPort[1])); + } + } + + } + public Jedis getJedis() { + if (jedisPool == null) { + init(); + } + return jedisPool.getResource(); + } + public JedisPool getJedisPool() { + return jedisPool; + } + + public void setJedisPool(JedisPool jedisPool) { + this.jedisPool = jedisPool; + } + + /** + * + * getPoolConfig(初始化连接池的配置,这里可以设置很多参数的,不过目前没加) + * (这里描述这个方法适用条件 – 可选) + * @return + *GenericObjectPoolConfig + * @exception + * @since 1.0.0 + */ + private GenericObjectPoolConfig getPoolConfig(){ + GenericObjectPoolConfig config=new GenericObjectPoolConfig(); + config.setMaxTotal(Configurations.getIntProperty("redis.pool.maxtotal", 500));//整个池的最大值 + config.setMaxIdle(Configurations.getIntProperty("redis.pool.maxidle", 100));//最大空闲 + config.setMaxWaitMillis(Configurations.getIntProperty("redis.pool.maxwaitmillis", -1));//获取不到永远等待 + config.setBlockWhenExhausted(Configurations.getBooleanProperty("redis.pool.blockwhenexhausted", true)); + config.setNumTestsPerEvictionRun(Configurations.getIntProperty("redis.pool.numtestsperevictionrun", Integer.MAX_VALUE));//always test all idle object + config.setTestOnBorrow(Configurations.getBooleanProperty("redis.pool.testonborrow", true)); + config.setTestOnReturn(Configurations.getBooleanProperty("redis.pool.testonreturn", false)); + config.setTestWhileIdle(Configurations.getBooleanProperty("redis.pool.testwhileidle", true));//发呆过长时间是否先test一下 + config.setTimeBetweenEvictionRunsMillis(Configurations.getLongProperty("redis.pool.timebetweenevictionrunsmillis", 60000L));//-1不启动,默认1min一次 + config.setMinEvictableIdleTimeMillis(Configurations.getLongProperty("redis.pool.minevictableidletimemillis", 60000L));//可发呆的时间,10mins + return config; + } + +} diff --git a/src/main/java/com/nis/util/redis/SaveHelpInfoThread.java b/src/main/java/com/nis/util/redis/SaveHelpInfoThread.java new file mode 100644 index 000000000..69949c311 --- /dev/null +++ b/src/main/java/com/nis/util/redis/SaveHelpInfoThread.java @@ -0,0 +1,38 @@ +package com.nis.util.redis; + + +import org.apache.log4j.Logger; + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; + +public class SaveHelpInfoThread extends Thread { + private Logger logger=Logger.getLogger(SaveHelpInfoThread.class); + private JedisPool jedisPool; + private Jedis jedis; + private String key; + private String value; + private int expire; + public SaveHelpInfoThread(JedisPool jedisPool,String key,String value,int expire){ + this.jedisPool=jedisPool; + this.key=key; + this.value=value; + this.expire=expire; + jedis=jedisPool.getResource(); + + } + @Override + public void run() { + try { + jedis.set(key, value); + if(expire!=-1){ + jedis.expire(key, expire); + } + logger.debug("cache help[key --> "+key+"]"); + } catch (Exception e) { + logger.error("save redis error",e); + }finally{ + jedis.close(); + } + } +} diff --git a/src/main/java/com/nis/web/controller/SystemController.java b/src/main/java/com/nis/web/controller/SystemController.java index f817edf6e..2342a9ebe 100644 --- a/src/main/java/com/nis/web/controller/SystemController.java +++ b/src/main/java/com/nis/web/controller/SystemController.java @@ -1,23 +1,31 @@ package com.nis.web.controller; +import java.net.URLDecoder; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; import com.nis.domain.SysMenu; +import com.nis.domain.configuration.HelpInfo; import com.nis.util.StringUtil; +import com.nis.util.StringUtils; import com.nis.web.security.UserUtils; +import com.nis.web.service.configuration.HelpInfoService; @Controller @RequestMapping("${adminPath}/sys/") public class SystemController extends BaseController{ - + @Autowired + private HelpInfoService helpService; @RequestMapping("index") public String index(HttpServletRequest request, HttpServletResponse response,ModelMap model){ return "/sys/sysIndex"; @@ -91,6 +99,9 @@ public class SystemController extends BaseController{ System.out.println(menu.getParentIds()); newList.add(menu); }*/ + //将帮助文档缓存到redis + helpService.cacheAllHelpInfo(); + } } catch (Exception e) { @@ -100,6 +111,91 @@ public class SystemController extends BaseController{ model.addAttribute("menuList",newList); return "/help"; } - - + /** + * @param request + * @param response + * @param model + * @param editedHelpInfo 修改之后的帮助文档内容 + * @param helpHrefVal 文档的路径 + * @return + */ + @RequestMapping("saveHelp") + @ResponseBody + public boolean saveHelp(HttpServletRequest request, HttpServletResponse response,ModelMap model,@RequestParam(required=true,value="editedHelpInfo")String editedHelpInfo,@RequestParam(required=true,value="helpHrefVal")String helpHrefVal){ + if(StringUtils.strIsBlank(helpHrefVal)){ + return false; + } + try { + StringBuffer helpInfoText=new StringBuffer(); //修改之后的内容 + helpInfoText.append(URLDecoder.decode(editedHelpInfo,"utf-8")); + String helpHref=URLDecoder.decode(helpHrefVal,"utf-8"); + String[] split = StringUtils.split(helpHref, "/"); + if(split!=null&&split.length>0){ + HelpInfo helpInfo = new HelpInfo(); + helpInfo.setFileComment(helpInfoText.toString()); + helpInfo.setFileName(split[split.length-1]); + helpService.saveHelpInfo(helpInfo); + return true; + } + } catch (Exception e) { + logger.error("save helpInfo error",e); + } + return false; + } + /** + * 查看帮助文档内容 + * @param request + * @param response + * @param model + * @param helpHref + * @return + */ + @RequestMapping("viewHelp") + @ResponseBody + public HelpInfo viewHelp(HttpServletRequest request, HttpServletResponse response,ModelMap model,@RequestParam(required=true,value="helpHref")String helpHref){ + + if(StringUtils.strIsBlank(helpHref)){ + return null; + } + try { + helpHref=URLDecoder.decode(helpHref,"utf-8"); + + String[] split = StringUtils.split(helpHref, "/"); + if(split!=null&&split.length>0){ + HelpInfo helpInfo = helpService.findHelpCommentByName(split[split.length-1]); + return helpInfo; + } + } catch (Exception e) { + logger.error("view helpInfo error",e); + } + return null; + } + /** + * 查看帮助文档备份内容 + * @param request + * @param response + * @param model + * @param helpHref + * @return + */ + @RequestMapping("viewBakHelp") + @ResponseBody + public HelpInfo viewBakHelp(HttpServletRequest request, HttpServletResponse response,ModelMap model,@RequestParam(required=true,value="helpHref")String helpHref){ + + if(StringUtils.strIsBlank(helpHref)){ + return null; + } + try { + helpHref=URLDecoder.decode(helpHref,"utf-8"); + + String[] split = StringUtils.split(helpHref, "/"); + if(split!=null&&split.length>0){ + HelpInfo helpInfo = helpService.findHelpBakCommentByName(split[split.length-1]); + return helpInfo; + } + } catch (Exception e) { + logger.error("view helpBakInfo error",e); + } + return null; + } } diff --git a/src/main/java/com/nis/web/dao/configuration/HelpInfoDao.java b/src/main/java/com/nis/web/dao/configuration/HelpInfoDao.java new file mode 100644 index 000000000..e337e61cd --- /dev/null +++ b/src/main/java/com/nis/web/dao/configuration/HelpInfoDao.java @@ -0,0 +1,18 @@ +package com.nis.web.dao.configuration; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import com.nis.domain.configuration.HelpInfo; +import com.nis.domain.configuration.UserManage; +import com.nis.web.dao.CrudDao; +import com.nis.web.dao.MyBatisDao; + +@MyBatisDao +public interface HelpInfoDao extends CrudDao{ + public List findComment(@Param("fileName")String fileName); + public List findBakComment(@Param("fileName")String fileName); + public List findAllComment(); + public void saveHelpInfo(HelpInfo helpInfo); +} diff --git a/src/main/java/com/nis/web/dao/configuration/HelpInfoDao.xml b/src/main/java/com/nis/web/dao/configuration/HelpInfoDao.xml new file mode 100644 index 000000000..413ad1236 --- /dev/null +++ b/src/main/java/com/nis/web/dao/configuration/HelpInfoDao.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + update help_document set back_file_comment=file_comment,file_comment=#{fileComment} where file_name=#{fileName}; + + \ No newline at end of file diff --git a/src/main/java/com/nis/web/service/configuration/HelpInfoService.java b/src/main/java/com/nis/web/service/configuration/HelpInfoService.java new file mode 100644 index 000000000..719c0a623 --- /dev/null +++ b/src/main/java/com/nis/web/service/configuration/HelpInfoService.java @@ -0,0 +1,208 @@ +package com.nis.web.service.configuration; + +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import javax.annotation.Resource; + +import org.apache.log4j.Logger; +import org.crazycake.shiro.RedisManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.nis.domain.configuration.HelpInfo; +import com.nis.util.StringUtils; +import com.nis.util.redis.RedisPoolHelper; +import com.nis.util.redis.SaveHelpInfoThread; +import com.nis.web.dao.configuration.HelpInfoDao; +import com.nis.web.service.SpringContextHolder; + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.JedisPoolConfig; + +@Service +public class HelpInfoService{ + @Autowired + private HelpInfoDao dao; + private JedisPool jedisPool; + private Logger logger=Logger.getLogger(HelpInfoService.class); + private ExecutorService pool = Executors.newFixedThreadPool(5); + private final String HELP_CACHE_PRE="help:cache:";//帮助文档redis key的前缀 + private final String BACK_HELP_CACHE_PRE="help:cache:back:"; //帮助文档上一版redis key的前缀 + private final String HELP_CACHE_FLAG="help:cache:cacheFlag";//是否已经缓存的标识 + public HelpInfoService(){ + jedisPool=new RedisPoolHelper().getJedisPool(); + } + /** + * 通过文件名称查询文件内容 + * @param fileName + * @return + * @throws Exception + */ + public HelpInfo findHelpCommentByName(String fileName){ + HelpInfo helpInfo = getCacheHelpInfo(fileName); + if(helpInfo==null){ + List list = dao.findComment(fileName); + if(list!=null&&list.size()>0){ + helpInfo= list.get(0); + } + } + return helpInfo; + } + + /** + * 查询所有的帮助文档信息 + * @return + */ + public List findHelpComments(){ + List list = dao.findComment(null); + return list; + } + + /** + * 查询某个文档的备份内容 + * @param fileName + * @return + * @throws Exception + */ + public HelpInfo findHelpBakCommentByName(String fileName){ + HelpInfo helpInfo = getCacheBakHelpInfo(fileName); + if(helpInfo==null){ + List list = dao.findBakComment(fileName); + if(list!=null&&list.size()>0){ + helpInfo= list.get(0); + } + } + return helpInfo; + } + /** + * 查询所有文档的备份内容 + * @return + */ + public List findHelpBakComments(){ + List list = dao.findBakComment(null); + return list; + } + /** + * 从数据库获取所有的帮助文档信息 + * @return + */ + public List findAllHelpComments(){ + List list = dao.findAllComment(); + return list; + } + + public void saveHelpInfo(HelpInfo helpInfo){ + + Jedis jedis=jedisPool.getResource(); + try { + if(jedis!=null){ + String fileName=helpInfo.getFileName(); + String oldComment=jedis.get(HELP_CACHE_PRE+fileName); + if(StringUtils.strIsBlank(oldComment)){//redis宕机等意外原因导致获取不到信息,从数据库中读取 + List list = dao.findComment(fileName); + if(list!=null&&list.size()>0){ + oldComment=list.get(0).getFileComment(); + } + } + pool.execute(new SaveHelpInfoThread(jedisPool,HELP_CACHE_PRE+fileName, helpInfo.getFileComment(), -1)); + pool.execute(new SaveHelpInfoThread(jedisPool,BACK_HELP_CACHE_PRE+fileName, oldComment, -1)); + } + } catch (Exception e) { + logger.error("save help info to cache error",e); + }finally{ + jedis.close(); + } + dao.saveHelpInfo(helpInfo); + } + + /** + * 缓存帮助文档 + * @throws Exception + */ + public void cacheAllHelpInfo() { + Jedis jedis=jedisPool.getResource(); + if(jedis==null) { + return; + } + try { + String cacheFlag = jedis.get(HELP_CACHE_FLAG); + if(StringUtils.strIsBlank(cacheFlag)||!cacheFlag.equals("true")){ + logger.info("start cache help document"); + long startTime=System.currentTimeMillis(); + List helpInfos = findAllHelpComments(); + for (HelpInfo helpInfo : helpInfos) { + String helpFileName=helpInfo.getFileName(); + String key=HELP_CACHE_PRE+helpFileName; + String backKey=BACK_HELP_CACHE_PRE+helpFileName; + String fileComment = helpInfo.getFileComment(); + String backFileComment = helpInfo.getBackFileComment(); + if(!StringUtils.strIsBlank(fileComment)){ + pool.execute(new SaveHelpInfoThread(jedisPool,key,fileComment , -1)); + } + if(!StringUtils.strIsBlank(backFileComment)){ + pool.execute(new SaveHelpInfoThread(jedisPool,backKey, helpInfo.getBackFileComment(), -1)); + } + } + pool.execute(new SaveHelpInfoThread(jedisPool,HELP_CACHE_FLAG, "true", -1)); + long endTime=System.currentTimeMillis(); + logger.info("cache help info complate! Time--> "+(endTime-startTime)+"ms"); + } + } catch (Exception e) { + logger.error("cache Help Info error",e); + return ; + }finally{ + jedis.close(); + } + + } + + /** + * 从redis缓存中获取帮助文档 + * @param fileName + * @return + */ + public HelpInfo getCacheHelpInfo(String fileName){ + Jedis jedis=jedisPool.getResource(); + if(jedis==null){ + return null; + } + try { + String comment = jedis.get(HELP_CACHE_PRE+fileName); + HelpInfo helpInfo = new HelpInfo(); + helpInfo.setFileComment(comment); + return helpInfo; + } catch (Exception e) { + logger.error("get Help Info error",e); + return null; + }finally{ + jedis.close(); + } + + } + /** + * 从redis缓存中获取帮助文档备份 + * @param fileName + * @return + */ + public HelpInfo getCacheBakHelpInfo(String fileName) { + Jedis jedis=jedisPool.getResource(); + if(jedis==null){ + return null; + } + try { + String backComment = jedis.get(BACK_HELP_CACHE_PRE+fileName); + HelpInfo helpInfo = new HelpInfo(); + helpInfo.setBackFileComment(backComment); + return helpInfo; + } catch (Exception e) { + logger.error("get back Help Info error",e); + return null; + }finally{ + jedis.close(); + } + + } +} + diff --git a/src/main/resources/messages/message_en.properties b/src/main/resources/messages/message_en.properties index d3a1a5cdb..1539ff2c3 100644 --- a/src/main/resources/messages/message_en.properties +++ b/src/main/resources/messages/message_en.properties @@ -1497,6 +1497,7 @@ validate_error=Unexpected error occurred while validating is_schduler=Scheduler v4_num=IPv4 Number v6_num=IPv6 Number -always=Permanent +always=Permanent schedule=Scheduler -cancel_all=Cancel all configurations! \ No newline at end of file +cancel_all=Cancel all configurations! +pre_version=Previous Version \ No newline at end of file diff --git a/src/main/resources/messages/message_ru.properties b/src/main/resources/messages/message_ru.properties index 7d11a31e8..daa51ac08 100644 --- a/src/main/resources/messages/message_ru.properties +++ b/src/main/resources/messages/message_ru.properties @@ -1502,6 +1502,7 @@ is_schduler=Scheduler validate_error=Unexpected error occurred while validating v4_num=IPv4 Number v6_num=IPv6 Number -always=\u041F\u043E\u0441\u0442\u043E\u044F\u043D\u043D\u043E +always=\u041F\u043E\u0441\u0442\u043E\u044F\u043D\u043D\u043E schedule=Scheduler -cancel_all=Cancel all configurations! \ No newline at end of file +cancel_all=Cancel all configurations! +pre_version=Previous Version \ No newline at end of file diff --git a/src/main/resources/messages/message_zh_CN.properties b/src/main/resources/messages/message_zh_CN.properties index 2a4e6ebb8..0144cb394 100644 --- a/src/main/resources/messages/message_zh_CN.properties +++ b/src/main/resources/messages/message_zh_CN.properties @@ -1494,6 +1494,7 @@ everyMonth=\u6BCF\u6708 validate_error=\u9A8C\u8BC1\u65F6\u53D1\u751F\u610F\u5916\u9519\u8BEF v4_num=IPv4 Number v6_num=IPv6 Number -always=\u957F\u671F +always=\u957F\u671F schedule=Scheduler -cancel_all=Cancel all configurations! \ No newline at end of file +cancel_all=Cancel all configurations! +pre_version=\u4e0a\u4e00\u7248 diff --git a/src/main/webapp/WEB-INF/views/help.jsp b/src/main/webapp/WEB-INF/views/help.jsp index cd35fa574..082bbd853 100644 --- a/src/main/webapp/WEB-INF/views/help.jsp +++ b/src/main/webapp/WEB-INF/views/help.jsp @@ -4,9 +4,10 @@ + - + @@ -63,9 +164,26 @@ function showHelp(helpHref) {
-
- +
+
+
+ + + +
diff --git a/src/main/webapp/online-help/Markdown Helper.docx b/src/main/webapp/online-help/Markdown Helper.docx new file mode 100644 index 0000000000000000000000000000000000000000..5c5d056850ced8b0347a089e79d0f3ff707cc8f5 GIT binary patch literal 593427 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 z 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

B1(+m;4k*U}P{u66=>FIFg; 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 HychU?Iv`^q literal 0 HcmV?d00001 diff --git a/src/main/webapp/online-help/app/DNS_feature_advance.md b/src/main/webapp/online-help/app/DNS_feature_advance.md new file mode 100644 index 000000000..82863a14f --- /dev/null +++ b/src/main/webapp/online-help/app/DNS_feature_advance.md @@ -0,0 +1,22 @@ +#### [1.功能简介](#accordion1_1) + +用户自定义DNS协议特征,为特定应用添加DNS协议的特征。 + +#### [2.基础配置信息](#accordion1_2) + +* 社交应用:用户选择APP。 +* 配置描述:用户自定义该条配置的描述信息。 + +#### [3.配置约束条件](#accordion1_3) + +* 匹配区域:只支持DNS_NAME。 +* 关键字:添加1个DNS请求域名(只能添加1个),最长1024个字符。 +* 匹配方式:包含子串匹配、左匹配、有匹配和完全匹配。 +* 是否十六进制:若关键字填写十六进制格式的DNS请求域名,选择十六进制,否则为非十六进制。 +* 表达式类型:分为“无表达式”和“与表达式”,“无表达式”可以和任意一种匹配方式组合使用,“与表达式”只能和子串匹配组合使用。 + +#### [4.预期效果](#accordion1_4) + +将该DNS特征添加给了指定的APP,如用户产生具有该特征的数据,会有如下效果。* 若用户下发该APP阻断配置,该DNS被阻断,若用户选择生成日志,会有该APP的阻断日志。 +* 若用户下发该APP监视配置,DNS请求正常工作,若用户选择生成日志,会有该APP的监视日志。 +* 若用户下发该APP限速配置,户会感知DNS响应变差,若用户选择生成日志,会有该APP的限速日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/app/HTTP_feature_advance.md b/src/main/webapp/online-help/app/HTTP_feature_advance.md new file mode 100644 index 000000000..87c7f08c5 --- /dev/null +++ b/src/main/webapp/online-help/app/HTTP_feature_advance.md @@ -0,0 +1,33 @@ +#### [1.功能简介](#accordion1_1) + +用户自定义HTTP协议特征,为特定应用添加HTTP协议的特征。 + +#### [2.基础配置信息](#accordion1_2) + +* 社交应用:用户选择APP。 +* 配置描述:用户自定义该条配置的描述信息。 + +#### [3.配置约束条件](#accordion1_3) + +APP HTTP特征限制条件: + +* 匹配区域:选择具体的HTTP特征,包括请求包的特征和应答包的特征。 +* 关键字:可填多个关键字,最长1024个字符,用回车键分割。 +* 匹配方式:包含子串匹配、左匹配、有匹配和完全匹配。 +* 表达式类型:分为“无表达式”和“与表达式”,“无表达式”可以和任意一种匹配方式组合使用,“与表达式”只能和子串匹配组合使用。 +* 是否十六进制:若关键字填写十六进制格式的特征,选择十六进制,否则为非十六进制。 + +IP范围特征限制条件: + +* IP类型:可选IPV4或IPV6。 +* IP格式:可选IP、IP范围和IP/子网掩码。 +* 目的IP:IP格式选择“IP”,该文本框填合法的单个IP;IP格式选择“IP范围”,IP段只能配置x.x.x.0-x.x.x.255;IP/子网掩码中子网掩码值限制为16-32。 +* 目的端口:端口与端口掩码范围是0-65535。 +* 协议:可选TCP、UDP、全部。全部表示TCP或UDP。 +* 可为一个应用添加最多3个APP HTTP特征和1个IP范围特征。当同时满足APP HTTP特征和IP范围特征时,该配置才生效。 + +#### [4.预期效果](#accordion1_4) + +将该HTTP特征添加给了指定的APP,如用户产生具有该特征的数据,会有如下效果。* 若用户下发该APP阻断配置,请求该HTTP请求被阻断,若用户选择生成日志,会有该APP的阻断日志。 +* 若用户下发该APP监视配置,HTTP请求正常工作,若用户选择生成日志,会有该APP的监视日志。 +* 若用户下发该APP限速配置,户会感知HTTP响应变差,若用户选择生成日志,会有该APP的限速日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/app/IP_feature_advance.md b/src/main/webapp/online-help/app/IP_feature_advance.md new file mode 100644 index 000000000..1477bfdc0 --- /dev/null +++ b/src/main/webapp/online-help/app/IP_feature_advance.md @@ -0,0 +1,22 @@ +#### [1.功能简介](#accordion1_1) + +用户自定义IP特征,为特定应用添加IP的特征。 + +#### [2.基础配置信息](#accordion1_2) + +* 社交应用:用户选择APP。 +* 配置描述:用户自定义该条配置的描述信息。 + +#### [3.配置约束条件](#accordion1_3) + +* IP类型:可选IPV4或IPV6。 +* IP格式:可选IP、IP范围和IP/子网掩码。 +* 目的IP:IP格式选择“IP”,该文本框填合法的单个IP;IP格式选择“IP范围”,IP段只能配置x.x.x.0-x.x.x.255;IP/子网掩码中子网掩码值限制为16-32。 +* 目的端口:端口与端口掩码范围是0-65535。 +* 协议:可选TCP、UDP、全部。全部表示TCP或UDP。 + +#### [4.预期效果](#accordion1_4) + +将该IP特征添加给了指定的APP,并产生了该特征的数据流量,有如下效果。* 若用户下发该APP阻断配置,无法连接到该IP地址; +* 若用户下发该APP监视配置,IP请求正常工作,若用户选择生成日志,会有该APP的监视日志。 +* 若用户下发该APP限速配置,户会感知响应变差,若用户选择生成日志,会有该APP的限速日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/app/app.md b/src/main/webapp/online-help/app/app.md new file mode 100644 index 000000000..dd8a43bac --- /dev/null +++ b/src/main/webapp/online-help/app/app.md @@ -0,0 +1,43 @@ +#### [1.功能简介](#accordion1_1) + +APP的识别和管控,配置指定APP的封堵、监视、限速功能界面。 + +#### [2.基础配置信息](#accordion1_2) + +* 配置描述:用户自定义该条配置的描述信息。 +* 是否记录日志:是否生成日志信息。 +* 社交应用:选择管控的应用。 +* 行为类型:选择管控具体行为类型。可选项,不选则对该应用的所有行为进行管控。 +* 执行动作:APP有3种管控动作:阻断、监视和限速。若选择监视,用户需指定客户端IP。若选择限速,用户需指定限速比例。 + +#### [3.配置约束条件](#accordion1_3) + +IP类配置,当执行动作选择“监视”,必须填写对应的IP配置。 + +* IP类型:IPV4或IPV6。 +* 协议:可选TCP、UDP和全部。 +* IP格式:可选IP、IP范围和IP/子网掩码。 +* 源IP:IP格式选择“IP”,该文本框填合法的单IP;IP格式选择“IP范围”,IP段只能配置x.x.x.0-x.x.x.255;IP/子网掩码中子网掩码值限制为16-32。 +* 源端口:端口与端口掩码范围是0-65535。 +* 目的IP:限制同源IP。 +* 目的端口:端口与端口掩码范围是0-65535。 +* 另:源IP与目的IP不能相同 + +#### [4.配置生效范围](#accordion1_4) + +配置生效范围,分为“全部”和“选择区域”。“全部”指所有地区;“选择区域”需选择区域和运营商,并且可以同时选择多个区域和多个运营商,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:选择来函文件类型,必选项; +* 类型:指明该配置的类型,可同时选多个,比如信息内容安全、网络攻击等,非必选项; +* 性质:指明该配置的性质,可同时选多个,比如政治事务、暴力恐怖等,非必选项; +* 用户标签:用户自定义标签,可同时选多个,非必选项; + +#### [6.预期效果](#accordion1_7) + +* 执行动作选择“阻断”,未选择行为类型,该APP全部功能无法正常使用;如果选择了行为类型,该APP的对应行为无法正常使用; +* 执行动作选择“监视”,该APP被正常使用。 +* 执行动作选择“限速”,户会感知网速变差,当限速比例高达**时,APP出现无法使用的情况。 +* 若指定了客户端IP,该配置只对该用户生效,其他用户不受影响。 +* 若选择了记录日志,日志界面出现该配置的日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/app/basic_protocol.md b/src/main/webapp/online-help/app/basic_protocol.md new file mode 100644 index 000000000..82785de11 --- /dev/null +++ b/src/main/webapp/online-help/app/basic_protocol.md @@ -0,0 +1,41 @@ +#### [1.功能简介](#accordion1_1) + +基础协议的识别和管控,配置指定协议的封堵、监视界面。 + +#### [2.基础配置信息](#accordion1_2) + +* 配置描述:用户自定义该条配置的描述信息。 +* 是否记录日志:是否生成日志信息。 +* 基础协议:选择管控的协议。 +* 执行动作:基础协议有两种管控动作:阻断、监视。若选择监视,用户需指定客户端IP相关信息。 + +#### [3.配置约束条件](#accordion1_3) + +IP类配置,当执行动作选择“监视”,必须填写对应的IP配置。 + +* IP类型:IPV4或IPV6。 +* 协议:可选TCP、UDP和全部。 +* IP格式:可选IP、IP范围和IP/子网掩码。 +* 源IP:IP格式选择“IP”,该文本框填合法的单IP;IP格式选择“IP范围”,IP段只能配置x.x.x.0-x.x.x.255;IP/子网掩码中子网掩码值限制为16-32。 +* 源端口:端口与端口掩码范围是0-65535。 +* 目的IP:限制同源IP。 +* 目的端口:端口与端口掩码范围是0-65535。 +* 另:源IP与目的IP不能相同 + +#### [4.配置生效范围](#accordion1_4) + +配置生效范围,分为“全部”和“选择区域”。“全部”指所有地区;“选择区域”需选择区域和运营商,并且可以同时选择多个区域和多个运营商,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:选择来函文件类型,必选项; +* 类型:指明该配置的类型,可同时选多个,比如信息内容安全、网络攻击等,非必选项; +* 性质:指明该配置的性质,可同时选多个,比如政治事务、暴力恐怖等,非必选项; +* 用户标签:用户自定义标签,可同时选多个,非必选项; + +#### [6.预期效果](#accordion1_7) + +* 执行动作选择“阻断”,使用该协议的应用全部无法正常使用; +* 执行动作选择“监视”,使用该协议的应用不受影响。 +* 若指定了客户端IP,该配置只对该用户生效,其他用户不受影响。 +* 若选择了记录日志,日志界面出现该配置的日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/app/domain_feature_advance.md b/src/main/webapp/online-help/app/domain_feature_advance.md new file mode 100644 index 000000000..c578da685 --- /dev/null +++ b/src/main/webapp/online-help/app/domain_feature_advance.md @@ -0,0 +1,20 @@ +#### [1.功能简介](#accordion1_1) + +用户自定义域名特征,为特定应用添加域名的特征。 + +#### [2.基础配置信息](#accordion1_2) + +* 社交应用:用户选择APP。 +* 配置描述:用户自定义该条配置的描述信息。 + +#### [3.配置约束条件](#accordion1_3) + +* 域名:填写正确的域名,最长1024字符。 +* 匹配方式:包含子串匹配、左匹配、有匹配和完全匹配。 +* 是否十六进制:若关键字填写十六进制格式的特征,选择十六进制,否则为非十六进制。 + +#### [4.预期效果](#accordion1_4) + +将该域名特征添加给了指定的APP,如用户产生具有该特征的数据,会有如下效果。* 若用户下发该APP阻断配置,请求该域名被阻断,若用户选择生成日志,会有该APP的阻断日志。 +* 若用户下发该APP监视配置,域名请求正常工作,若用户选择生成日志,会有该APP的监视日志。 +* 若用户下发该APP限速配置,户会感知域名响应变差,若用户选择生成日志,会有该APP的限速日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/app/payload_feature_advance.md b/src/main/webapp/online-help/app/payload_feature_advance.md new file mode 100644 index 000000000..071860909 --- /dev/null +++ b/src/main/webapp/online-help/app/payload_feature_advance.md @@ -0,0 +1,34 @@ +#### [1.功能简介](#accordion1_1) + +用户自定义数据包载荷特征,为特定应用添加载荷的特征。 + +#### [2.基础配置信息](#accordion1_2) + +* 社交应用:用户选择APP。 +* 配置描述:用户自定义该条配置的描述信息。 + +#### [3.配置约束条件](#accordion1_3) + +APP载荷类约束条件: + +* 匹配区域:共7类APP载荷特征,分别是:载荷、C2S载荷、S2C载荷,C2S方向包序列,S2C方向包序列,二层头,三层头。 +* 关键字:可填多个关键字,最长1024字符,用回车键分割。 +* 匹配方式:包含子串匹配、左匹配、有匹配和完全匹配。 +* 表达式类型:分为“无表达式”和“与表达式”,“无表达式”可以和任意一种匹配方式组合使用,“与表达式”只能和子串匹配组合使用。 +* 是否十六进制:十六进制的 + +IP类约束条件: + +* IP类型:可选IPV4或IPV6。 +* IP格式:可选IP、IP范围和IP/子网掩码。 +* 目的IP:IP格式选择“IP”,该文本框填合法的单个IP;IP格式选择“IP范围”,IP段只能配置x.x.x.0-x.x.x.255;IP/子网掩码中子网掩码值限制为16-32。 +* 目的端口:端口与端口掩码范围是0-65535。 +* 协议:可选TCP、UDP、全部。全部表示TCP或UDP。 + +可为一个应用添加最多3个APP载荷特征和1个IP范围特征。当同时满足APP载荷特征和IP范围特征时,该配置才生效。 + +#### [4.预期效果](#accordion1_4) + +将该载荷特征添加给了指定的APP,如用户产生具有该载荷特征的数据,会有如下效果。* 若用户下发该APP阻断配置,具有该载荷特征的数据流被阻断,若用户选择生成日志,会有该APP的阻断日志。; +* 若用户下发该APP监视配置,具有该载荷特征的数据正常工作,若用户选择生成日志,会有该APP的监视日志。 +* 若用户下发该APP限速配置,户会感知响应变差,若用户选择生成日志,会有该APP的限速日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/app/ssl_feature_advance.md b/src/main/webapp/online-help/app/ssl_feature_advance.md new file mode 100644 index 000000000..ae59d7ea4 --- /dev/null +++ b/src/main/webapp/online-help/app/ssl_feature_advance.md @@ -0,0 +1,33 @@ +#### [1.功能简介](#accordion1_1) + +用户自定义SSL协议特征,为特定应用添加SSL协议的特征。 + +#### [2.基础配置信息](#accordion1_2) + +* 社交应用:用户选择APP。 +* 配置描述:用户自定义该条配置的描述信息。 + +#### [3.配置约束条件](#accordion1_3) + +APP SSL类约束条件: + +* 匹配区域:选择具体的SSL特征。 +* 关键字:可填多个关键字,最长1024字符,用回车键分割。比如匹配区域选择SSL_SNI,关键字填完整的域名,用户需按实际情况填写,可参考抓包工具的数据包解析结果。 +* 匹配方式:包含子串匹配、左匹配、有匹配和完全匹配。 +* 是否十六进制:若关键字填写十六进制格式的特征,选择十六进制,否则为非十六进制。 + +IP类约束条件: + +* IP类型:可选IPV4或IPV6。 +* IP格式:可选IP、IP范围和IP/子网掩码。 +* 目的IP:IP格式选择“IP”,该文本框填合法的单个IP;IP格式选择“IP范围”,IP段只能配置x.x.x.0-x.x.x.255;IP/子网掩码中子网掩码值限制为16-32。 +* 目的端口:端口与端口掩码范围是0-65535。 +* 协议:可选TCP、UDP、全部。全部表示TCP或UDP。 + +可为一个应用添加最多3个APP SSL特征和1个IP范围特征。当同时满足APP SSL特征和IP范围特征时,该配置才生效。 + +#### [4.预期效果](#accordion1_4) + +将该SLL特征添加给了指定的APP,如用户产生具有该特征的数据,会有如下效果。* 若用户下发该APP阻断配置,具有该特征的数据流被阻断,若用户选择生成日志,会有该APP的阻断日志。 +* 若用户下发该APP监视配置,具有该特征的数据正常工作,若用户选择生成日志,会有该APP的监视日志。 +* 若用户下发该APP限速配置,户会感知响应变差,若用户选择生成日志,会有该APP的限速日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/app/tunnel_behavior.md b/src/main/webapp/online-help/app/tunnel_behavior.md new file mode 100644 index 000000000..897c345c3 --- /dev/null +++ b/src/main/webapp/online-help/app/tunnel_behavior.md @@ -0,0 +1,42 @@ +#### [1.功能简介](#accordion1_1) + +对用户使用加密隧道的行为进行识别和管控,比如识别用户使用加密隧道进行视频通话的行为。 + +#### [2.基础配置信息](#accordion1_2) + +* 配置描述:用户自定义该条配置的描述信息。 +* 是否记录日志:是否生成日志信息。 +* 加密隧道协议:选择一种加密隧道协议。 +* 行为类型:包括“视频”和“其他”,视频指实时视频通话,注意,使用youtube播放视频属于“其他”。 +* 执行动作:加密隧道行为有两种管控动作:阻断、监视。若选择监视,用户需指定客户端相关信息。 + +#### [3.配置约束条件](#accordion1_3) + +IP类配置,当执行动作选择“监视”,必须填写对应的IP配置。 + +* IP类型:IPV4或IPV6。 +* 协议:可选TCP、UDP和全部。 +* IP格式:可选IP、IP范围和IP/子网掩码。 +* 源IP:IP格式选择“IP”,该文本框填合法的单IP;IP格式选择“IP范围”,IP段只能配置x.x.x.0-x.x.x.255;IP/子网掩码中子网掩码值限制为16-32。 +* 源端口:端口与端口掩码范围是0-65535。 +* 目的IP:限制同源IP。 +* 目的端口:端口与端口掩码范围是0-65535。 +* 另:源IP与目的IP不能相同 + +#### [4.配置生效范围](#accordion1_4) + +配置生效范围,分为“全部”和“选择区域”。“全部”指所有地区;“选择区域”需选择区域和运营商,并且可以同时选择多个区域和多个运营商,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:选择来函文件类型,必选项; +* 类型:指明该配置的类型,可同时选多个,比如信息内容安全、网络攻击等,非必选项; +* 性质:指明该配置的性质,可同时选多个,比如政治事务、暴力恐怖等,非必选项; +* 用户标签:用户自定义标签,可同时选多个,非必选项; + +#### [6.预期效果](#accordion1_7) + +* 执行动作选择“阻断”,使用该协议的应用全部无法正常使用;若指定了行为,只有该行为无法正常使用。 +* 执行动作选择“监视”,使用该协议的应用不受影响。 +* 若指定了客户端IP,该配置只对该用户生效,其他用户不受影响。 +* 若选择了记录日志,日志界面出现该配置的日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/editHelp.html b/src/main/webapp/online-help/editHelp.html new file mode 100644 index 000000000..c94d47ccb --- /dev/null +++ b/src/main/webapp/online-help/editHelp.html @@ -0,0 +1,114 @@ + + + + help edit + + + + + + + + + + +

+ +
+ + + \ No newline at end of file diff --git a/src/main/webapp/online-help/ntc/BGP.md b/src/main/webapp/online-help/ntc/BGP.md new file mode 100644 index 000000000..8a2c7d6a5 --- /dev/null +++ b/src/main/webapp/online-help/ntc/BGP.md @@ -0,0 +1,44 @@ +#### [0.功能简介](#accordion1_0) + +本页面完成针对BGP流量的配置,从而对包含特定IP或AS特征的BGP流量进行监测或阻断。 + +#### [1.配置基础信息](#accordion1_1) + +配置基础信息包括:规则名称,执行动作,是否记录管控日志。 + +* 规则名称:用户自定义的该条配置的描述信息。 +* 执行动作:配置施加于网络传输单元时,对网络流量施加什么样的动作,此处为阻断、监测二选一。 +* 是否记录日志:对网络流量施加执行动作时,是否记录命中BGP协议配置的流量信息,包括发现时间、IP、AS等。 + +#### [2.业务配置属性](#accordion1_2) + +BGP协议管控的流量属性信息: + +* AS:配置自治系统的关键词,精确匹配,非二进制,大小写不敏感。 +* IP:选择IP类型、协议、IP模式、端口模式,并且填写对应的具体IP与端口值,选择匹配方向是单向还是双向匹配。 + +#### [3.配置约束条件](#accordion1_3) + +BGP协议管控配置的属性信息: + +* 源IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 源端口:端口与端口掩码范围是0-65535。 +* 目的IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 目的端口:端口与端口掩码范围是0-65535。 +* 另:源IP与目的IP不能相同。 + +#### [4.配置生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 + +#### [6.预期效果](#accordion1_7) + +* 监测预期效果:记录符合配置条件的BGP流量监测日志。 +* 阻断预期效果:阻断符合配置条件的BGP流量,并记录阻断日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/ntc/DNS.md b/src/main/webapp/online-help/ntc/DNS.md new file mode 100644 index 000000000..59aec983b --- /dev/null +++ b/src/main/webapp/online-help/ntc/DNS.md @@ -0,0 +1,45 @@ +#### [0.功能简介](#accordion1_0) + +本页面完成针对DNS流量的配置,从而对包含特定IP或DNS关键词特征的DNS流量进行监测或阻断。 + +#### [1.配置基础信息](#accordion1_1) + +配置基础信息包括:规则名称,执行动作,是否记录管控日志。 + +* 规则名称:用户自定义的该条配置的描述信息。 +* 执行动作:配置施加于网络传输单元时,对网络流量施加什么样的动作,此处为阻断、监测二选一。 +* 是否记录日志:对网络流量施加执行动作时,是否记录命中DNS协议配置的流量信息,包括发现时间、IP、请求内容等。 + +#### [2.业务配置属性](#accordion1_2) + +DNS协议管控的流量属性信息: + +* keyword:DNS关键词。匹配字段选择,例如QNAME;关键字填写;表达式类型选择,支持选择与表达式;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* IP:选择IP类型、协议、IP模式、端口模式,并且填写对应的具体IP与端口值,选择匹配方向是单向还是双向匹配。 +* Subscribe ID:IP地址对应的用户信息关键字,子串匹配,非二进制,大小写不敏感。 + +#### [3.配置约束条件](#accordion1_3) + +DNS协议管控配置的属性信息: + +* 客户端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 客户端端口:端口与端口掩码范围是0-65535。 +* 服务端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 服务端端口:端口与端口掩码范围是0-65535。 +* 另:客户端IP与服务端IP不能相同。 + +#### [4.配置生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 + +#### [6.预期效果](#accordion1_7) + +* 监测预期效果:记录符合配置条件的DNS流量监测日志。 +* 阻断预期效果:阻断符合配置条件的DNS请求或对符合配置条件的DNS请求抢答欺骗包,并记录阻断日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/ntc/FTP.md b/src/main/webapp/online-help/ntc/FTP.md new file mode 100644 index 000000000..5dbb68854 --- /dev/null +++ b/src/main/webapp/online-help/ntc/FTP.md @@ -0,0 +1,46 @@ +#### [0.功能简介](#accordion1_0) + +本页面完成针对FTP流量的配置,从而对包含特定IP、URL或内容特征的FTP流量进行监测或阻断。 + +#### [1.配置基础信息](#accordion1_1) + +配置基础信息包括:规则名称,执行动作,是否记录管控日志。 + +* 规则名称:用户自定义的该条配置的描述信息。 +* 执行动作:配置施加于网络传输单元时,对网络流量施加什么样的动作,此处为阻断、监测二选一。 +* 是否记录日志:对网络流量施加执行动作时,是否记录命中FTP协议配置的流量信息,包括发现时间、IP、URL等。 + +#### [2.业务配置属性](#accordion1_2) + +FTP协议扩展管控的流量属性信息: + +* URL:FTP的URL。关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;非二进制;大小写不敏感。 +* FTP内容:关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* IP:选择IP类型、协议、IP模式、端口模式,并且填写对应的具体IP与端口值,选择匹配方向是单向还是双向匹配。 +* Subscribe ID:IP地址对应的用户信息关键字,子串匹配,非二进制,大小写不敏感。 + +#### [3.配置约束条件](#accordion1_3) + +FTP协议管控配置的属性信息: + +* 客户端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 客户端端口:端口与端口掩码范围是0-65535。 +* 服务端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 服务端端口:端口与端口掩码范围是0-65535。 +* 另:客户端IP与服务端IP不能相同。 + +#### [4.配置生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 + +#### [6.预期效果](#accordion1_7) + +* 监测预期效果:记录符合配置条件的FTP流量监测日志。 +* 阻断预期效果:阻断符合配置条件的FTP访问,即无法获取到该FTP内容,并记录阻断日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/ntc/HTTP_URL.md b/src/main/webapp/online-help/ntc/HTTP_URL.md new file mode 100644 index 000000000..05b10093c --- /dev/null +++ b/src/main/webapp/online-help/ntc/HTTP_URL.md @@ -0,0 +1,34 @@ +#### [0.功能简介](#accordion1_0) + +本页面完成针对HTTP流量的配置,从而对包含特定URL特征的HTTP流量进行加入白名单、监测或阻断。 + +#### [1.配置基础信息](#accordion1_1) + +配置基础信息包括:规则名称,执行动作。 + +* 规则名称:用户自定义的该条配置的描述信息。 +* 执行动作:配置施加于网络传输单元时,对网络流量施加什么样的动作,此处为白名单、阻断、监测三选一。 + +#### [2.业务配置属性](#accordion1_2) + +HTTP协议管控的流量属性信息: + +* URL:HTTP统一资源定位符关键词。关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;非二进制;大小写不敏感。 + +#### [3.配置约束条件](#accordion1_3) + +#### [4.配置生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 + +#### [6.预期效果](#accordion1_7) + +* 监测预期效果:记录符合配置条件的HTTP流量监测日志。 +* 阻断预期效果:阻断符合配置条件的HTTP访问,即访问页面无响应,并记录阻断日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/ntc/HTTP_advanced.md b/src/main/webapp/online-help/ntc/HTTP_advanced.md new file mode 100644 index 000000000..38ec60a4a --- /dev/null +++ b/src/main/webapp/online-help/ntc/HTTP_advanced.md @@ -0,0 +1,54 @@ +#### [0.功能简介](#accordion1_0) + +本页面完成针对HTTP流量的扩展配置,从而对包含特定IP、URL、字段或内容特征的HTTP流量进行监测或阻断。 + +#### [1.配置基础信息](#accordion1_1) + +配置基础信息包括:规则名称,执行动作,是否记录管控日志。 + +* 规则名称:用户自定义的该条配置的描述信息。 +* 执行动作:配置施加于网络传输单元时,对网络流量施加什么样的动作,此处为阻断、监测二选一。 +* 是否记录日志:对网络流量施加执行动作时,是否记录命中HTTP扩展配置的流量信息,包括发现时间、IP、URL、请求头、请求体、响应头、响应体等。 + +#### [2.业务配置属性](#accordion1_2) + +HTTP协议扩展管控的流量属性信息,分为请求侧与响应侧。 请求侧: + +* URL:关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* 字段:匹配字段选择,例如User Agent、Cookie等;关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* 请求消息体:关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* IP:选择IP类型、协议、IP模式、端口模式,并且填写对应的具体IP与端口值,选择匹配方向是单向还是双向匹配。 +* Subscribe ID:IP地址对应的用户信息关键字,子串匹配,非二进制,大小写不敏感。 + +响应侧: + +* 响应头域字段:匹配字段选择,例如set-cookie、Content-Type等;关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* 响应消息体:关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* IP:选择IP类型、协议、IP模式、端口模式,并且填写对应的具体IP与端口值,选择匹配方向是单向还是双向匹配。 +* Subscribe ID:IP地址对应的用户信息关键字,子串匹配,非二进制,大小写不敏感。 + +#### [3.配置约束条件](#accordion1_3) + +HTTP协议扩展管控配置的属性信息: + +* 客户端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 客户端端口:端口与端口掩码范围是0-65535。 +* 服务端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 服务端端口:端口与端口掩码范围是0-65535。 +* 另:客户端IP与服务端IP不能相同。 + +#### [4.配置生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 + +#### [6.预期效果](#accordion1_7) + +* 监测预期效果:记录符合配置条件的HTTP流量监测日志。 +* 阻断预期效果:阻断符合配置条件的HTTP访问,即访问页面无响应,并记录阻断日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/ntc/HTTP_website.md b/src/main/webapp/online-help/ntc/HTTP_website.md new file mode 100644 index 000000000..cc9d6357b --- /dev/null +++ b/src/main/webapp/online-help/ntc/HTTP_website.md @@ -0,0 +1,36 @@ +#### [0.功能简介](#accordion1_0) + +本页面完成针对HTTP流量的配置,从而对包含特定网站关键词特征的HTTP流量进行监测或阻断。 + +#### [1.配置基础信息](#accordion1_1) + +配置基础信息包括:规则名称,执行动作,是否记录管控日志。 + +* 规则名称:用户自定义的该条配置的描述信息。 +* 执行动作:配置施加于网络传输单元时,对网络流量施加什么样的动作,此处为阻断、监测二选一。 +* 是否记录日志:对网络流量施加执行动作时,是否记录命中配置的HTTP流量信息,包括发现时间、IP、URL、请求头、请求体、响应头、响应体等。 + +#### [2.业务配置属性](#accordion1_2) + +HTTP协议网站管控的流量属性信息,分为请求侧与响应侧: + +* 请求侧消息体关键词:关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* 响应侧消息体关键词:关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 + +#### [3.配置约束条件](#accordion1_3) + +#### [4.配置生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 + +#### [6.预期效果](#accordion1_7) + +* 监测预期效果:记录符合配置条件的HTTP流量监测日志。 +* 阻断预期效果:阻断符合配置条件的HTTP访问,即访问页面无响应,并记录阻断日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/ntc/Mail.md b/src/main/webapp/online-help/ntc/Mail.md new file mode 100644 index 000000000..833bb13d6 --- /dev/null +++ b/src/main/webapp/online-help/ntc/Mail.md @@ -0,0 +1,45 @@ +#### [0.功能简介](#accordion1_0) + +本页面完成针对Mail流量的配置,从而对包含特定IP、收发件人特征的Mail流量进行监测或阻断。 + +#### [1.配置基础信息](#accordion1_1) + +配置基础信息包括:规则名称,执行动作,是否记录管控日志。 + +* 规则名称:用户自定义的该条配置的描述信息。 +* 执行动作:配置施加于网络传输单元时,对网络流量施加什么样的动作,此处为阻断、监测二选一。 +* 是否记录日志:对网络流量施加执行动作时,是否记录命中Mail协议配置的流量信息,包括发现时间、IP、收发件人等。 + +#### [2.业务配置属性](#accordion1_2) + +MAIL协议管控的流量属性信息: + +* Mail头部关键词:匹配字段选择,例如发件人From与收件人To;关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* IP:选择IP类型、协议、IP模式、端口模式,并且填写对应的具体IP与端口值,选择匹配方向是单向还是双向匹配。 +* Subscribe ID:IP地址对应的用户信息关键字,子串匹配,非二进制,大小写不敏感。 + +#### [3.配置约束条件](#accordion1_3) + +MAIL协议管控配置的属性信息: + +* 客户端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 客户端端口:端口与端口掩码范围是0-65535。 +* 服务端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 服务端端口:端口与端口掩码范围是0-65535。 +* 另:客户端IP与服务端IP不能相同。 + +#### [4.生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 + +#### [6.预期效果](#accordion1_7) + +* 监测预期效果:记录符合配置条件的Mail流量监测日志。 +* 阻断预期效果:阻断符合配置条件的Mail邮件,即该邮件无法正常发送或接收,并记录阻断日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/ntc/Mail_advanced.md b/src/main/webapp/online-help/ntc/Mail_advanced.md new file mode 100644 index 000000000..472316f96 --- /dev/null +++ b/src/main/webapp/online-help/ntc/Mail_advanced.md @@ -0,0 +1,46 @@ +#### [0.功能简介](#accordion1_0) + +本页面完成针对Mail流量的扩展配置,从而对包含特定IP、收发件人、主题或邮件正文特征的Mail流量进行监测或阻断。 + +#### [1.配置基础信息](#accordion1_1) + +配置基础信息包括:规则名称,执行动作,是否记录管控日志。 + +* 规则名称:用户自定义的该条配置的描述信息。 +* 执行动作:配置施加于网络传输单元时,对网络流量施加什么样的动作,此处为阻断、监测二选一。 +* 是否记录日志:对网络流量施加执行动作时,是否记录命中Mail协议扩展配置的流量信息,包括发现时间、IP、收发件人等。 + +#### [2.业务配置属性](#accordion1_2) + +MAIL协议扩展管控的流量属性信息: + +* Mail头部关键词:匹配字段选择,例如发件人From、收件人To、主题;关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* Mail正文关键词:匹配字段选择,例如正文内容、附件名称、附件内容;关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* IP:选择IP类型、协议、IP模式、端口模式,并且填写对应的具体IP与端口值,选择匹配方向是单向还是双向匹配。 +* Subscribe ID:IP地址对应的用户信息关键字,子串匹配,非二进制,大小写不敏感。 + +#### [3.配置约束条件](#accordion1_3) + +MAIL协议管控配置的属性信息: + +* 客户端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 客户端端口:端口与端口掩码范围是0-65535。 +* 服务端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 服务端端口:端口与端口掩码范围是0-65535。 +* 另:客户端IP与服务端IP不能相同。 + +#### [4.配置生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 + +#### [6.预期效果](#accordion1_7) + +* 监测预期效果:记录符合配置条件的Mail流量监测日志。 +* 阻断预期效果:阻断符合配置条件的Mail邮件,即该邮件无法正常发送或接收,并记录阻断日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/ntc/SSL.md b/src/main/webapp/online-help/ntc/SSL.md new file mode 100644 index 000000000..b921b9c5d --- /dev/null +++ b/src/main/webapp/online-help/ntc/SSL.md @@ -0,0 +1,47 @@ +#### [0.功能简介](#accordion1_0) + +本页面完成针对SSL流量的配置,从而对包含特定IP、SNI、SAN或CN特征的SSL流量进行监测或阻断。 + +#### [1.配置基础信息](#accordion1_1) + +配置基础信息包括:规则名称,执行动作,是否记录管控日志。 + +* 规则名称:用户自定义的该条配置的描述信息。 +* 执行动作:配置施加于网络传输单元时,对网络流量施加什么样的动作,此处为阻断、监测二选一。 +* 是否记录日志:对网络流量施加执行动作时,是否记录命中SSL协议配置的流量信息,包括发现时间、IP、SNI、SAN、CN等。 + +#### [2.业务配置属性](#accordion1_2) + +SSL协议管控的流量属性信息: + +* SNI:SSL请求服务器名称指示关键词。关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* SAN:SSL域名主体替代名称关键词。关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* CN:SSL域名通用名关键词。关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流);是否大小写敏感选择。 +* IP:选择IP类型、协议、IP模式、端口模式,并且填写对应的具体IP与端口值,选择匹配方向是单向还是双向匹配。 +* Subscribe ID:IP地址对应的用户信息关键字,子串匹配,非二进制,大小写不敏感。 + +#### [3.配置约束条件](#accordion1_3) + +SSL协议管控配置的属性信息: + +* 客户端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 客户端端口:端口与端口掩码范围是0-65535。 +* 服务端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 服务端端口:端口与端口掩码范围是0-65535。 +* 另:客户端IP与服务端IP不能相同。 + +#### [4.配置生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 + +#### [6.预期效果](#accordion1_7) + +* 监测预期效果:记录符合配置条件的SSL流量监测日志。 +* 阻断预期效果:阻断符合配置条件的SSL网络流量,例如阻止某次特定HTTPS访问,并记录阻断日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/ntc/ip_address.md b/src/main/webapp/online-help/ntc/ip_address.md new file mode 100644 index 000000000..a041520d1 --- /dev/null +++ b/src/main/webapp/online-help/ntc/ip_address.md @@ -0,0 +1,46 @@ +#### [0.功能简介](#accordion1_0) + +本页面完成对网络流量IP特征的配置,对包含特定IP特征的流量进行阻断、监测、丢弃或限速。 + +#### [1.配置基础信息](#accordion1_1) + +配置基础信息包括:规则名称,执行动作,是否记录管控日志。 + +* 规则名称:用户自定义的该条配置的描述信息。 +* 执行动作:配置施加于网络传输单元时,对网络流量施加什么样的动作,此处为阻断、监测、丢弃、限速四选一。 +* 是否记录日志:对网络流量施加执行动作时,是否命中IP配置的网络流量信息,包括发现时间、IP、端口等。 + +#### [2.业务配置属性](#accordion1_2) + +IP地址管控的流量属性信息: + +* IP:选择IP类型、协议、IP模式、端口模式,并且填写对应的具体IP与端口值,选择匹配方向是单向还是双向匹配。 +* ASN:自治系统号选择,可以选择下拉菜单中的自治系统。 + +#### [3.配置约束条件](#accordion1_3) + +IP管控配置的属性信息: + +* 客户端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 客户端端口:端口与端口掩码范围是0-65535。 +* 服务端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 服务端端口:端口与端口掩码范围是0-65535。 +* 另:客户端IP与服务端IP不能相同。 + +#### [4.配置生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 + +#### [6.预期效果](#accordion1_7) + +* 监测预期效果:记录符合配置条件的IP监测流量日志。 +* 阻断预期效果:阻断承载于配置IP或IP组之上的TCP流量,即发送TCP的RST报文,并记录阻断日志。 +* 限速预期效果:限制承载于配置IP或IP组之上网络流量的传输速率。 +* 丢弃预期效果:丢弃承载于配置IP或IP组之上的网络流量报文,使得目的端无法收到报文。 \ No newline at end of file diff --git a/src/main/webapp/online-help/ntc/ip_white_list.md b/src/main/webapp/online-help/ntc/ip_white_list.md new file mode 100644 index 000000000..90b493552 --- /dev/null +++ b/src/main/webapp/online-help/ntc/ip_white_list.md @@ -0,0 +1,34 @@ +#### [0.功能简介](#accordion1_0) + +本页面完成针对网络流量的IP白名单配置,将特定IP或IP组设置为白名单。 + +#### [1.配置基础信息](#accordion1_1) + +配置基础信息包括:规则名称,执行动作。 + +* 规则名称:用户自定义的该条配置的描述信息。 +* 执行动作:配置施加于网络传输单元时,对网络流量施加什么样的动作,此处为单一选项白名单。 + +#### [2.业务配置属性](#accordion1_2) + +此处指流量的IP属性:即配置特定IP为白名单。 + +* IP Type:IP类型,可以选择IPv4或者IPv6。 +* IP Pattern:IP配置模式,可以选择特定IP、IP段或者IP掩码三种模式。 +* Client IP:具体的IP白名单配置。 + +#### [3.配置约束条件](#accordion1_3) + +IP白名单配置的属性信息: + +* 客户端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 客户端端口:端口与端口掩码范围是0-65535。 +* 服务端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 服务端端口:端口与端口掩码范围是0-65535。 +* 另:客户端IP与服务端IP不能相同。 + +#### [4.配置标签](#accordion1_6) + +#### [5.预期效果](#accordion1_7) + +设置为白名单的IP或IP组上的网络流量不受其他配置的控制与影响,其上所有网络行为皆可正常无虞。 \ No newline at end of file diff --git a/src/main/webapp/online-help/ntc/p2p.md b/src/main/webapp/online-help/ntc/p2p.md new file mode 100644 index 000000000..f0724e090 --- /dev/null +++ b/src/main/webapp/online-help/ntc/p2p.md @@ -0,0 +1,54 @@ +#### [0.功能简介](#accordion1_0) + +本页面完成针对P2P流量(包括EMULE协议与BT协议)的配置,从而对包含特定IP、EMULE搜索关键词与文件标识的P2P流量进行监测或阻断。 + +#### [1.配置基础信息](#accordion1_1) + +配置基础信息包括:规则名称,执行动作,是否记录管控日志。 + +* 规则名称:用户自定义的该条配置的描述信息。 +* 执行动作:配置施加于网络传输单元时,对网络流量施加什么样的动作,此处为阻断、监测二选一。 +* 是否记录日志:对网络流量施加执行动作时,是否记录命中配置的P2P流量信息,包括发现时间、IP、文件标识等。 + +#### [2.业务配置属性](#accordion1_2) + +P2P协议扩展管控的流量属性信息: + +* EMULE 搜索关键词:关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* 文件标识:首先选择标识类型,BT INFO 或者EMULE fileid;关键字填写十六进制数标识;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是二进制;大小写敏感。 +* IP:IP配置类型,EMULE SERVER、BT TRACKER分别为客户端与EMULE、BT服务器的通信,EMULE NODE、BT NODE分别为客户端与客户端之间的通信,IP配置类型四选一;选择IP类型、协议与客户端与服务端的IP模式、端口模式,并且填写对应的具体IP与端口值,选择匹配方向是单向还是双向匹配。 +* Subscribe ID:IP地址对应的用户信息关键字。关键字填写;子串匹配,非二进制,大小写不敏感。 + +#### [3.配置约束条件](#accordion1_3) + +P2P协议管控配置的属性信息: + +* BT INFO:长度不超过20Byte。 +* EMULE Fileid:长度不超过16Byte。 +* 客户端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 客户端端口:端口与端口掩码范围是0-65535。 +* 服务端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 服务端端口:端口与端口掩码范围是0-65535。 +* 另:客户端IP与服务端IP不能相同。 + +#### [4.配置生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 + +#### [6.预期效果](#accordion1_7) + +* IP封堵效果:BT客户端(关闭utp及DHT相关设置)新添加的种子文件速度为0;Emule客户端(关闭迷惑协议)新添加的下载文件速度为0,Emule客户端服务器(不包括KAD网络)连接失败,无法进行Servers搜索。 +* IP监测效果:BT返回该链接含有的infohash值,Emule返回该链接含有的fileid和keywordhash或搜素关键词等信息。 +* BT INFOHASH封堵:客户端中对应要封堵的INFOHASH无下载速度(需先下配置,再新建bt下载任务),如果选择记录日志,则返回相应的INFOHASH封堵日志。 +* BT INFOHASH监测:客户端中对应监测INFOHASH无影响(需先下配置,再新建bt下载任务),返回对应的INFOHASH监测日志。 +* EMULE FILEID封堵:客户端中对应要封堵的FILEID无下载速度(需先下配置,再新建文件下载任务),如果选择记录日志,则返回相应的EMULE封堵日志。 +* EMULE FILEID监测:客户端中对应监测FILEID无影响(需先下配置,再新建文件下载任务),返回对应的监测日志。 +* EMULE搜索关键词命中封堵配置时,显示搜索结果列表为空,返回相应的EMULE封堵日志。 +* EMULE搜索关键词命中监测配置时,对搜索结果没有影响,界面返回实际对应的搜索关键词信息。 \ No newline at end of file diff --git a/src/main/webapp/online-help/ntc/stream_media.md b/src/main/webapp/online-help/ntc/stream_media.md new file mode 100644 index 000000000..6b2417539 --- /dev/null +++ b/src/main/webapp/online-help/ntc/stream_media.md @@ -0,0 +1,45 @@ +#### [0.功能简介](#accordion1_0) + +本页面完成针对流媒体流量(包括 RTSP协议与RTMP协议)的配置,从而对包含特定IP或URL特征的流媒体流量进行监测或阻断。 + +#### [1.配置基础信息](#accordion1_1) + +配置基础信息包括:规则名称,执行动作,是否记录管控日志。 + +* 规则名称:用户自定义的该条配置的描述信息。 +* 执行动作:配置施加于网络传输单元时,对网络流量施加什么样的动作,此处为阻断、监测二选一。 +* 是否记录日志:对网络流量施加执行动作时,是否记录命中流媒体配置的流量信息,包括发现时间、IP、URL等。 + +#### [2.业务配置属性](#accordion1_2) + +流媒体协议扩展管控的流量属性信息: + +* URL:流媒体的URL。关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;非二进制;大小写不敏感。 +* IP:选择IP类型、协议、IP模式、端口模式,并且填写对应的具体IP与端口值,选择匹配方向是单向还是双向匹配。 +* Subscribe ID:IP地址对应的用户信息关键字,子串匹配,非二进制,大小写不敏感。 + +#### [3.配置约束条件](#accordion1_3) + +流媒体协议管控配置的属性信息: + +* 客户端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 客户端端口:端口与端口掩码范围是0-65535。 +* 服务端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 服务端端口:端口与端口掩码范围是0-65535。 +* 另:客户端IP与服务端IP不能相同。 + +#### [4.生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 + +#### [6.预期效果](#accordion1_7) + +* 监测预期效果:记录符合配置条件的流媒体流量监测日志。 +* 阻断预期效果:阻断符合配置条件的流媒体流量,即客户端无法正常访问并播放该流媒体音视频内容,并记录阻断日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/ntc/voip.md b/src/main/webapp/online-help/ntc/voip.md new file mode 100644 index 000000000..ed148e67c --- /dev/null +++ b/src/main/webapp/online-help/ntc/voip.md @@ -0,0 +1,46 @@ +#### [0.功能简介](#accordion1_0) + +本页面完成针对VoIP流量(包括SIP协议与RTP协议)的配置,从而对包含特定IP、VoIP账号特征的VoIP流量进行监测或阻断。 + +#### [1.配置基础信息](#accordion1_1) + +配置基础信息包括:规则名称,执行动作,是否记录管控日志。 + +* 规则名称:用户自定义的该条配置的描述信息。 +* 执行动作:配置施加于网络传输单元时,对网络流量施加什么样的动作,此处为阻断、监测二选一。 +* 是否记录日志:对网络流量施加执行动作时,是否记录命中配置的VoIP流量信息,包括发现时间、IP、VoIP主被叫账号、通话语音等。 + +#### [2.业务配置属性](#accordion1_2) + +VoIP协议扩展管控的流量属性信息: + +* VoIP账号:关键字填写;匹配方式选择,例如子串匹配、前缀匹配、后缀匹配与精确匹配;是否二进制选择(此处是指关键字内容是否为二进制原始码流,选择是,则关键字处填写十六进制数);是否大小写敏感选择。 +* IP:选择IP类型、协议与客户端与服务端的IP模式、端口模式,并且填写对应的具体IP与端口值,选择匹配方向是单向还是双向匹配。 +* Subscribe ID:IP地址对应的用户信息关键字。关键字填写;子串匹配,非二进制,大小写不敏感。 + +#### [3.配置约束条件](#accordion1_3) + +VoIP协议管控配置的属性信息: + +* VoIP账号:长度不超过1500Byte。 +* 客户端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 客户端端口:端口与端口掩码范围是0-65535。 +* 服务端IP:合法的单IP;IP段只能配置x.x.x.0-x.x.x.255;IP/mask中mask值限制为16-32。 +* 服务端端口:端口与端口掩码范围是0-65535。 +* 另:客户端IP与服务端IP不能相同。 + +#### [4.配置生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效。 + +#### [5.配置标签](#accordion1_6) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 + +#### [6.预期效果](#accordion1_7) + +* 监测预期效果:记录符合配置条件的VoIP流量监测日志。 +* 阻断预期效果:阻断符合配置条件的VoIP通话,即客户端无法拨通本次VoIP电话,客户端与服务端均收到挂断、通话超时、服务器异常的虚假报文,并记录阻断日志。 \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/cache_policy.md b/src/main/webapp/online-help/proxy/cache_policy.md new file mode 100644 index 000000000..0f3fe2864 --- /dev/null +++ b/src/main/webapp/online-help/proxy/cache_policy.md @@ -0,0 +1,32 @@ +#### [1.Function Introduction](#accordion1_1) + +On National Proxy System, Individual Cache policy rules determine whether to cache or not based on traffic attributes, such as URL and Cookies. + +#### [2.Action](#accordion1_2) + +For cache action, the optimization parameters are: + +* A Cache key:is a unique string that lets the National Proxy System look for web content when requests hit them. It’s made up of a hostname, path, and cookie parts. By default, the Proxy use the entire URL as the cache key. Selecting the correct cache key will ensure maximum cache footprint and increase cache hits. +* Ignore Query String in URL:in case the query strings doesn’t actually indicate that the object need to be different then you could EXCLUDE them from the cache key. For example, after ignoring “sqp” and “rs” of URL: “https://example.com/pic.jpg?sqp=UAAI&rs=AOn4”. +* Include Cookie Values:in case the server send different content for the same URL based on the cookie value, you can include that cookie value as a part of cache key. For example, the server may set a cookie at the client called "prefLang=ru" to record user preferred language, you could add "prefLang" to distinguish different web content. +* Disable Revalidate:is an ON-OFF switch. The pragma-no-cache header in a client’s request causes the proxy to re-fetch the entire object from the original server, even if the cached copy of the object is fresh. By default this option is switch OFF, which means a client’s non-conditional request results in a conditional GET request sent to the original server if the object is already in cache. The conditional request allows the original server to return the 304 Not Modified response, if the content in cache is still fresh. Thereby, the server-side bandwidth and latency consumed are lesser as the full content is not retrieved again from the original server. +* Cache Dynamic Content:is an ON-OFF switch. A URL is considered dynamic if it ends in “.asp(x)” or contains a question mark (?), a semicolon (;), or “cgi”. Ignore Query String overrides this option (switch on). +* Cache Cookied Content:is an ON-OFF switch. By default, the Proxy does NOT cache cookied content of any type. If this option is switch on, the system cache all Cookeid content except HTML. +* Ignore Request no-cache Headers:is an ON-OFF switch. By default, the proxy strictly observes client Cache-Control: no-cache directives. As known as: + * i. Authorization + * ii. WWW-Authenticate + * iii. Cache-Control: no-store + * iv. Cache-Control: no-cache +* If a requested object contains a no-cache header, then proxy forwards the request to the origin server even if it has a fresh copy in cache. You can configure proxy to ignore client no-cache directives such that it ignores no-cache headers from client requests and serves the object from its cache. Ignore Response no-cache Headers — is an ON-OFF switch. By default, a response from an origin server with a no-cache header is not stored in the cache. As known as: + * i. Cache-Control: no-store + * ii. Cache-Control: private + * iii. Set-Cookie + * iv. Cache-Control: no-cache + * v. WWW-Authenticate + * vi. Expires header with a value of 0 (zero) or a past date.If you configure proxy to ignore no-cache headers, then proxy also ignores no-store headers. The default behavior of observing no-cache directives is appropriate in most cases. +* Forcing Object Caching: is an ON-OFF switch. You can force Proxy to cache specific URLs (including dynamic URLs) for a specified duration, regardless of Cache-Control response headers. +* Minimum Use: sets the number of times an item must be requested by clients before Proxy caches it. This is useful if the cache is constantly filling up, as it ensures that only the most frequently accessed items are added to the cache. By default, Proxy cache object at its first appearance. The Counter resets in every 30 minutes. Note that the requests is counted in computing unit independently. +* Max Cache Object Size: sets the upper limit of an object size, larger object will not be cached. By default, Proxy does not cache object larger than 1 GB. +* Cache Pinning Time: configures Proxy to keep certain objects in the cache for a specified time. You can use this option to ensure that the most popular objects are in cache when needed and to prevent cache manager from deleting important objects. Proxy observes Cache-Control headers and pins an object in the cache only if it is indeed cacheable. +* Max Cache Size: sets the upper limit of the size of storage for a policy. By default, Proxy uses all available disk space. When the cache size reaches the limit, the cache manager removes the files that were least recently used to bring the cache size back under the limit. +* Inactive Time: specifies how long an item can remain in the cache without being accessed. A file that has not been requested for this time is automatically deleted from the cache by the cache manager, regardless of whether or not it has expired. \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/control_policy.md b/src/main/webapp/online-help/proxy/control_policy.md new file mode 100644 index 000000000..9c02cb194 --- /dev/null +++ b/src/main/webapp/online-help/proxy/control_policy.md @@ -0,0 +1,24 @@ +#### [1.Function Introduction](#accordion1_1) + +On National Proxy System, Individual Control policy rules determine whether to allow, block, redirect or replace a session based on traffic attributes, such as URL, request header fields, request body keywords, response header fields, response body keywords, IP address, Subscribe ID and their combination. You could specify these attributes in the submenu of Control Policy. + +#### [2.Action](#accordion1_2) + +You could select one of the five actions for above attributes, as known as: + +* Monitor:the Proxy produce a log to record matched HTTP session information. +* Block:the Proxy terminate matched HTTP session with an error page and produce a log. You MUST specify a Response Code and a Response Content to generate an error page. +* Redirect: the Proxy redirect matched HTTP session to a predefined URL. Since redirection need to be performed before delivering response to client, condition of response body is not applicable in this action. You MUST configure the redirect response via Response Code and Response URL. The Response URL MUST start with a scheme (http:// or https://). You SHOULD NOT select 301 as Response Code unless you exactly know what you are doing. This action produces a log. +* Replace:the Proxy Searches in a given HTTP part to Find a given string, and Replace any matches with another given string. If no match was found, the session remained untouched. For performance concerns, condition of request body and response body is not available in this action. For example, you can configure the Proxy to search in the response body of URL “www.example.com/index.html”, find every “string1” and replace with “string2”. This action produces a log. +* Whitelist:the Proxy pass-through the matched sessions and produce no log. +* In case of HTTP session matches one more policies, the priority order is Whitelist > Reject > Redirect > Replace > Monitor, action with higher priority overrides others. + +#### [3.Attibutes](#accordion1_3) + +The attributes are detailed in following context: + +* URL:From proxy’s perspective, a HTTP URL consists of a hierarchical sequence of three components: URL = hostname/path\[?query\] . The URL path name can also be specified by the user in the local writing system. If not already encoded, it is converted to UTF-8, and any characters not part of the basic URL character set are escaped as hexadecimal using percent-encoding; for example, search keywords “русский” in Google produces URL: https://www.google.com/search?q=%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9 To perform policy action on above URL, you could input the whole URL in the input box. Or, you could input original keywords and let the Proxy do the decoding, e.g. “google.com/search” & “русский”. Note that the scheme string MUST be excluded from the URL, it’s “https://” in this case. +* Request Header: is used to set conditions on request header fields. Header fields are colon-separated key-value pairs in clear-text string format, terminated by a carriage return (CR) and line feed (LF) character sequence. For example, “user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)“ is a header filed in request header. The Matching District is used to configure the field’s key, if the key was presented, the Proxy will search in the value for Keywords. +* Response Header: is used to set conditions on response header fields. Its configuration is similar to Request Header. +* Request Body:is used to set conditions on request’s body message. The Proxy searches the pre-configured Keywords in it. You can configure non-ASCII or non-utf8 keywords by turn on HEX. +* Response Body:is used to set conditions on response’s body message. Its configuration is similar to Request Body. \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/domain_intercept_policy.md b/src/main/webapp/online-help/proxy/domain_intercept_policy.md new file mode 100644 index 000000000..dad6045a7 --- /dev/null +++ b/src/main/webapp/online-help/proxy/domain_intercept_policy.md @@ -0,0 +1,34 @@ +#### [1.功能简介](#accordion1_1) + +域名拦截主要是根据域名对网站进行拦截,主要分为域名监测,域名白名单和域名限速功能,匹配的方式为子串匹配。当检测到请求的url中包含有配置的域名,根据上述三个功能,进行相应的替换替换,证书不替换和,限速功能。 + +#### [2\. 基础配置信息](#accordion1_2) + +* 域名:监测网站的域名,或是域名的子串 + +#### [3\. 业务配置属性](#accordion1_2) + +* 域名:请求URL中的域名,或是URL中域名的子串 +* 限速:对被测机器限制网速,根据配置的数值比列丢包 + +#### [4.配置约束条件](#accordion1_4) + +* 域名:配置的监测域名,合法的域名表示 +* 丢包率:在0.001-0.009之间 + +#### [5.预期效果](#accordion1_5) + +* 黑名单:浏览器证书替换 +* 白名单:浏览器证书不替换 +* 限速:测试有等比例接近的丢包 + +#### [6.配置生效区域](#accordion1_6) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效 + +#### [7.配置标签](#accordion1_7) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据。 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/https_block_log.md b/src/main/webapp/online-help/proxy/https_block_log.md new file mode 100644 index 000000000..2b5b142c2 --- /dev/null +++ b/src/main/webapp/online-help/proxy/https_block_log.md @@ -0,0 +1,71 @@ +#### [1.基础信息](#accordion1_1) + +Proxy日志按照控制策略类型进行分类,分为HTTP(S)监测、HTTP(S)管控、HTTP(S)重定向配置、HTTP(S)替换。每类日志页面下有两个基础搜索选项:开始时间、结束时间。和三个功能按钮搜:搜索、重置、筛选和右侧的设置按钮。 + +* 选项名称:开始时间- +* 执行动作:点击“开始时间”可以选择搜索日志的时间范围。时间选项中有当前时间的日历和时间表,以确定具体的筛选时间,下方三个选项“clear”表示清空当前选择、“Today”表示将选择时间定为当前时间,“OK”表示确认。确认时间范围后,搜索结果将返回时间范围内的满足搜索条件的HTTP(S)管控日志 + +* 选项名称:结束时间- +* 执行动作:点击“结束时间”可以选择搜索日志的时间范围。时间选项中有当前时间的日历和时间表,以确定具体的筛选时间,下方三个选项“clear”表示清空当前选择、“Today”表示将选择时间定为当前时间,“OK”表示确认。确认时间范围后,搜索结果将返回时间范围内的满足搜索条件的HTTP(S)管控日志 + +* 选项名称:搜索- +* 执行动作:点击“搜索”,将返回满足时间范围和筛选条件内的HTTP(S)重定向日志 + +* 选项名称:重置- +* 执行动作:点击“重置”,将筛选条件和开始时间结束时间清空 + +* 选项名称:筛选- +* 执行动作:点击“筛选”,扩展日志筛选条件。eg.传输层协议、传输方向等 + +* 选项名称:筛选- +* 执行动作:点击“筛选”,选择查询结果输出的日志信息项 + +#### [2.拓展筛选项](#accordion1_3) + +点开筛选按钮后,会出现扩展搜索选项:传输层协议、传输方向、出入口、处理机IP、源IP、目的IP和配置ID。 + +* 选项名称:传输层协议- +* 执行动作:点击“筛选”——>选择“传输层协议”,可以选择:L2TP、IPv4\_UDP、IPv6、IPv6\_UDP、OpenVPN、MAC、MPLS、IPv4\_TCP、IPv4、IPv6\_TCP、PPTP、VLAN、GRE。确认筛选的传输层协议后,搜索结果将返回选定时间范围内的对应协议的HTTP(S)管控日志,不做选择时默认所有协议 + +* 选项名称:传输方向- +* 执行动作:点击“筛选”——>选择“传输方向”,可以选择:境内、境外。境内表示触发规则的源IP为内部IP,境外表示触发规则的源IP为外部IP。确认筛选的传输方向后,搜索结果将返回选定时间范围内的对应传输方向的HTTP(S)重定向日志,不做选择时默认境内外 + +* 选项名称:出入口- +* 执行动作:点击“筛选”——>选择“出入口”。暂时不支持该功能 + +* 选项名称:处理机IP- +* 执行动作:点击“筛选”——>选择“处理机IP”,输入筛选的处理机IP地址,支持IPv4和IPv6,IPv4输入“IPv4 xxx”,IPv输入“IPv6 xxx”(xxx为对应IP地址),eg."IPv4 192.168.17.3"、"IPv6 fc00::1:1f"。确认筛选的处理机IP后,搜索结果将返回选定时间范围内的对应处理机IP的HTTP(S)管控日志,不做选择时默认所有IP + +* 选项名称:源IP- +* 执行动作:点击“筛选”——>选择“源IP”,输入筛选的源IP地址,支持IPv4和IPv6,IPv4输入“IPv4 xxx”,IPv输入“IPv6 xxx”(xxx为对应IP地址),eg."IPv4 192.168.17.3"、"IPv6 fc00::1:1f"。确认筛选的源IP后,搜索结果将返回选定时间范围内的对应源IP的HTTP(S)管控日志,不做选择时默认所有IP + +* 选项名称:目的IP- +* 执行动作:点击“筛选”——>选择“目的IP”,输入筛选的目的IP地址,支持IPv4和IPv6,IPv4输入“IPv4 xxx”,IPv输入“IPv6 xxx”(xxx为对应IP地址),eg."IPv4 192.168.17.3"、"IPv6 fc00::1:1f"。确认筛选的目的IP后,搜索结果将返回选定时间范围内的对应目的IP的HTTP(S)管控日志,不做选择时默认所有IP + +* 选项名称:配置ID- +* 执行动作:点击“筛选”——>选择“配置ID”,输入筛选的配置ID。确认筛选的目的IP后,搜索结果将返回选定时间范围内的对应配置ID的HTTP(S)重定向日志,不做选择时默认所有配置 + +#### [3.日志信息标签:配置ID、发现时间、出入口、URL、处理机IP、传输层协议、源目的IP端口等](#accordion1_2) + +此处对日志信息每项标签做解析,帮助使用人员理解日志具体信息: Proxy在命中记录日志的控制策略时将会产生相应的日志信息,命中配置的消息日志信息包括:配置ID、发现时间、出入口、URL、处理机IP、传输层协议、目的IP、源IP、目的端口、源端口、串联设备、方向、流类型、服务端地址、客户端地址、客户端ASN、服务端ASN、客户端用户名、服务端用户名、现场日志文件地址。 + +* 配置ID:命中配置的配置ID +* 发现时间:命中规则的时间 +* 出入口:暂不支持 +* URL:命中配置的URL +* 处理机IP:处理这条命中规则的服务器IP +* 传输层协议:这条消息的传输层协议 +* 目的IP:命中配置的连接的目的IP +* 源IP:命中配置的连接的源IP +* 目的端口:命中配置的连接的目的端口 +* 源端口:命中配置的连接的源端口 +* 串联设备:暂不支持 +* 方向:该日志是传输方向--境内/境外 +* 流类型:该流是单向或双向流 +* 服务端地址:该流服务端所在的地理区域,eg.Hong Kong、United States +* 客户端地址:该流客户端所在的地理区域,eg.Hong Kong、United States +* 客户端ASN:客户端的ASN号(自治系统号) +* 服务端ASN:服务端的ASN号(自治系统号) +* 客户端用户名:客户端账户的用户名 +* 服务端用户名:服务端账户的用户名 +* 现场日志文件地址:该日志保存的地址 \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/https_block_policy.md b/src/main/webapp/online-help/proxy/https_block_policy.md new file mode 100644 index 000000000..e5670cab8 --- /dev/null +++ b/src/main/webapp/online-help/proxy/https_block_policy.md @@ -0,0 +1,49 @@ +#### [1.功能简介](#accordion1_1) + +HTTP(s)阻断主要的功能是实现浏览器无法访问网站。当配置的测试机的IP地址等信息后,被测机器无法访问网站,阻断上网的功能,主要包括IP阻断,URL阻断,请求头域阻断,应答头域阻断,请求内容阻断,应答内容阻断,账号阻断 + +#### [2.基础配置信息](#accordion1_2) + +* IP:同“IP拦截” +* HTTP URL:“同域名拦截” +* HTTP 请求头域:同“HTTP(s)监测” +* HTTP 应答头域:同“HTTP(s)监测” +* HTTP 请求内容:同“HTTP(s)监测” +* HTTP 应答内容:同“HTTP(s)监测” +* 账号:同“HTTP(s)监测” + +#### [2.业务配置属性](#accordion1_3) + +* IP:同“HTTP(s)监测” +* HTTP URL:同“HTTP(s)监测” +* HTTP 请求头域:同“HTTP(s)监测” +* HTTP 应答头域:同“HTTP(s)监测” +* HTTP 请求内容:同“HTTP(s)监测” +* HTTP 应答内容:同“HTTP(s)监测” +* 账号:同“HTTP(s)监测” + +#### [4.配置约束条件](#accordion1_4) + +* IP:同“IP拦截” +* URL:同“域名拦截” +* HTTP 请求头:同“HTTP(s)监测” +* HTTP 应答头:同“HTTP(s)监测” +* HTTP 请求内容:同“HTTP(s)监测” +* HTTP 应答内容:同“HTTP(s)监测” +* 账号:同“HTTP(s)监测” + +#### [5.预期效果](#accordion1_5) + +* 阻断效果:浏览器无法访问页面 +* 日志检查:生成日志 + +#### [6.配置生效区域](#accordion1_6) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效 + +#### [7.配置标签](#accordion1_7) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据。 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/https_monitor_log.md b/src/main/webapp/online-help/proxy/https_monitor_log.md new file mode 100644 index 000000000..53dc60ed0 --- /dev/null +++ b/src/main/webapp/online-help/proxy/https_monitor_log.md @@ -0,0 +1,71 @@ +#### [1.基础信息](#accordion1_1) + +Proxy日志按照控制策略类型进行分类,分为HTTP(S)监测、HTTP(S)管控、HTTP(S)重定向配置、HTTP(S)替换。每类日志页面下有两个基础搜索选项:开始时间、结束时间。和三个功能按钮搜:搜索、重置、筛选和右侧的设置按钮。 + +* 选项名称:开始时间- +* 执行动作:点击“开始时间”可以选择搜索日志的时间范围。时间选项中有当前时间的日历和时间表,以确定具体的筛选时间,下方三个选项“clear”表示清空当前选择、“Today”表示将选择时间定为当前时间,“OK”表示确认。确认时间范围后,搜索结果将返回时间范围内的满足搜索条件的HTTP(S)监测日志 + +* 选项名称:结束时间- +* 执行动作:点击“结束时间”可以选择搜索日志的时间范围。时间选项中有当前时间的日历和时间表,以确定具体的筛选时间,下方三个选项“clear”表示清空当前选择、“Today”表示将选择时间定为当前时间,“OK”表示确认。确认时间范围后,搜索结果将返回时间范围内的满足搜索条件的HTTP(S)监测日志 + +* 选项名称:搜索- +* 执行动作:点击“搜索”,将返回满足时间范围和筛选条件内的HTTP(S)监测日志 + +* 选项名称:重置- +* 执行动作:点击“重置”,将筛选条件和开始时间结束时间清空 + +* 选项名称:筛选- +* 执行动作:点击“筛选”,扩展日志筛选条件。eg.传输层协议、传输方向等 + +* 选项名称:筛选- +* 执行动作:点击“筛选”,选择查询结果输出的日志信息项 + +#### [2.拓展筛选项](#accordion1_3) + +点开筛选按钮后,会出现扩展搜索选项:传输层协议、传输方向、出入口、处理机IP、源IP、目的IP和配置ID。 + +* 选项名称:传输层协议- +* 执行动作:点击“筛选”——>选择“传输层协议”,可以选择:L2TP、IPv4\_UDP、IPv6、IPv6\_UDP、OpenVPN、MAC、MPLS、IPv4\_TCP、IPv4、IPv6\_TCP、PPTP、VLAN、GRE。确认筛选的传输层协议后,搜索结果将返回选定时间范围内的对应协议的HTTP(S)监测日志,不做选择时默认所有协议 + +* 选项名称:传输方向- +* 执行动作:点击“筛选”——>选择“传输方向”,可以选择:境内、境外。境内表示触发规则的源IP为内部IP,境外表示触发规则的源IP为外部IP。确认筛选的传输方向后,搜索结果将返回选定时间范围内的对应传输方向的HTTP(S)监测日志,不做选择时默认境内外 + +* 选项名称:出入口- +* 执行动作:点击“筛选”——>选择“出入口”。暂时不支持该功能 + +* 选项名称:处理机IP- +* 执行动作:点击“筛选”——>选择“处理机IP”,输入筛选的处理机IP地址,支持IPv4和IPv6,IPv4输入“IPv4 xxx”,IPv输入“IPv6 xxx”(xxx为对应IP地址),eg."IPv4 192.168.17.3"、"IPv6 fc00::1:1f"。确认筛选的处理机IP后,搜索结果将返回选定时间范围内的对应处理机IP的HTTP(S)监测日志,不做选择时默认所有IP + +* 选项名称:源IP- +* 执行动作:点击“筛选”——>选择“源IP”,输入筛选的源IP地址,支持IPv4和IPv6,IPv4输入“IPv4 xxx”,IPv输入“IPv6 xxx”(xxx为对应IP地址),eg."IPv4 192.168.17.3"、"IPv6 fc00::1:1f"。确认筛选的源IP后,搜索结果将返回选定时间范围内的对应源IP的HTTP(S)监测日志,不做选择时默认所有IP + +* 选项名称:目的IP- +* 执行动作:点击“筛选”——>选择“目的IP”,输入筛选的目的IP地址,支持IPv4和IPv6,IPv4输入“IPv4 xxx”,IPv输入“IPv6 xxx”(xxx为对应IP地址),eg."IPv4 192.168.17.3"、"IPv6 fc00::1:1f"。确认筛选的目的IP后,搜索结果将返回选定时间范围内的对应目的IP的HTTP(S)监测日志,不做选择时默认所有IP + +* 选项名称:配置ID- +* 执行动作:点击“筛选”——>选择“配置ID”,输入筛选的配置ID。确认筛选的目的IP后,搜索结果将返回选定时间范围内的对应配置ID的HTTP(S)监测日志,不做选择时默认所有配置 + +#### [3.日志信息标签:配置ID、发现时间、出入口、URL、处理机IP、传输层协议、源目的IP端口等](#accordion1_2) + +此处对日志信息每项标签做解析,帮助使用人员理解日志具体信息: Proxy在命中记录日志的控制策略时将会产生相应的日志信息,命中配置的消息日志信息包括:配置ID、发现时间、出入口、URL、处理机IP、传输层协议、目的IP、源IP、目的端口、源端口、串联设备、方向、流类型、服务端地址、客户端地址、客户端ASN、服务端ASN、客户端用户名、服务端用户名、现场日志文件地址。 + +* 配置ID:命中配置的配置ID +* 发现时间:命中规则的时间 +* 出入口:暂不支持 +* URL:命中配置的URL +* 处理机IP:处理这条命中规则的服务器IP +* 传输层协议:这条消息的传输层协议 +* 目的IP:命中配置的连接的目的IP +* 源IP:命中配置的连接的源IP +* 目的端口:命中配置的连接的目的端口 +* 源端口:命中配置的连接的源端口 +* 串联设备:暂不支持 +* 方向:该日志是传输方向--境内/境外 +* 流类型:该流是单向或双向流 +* 服务端地址:该流服务端所在的地理区域,eg.Hong Kong、United States +* 客户端地址:该流客户端所在的地理区域,eg.Hong Kong、United States +* 客户端ASN:客户端的ASN号(自治系统号) +* 服务端ASN:服务端的ASN号(自治系统号) +* 客户端用户名:客户端账户的用户名 +* 服务端用户名:服务端账户的用户名 +* 现场日志文件地址:该日志保存的地址 \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/https_monitor_policy.md b/src/main/webapp/online-help/proxy/https_monitor_policy.md new file mode 100644 index 000000000..757c14ae3 --- /dev/null +++ b/src/main/webapp/online-help/proxy/https_monitor_policy.md @@ -0,0 +1,52 @@ +#### [1.功能简介](#accordion1_1) + +HTTP(s)监测与IP监测的功能类似,额外增加了其他的监测,主要包括URL监测,请求头域监测,应答头域监测,请求内容监测,应答内容监测,账号监测。 + +#### [2.基础配置信息](#accordion1_2) + +* IP:同“IP拦截” +* HTTP URL:同“域名拦截” +* HTTP 请求头域:HTTP发送请求的头域信息 +* HTTP 应答头域:HTTP应答的头域信息 +* HTTP 请求内容:HTTP请求体中的内容 +* HTTP 应答内容:HTTP 响应体的内容 +* 账号:上网登陆账号 + +#### [3.业务配置属性](#accordion1_3) + +* IP:同“IP拦截” +* 端口:同“IP拦截” +* HTTP URL:同“域名拦截” +* URL:同“域名拦截” +* HTTP 请求头域:浏览器发送头信息的请求头,其中包括请求方法 +* HTTP 应答头域:HTTP响应的头信息 +* HTTP 请求内容:HTTP请求体 +* HTTP 应答内容:HTTP响应体 +* 账号:拨号上网账号 + +#### [4.配置约束条件](#accordion1_4) + +* IP:同“IP拦截” +* 端口:同“IP拦截” +* URL:配置的URL必须是可访问的 +* HTTP 请求头域:合法的请求头域 +* HTTP 应答头域:合法的应答头域 +* HTTP 请求内容:合法HTTP请求体 +* HTTP 应答内容:合法HTTP响应体 +* 账号:拨号上网的账号 + +#### [5.预期效果](#accordion1_5) + +* 证书替换:浏览器的证书替换,有日志 +* 账号监测:检测到配置的账号,有日志 + +#### [6.配置生效区域](#accordion1_6) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效 + +#### [7.配置标签](#accordion1_7) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据。 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/https_redirect_log.md b/src/main/webapp/online-help/proxy/https_redirect_log.md new file mode 100644 index 000000000..8953171a9 --- /dev/null +++ b/src/main/webapp/online-help/proxy/https_redirect_log.md @@ -0,0 +1,71 @@ +#### [1.基础信息](#accordion1_1) + +Proxy日志按照控制策略类型进行分类,分为HTTP(S)监测、HTTP(S)管控、HTTP(S)重定向配置、HTTP(S)替换。每类日志页面下有两个基础搜索选项:开始时间、结束时间。和三个功能按钮搜:搜索、重置、筛选和右侧的设置按钮。 + +* 选项名称:开始时间- +* 执行动作:点击“开始时间”可以选择搜索日志的时间范围。时间选项中有当前时间的日历和时间表,以确定具体的筛选时间,下方三个选项“clear”表示清空当前选择、“Today”表示将选择时间定为当前时间,“OK”表示确认。确认时间范围后,搜索结果将返回时间范围内的满足搜索条件的HTTP(S)重定向配置日志 + +* 选项名称:结束时间- +* 执行动作:点击“结束时间”可以选择搜索日志的时间范围。时间选项中有当前时间的日历和时间表,以确定具体的筛选时间,下方三个选项“clear”表示清空当前选择、“Today”表示将选择时间定为当前时间,“OK”表示确认。确认时间范围后,搜索结果将返回时间范围内的满足搜索条件的HTTP(S)重定向配置日志 + +* 选项名称:搜索- +* 执行动作:点击“搜索”,将返回满足时间范围和筛选条件内的HTTP(S)重定向日志 + +* 选项名称:重置- +* 执行动作:点击“重置”,将筛选条件和开始时间结束时间清空 + +* 选项名称:筛选- +* 执行动作:点击“筛选”,扩展日志筛选条件。eg.传输层协议、传输方向等 + +* 选项名称:筛选- +* 执行动作:点击“筛选”,选择查询结果输出的日志信息项 + +#### [2.拓展筛选项](#accordion1_3) + +点开筛选按钮后,会出现扩展搜索选项:传输层协议、传输方向、出入口、处理机IP、源IP、目的IP和配置ID。 + +* 选项名称:传输层协议- +* 执行动作:点击“筛选”——>选择“传输层协议”,可以选择:L2TP、IPv4\_UDP、IPv6、IPv6\_UDP、OpenVPN、MAC、MPLS、IPv4\_TCP、IPv4、IPv6\_TCP、PPTP、VLAN、GRE。确认筛选的传输层协议后,搜索结果将返回选定时间范围内的对应协议的HTTP(S)重定向配置日志,不做选择时默认所有协议 + +* 选项名称:传输方向- +* 执行动作:点击“筛选”——>选择“传输方向”,可以选择:境内、境外。境内表示触发规则的源IP为内部IP,境外表示触发规则的源IP为外部IP。确认筛选的传输方向后,搜索结果将返回选定时间范围内的对应传输方向的HTTP(S)重定向日志,不做选择时默认境内外 + +* 选项名称:出入口- +* 执行动作:点击“筛选”——>选择“出入口”。暂时不支持该功能 + +* 选项名称:处理机IP- +* 执行动作:点击“筛选”——>选择“处理机IP”,输入筛选的处理机IP地址,支持IPv4和IPv6,IPv4输入“IPv4 xxx”,IPv输入“IPv6 xxx”(xxx为对应IP地址),eg."IPv4 192.168.17.3"、"IPv6 fc00::1:1f"。确认筛选的处理机IP后,搜索结果将返回选定时间范围内的对应处理机IP的HTTP(S)重定向配置日志,不做选择时默认所有IP + +* 选项名称:源IP- +* 执行动作:点击“筛选”——>选择“源IP”,输入筛选的源IP地址,支持IPv4和IPv6,IPv4输入“IPv4 xxx”,IPv输入“IPv6 xxx”(xxx为对应IP地址),eg."IPv4 192.168.17.3"、"IPv6 fc00::1:1f"。确认筛选的源IP后,搜索结果将返回选定时间范围内的对应源IP的HTTP(S)重定向配置日志,不做选择时默认所有IP + +* 选项名称:目的IP- +* 执行动作:点击“筛选”——>选择“目的IP”,输入筛选的目的IP地址,支持IPv4和IPv6,IPv4输入“IPv4 xxx”,IPv输入“IPv6 xxx”(xxx为对应IP地址),eg."IPv4 192.168.17.3"、"IPv6 fc00::1:1f"。确认筛选的目的IP后,搜索结果将返回选定时间范围内的对应目的IP的HTTP(S)重定向配置日志,不做选择时默认所有IP + +* 选项名称:配置ID- +* 执行动作:点击“筛选”——>选择“配置ID”,输入筛选的配置ID。确认筛选的目的IP后,搜索结果将返回选定时间范围内的对应配置ID的HTTP(S)重定向日志,不做选择时默认所有配置 + +#### [3.日志信息标签:配置ID、发现时间、出入口、URL、处理机IP、传输层协议、源目的IP端口等](#accordion1_2) + +此处对日志信息每项标签做解析,帮助使用人员理解日志具体信息: Proxy在命中记录日志的控制策略时将会产生相应的日志信息,命中配置的消息日志信息包括:配置ID、发现时间、出入口、URL、处理机IP、传输层协议、目的IP、源IP、目的端口、源端口、串联设备、方向、流类型、服务端地址、客户端地址、客户端ASN、服务端ASN、客户端用户名、服务端用户名、现场日志文件地址。 + +* 配置ID:命中配置的配置ID +* 发现时间:命中规则的时间 +* 出入口:暂不支持 +* URL:命中配置的URL +* 处理机IP:处理这条命中规则的服务器IP +* 传输层协议:这条消息的传输层协议 +* 目的IP:命中配置的连接的目的IP +* 源IP:命中配置的连接的源IP +* 目的端口:命中配置的连接的目的端口 +* 源端口:命中配置的连接的源端口 +* 串联设备:暂不支持 +* 方向:该日志是传输方向--境内/境外 +* 流类型:该流是单向或双向流 +* 服务端地址:该流服务端所在的地理区域,eg.Hong Kong、United States +* 客户端地址:该流客户端所在的地理区域,eg.Hong Kong、United States +* 客户端ASN:客户端的ASN号(自治系统号) +* 服务端ASN:服务端的ASN号(自治系统号) +* 客户端用户名:客户端账户的用户名 +* 服务端用户名:服务端账户的用户名 +* 现场日志文件地址:该日志保存的地址 \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/https_redirect_policy.md b/src/main/webapp/online-help/proxy/https_redirect_policy.md new file mode 100644 index 000000000..0291d616b --- /dev/null +++ b/src/main/webapp/online-help/proxy/https_redirect_policy.md @@ -0,0 +1,49 @@ +#### [1.功能简介](#accordion1_1) + +HTTP(s)重定向主要对将请求的页面根据配置的信息重定向到指定的网页,主要包括应答重定向,IP重定向,URL重定向,请求头域重定向和应答头域重定向,请求内容重定向,应答内容重定向,账号重定向。 + +#### [2.基础配置信息](#accordion1_2) + +* IP:同“IP拦截” +* HTTP URL:同“域名拦截” +* HTTP 请求头域:同“HTTP(s)监测” +* HTTP 应答头域:同“HTTP(s)监测” +* HTTP 请求内容:同“HTTP(s)监测” +* HTTP 应答内容:同“HTTP(s)监测” +* 账号:同“HTTP(s)监测” + +#### [3.业务配置属性](#accordion1_3) + +* IP:同“IP拦截” +* HTTP URL:同“域名拦截” +* HTTP 请求头域:同“HTTP(s)监测” +* HTTP 应答头域:同“HTTP(s)监测” +* HTTP 请求内容:同“HTTP(s)监测” +* HTTP 应答内容:同“HTTP(s)监测” +* 账号:同“HTTP(s)监测” + +#### [4.配置约束条件](#accordion1_4) + +* IP:同“IP拦截” +* HTTP URL:同“域名拦截” +* HTTP 请求头域:同“HTTP(s)监测” +* HTTP 应答头域:同“HTTP(s)监测” +* HTTP 请求内容:同“HTTP(s)监测” +* HTTP 应答内容:同“HTTP(s)监测” +* 账号:同“HTTP(s)监测” + +#### [5.预期效果](#accordion1_5) + +* 页面重定向:浏览器重定向到指定的页面 +* 日志:生成日志 + +#### [6.配置生效区域](#accordion1_6) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效 + +#### [7.配置标签](#accordion1_7) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据。 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/https_replace_log.md b/src/main/webapp/online-help/proxy/https_replace_log.md new file mode 100644 index 000000000..64dd6bbc3 --- /dev/null +++ b/src/main/webapp/online-help/proxy/https_replace_log.md @@ -0,0 +1,71 @@ +#### [1.基础信息](#accordion1_1) + +Proxy日志按照控制策略类型进行分类,分为HTTP(S)监测、HTTP(S)管控、HTTP(S)重定向配置、HTTP(S)替换。每类日志页面下有两个基础搜索选项:开始时间、结束时间。和三个功能按钮搜:搜索、重置、筛选和右侧的设置按钮。 + +* 选项名称:开始时间- +* 执行动作:点击“开始时间”可以选择搜索日志的时间范围。时间选项中有当前时间的日历和时间表,以确定具体的筛选时间,下方三个选项“clear”表示清空当前选择、“Today”表示将选择时间定为当前时间,“OK”表示确认。确认时间范围后,搜索结果将返回时间范围内的满足搜索条件的HTTP(S)替换日志 + +* 选项名称:结束时间- +* 执行动作:点击“结束时间”可以选择搜索日志的时间范围。时间选项中有当前时间的日历和时间表,以确定具体的筛选时间,下方三个选项“clear”表示清空当前选择、“Today”表示将选择时间定为当前时间,“OK”表示确认。确认时间范围后,搜索结果将返回时间范围内的满足搜索条件的HTTP(S)替换日志 + +* 选项名称:搜索- +* 执行动作:点击“搜索”,将返回满足时间范围和筛选条件内的HTTP(S)重定向日志 + +* 选项名称:重置- +* 执行动作:点击“重置”,将筛选条件和开始时间结束时间清空 + +* 选项名称:筛选- +* 执行动作:点击“筛选”,扩展日志筛选条件。eg.传输层协议、传输方向等 + +* 选项名称:筛选- +* 执行动作:点击“筛选”,选择查询结果输出的日志信息项 + +#### [2.拓展筛选项](#accordion1_3) + +点开筛选按钮后,会出现扩展搜索选项:传输层协议、传输方向、出入口、处理机IP、源IP、目的IP和配置ID。 + +* 选项名称:传输层协议- +* 执行动作:点击“筛选”——>选择“传输层协议”,可以选择:L2TP、IPv4\_UDP、IPv6、IPv6\_UDP、OpenVPN、MAC、MPLS、IPv4\_TCP、IPv4、IPv6\_TCP、PPTP、VLAN、GRE。确认筛选的传输层协议后,搜索结果将返回选定时间范围内的对应协议的HTTP(S)替换日志,不做选择时默认所有协议 + +* 选项名称:传输方向- +* 执行动作:点击“筛选”——>选择“传输方向”,可以选择:境内、境外。境内表示触发规则的源IP为内部IP,境外表示触发规则的源IP为外部IP。确认筛选的传输方向后,搜索结果将返回选定时间范围内的对应传输方向的HTTP(S)重定向日志,不做选择时默认境内外 + +* 选项名称:出入口- +* 执行动作:点击“筛选”——>选择“出入口”。暂时不支持该功能 + +* 选项名称:处理机IP- +* 执行动作:点击“筛选”——>选择“处理机IP”,输入筛选的处理机IP地址,支持IPv4和IPv6,IPv4输入“IPv4 xxx”,IPv输入“IPv6 xxx”(xxx为对应IP地址),eg."IPv4 192.168.17.3"、"IPv6 fc00::1:1f"。确认筛选的处理机IP后,搜索结果将返回选定时间范围内的对应处理机IP的HTTP(S)替换日志,不做选择时默认所有IP + +* 选项名称:源IP- +* 执行动作:点击“筛选”——>选择“源IP”,输入筛选的源IP地址,支持IPv4和IPv6,IPv4输入“IPv4 xxx”,IPv输入“IPv6 xxx”(xxx为对应IP地址),eg."IPv4 192.168.17.3"、"IPv6 fc00::1:1f"。确认筛选的源IP后,搜索结果将返回选定时间范围内的对应源IP的HTTP(S)替换日志,不做选择时默认所有IP + +* 选项名称:目的IP- +* 执行动作:点击“筛选”——>选择“目的IP”,输入筛选的目的IP地址,支持IPv4和IPv6,IPv4输入“IPv4 xxx”,IPv输入“IPv6 xxx”(xxx为对应IP地址),eg."IPv4 192.168.17.3"、"IPv6 fc00::1:1f"。确认筛选的目的IP后,搜索结果将返回选定时间范围内的对应目的IP的HTTP(S)替换日志,不做选择时默认所有IP + +* 选项名称:配置ID- +* 执行动作:点击“筛选”——>选择“配置ID”,输入筛选的配置ID。确认筛选的目的IP后,搜索结果将返回选定时间范围内的对应配置ID的HTTP(S)重定向日志,不做选择时默认所有配置 + +#### [3.日志信息标签:配置ID、发现时间、出入口、URL、处理机IP、传输层协议、源目的IP端口等](#accordion1_2) + +此处对日志信息每项标签做解析,帮助使用人员理解日志具体信息: Proxy在命中记录日志的控制策略时将会产生相应的日志信息,命中配置的消息日志信息包括:配置ID、发现时间、出入口、URL、处理机IP、传输层协议、目的IP、源IP、目的端口、源端口、串联设备、方向、流类型、服务端地址、客户端地址、客户端ASN、服务端ASN、客户端用户名、服务端用户名、现场日志文件地址。 + +* 配置ID:命中配置的配置ID +* 发现时间:命中规则的时间 +* 出入口:暂不支持 +* URL:命中配置的URL +* 处理机IP:处理这条命中规则的服务器IP +* 传输层协议:这条消息的传输层协议 +* 目的IP:命中配置的连接的目的IP +* 源IP:命中配置的连接的源IP +* 目的端口:命中配置的连接的目的端口 +* 源端口:命中配置的连接的源端口 +* 串联设备:暂不支持 +* 方向:该日志是传输方向--境内/境外 +* 流类型:该流是单向或双向流 +* 服务端地址:该流服务端所在的地理区域,eg.Hong Kong、United States +* 客户端地址:该流客户端所在的地理区域,eg.Hong Kong、United States +* 客户端ASN:客户端的ASN号(自治系统号) +* 服务端ASN:服务端的ASN号(自治系统号) +* 客户端用户名:客户端账户的用户名 +* 服务端用户名:服务端账户的用户名 +* 现场日志文件地址:该日志保存的地址 \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/https_replace_policy.md b/src/main/webapp/online-help/proxy/https_replace_policy.md new file mode 100644 index 000000000..608522318 --- /dev/null +++ b/src/main/webapp/online-help/proxy/https_replace_policy.md @@ -0,0 +1,43 @@ +#### [1.功能简介](#accordion1_1) + +HTTP(s)替换的主要功能是将访问网站的应答内容替换为配置的内容,主要包括IP替换,URL替换,请求头域替换和应答头域替换,账号替换 + +#### [2.基础配置信息](#accordion1_2) + +* IP:同“IP拦截” +* HTTP URL:同“域名拦截” +* HTTP 请求头域:同“HTTP(s)监测” +* HTTP 应答头域:同“HTTP(s)监测” +* 账号:同“HTTP(s)监测” + +#### [3.业务配置属性](#accordion1_2) + +* IP:同“IP拦截” +* HTTP URL:同“域名拦截” +* HTTP 请求头域:同“HTTP(s)监测” +* HTTP 应答头域:同“HTTP(s)监测” +* 账号:同“HTTP(s)监测” + +#### [4.配置约束条件](#accordion1_3) + +* IP:同“IP拦截” +* HTTP URL:同“域名拦截” +* HTTP 请求头域:同“HTTP(s)监测” +* HTTP 应答头域:同“HTTP(s)监测” +* 账号:同“HTTP(s)监测” + +#### [5.预期效果](#accordion1_4) + +* 证书检查:浏览器的证书被替换 +* 日志检查:产生日志信息 + +#### [6.配置生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效 + +#### [7.配置标签](#accordion1_6) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据。 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/https_whiteList_policy.md b/src/main/webapp/online-help/proxy/https_whiteList_policy.md new file mode 100644 index 000000000..6fffe3015 --- /dev/null +++ b/src/main/webapp/online-help/proxy/https_whiteList_policy.md @@ -0,0 +1,39 @@ +#### [1.功能简介](#accordion1_1) + +HTTP(s)白名单主要是对访问的网站进行拦截,但是不替换证书,从而不解析网站的加密流量,主要包括IP拦截白名单,URL白名单,请求头域白名单,账号白名单 + +#### [2.基础配置信息](#accordion1_2) + +* IP:同“IP拦截” +* HTTP URL:同“域名拦截” +* HTTP 请求头域:同“HTTP(s)监测” +* 账号:同“HTTP(s)监测” + +#### [3.业务配置属性](#accordion1_2) + +* IP:同“IP拦截” +* HTTP URL:同“域名拦截” +* HTTP 请求头域:同“HTTP(s)监测” +* 账号:同“HTTP(s)监测” + +#### [4.配置约束条件](#accordion1_3) + +* IP:同“IP拦截” +* HTTP URL:同“域名拦截” +* HTTP 请求头域:同“HTTP(s)监测” +* 账号:同“HTTP(s)监测” + +#### [5.预期效果](#accordion1_4) + +* 证书检查:证书未替换 + +#### [6.配置生效区域](#accordion1_5) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效 + +#### [7.配置标签](#accordion1_6) + +* 来函:官方或其他组织下达的配置流量管控依据 +* 分类:配置所属的类别 +* 性质:配置所属的性质 +* 标签:配置所属的标签 \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/intercept_policy.md b/src/main/webapp/online-help/proxy/intercept_policy.md new file mode 100644 index 000000000..ab37be760 --- /dev/null +++ b/src/main/webapp/online-help/proxy/intercept_policy.md @@ -0,0 +1,19 @@ +#### [1.Function Introduction](#accordion1_1) + +On National Proxy System, Individual Intercept policy rules determines whether to intercept/optimize a connection based on traffic attributes, such as IP address, domain name and Subscribe ID. You could specify these attributes in IP Intercept and Domain Intercept. + +#### [2.Action](#accordion1_2) + +Both IP intercept and Domain Intercept are subject two actions: + +* Bypass: the Proxy passes through the network connection without apply an optimization or policy checking. It’s could be used to bypass SSL pinning applications, such as Apple Store and WhatsApp, or a of a VIP’s IP address. In case of traffic matches one more policies, bypass overrides intercept. +* Intercept: the National Proxy System intercepts network traffic for further control policy and cache policy checking. When a connection is set to intercept, the proxy terminates the connection and initiates a new connection between client and server. If the connection is SSL encrypted, the original certificate is replaced with a substitute one. + + When Intercept Related Domains is enabled, domains that share one certificates with the specified domain are considered as the same. For example, if the intercept facebook.com with Intercept Related Domain option, then *.xx.fbcdn.net, fb.com, .messenger.com and etc. are also intercepted. There may be side effects that intercept many different websites when they were hosted in a same CDN provider (Content Delivery Network). + + Key ring determines which certificate will be used to generate substitute certificate. You could configure key ring through Proxy Policy Object page. If no key ring is specified, proxy will use the default one. + + Intercept policy produces no log. You can find out if the interception is successful by checking if the certificate is issued by your pre-configured Root CA. You need a PC which traffic has already directed to the Proxy, and a web browser to test the policy. For Chrome and Microsoft Internet Explorer, you could click the lock icon on the address bar to view certificate. For Firefox, after you clicking the lock icon, click “>” button to show connection details, click “more information”, and then click “view certificate”. If the browser warning that the connection is not secure, one possible reason is you haven’t install/trust the root certificate yet. + + +### Note: You should exercise caution because web applications may not cooperate with SSL interception, such as SSL pinning, mutual authentication or non-standard SSL implementation. \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/ip_intercept_policy.md b/src/main/webapp/online-help/proxy/ip_intercept_policy.md new file mode 100644 index 000000000..c04c505ab --- /dev/null +++ b/src/main/webapp/online-help/proxy/ip_intercept_policy.md @@ -0,0 +1,45 @@ +#### [1.功能简介](#accordion1_1) + +IP拦截主要用于配置拦截的IP地址和端口号,测试拦截的效果,其中包括拦截黑名单和拦截白名单,当选择黑名单,这配置了IP地址的被测机器的浏览器证书替换,当选择白名单,则浏览器的证书不会替换。拦截的端口一般配置为服务的端口。 + +#### [2.配置基础属性](#accordion1_2) + +* 源IP:用户的IP地址 +* 目的IP:网络服务器的IP +* 源端口:用户的端口 +* 目的端口:服务使用的端口 +* 端口掩码:使用掩码表示的端口 +* IP范围:表示一段范围内的IP地址 +* IP掩码:使用掩码方式表示的IP段地址 + +#### [3.业务配置属性](#accordion1_3) + +* 源IP:报文中的源IP +* 目的IP:报文中目的IP +* 源端口:报文中的源端口 +* 目的端口:报文中的目的端口 + +#### [4.配置约束条件](#accordion1_4) + +* 源IP:与目的IP不同,且合法 +* 源端口:在0——65535范围以内 +* 目的IP:与源IP不同,且合法 +* 目的端口:在0——65535范围以为 +* IP范围:x.x.x.0——x.x.x.255 +* IP掩码:x.x.x.x/mask,mask属于16—32 + +#### [5.预期效果](#accordion1_5) + +* 黑名单:浏览器证书替换 +* 白名单:证书未替换 + +#### [6.配置生效区域](#accordion1_6) + +配置的生效区域,生效区域包括地区,以及ISP,地区和ISP可组合,即某个地区的某个运营商流量生效, 或者某个地区的所有流量生效,或者某个运营商的所有流量生效,也可全域生效 + +#### [7.配置标签](#accordion1_7) + +* 来函:必选项,官方或其他组织下达的配置流量管控依据。 +* 分类:非必选项,配置分类,例如内容安全、网络攻击等。 +* 性质:非必选项,配置性质,例如政治、暴力、宗教等。 +* 标签:非必选项,自定义标签。 \ No newline at end of file diff --git a/src/main/webapp/online-help/proxy/proxy_policy_object.md b/src/main/webapp/online-help/proxy/proxy_policy_object.md new file mode 100644 index 000000000..431374e12 --- /dev/null +++ b/src/main/webapp/online-help/proxy/proxy_policy_object.md @@ -0,0 +1,154 @@ +#### [1.Function Introduction](#accordion1_1) + +A policy object is a single object or a collective unit that groups discrete identities such as IP addresses, URLs, applications, or users. With policy objects that are a collective unit, you can reference the object in policy instead of manually selecting multiple objects one at a time. Typically, when creating a policy object, you group objects that require similar permissions in policy. + +#### [2.Key Ring](#accordion1_2) + +On National Proxy System, Key Ring is a pair of private key and public certificate. You can also import a certificate chain containing multiple certificates. Key Ring is a policy object, you can reference it in Intercept Policy. There are three Certificate Type: + +* End-entity Certificate: is used for web servers to identify themselves. The Public Key File MUST be .p12 format that contains entire certificate chain. The Private Key File could be .pem, .key or .p12 format. This certificate type is not applicable to Domain Intercept for it cannot be used to sign other certificates. Expire After parameter is also not applicable to end-entity certificate for the same reason. +* Intermedia Certificate: is used to sign other certificates. An intermediate certificate must be signed by another intermediate certificate, or a root certificate. The Public Key File MUST be .p12 format that contains entire certificate chain. The Expire After parameter indicates the expiration of the substitute certificate that was issued by this intermedia certificate. +* Root Certificate: is used to sign other certificates. The Public Key File could be .der, .cer, .crt or .pem format. The Expire After parameter has the same meaning as Intermedia Certificate. Specification of certificate formats: + * .pem- (Privacy-enhanced Electronic Mail) Base64 encoded DER certificate, enclosed between "-----BEGIN CERTIFICATE-----" and "-----END CERTIFICATE-----" + * .cer, .crt, .der – usually in binary DER form, but Base64-encoded certificates are common too (see .pem above) + * .p12 – PKCS#12, may contain certificate(s) (public) and private keys (without password protected) + +#### [3.Trusted Certificate](#accordion1_3) + +National Proxy System has a build-in trusted certificate authorities list. When the original certificate is issued by a certificate authority that not in the list, the proxy will issued the substitute certificate with an untrusted root certificate, and so consequently, the browser could identify unsecure connections. + +You can add a custom certificate authority to the trusted certificate authorities of the system. + +The certificate MUST be PEM format. + +Following are the National Proxy System’s default trusted certificate authorities: + +* ACCVRAIZ1 +* Actalis Authentication Root CA +* AddTrust External CA Root +* AffirmTrust Commercial +* AffirmTrust Networking +* AffirmTrust Premium +* AffirmTrust Premium ECC +* Amazon Root CA 1 +* Amazon Root CA 2 +* Amazon Root CA 3 +* Amazon Root CA 4 +* Atos TrustedRoot 2011 +* Autoridad de Certificacion Firmaprofesional CIF A62634068 +* Baltimore CyberTrust Root +* Buypass Class 2 Root CA +* Buypass Class 3 Root CA +* CA Disig Root R2 +* CFCA EV ROOT +* COMODO Certification Authority +* COMODO ECC Certification Authority +* COMODO RSA Certification Authority +* Certigna +* Certinomis - Root CA +* Class 2 Primary CA +* Certplus Root CA G1 +* Certplus Root CA G2 +* Certum Trusted Network CA +* Certum Trusted Network CA 2 +* Chambers of Commerce Root - 2008 +* AAA Certificate Services +* Cybertrust Global Root +* D-TRUST Root Class 3 CA 2 2009 +* D-TRUST Root Class 3 CA 2 EV 2009 +* DST Root CA X3 +* Deutsche Telekom Root CA 2 +* DigiCert Assured ID Root CA +* DigiCert Assured ID Root G2 +* DigiCert Assured ID Root G3 +* DigiCert Global Root CA +* DigiCert Global Root G2 +* DigiCert Global Root G3 +* DigiCert High Assurance EV Root CA +* DigiCert Trusted Root G4 +* E-Tugra Certification Authority +* EC-ACC +* EE Certification Centre Root CA +* Entrust.net Certification Authority (2048) +* Entrust Root Certification Authority +* Entrust Root Certification Authority - EC1 +* Entrust Root Certification Authority - G2 +* GDCA TrustAUTH R5 ROOT +* GeoTrust Global CA +* GeoTrust Primary Certification Authority +* GeoTrust Primary Certification Authority - G2 +* GeoTrust Primary Certification Authority - G3 +* GeoTrust Universal CA +* GeoTrust Universal CA 2 +* GlobalSign +* GlobalSign +* GlobalSign Root CA +* GlobalSign +* GlobalSign +* Global Chambersign Root - 2008 +* Go Daddy Root Certificate Authority - G2 +* Hellenic Academic and Research Institutions ECC RootCA 2015 +* Hellenic Academic and Research Institutions RootCA 2011 +* Hellenic Academic and Research Institutions RootCA 2015 +* Hongkong Post Root CA 1 +* ISRG Root X1 +* IdenTrust Commercial Root CA 1 +* IdenTrust Public Sector Root CA 1 +* Izenpe.com +* LuxTrust Global Root 2 +* Microsec e-Szigno Root CA 2009 +* NetLock Arany (Class Gold) Főtanúsítvány +* Network Solutions Certificate Authority +* OISTE WISeKey Global Root GA CA +* OISTE WISeKey Global Root GB CA +* OpenTrust Root CA G1 +* OpenTrust Root CA G2 +* OpenTrust Root CA G3 +* QuoVadis Root Certification Authority +* QuoVadis Root CA 1 G3 +* QuoVadis Root CA 2 +* QuoVadis Root CA 2 G3 +* QuoVadis Root CA 3 +* QuoVadis Root CA 3 G3 +* SSL.com EV Root Certification Authority ECC +* SSL.com EV Root Certification Authority RSA R2 +* SSL.com Root Certification Authority ECC +* SSL.com Root Certification Authority RSA +* SZAFIR ROOT CA2 +* SecureSign RootCA11 +* SecureTrust CA +* Secure Global CA +* Sonera Class2 CA +* Staat der Nederlanden EV Root CA +* Staat der Nederlanden Root CA - G2 +* Staat der Nederlanden Root CA - G3 +* Starfield Root Certificate Authority - G2 +* Starfield Services Root Certificate Authority - G2 +* SwissSign Gold CA - G2 +* SwissSign Silver CA - G2 +* T-TeleSec GlobalRoot Class 2 +* T-TeleSec GlobalRoot Class 3 +* TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 +* TWCA Global Root CA +* TWCA Root Certification Authority +* TeliaSonera Root CA v1 +* TrustCor ECA-1 +* TrustCor RootCert CA-1 +* TrustCor RootCert CA-2 +* TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5 +* USERTrust ECC Certification Authority +* USERTrust RSA Certification Authority +* VeriSign Class 3 Public Primary Certification Authority - G4 +* VeriSign Class 3 Public Primary Certification Authority - G5 +* VeriSign Universal Root Certification Authority +* VeriSign Class 3 Public Primary Certification Authority - G3 +* Visa eCommerce Root +* XRamp Global Certification Authority +* thawte Primary Root CA +* thawte Primary Root CA - G2 +* thawte Primary Root CA - G3 +* Microsoft Root Authority +* Microsoft Root Certificate Authority +* Microsoft Root Certificate Authority 2010 +* Microsoft Root Certificate Authority 2011 +* Baltimore CyberTrust Root \ No newline at end of file diff --git a/src/main/webapp/online-help/ysp/audio_sample.md b/src/main/webapp/online-help/ysp/audio_sample.md new file mode 100644 index 000000000..5b0f519cd --- /dev/null +++ b/src/main/webapp/online-help/ysp/audio_sample.md @@ -0,0 +1,37 @@ +#### [1.功能简介](#accordion1_1) + +音频样例匹配功能,可对网络流量中的音频内容进行分析,找出与用户配置的音频样例相匹配的音视频流量,并执行阻断与监测动作,产生日志 + +#### [2.配置基础信息](#accordion1_2) + +* 规则名称:统一填写 +* 执行动作:(阻断与监测)统一填写 + +#### [3.业务配置属性](#accordion1_3) + +* 源文件:上传本地音频文件,将以该文件中包含的音频信息与流量中传输的音频进行匹配,命中后执行配置动作,产生日志 +* 置信度:当执行动作为监测时,用户可指定匹配命中的最小置信度,置信度可选值为70、80、90、100 + +#### [4.配置约束条件](#accordion1_4) + +* 上传的本地音频文件大小应不大于20MB +* 上传的本地音频文件时长应不大于2分钟 +* 支持的本地音频文件格式为:mp4,flv,asf,wmv,avi,mpeg,mov,dat,m4v,m4p,m4b,webm,ogv,wav,mp3 + +#### [5.配置生效区域](#accordion1_5) + +统一填写 + +#### [6.配置标签](#accordion1_6) + +* 统一填写 + +#### [7.预期效果](#accordion1_7) + +* 首次分析阻断效果:命中样例配置后,客户端收到NTC系统发送的虚假RST报文,如此时该音视频未缓存或下载完成,则中断当前音视频的播放或下载 +* 后续访问阻断效果:首次分析命中后,会生成该音视频的传输特征,后续访问直接依据传输特征进行阻断 + +#### [8.免责声明](#accordion1_8) + +* 对于音视频编码的索引信息在音视频文件尾部的情况,本系统不予支持 +* 由于音视频内容分析滞后于网络传输,本系统不保证首次观看音视频时的阻断效果 \ No newline at end of file diff --git a/src/main/webapp/online-help/ysp/file_digest.md b/src/main/webapp/online-help/ysp/file_digest.md new file mode 100644 index 000000000..a3133b45f --- /dev/null +++ b/src/main/webapp/online-help/ysp/file_digest.md @@ -0,0 +1,35 @@ +#### [1.功能简介](#accordion1_1) + +文件摘要检测功能,可提取网络流量中传输文件的摘要信息,并找出与用户配置的文件具有相似摘要的流量,命中配置后,执行阻断与监测动作,产生日志 + +#### [2.配置基础信息](#accordion1_2) + +* 规则名称:统一填写 +* 执行动作:(阻断与监测)统一填写 + +#### [3.业务配置属性](#accordion1_3) + +* 文件:上传本地文件,该文件将与流量中包含的文件进行匹配,命中后执行配置动作,产生日志 +* 置信度:当执行动作为监测时,用户可指定匹配命中的最小置信度,置信度可选值为70、80、90、100 + +#### [4.配置约束条件](#accordion1_4) + +* 上传的本地文件大小应不大于20MB +* 支持的本地文件格式为:txt,doc,img,docx,pptx,xlsx,xls,ppt + +#### [5.配置生效区域](#accordion1_5) + +统一填写 + +#### [6.配置标签](#accordion1_6) + +* 统一填写 + +#### [7.预期效果](#accordion1_7) + +* 首次分析阻断效果:当客户端下载某文件,并命中文件摘要配置后,客户端将收到NTC系统发送的虚假RST报文,如此时该文件未下载完成,则中断当前文件的下载 +* 后续访问阻断效果:首次分析命中后,会生成该文件的传输特征,后续下载请求直接依据传输特征进行阻断 + +#### [8.免责声明](#accordion1_8) + +* 由于文件摘要的分析滞后于网络传输,本系统不保证首次文件下载时的阻断效果 \ No newline at end of file diff --git a/src/main/webapp/online-help/ysp/picture_sample.md b/src/main/webapp/online-help/ysp/picture_sample.md new file mode 100644 index 000000000..2ca481a9f --- /dev/null +++ b/src/main/webapp/online-help/ysp/picture_sample.md @@ -0,0 +1,33 @@ +#### [1.功能简介](#accordion1_1) + +图片样例匹配功能,可对网络流量中的图片内容进行分析,找出与用户配置的图片样例相匹配的图片流量,并执行阻断与监测动作,产生日志 + +#### [2.配置基础信息](#accordion1_2) + +* 规则名称:统一填写 +* 执行动作:阻断与监测(统一填写) + +#### [3.业务配置属性](#accordion1_3) + +* 源文件:上传本地图片文件,将以该文件中包含的图片画面信息与流量中传输的图片进行匹配,命中后执行配置动作,产生日志 +* 置信度:当执行动作为监测时,用户可指定匹配命中的最小置信度,置信度可选值为70、80、90、100 + +#### [4\. 配置约束条件](#accordion1_4) + +* 支持的上传图片格式为:bmp,jpg,tiff,raw,gif + +#### [5.配置生效区域](#accordion1_5) + +统一填写 + +#### [6.配置标签](#accordion1_6) + +* 统一填写 + +#### [7.预期效果](#accordion1_7) + +* 阻断效果:客户端访问某图片命中图片样例配置后,会生成该图片的传输特征,后续对该图片的访问直接依据传输特征进行阻断 + +#### [8.免责声明](#accordion1_8) + +* 对于图片文件大于4MB的图片,本系统不予支持 \ No newline at end of file diff --git a/src/main/webapp/online-help/ysp/video_sample.md b/src/main/webapp/online-help/ysp/video_sample.md new file mode 100644 index 000000000..a5a52f764 --- /dev/null +++ b/src/main/webapp/online-help/ysp/video_sample.md @@ -0,0 +1,38 @@ +#### [1.功能简介](#accordion1_1) + +视频样例匹配功能,可对网络流量中的视频内容进行分析,找出与用户配置的视频样例相匹配的视频流量,并执行阻断与监测动作,产生日志 + +#### [2.配置基础信息](#accordion1_2) + +* 规则名称:统一填写 +* 执行动作:(阻断与监测)统一填写 + +#### [3.业务配置属性](#accordion1_3) + +* 源文件:上传本地视频文件,将以该文件中包含的视频画面信息与流量中传输的视频进行匹配,命中后执行配置动作,产生日志 +* 置信度:当执行动作为监测时,用户可指定匹配命中的最小置信度,置信度可选值为70、80、90、100 + +#### [4.配置约束条件](#accordion1_4) + +* 上传的本地视频文件大小应不大于20MB +* 上传的本地视频文件时长应不大于2分钟 +* 支持的本地视频文件格式为:mp4,flv,asf,wmv,avi,mpeg,mov,dat,m4v,m4p,m4b,webm + +#### [5.配置生效区域](#accordion1_5) + +统一填写 + +#### [6.配置标签](#accordion1_6) + +* 统一填写 + +#### [7.预期效果](#accordion1_7) + +* 首次分析阻断效果:命中样例配置后,客户端收到NTC系统发送的虚假RST报文,如此时该视频未缓存或下载完成,则中断当前视频的播放或下载 +* 后续访问阻断效果:首次分析命中后,会生成该视频的传输特征,后续访问直接依据传输特征进行阻断 + +#### [8.免责声明](#accordion1_8) + +* 对于音视频编码的索引信息在音视频文件尾部的情况,本系统不予支持 +* 对于分辨率大于4兆的视频,本系统不予支持 +* 由于音视频内容分析滞后于网络传输,本系统不保证首次观看音视频时的阻断效果 \ No newline at end of file diff --git a/src/main/webapp/online-help/ysp/video_scene.md b/src/main/webapp/online-help/ysp/video_scene.md new file mode 100644 index 000000000..d39e1c838 --- /dev/null +++ b/src/main/webapp/online-help/ysp/video_scene.md @@ -0,0 +1,34 @@ +#### [1.功能简介](#accordion1_1) + +视频场景检测功能,可检测出网络中传输的包含视频色情场景的流量,并根据用户配置,进行阻断或监测,产生日志 + +#### [2.配置基础信息](#accordion1_2) + +* 执行动作:(阻断与监测)统一填写 + +#### [3.业务配置属性](#accordion1_3) + +* 置信度:当执行动作为监测时,用户可指定匹配命中的最小置信度,置信度可选值为70、80、90、100 + +#### [4.配置约束条件](#accordion1_4) + +* 无 + +#### [5.配置生效区域](#accordion1_5) + +统一填写 + +#### [6.配置标签](#accordion1_6) + +* 统一填写 + +#### [7.预期效果](#accordion1_7) + +* 首次分析阻断效果:检测到色情场景后,客户端收到NTC系统发送的虚假RST报文,如此时该视频未缓存或下载完成,则中断当前视频的播放或下载 +* 后续访问阻断效果:首次分析命中后,会生成该视频的传输特征,后续访问直接通过传输特征进行阻断 + +#### [8.免责声明](#accordion1_8) + +* 对于音视频编码的索引信息在音视频文件尾部的情况,本系统不予支持 +* 对于分辨率大于4兆的视频,本系统不予支持 +* 由于音视频内容分析滞后于网络传输,本系统不保证首次观看音视频时的阻断效果 \ No newline at end of file diff --git a/src/main/webapp/online-help/ysp/voip_sample.md b/src/main/webapp/online-help/ysp/voip_sample.md new file mode 100644 index 000000000..7aa781fc2 --- /dev/null +++ b/src/main/webapp/online-help/ysp/voip_sample.md @@ -0,0 +1,35 @@ +#### [1.功能简介](#accordion1_1) + +VOIP样例匹配功能,可对VOIP流量中的语音内容进行分析,找出与用户配置的音频样例相匹配的VOIP流量,并执行阻断与监测动作,产生日志 + +#### [2.配置基础信息](#accordion1_2) + +* 规则名称:统一填写 +* 执行动作:(阻断与监测)统一填写 + +#### [3.业务配置属性](#accordion1_3) + +* 源文件:上传本地音频文件,将以该文件中包含的音频信息与流量中传输的VOIP音频内容进行匹配,命中后执行配置动作,产生日志 +* 置信度:当执行动作为监测时,用户可指定匹配命中的最小置信度,置信度可选值为70、80、90、100 + +#### [4.配置约束条件](#accordion1_4) + +* 上传的本地音频文件大小应不大于20MB +* 上传的本地音频文件时长应不大于2分钟 +* 支持的本地音频文件格式为:mp4,flv,asf,wmv,avi,mpeg,mov,dat,m4v,m4p,m4b,webm,ogv,wav,mp3 + +#### [5.配置生效区域](#accordion1_5) + +统一填写 + +#### [6.配置标签](#accordion1_6) + +* 统一填写 + +#### [7.预期效果](#accordion1_7) + +* 阻断效果:命中配置后,通过串联设备临时规则,丢弃后续传输报文,已接通的VOIP电话不中断,但无后继语音内容 + +#### [8.免责声明](#accordion1_8) + +无 \ No newline at end of file diff --git a/src/main/webapp/static/global/plugins/editor.md-master/.gitignore b/src/main/webapp/static/global/plugins/editor.md-master/.gitignore new file mode 100644 index 000000000..9a85439cf --- /dev/null +++ b/src/main/webapp/static/global/plugins/editor.md-master/.gitignore @@ -0,0 +1,15 @@ +logs +*.log +*.pid +*.seed +node_modules/ +.sass-cache/ +research/ +test/ +backup/ +examples/uploads/**/* +*.bat +*.sh +.project +.url +css/*.map \ No newline at end of file diff --git a/src/main/webapp/static/global/plugins/editor.md-master/.jshintrc b/src/main/webapp/static/global/plugins/editor.md-master/.jshintrc new file mode 100644 index 000000000..470e1950d --- /dev/null +++ b/src/main/webapp/static/global/plugins/editor.md-master/.jshintrc @@ -0,0 +1,20 @@ +{ + "esnext": true, + "bitwise": true, + "camelcase": true, + "curly": true, + "eqeqeq": true, + "immed": true, + "indent": 4, + "latedef": true, + "newcap": true, + "noarg": true, + "quotmark": "double", + "regexp": true, + "undef": true, + "unused": true, + "strict": true, + "trailing": true, + "smarttabs": true, + "white": true +} \ No newline at end of file diff --git a/src/main/webapp/static/global/plugins/editor.md-master/BUGS.md b/src/main/webapp/static/global/plugins/editor.md-master/BUGS.md new file mode 100644 index 000000000..9c61c2d80 --- /dev/null +++ b/src/main/webapp/static/global/plugins/editor.md-master/BUGS.md @@ -0,0 +1,22 @@ +#Bugs + +> 说明:删除线表示已经解决。 + +####IE8 + +- ~~不能加载;~~ +- flowChart(流程图)、sequenceDiagram(序列图)不支持IE8; +- ~~不支持Markdown转HTML页面解析预览;~~ + +####IE8 & IE9 & IE10 + +- KaTeX会出现解析错误,但不影响程序运行; + +####Sea.js + +- ~~Raphael.js无法加载;~~ + +####Require.js + +- ~~CodeMirror编辑器的代码无法高亮;~~ +- ~~sequenceDiagram不支持: `Uncaught TypeError: Cannot call method 'isArray' of undefined.`~~ diff --git a/src/main/webapp/static/global/plugins/editor.md-master/CHANGE.md b/src/main/webapp/static/global/plugins/editor.md-master/CHANGE.md new file mode 100644 index 000000000..519813719 --- /dev/null +++ b/src/main/webapp/static/global/plugins/editor.md-master/CHANGE.md @@ -0,0 +1,534 @@ +## 更新日志 + +### v1.0.x + +##### v1.0.0 beta + +预览版:基本功能完成; + +##### v1.0.0 releases + +发布 v1.0.0 正式版。 + +主要更新: + +- 新建分支 `mathjax-version`,但不打算继续对此分支进行开发; + +- 移除 MathJax,改用 KaTeX [#2](https://github.com/pandao/editor.md/issues/2),解析和预览响应速度大幅度提高 [#3](https://github.com/pandao/editor.md/issues/3); + - 移除 `mathjax` 配置项; + - 移除 `mathjaxURL` 属性; + - 移除 `setMathJaxConfig()` 方法; + - 移除 `loadMathJax()` 方法; + - 移除MathJax的所有示例; + - 新增 `tex` 配置项,表示是否开启支持科学公式 TeX ,基于 KaTeX; + - 新增 `katexURL` 属性; + - 新增 `loadKaTeX` 方法; + - 新增 KaTeX 的示例; + +- `setCodeEditor()` 方法更名为 `setCodeMirror()`; + +- 合并 CodeMirror 使用到的多个 JS 模块文件,大幅减少 HTTP 请求,加快下载速度; + - 新增合并后的两个模块文件:`./lib/codemirror/modes.min.js`、`./lib/codemirror/addons.min.js` ; + - `Gulpfile.js` 新增合并 CodeMirror 模块文件的任务方法 `codemirror-mode` 和 `codemirror-addon` ; + - 另外在使用 Require.js 时,因为 CodeMirror 的严格模块依赖的限制,不能使用上述合并的模块文件,仍然采用动态加载多个模块文件; + +- 更新 `README.md` 等相关文档和示例; + +- 解决 Sea.js 环境下 Raphael.js 无法运行导致不支持流程图和时序图的问题,即必须先加载 Raphael.js ,后加载 Sea.js ; + +### v1.1.x + +##### v1.1.0 + +主要更新: + +- 设计并更换了 Logo; +- 新增添加图片、链接、锚点链接、代码块、预格式文本等操作弹出对话框层及示例; +- 新增支持图片(跨域)上传; +- 改用 ` + +``` + +> Tip: Editor.md can auto append `"); + markdownTextarea = this.markdownTextarea = editor.children("textarea"); + } + + markdownTextarea.addClass(classNames.textarea.markdown).attr("placeholder", settings.placeholder); + + if (typeof markdownTextarea.attr("name") === "undefined" || markdownTextarea.attr("name") === "") + { + markdownTextarea.attr("name", (settings.name !== "") ? settings.name : id + "-markdown-doc"); + } + + var appendElements = [ + (!settings.readOnly) ? "
" : "", + ( (settings.saveHTMLToTextarea) ? "" : "" ), + "
", + "
", + "
" + ].join("\n"); + + editor.append(appendElements).addClass(classPrefix + "vertical"); + + if (settings.theme !== "") + { + editor.addClass(classPrefix + "theme-" + settings.theme); + } + + this.mask = editor.children("." + classPrefix + "mask"); + this.containerMask = editor.children("." + classPrefix + "container-mask"); + + if (settings.markdown !== "") + { + markdownTextarea.val(settings.markdown); + } + + if (settings.appendMarkdown !== "") + { + markdownTextarea.val(markdownTextarea.val() + settings.appendMarkdown); + } + + this.htmlTextarea = editor.children("." + classNames.textarea.html); + this.preview = editor.children("." + classPrefix + "preview"); + this.previewContainer = this.preview.children("." + classPrefix + "preview-container"); + + if (settings.previewTheme !== "") + { + this.preview.addClass(classPrefix + "preview-theme-" + settings.previewTheme); + } + + if (typeof define === "function" && define.amd) + { + if (typeof katex !== "undefined") + { + editormd.$katex = katex; + } + + if (settings.searchReplace && !settings.readOnly) + { + editormd.loadCSS(settings.path + "codemirror/addon/dialog/dialog"); + editormd.loadCSS(settings.path + "codemirror/addon/search/matchesonscrollbar"); + } + } + + if ((typeof define === "function" && define.amd) || !settings.autoLoadModules) + { + if (typeof CodeMirror !== "undefined") { + editormd.$CodeMirror = CodeMirror; + } + + if (typeof marked !== "undefined") { + editormd.$marked = marked; + } + + this.setCodeMirror().setToolbar().loadedDisplay(); + } + else + { + this.loadQueues(); + } + + return this; + }, + + /** + * 所需组件加载队列 + * Required components loading queue + * + * @returns {editormd} 返回editormd的实例对象 + */ + + loadQueues : function() { + var _this = this; + var settings = this.settings; + var loadPath = settings.path; + + var loadFlowChartOrSequenceDiagram = function() { + + if (editormd.isIE8) + { + _this.loadedDisplay(); + + return ; + } + + if (settings.flowChart || settings.sequenceDiagram) + { + editormd.loadScript(loadPath + "raphael.min", function() { + + editormd.loadScript(loadPath + "underscore.min", function() { + + if (!settings.flowChart && settings.sequenceDiagram) + { + editormd.loadScript(loadPath + "sequence-diagram.min", function() { + _this.loadedDisplay(); + }); + } + else if (settings.flowChart && !settings.sequenceDiagram) + { + editormd.loadScript(loadPath + "flowchart.min", function() { + editormd.loadScript(loadPath + "jquery.flowchart.min", function() { + _this.loadedDisplay(); + }); + }); + } + else if (settings.flowChart && settings.sequenceDiagram) + { + editormd.loadScript(loadPath + "flowchart.min", function() { + editormd.loadScript(loadPath + "jquery.flowchart.min", function() { + editormd.loadScript(loadPath + "sequence-diagram.min", function() { + _this.loadedDisplay(); + }); + }); + }); + } + }); + + }); + } + else + { + _this.loadedDisplay(); + } + }; + + editormd.loadCSS(loadPath + "codemirror/codemirror.min"); + + if (settings.searchReplace && !settings.readOnly) + { + editormd.loadCSS(loadPath + "codemirror/addon/dialog/dialog"); + editormd.loadCSS(loadPath + "codemirror/addon/search/matchesonscrollbar"); + } + + if (settings.codeFold) + { + editormd.loadCSS(loadPath + "codemirror/addon/fold/foldgutter"); + } + + editormd.loadScript(loadPath + "codemirror/codemirror.min", function() { + editormd.$CodeMirror = CodeMirror; + + editormd.loadScript(loadPath + "codemirror/modes.min", function() { + + editormd.loadScript(loadPath + "codemirror/addons.min", function() { + + _this.setCodeMirror(); + + if (settings.mode !== "gfm" && settings.mode !== "markdown") + { + _this.loadedDisplay(); + + return false; + } + + _this.setToolbar(); + + editormd.loadScript(loadPath + "marked.min", function() { + + editormd.$marked = marked; + + if (settings.previewCodeHighlight) + { + editormd.loadScript(loadPath + "prettify.min", function() { + loadFlowChartOrSequenceDiagram(); + }); + } + else + { + loadFlowChartOrSequenceDiagram(); + } + }); + + }); + + }); + + }); + + return this; + }, + + /** + * 设置 Editor.md 的整体主题,主要是工具栏 + * Setting Editor.md theme + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setTheme : function(theme) { + var editor = this.editor; + var oldTheme = this.settings.theme; + var themePrefix = this.classPrefix + "theme-"; + + editor.removeClass(themePrefix + oldTheme).addClass(themePrefix + theme); + + this.settings.theme = theme; + + return this; + }, + + /** + * 设置 CodeMirror(编辑区)的主题 + * Setting CodeMirror (Editor area) theme + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setEditorTheme : function(theme) { + var settings = this.settings; + settings.editorTheme = theme; + + if (theme !== "default") + { + editormd.loadCSS(settings.path + "codemirror/theme/" + settings.editorTheme); + } + + this.cm.setOption("theme", theme); + + return this; + }, + + /** + * setEditorTheme() 的别名 + * setEditorTheme() alias + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setCodeMirrorTheme : function (theme) { + this.setEditorTheme(theme); + + return this; + }, + + /** + * 设置 Editor.md 的主题 + * Setting Editor.md theme + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setPreviewTheme : function(theme) { + var preview = this.preview; + var oldTheme = this.settings.previewTheme; + var themePrefix = this.classPrefix + "preview-theme-"; + + preview.removeClass(themePrefix + oldTheme).addClass(themePrefix + theme); + + this.settings.previewTheme = theme; + + return this; + }, + + /** + * 配置和初始化CodeMirror组件 + * CodeMirror initialization + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setCodeMirror : function() { + var settings = this.settings; + var editor = this.editor; + + if (settings.editorTheme !== "default") + { + editormd.loadCSS(settings.path + "codemirror/theme/" + settings.editorTheme); + } + + var codeMirrorConfig = { + mode : settings.mode, + theme : settings.editorTheme, + tabSize : settings.tabSize, + dragDrop : false, + autofocus : settings.autoFocus, + autoCloseTags : settings.autoCloseTags, + readOnly : (settings.readOnly) ? "nocursor" : false, + indentUnit : settings.indentUnit, + lineNumbers : settings.lineNumbers, + lineWrapping : settings.lineWrapping, + extraKeys : { + "Ctrl-Q": function(cm) { + cm.foldCode(cm.getCursor()); + } + }, + foldGutter : settings.codeFold, + gutters : ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], + matchBrackets : settings.matchBrackets, + indentWithTabs : settings.indentWithTabs, + styleActiveLine : settings.styleActiveLine, + styleSelectedText : settings.styleSelectedText, + autoCloseBrackets : settings.autoCloseBrackets, + showTrailingSpace : settings.showTrailingSpace, + highlightSelectionMatches : ( (!settings.matchWordHighlight) ? false : { showToken: (settings.matchWordHighlight === "onselected") ? false : /\w/ } ) + }; + + this.codeEditor = this.cm = editormd.$CodeMirror.fromTextArea(this.markdownTextarea[0], codeMirrorConfig); + this.codeMirror = this.cmElement = editor.children(".CodeMirror"); + + if (settings.value !== "") + { + this.cm.setValue(settings.value); + } + + this.codeMirror.css({ + fontSize : settings.fontSize, + width : (!settings.watch) ? "100%" : "50%" + }); + + if (settings.autoHeight) + { + this.codeMirror.css("height", "auto"); + this.cm.setOption("viewportMargin", Infinity); + } + + if (!settings.lineNumbers) + { + this.codeMirror.find(".CodeMirror-gutters").css("border-right", "none"); + } + + return this; + }, + + /** + * 获取CodeMirror的配置选项 + * Get CodeMirror setting options + * + * @returns {Mixed} return CodeMirror setting option value + */ + + getCodeMirrorOption : function(key) { + return this.cm.getOption(key); + }, + + /** + * 配置和重配置CodeMirror的选项 + * CodeMirror setting options / resettings + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setCodeMirrorOption : function(key, value) { + + this.cm.setOption(key, value); + + return this; + }, + + /** + * 添加 CodeMirror 键盘快捷键 + * Add CodeMirror keyboard shortcuts key map + * + * @returns {editormd} 返回editormd的实例对象 + */ + + addKeyMap : function(map, bottom) { + this.cm.addKeyMap(map, bottom); + + return this; + }, + + /** + * 移除 CodeMirror 键盘快捷键 + * Remove CodeMirror keyboard shortcuts key map + * + * @returns {editormd} 返回editormd的实例对象 + */ + + removeKeyMap : function(map) { + this.cm.removeKeyMap(map); + + return this; + }, + + /** + * 跳转到指定的行 + * Goto CodeMirror line + * + * @param {String|Intiger} line line number or "first"|"last" + * @returns {editormd} 返回editormd的实例对象 + */ + + gotoLine : function (line) { + + var settings = this.settings; + + if (!settings.gotoLine) + { + return this; + } + + var cm = this.cm; + var editor = this.editor; + var count = cm.lineCount(); + var preview = this.preview; + + if (typeof line === "string") + { + if(line === "last") + { + line = count; + } + + if (line === "first") + { + line = 1; + } + } + + if (typeof line !== "number") + { + alert("Error: The line number must be an integer."); + return this; + } + + line = parseInt(line) - 1; + + if (line > count) + { + alert("Error: The line number range 1-" + count); + + return this; + } + + cm.setCursor( {line : line, ch : 0} ); + + var scrollInfo = cm.getScrollInfo(); + var clientHeight = scrollInfo.clientHeight; + var coords = cm.charCoords({line : line, ch : 0}, "local"); + + cm.scrollTo(null, (coords.top + coords.bottom - clientHeight) / 2); + + if (settings.watch) + { + var cmScroll = this.codeMirror.find(".CodeMirror-scroll")[0]; + var height = $(cmScroll).height(); + var scrollTop = cmScroll.scrollTop; + var percent = (scrollTop / cmScroll.scrollHeight); + + if (scrollTop === 0) + { + preview.scrollTop(0); + } + else if (scrollTop + height >= cmScroll.scrollHeight - 16) + { + preview.scrollTop(preview[0].scrollHeight); + } + else + { + preview.scrollTop(preview[0].scrollHeight * percent); + } + } + + cm.focus(); + + return this; + }, + + /** + * 扩展当前实例对象,可同时设置多个或者只设置一个 + * Extend editormd instance object, can mutil setting. + * + * @returns {editormd} this(editormd instance object.) + */ + + extend : function() { + if (typeof arguments[1] !== "undefined") + { + if (typeof arguments[1] === "function") + { + arguments[1] = $.proxy(arguments[1], this); + } + + this[arguments[0]] = arguments[1]; + } + + if (typeof arguments[0] === "object" && typeof arguments[0].length === "undefined") + { + $.extend(true, this, arguments[0]); + } + + return this; + }, + + /** + * 设置或扩展当前实例对象,单个设置 + * Extend editormd instance object, one by one + * + * @param {String|Object} key option key + * @param {String|Object} value option value + * @returns {editormd} this(editormd instance object.) + */ + + set : function (key, value) { + + if (typeof value !== "undefined" && typeof value === "function") + { + value = $.proxy(value, this); + } + + this[key] = value; + + return this; + }, + + /** + * 重新配置 + * Resetting editor options + * + * @param {String|Object} key option key + * @param {String|Object} value option value + * @returns {editormd} this(editormd instance object.) + */ + + config : function(key, value) { + var settings = this.settings; + + if (typeof key === "object") + { + settings = $.extend(true, settings, key); + } + + if (typeof key === "string") + { + settings[key] = value; + } + + this.settings = settings; + this.recreate(); + + return this; + }, + + /** + * 注册事件处理方法 + * Bind editor event handle + * + * @param {String} eventType event type + * @param {Function} callback 回调函数 + * @returns {editormd} this(editormd instance object.) + */ + + on : function(eventType, callback) { + var settings = this.settings; + + if (typeof settings["on" + eventType] !== "undefined") + { + settings["on" + eventType] = $.proxy(callback, this); + } + + return this; + }, + + /** + * 解除事件处理方法 + * Unbind editor event handle + * + * @param {String} eventType event type + * @returns {editormd} this(editormd instance object.) + */ + + off : function(eventType) { + var settings = this.settings; + + if (typeof settings["on" + eventType] !== "undefined") + { + settings["on" + eventType] = function(){}; + } + + return this; + }, + + /** + * 显示工具栏 + * Display toolbar + * + * @param {Function} [callback=function(){}] 回调函数 + * @returns {editormd} 返回editormd的实例对象 + */ + + showToolbar : function(callback) { + var settings = this.settings; + + if(settings.readOnly) { + return this; + } + + if (settings.toolbar && (this.toolbar.length < 1 || this.toolbar.find("." + this.classPrefix + "menu").html() === "") ) + { + this.setToolbar(); + } + + settings.toolbar = true; + + this.toolbar.show(); + this.resize(); + + $.proxy(callback || function(){}, this)(); + + return this; + }, + + /** + * 隐藏工具栏 + * Hide toolbar + * + * @param {Function} [callback=function(){}] 回调函数 + * @returns {editormd} this(editormd instance object.) + */ + + hideToolbar : function(callback) { + var settings = this.settings; + + settings.toolbar = false; + this.toolbar.hide(); + this.resize(); + + $.proxy(callback || function(){}, this)(); + + return this; + }, + + /** + * 页面滚动时工具栏的固定定位 + * Set toolbar in window scroll auto fixed position + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setToolbarAutoFixed : function(fixed) { + + var state = this.state; + var editor = this.editor; + var toolbar = this.toolbar; + var settings = this.settings; + + if (typeof fixed !== "undefined") + { + settings.toolbarAutoFixed = fixed; + } + + var autoFixedHandle = function(){ + var $window = $(window); + var top = $window.scrollTop(); + + if (!settings.toolbarAutoFixed) + { + return false; + } + + if (top - editor.offset().top > 10 && top < editor.height()) + { + toolbar.css({ + position : "fixed", + width : editor.width() + "px", + left : ($window.width() - editor.width()) / 2 + "px" + }); + } + else + { + toolbar.css({ + position : "absolute", + width : "100%", + left : 0 + }); + } + }; + + if (!state.fullscreen && !state.preview && settings.toolbar && settings.toolbarAutoFixed) + { + $(window).bind("scroll", autoFixedHandle); + } + + return this; + }, + + /** + * 配置和初始化工具栏 + * Set toolbar and Initialization + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setToolbar : function() { + var settings = this.settings; + + if(settings.readOnly) { + return this; + } + + var editor = this.editor; + var preview = this.preview; + var classPrefix = this.classPrefix; + + var toolbar = this.toolbar = editor.children("." + classPrefix + "toolbar"); + + if (settings.toolbar && toolbar.length < 1) + { + var toolbarHTML = "
    "; + + editor.append(toolbarHTML); + toolbar = this.toolbar = editor.children("." + classPrefix + "toolbar"); + } + + if (!settings.toolbar) + { + toolbar.hide(); + + return this; + } + + toolbar.show(); + + var icons = (typeof settings.toolbarIcons === "function") ? settings.toolbarIcons() + : ((typeof settings.toolbarIcons === "string") ? editormd.toolbarModes[settings.toolbarIcons] : settings.toolbarIcons); + + var toolbarMenu = toolbar.find("." + this.classPrefix + "menu"), menu = ""; + var pullRight = false; + + for (var i = 0, len = icons.length; i < len; i++) + { + var name = icons[i]; + + if (name === "||") + { + pullRight = true; + } + else if (name === "|") + { + menu += "
  • |
  • "; + } + else + { + var isHeader = (/h(\d)/.test(name)); + var index = name; + + if (name === "watch" && !settings.watch) { + index = "unwatch"; + } + + var title = settings.lang.toolbar[index]; + var iconTexts = settings.toolbarIconTexts[index]; + var iconClass = settings.toolbarIconsClass[index]; + + title = (typeof title === "undefined") ? "" : title; + iconTexts = (typeof iconTexts === "undefined") ? "" : iconTexts; + iconClass = (typeof iconClass === "undefined") ? "" : iconClass; + + var menuItem = pullRight ? "
  • " : "
  • "; + + if (typeof settings.toolbarCustomIcons[name] !== "undefined" && typeof settings.toolbarCustomIcons[name] !== "function") + { + menuItem += settings.toolbarCustomIcons[name]; + } + else + { + menuItem += ""; + menuItem += ""+((isHeader) ? name.toUpperCase() : ( (iconClass === "") ? iconTexts : "") ) + ""; + menuItem += ""; + } + + menuItem += "
  • "; + + menu = pullRight ? menuItem + menu : menu + menuItem; + } + } + + toolbarMenu.html(menu); + + toolbarMenu.find("[title=\"Lowercase\"]").attr("title", settings.lang.toolbar.lowercase); + toolbarMenu.find("[title=\"ucwords\"]").attr("title", settings.lang.toolbar.ucwords); + + this.setToolbarHandler(); + this.setToolbarAutoFixed(); + + return this; + }, + + /** + * 工具栏图标事件处理对象序列 + * Get toolbar icons event handlers + * + * @param {Object} cm CodeMirror的实例对象 + * @param {String} name 要获取的事件处理器名称 + * @returns {Object} 返回处理对象序列 + */ + + dialogLockScreen : function() { + $.proxy(editormd.dialogLockScreen, this)(); + + return this; + }, + + dialogShowMask : function(dialog) { + $.proxy(editormd.dialogShowMask, this)(dialog); + + return this; + }, + + getToolbarHandles : function(name) { + var toolbarHandlers = this.toolbarHandlers = editormd.toolbarHandlers; + + return (name && typeof toolbarIconHandlers[name] !== "undefined") ? toolbarHandlers[name] : toolbarHandlers; + }, + + /** + * 工具栏图标事件处理器 + * Bind toolbar icons event handle + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setToolbarHandler : function() { + var _this = this; + var settings = this.settings; + + if (!settings.toolbar || settings.readOnly) { + return this; + } + + var toolbar = this.toolbar; + var cm = this.cm; + var classPrefix = this.classPrefix; + var toolbarIcons = this.toolbarIcons = toolbar.find("." + classPrefix + "menu > li > a"); + var toolbarIconHandlers = this.getToolbarHandles(); + + toolbarIcons.bind(editormd.mouseOrTouch("click", "touchend"), function(event) { + + var icon = $(this).children(".fa"); + var name = icon.attr("name"); + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (name === "") { + return ; + } + + _this.activeIcon = icon; + + if (typeof toolbarIconHandlers[name] !== "undefined") + { + $.proxy(toolbarIconHandlers[name], _this)(cm); + } + else + { + if (typeof settings.toolbarHandlers[name] !== "undefined") + { + $.proxy(settings.toolbarHandlers[name], _this)(cm, icon, cursor, selection); + } + } + + if (name !== "link" && name !== "reference-link" && name !== "image" && name !== "code-block" && + name !== "preformatted-text" && name !== "watch" && name !== "preview" && name !== "search" && name !== "fullscreen" && name !== "info") + { + cm.focus(); + } + + return false; + + }); + + return this; + }, + + /** + * 动态创建对话框 + * Creating custom dialogs + * + * @param {Object} options 配置项键值对 Key/Value + * @returns {dialog} 返回创建的dialog的jQuery实例对象 + */ + + createDialog : function(options) { + return $.proxy(editormd.createDialog, this)(options); + }, + + /** + * 创建关于Editor.md的对话框 + * Create about Editor.md dialog + * + * @returns {editormd} 返回editormd的实例对象 + */ + + createInfoDialog : function() { + var _this = this; + var editor = this.editor; + var classPrefix = this.classPrefix; + + var infoDialogHTML = [ + "
    ", + "
    ", + "

    " + editormd.title + "v" + editormd.version + "

    ", + "

    " + this.lang.description + "

    ", + "

    " + editormd.homePage + "

    ", + "

    Copyright © 2015 Pandao, The MIT License.

    ", + "
    ", + "", + "
    " + ].join("\n"); + + editor.append(infoDialogHTML); + + var infoDialog = this.infoDialog = editor.children("." + classPrefix + "dialog-info"); + + infoDialog.find("." + classPrefix + "dialog-close").bind(editormd.mouseOrTouch("click", "touchend"), function() { + _this.hideInfoDialog(); + }); + + infoDialog.css("border", (editormd.isIE8) ? "1px solid #ddd" : "").css("z-index", editormd.dialogZindex).show(); + + this.infoDialogPosition(); + + return this; + }, + + /** + * 关于Editor.md对话居中定位 + * Editor.md dialog position handle + * + * @returns {editormd} 返回editormd的实例对象 + */ + + infoDialogPosition : function() { + var infoDialog = this.infoDialog; + + var _infoDialogPosition = function() { + infoDialog.css({ + top : ($(window).height() - infoDialog.height()) / 2 + "px", + left : ($(window).width() - infoDialog.width()) / 2 + "px" + }); + }; + + _infoDialogPosition(); + + $(window).resize(_infoDialogPosition); + + return this; + }, + + /** + * 显示关于Editor.md + * Display about Editor.md dialog + * + * @returns {editormd} 返回editormd的实例对象 + */ + + showInfoDialog : function() { + + $("html,body").css("overflow-x", "hidden"); + + var _this = this; + var editor = this.editor; + var settings = this.settings; + var infoDialog = this.infoDialog = editor.children("." + this.classPrefix + "dialog-info"); + + if (infoDialog.length < 1) + { + this.createInfoDialog(); + } + + this.lockScreen(true); + + this.mask.css({ + opacity : settings.dialogMaskOpacity, + backgroundColor : settings.dialogMaskBgColor + }).show(); + + infoDialog.css("z-index", editormd.dialogZindex).show(); + + this.infoDialogPosition(); + + return this; + }, + + /** + * 隐藏关于Editor.md + * Hide about Editor.md dialog + * + * @returns {editormd} 返回editormd的实例对象 + */ + + hideInfoDialog : function() { + $("html,body").css("overflow-x", ""); + this.infoDialog.hide(); + this.mask.hide(); + this.lockScreen(false); + + return this; + }, + + /** + * 锁屏 + * lock screen + * + * @param {Boolean} lock Boolean 布尔值,是否锁屏 + * @returns {editormd} 返回editormd的实例对象 + */ + + lockScreen : function(lock) { + editormd.lockScreen(lock); + this.resize(); + + return this; + }, + + /** + * 编辑器界面重建,用于动态语言包或模块加载等 + * Recreate editor + * + * @returns {editormd} 返回editormd的实例对象 + */ + + recreate : function() { + var _this = this; + var editor = this.editor; + var settings = this.settings; + + this.codeMirror.remove(); + + this.setCodeMirror(); + + if (!settings.readOnly) + { + if (editor.find(".editormd-dialog").length > 0) { + editor.find(".editormd-dialog").remove(); + } + + if (settings.toolbar) + { + this.getToolbarHandles(); + this.setToolbar(); + } + } + + this.loadedDisplay(true); + + return this; + }, + + /** + * 高亮预览HTML的pre代码部分 + * highlight of preview codes + * + * @returns {editormd} 返回editormd的实例对象 + */ + + previewCodeHighlight : function() { + var settings = this.settings; + var previewContainer = this.previewContainer; + + if (settings.previewCodeHighlight) + { + previewContainer.find("pre").addClass("prettyprint linenums"); + + if (typeof prettyPrint !== "undefined") + { + prettyPrint(); + } + } + + return this; + }, + + /** + * 解析TeX(KaTeX)科学公式 + * TeX(KaTeX) Renderer + * + * @returns {editormd} 返回editormd的实例对象 + */ + + katexRender : function() { + + if (timer === null) + { + return this; + } + + this.previewContainer.find("." + editormd.classNames.tex).each(function(){ + var tex = $(this); + editormd.$katex.render(tex.text(), tex[0]); + + tex.find(".katex").css("font-size", "1.6em"); + }); + + return this; + }, + + /** + * 解析和渲染流程图及时序图 + * FlowChart and SequenceDiagram Renderer + * + * @returns {editormd} 返回editormd的实例对象 + */ + + flowChartAndSequenceDiagramRender : function() { + var $this = this; + var settings = this.settings; + var previewContainer = this.previewContainer; + + if (editormd.isIE8) { + return this; + } + + if (settings.flowChart) { + if (flowchartTimer === null) { + return this; + } + + previewContainer.find(".flowchart").flowChart(); + } + + if (settings.sequenceDiagram) { + previewContainer.find(".sequence-diagram").sequenceDiagram({theme: "simple"}); + } + + var preview = $this.preview; + var codeMirror = $this.codeMirror; + var codeView = codeMirror.find(".CodeMirror-scroll"); + + var height = codeView.height(); + var scrollTop = codeView.scrollTop(); + var percent = (scrollTop / codeView[0].scrollHeight); + var tocHeight = 0; + + preview.find(".markdown-toc-list").each(function(){ + tocHeight += $(this).height(); + }); + + var tocMenuHeight = preview.find(".editormd-toc-menu").height(); + tocMenuHeight = (!tocMenuHeight) ? 0 : tocMenuHeight; + + if (scrollTop === 0) + { + preview.scrollTop(0); + } + else if (scrollTop + height >= codeView[0].scrollHeight - 16) + { + preview.scrollTop(preview[0].scrollHeight); + } + else + { + preview.scrollTop((preview[0].scrollHeight + tocHeight + tocMenuHeight) * percent); + } + + return this; + }, + + /** + * 注册键盘快捷键处理 + * Register CodeMirror keyMaps (keyboard shortcuts). + * + * @param {Object} keyMap KeyMap key/value {"(Ctrl/Shift/Alt)-Key" : function(){}} + * @returns {editormd} return this + */ + + registerKeyMaps : function(keyMap) { + + var _this = this; + var cm = this.cm; + var settings = this.settings; + var toolbarHandlers = editormd.toolbarHandlers; + var disabledKeyMaps = settings.disabledKeyMaps; + + keyMap = keyMap || null; + + if (keyMap) + { + for (var i in keyMap) + { + if ($.inArray(i, disabledKeyMaps) < 0) + { + var map = {}; + map[i] = keyMap[i]; + + cm.addKeyMap(keyMap); + } + } + } + else + { + for (var k in editormd.keyMaps) + { + var _keyMap = editormd.keyMaps[k]; + var handle = (typeof _keyMap === "string") ? $.proxy(toolbarHandlers[_keyMap], _this) : $.proxy(_keyMap, _this); + + if ($.inArray(k, ["F9", "F10", "F11"]) < 0 && $.inArray(k, disabledKeyMaps) < 0) + { + var _map = {}; + _map[k] = handle; + + cm.addKeyMap(_map); + } + } + + $(window).keydown(function(event) { + + var keymaps = { + "120" : "F9", + "121" : "F10", + "122" : "F11" + }; + + if ( $.inArray(keymaps[event.keyCode], disabledKeyMaps) < 0 ) + { + switch (event.keyCode) + { + case 120: + $.proxy(toolbarHandlers["watch"], _this)(); + return false; + break; + + case 121: + $.proxy(toolbarHandlers["preview"], _this)(); + return false; + break; + + case 122: + $.proxy(toolbarHandlers["fullscreen"], _this)(); + return false; + break; + + default: + break; + } + } + }); + } + + return this; + }, + + /** + * 绑定同步滚动 + * + * @returns {editormd} return this + */ + + bindScrollEvent : function() { + + var _this = this; + var preview = this.preview; + var settings = this.settings; + var codeMirror = this.codeMirror; + var mouseOrTouch = editormd.mouseOrTouch; + + if (!settings.syncScrolling) { + return this; + } + + var cmBindScroll = function() { + codeMirror.find(".CodeMirror-scroll").bind(mouseOrTouch("scroll", "touchmove"), function(event) { + var height = $(this).height(); + var scrollTop = $(this).scrollTop(); + var percent = (scrollTop / $(this)[0].scrollHeight); + + var tocHeight = 0; + + preview.find(".markdown-toc-list").each(function(){ + tocHeight += $(this).height(); + }); + + var tocMenuHeight = preview.find(".editormd-toc-menu").height(); + tocMenuHeight = (!tocMenuHeight) ? 0 : tocMenuHeight; + + if (scrollTop === 0) + { + preview.scrollTop(0); + } + else if (scrollTop + height >= $(this)[0].scrollHeight - 16) + { + preview.scrollTop(preview[0].scrollHeight); + } + else + { + preview.scrollTop((preview[0].scrollHeight + tocHeight + tocMenuHeight) * percent); + } + + $.proxy(settings.onscroll, _this)(event); + }); + }; + + var cmUnbindScroll = function() { + codeMirror.find(".CodeMirror-scroll").unbind(mouseOrTouch("scroll", "touchmove")); + }; + + var previewBindScroll = function() { + + preview.bind(mouseOrTouch("scroll", "touchmove"), function(event) { + var height = $(this).height(); + var scrollTop = $(this).scrollTop(); + var percent = (scrollTop / $(this)[0].scrollHeight); + var codeView = codeMirror.find(".CodeMirror-scroll"); + + if(scrollTop === 0) + { + codeView.scrollTop(0); + } + else if (scrollTop + height >= $(this)[0].scrollHeight) + { + codeView.scrollTop(codeView[0].scrollHeight); + } + else + { + codeView.scrollTop(codeView[0].scrollHeight * percent); + } + + $.proxy(settings.onpreviewscroll, _this)(event); + }); + + }; + + var previewUnbindScroll = function() { + preview.unbind(mouseOrTouch("scroll", "touchmove")); + }; + + codeMirror.bind({ + mouseover : cmBindScroll, + mouseout : cmUnbindScroll, + touchstart : cmBindScroll, + touchend : cmUnbindScroll + }); + + if (settings.syncScrolling === "single") { + return this; + } + + preview.bind({ + mouseover : previewBindScroll, + mouseout : previewUnbindScroll, + touchstart : previewBindScroll, + touchend : previewUnbindScroll + }); + + return this; + }, + + bindChangeEvent : function() { + + var _this = this; + var cm = this.cm; + var settings = this.settings; + + if (!settings.syncScrolling) { + return this; + } + + cm.on("change", function(_cm, changeObj) { + + if (settings.watch) + { + _this.previewContainer.css("padding", settings.autoHeight ? "20px 20px 50px 40px" : "20px"); + } + + timer = setTimeout(function() { + clearTimeout(timer); + _this.save(); + timer = null; + }, settings.delay); + }); + + return this; + }, + + /** + * 加载队列完成之后的显示处理 + * Display handle of the module queues loaded after. + * + * @param {Boolean} recreate 是否为重建编辑器 + * @returns {editormd} 返回editormd的实例对象 + */ + + loadedDisplay : function(recreate) { + + recreate = recreate || false; + + var _this = this; + var editor = this.editor; + var preview = this.preview; + var settings = this.settings; + + this.containerMask.hide(); + + this.save(); + + if (settings.watch) { + preview.show(); + } + + editor.data("oldWidth", editor.width()).data("oldHeight", editor.height()); // 为了兼容Zepto + + this.resize(); + this.registerKeyMaps(); + + $(window).resize(function(){ + _this.resize(); + }); + + this.bindScrollEvent().bindChangeEvent(); + + if (!recreate) + { + $.proxy(settings.onload, this)(); + } + + this.state.loaded = true; + + return this; + }, + + /** + * 设置编辑器的宽度 + * Set editor width + * + * @param {Number|String} width 编辑器宽度值 + * @returns {editormd} 返回editormd的实例对象 + */ + + width : function(width) { + + this.editor.css("width", (typeof width === "number") ? width + "px" : width); + this.resize(); + + return this; + }, + + /** + * 设置编辑器的高度 + * Set editor height + * + * @param {Number|String} height 编辑器高度值 + * @returns {editormd} 返回editormd的实例对象 + */ + + height : function(height) { + + this.editor.css("height", (typeof height === "number") ? height + "px" : height); + this.resize(); + + return this; + }, + + /** + * 调整编辑器的尺寸和布局 + * Resize editor layout + * + * @param {Number|String} [width=null] 编辑器宽度值 + * @param {Number|String} [height=null] 编辑器高度值 + * @returns {editormd} 返回editormd的实例对象 + */ + + resize : function(width, height) { + + width = width || null; + height = height || null; + + var state = this.state; + var editor = this.editor; + var preview = this.preview; + var toolbar = this.toolbar; + var settings = this.settings; + var codeMirror = this.codeMirror; + + if (width) + { + editor.css("width", (typeof width === "number") ? width + "px" : width); + } + + if (settings.autoHeight && !state.fullscreen && !state.preview) + { + editor.css("height", "auto"); + codeMirror.css("height", "auto"); + } + else + { + if (height) + { + editor.css("height", (typeof height === "number") ? height + "px" : height); + } + + if (state.fullscreen) + { + editor.height($(window).height()); + } + + if (settings.toolbar && !settings.readOnly) + { + codeMirror.css("margin-top", toolbar.height() + 1).height(editor.height() - toolbar.height()); + } + else + { + codeMirror.css("margin-top", 0).height(editor.height()); + } + } + + if(settings.watch) + { + codeMirror.width(editor.width() / 2); + preview.width((!state.preview) ? editor.width() / 2 : editor.width()); + + this.previewContainer.css("padding", settings.autoHeight ? "20px 20px 50px 40px" : "20px"); + + if (settings.toolbar && !settings.readOnly) + { + preview.css("top", toolbar.height() + 1); + } + else + { + preview.css("top", 0); + } + + if (settings.autoHeight && !state.fullscreen && !state.preview) + { + preview.height(""); + } + else + { + var previewHeight = (settings.toolbar && !settings.readOnly) ? editor.height() - toolbar.height() : editor.height(); + + preview.height(previewHeight); + } + } + else + { + codeMirror.width(editor.width()); + preview.hide(); + } + + if (state.loaded) + { + $.proxy(settings.onresize, this)(); + } + + return this; + }, + + /** + * 解析和保存Markdown代码 + * Parse & Saving Markdown source code + * + * @returns {editormd} 返回editormd的实例对象 + */ + + save : function() { + + if (timer === null) + { + return this; + } + + var _this = this; + var state = this.state; + var settings = this.settings; + var cm = this.cm; + var cmValue = cm.getValue(); + var previewContainer = this.previewContainer; + + if (settings.mode !== "gfm" && settings.mode !== "markdown") + { + this.markdownTextarea.val(cmValue); + + return this; + } + + var marked = editormd.$marked; + var markdownToC = this.markdownToC = []; + var rendererOptions = this.markedRendererOptions = { + toc : settings.toc, + tocm : settings.tocm, + tocStartLevel : settings.tocStartLevel, + pageBreak : settings.pageBreak, + taskList : settings.taskList, + emoji : settings.emoji, + tex : settings.tex, + atLink : settings.atLink, // for @link + emailLink : settings.emailLink, // for mail address auto link + flowChart : settings.flowChart, + sequenceDiagram : settings.sequenceDiagram, + previewCodeHighlight : settings.previewCodeHighlight, + }; + + var markedOptions = this.markedOptions = { + renderer : editormd.markedRenderer(markdownToC, rendererOptions), + gfm : true, + tables : true, + breaks : true, + pedantic : false, + sanitize : (settings.htmlDecode) ? false : true, // 关闭忽略HTML标签,即开启识别HTML标签,默认为false + smartLists : true, + smartypants : true + }; + + marked.setOptions(markedOptions); + + var newMarkdownDoc = editormd.$marked(cmValue, markedOptions); + + //console.info("cmValue", cmValue, newMarkdownDoc); + + newMarkdownDoc = editormd.filterHTMLTags(newMarkdownDoc, settings.htmlDecode); + + //console.error("cmValue", cmValue, newMarkdownDoc); + + this.markdownTextarea.text(cmValue); + + cm.save(); + + if (settings.saveHTMLToTextarea) + { + this.htmlTextarea.text(newMarkdownDoc); + } + + if(settings.watch || (!settings.watch && state.preview)) + { + previewContainer.html(newMarkdownDoc); + + this.previewCodeHighlight(); + + if (settings.toc) + { + var tocContainer = (settings.tocContainer === "") ? previewContainer : $(settings.tocContainer); + var tocMenu = tocContainer.find("." + this.classPrefix + "toc-menu"); + + tocContainer.attr("previewContainer", (settings.tocContainer === "") ? "true" : "false"); + + if (settings.tocContainer !== "" && tocMenu.length > 0) + { + tocMenu.remove(); + } + + editormd.markdownToCRenderer(markdownToC, tocContainer, settings.tocDropdown, settings.tocStartLevel); + + if (settings.tocDropdown || tocContainer.find("." + this.classPrefix + "toc-menu").length > 0) + { + editormd.tocDropdownMenu(tocContainer, (settings.tocTitle !== "") ? settings.tocTitle : this.lang.tocTitle); + } + + if (settings.tocContainer !== "") + { + previewContainer.find(".markdown-toc").css("border", "none"); + } + } + + if (settings.tex) + { + if (!editormd.kaTeXLoaded && settings.autoLoadModules) + { + editormd.loadKaTeX(function() { + editormd.$katex = katex; + editormd.kaTeXLoaded = true; + _this.katexRender(); + }); + } + else + { + editormd.$katex = katex; + this.katexRender(); + } + } + + if (settings.flowChart || settings.sequenceDiagram) + { + flowchartTimer = setTimeout(function(){ + clearTimeout(flowchartTimer); + _this.flowChartAndSequenceDiagramRender(); + flowchartTimer = null; + }, 10); + } + + if (state.loaded) + { + $.proxy(settings.onchange, this)(); + } + } + + return this; + }, + + /** + * 聚焦光标位置 + * Focusing the cursor position + * + * @returns {editormd} 返回editormd的实例对象 + */ + + focus : function() { + this.cm.focus(); + + return this; + }, + + /** + * 设置光标的位置 + * Set cursor position + * + * @param {Object} cursor 要设置的光标位置键值对象,例:{line:1, ch:0} + * @returns {editormd} 返回editormd的实例对象 + */ + + setCursor : function(cursor) { + this.cm.setCursor(cursor); + + return this; + }, + + /** + * 获取当前光标的位置 + * Get the current position of the cursor + * + * @returns {Cursor} 返回一个光标Cursor对象 + */ + + getCursor : function() { + return this.cm.getCursor(); + }, + + /** + * 设置光标选中的范围 + * Set cursor selected ranges + * + * @param {Object} from 开始位置的光标键值对象,例:{line:1, ch:0} + * @param {Object} to 结束位置的光标键值对象,例:{line:1, ch:0} + * @returns {editormd} 返回editormd的实例对象 + */ + + setSelection : function(from, to) { + + this.cm.setSelection(from, to); + + return this; + }, + + /** + * 获取光标选中的文本 + * Get the texts from cursor selected + * + * @returns {String} 返回选中文本的字符串形式 + */ + + getSelection : function() { + return this.cm.getSelection(); + }, + + /** + * 设置光标选中的文本范围 + * Set the cursor selection ranges + * + * @param {Array} ranges cursor selection ranges array + * @returns {Array} return this + */ + + setSelections : function(ranges) { + this.cm.setSelections(ranges); + + return this; + }, + + /** + * 获取光标选中的文本范围 + * Get the cursor selection ranges + * + * @returns {Array} return selection ranges array + */ + + getSelections : function() { + return this.cm.getSelections(); + }, + + /** + * 替换当前光标选中的文本或在当前光标处插入新字符 + * Replace the text at the current cursor selected or insert a new character at the current cursor position + * + * @param {String} value 要插入的字符值 + * @returns {editormd} 返回editormd的实例对象 + */ + + replaceSelection : function(value) { + this.cm.replaceSelection(value); + + return this; + }, + + /** + * 在当前光标处插入新字符 + * Insert a new character at the current cursor position + * + * 同replaceSelection()方法 + * With the replaceSelection() method + * + * @param {String} value 要插入的字符值 + * @returns {editormd} 返回editormd的实例对象 + */ + + insertValue : function(value) { + this.replaceSelection(value); + + return this; + }, + + /** + * 追加markdown + * append Markdown to editor + * + * @param {String} md 要追加的markdown源文档 + * @returns {editormd} 返回editormd的实例对象 + */ + + appendMarkdown : function(md) { + var settings = this.settings; + var cm = this.cm; + + cm.setValue(cm.getValue() + md); + + return this; + }, + + /** + * 设置和传入编辑器的markdown源文档 + * Set Markdown source document + * + * @param {String} md 要传入的markdown源文档 + * @returns {editormd} 返回editormd的实例对象 + */ + + setMarkdown : function(md) { + this.cm.setValue(md || this.settings.markdown); + + return this; + }, + + /** + * 获取编辑器的markdown源文档 + * Set Editor.md markdown/CodeMirror value + * + * @returns {editormd} 返回editormd的实例对象 + */ + + getMarkdown : function() { + return this.cm.getValue(); + }, + + /** + * 获取编辑器的源文档 + * Get CodeMirror value + * + * @returns {editormd} 返回editormd的实例对象 + */ + + getValue : function() { + return this.cm.getValue(); + }, + + /** + * 设置编辑器的源文档 + * Set CodeMirror value + * + * @param {String} value set code/value/string/text + * @returns {editormd} 返回editormd的实例对象 + */ + + setValue : function(value) { + this.cm.setValue(value); + + return this; + }, + + /** + * 清空编辑器 + * Empty CodeMirror editor container + * + * @returns {editormd} 返回editormd的实例对象 + */ + + clear : function() { + this.cm.setValue(""); + + return this; + }, + + /** + * 获取解析后存放在Textarea的HTML源码 + * Get parsed html code from Textarea + * + * @returns {String} 返回HTML源码 + */ + + getHTML : function() { + if (!this.settings.saveHTMLToTextarea) + { + alert("Error: settings.saveHTMLToTextarea == false"); + + return false; + } + + return this.htmlTextarea.val(); + }, + + /** + * getHTML()的别名 + * getHTML (alias) + * + * @returns {String} Return html code 返回HTML源码 + */ + + getTextareaSavedHTML : function() { + return this.getHTML(); + }, + + /** + * 获取预览窗口的HTML源码 + * Get html from preview container + * + * @returns {editormd} 返回editormd的实例对象 + */ + + getPreviewedHTML : function() { + if (!this.settings.watch) + { + alert("Error: settings.watch == false"); + + return false; + } + + return this.previewContainer.html(); + }, + + /** + * 开启实时预览 + * Enable real-time watching + * + * @returns {editormd} 返回editormd的实例对象 + */ + + watch : function(callback) { + var settings = this.settings; + + if ($.inArray(settings.mode, ["gfm", "markdown"]) < 0) + { + return this; + } + + this.state.watching = settings.watch = true; + this.preview.show(); + + if (this.toolbar) + { + var watchIcon = settings.toolbarIconsClass.watch; + var unWatchIcon = settings.toolbarIconsClass.unwatch; + + var icon = this.toolbar.find(".fa[name=watch]"); + icon.parent().attr("title", settings.lang.toolbar.watch); + icon.removeClass(unWatchIcon).addClass(watchIcon); + } + + this.codeMirror.css("border-right", "1px solid #ddd").width(this.editor.width() / 2); + + timer = 0; + + this.save().resize(); + + if (!settings.onwatch) + { + settings.onwatch = callback || function() {}; + } + + $.proxy(settings.onwatch, this)(); + + return this; + }, + + /** + * 关闭实时预览 + * Disable real-time watching + * + * @returns {editormd} 返回editormd的实例对象 + */ + + unwatch : function(callback) { + var settings = this.settings; + this.state.watching = settings.watch = false; + this.preview.hide(); + + if (this.toolbar) + { + var watchIcon = settings.toolbarIconsClass.watch; + var unWatchIcon = settings.toolbarIconsClass.unwatch; + + var icon = this.toolbar.find(".fa[name=watch]"); + icon.parent().attr("title", settings.lang.toolbar.unwatch); + icon.removeClass(watchIcon).addClass(unWatchIcon); + } + + this.codeMirror.css("border-right", "none").width(this.editor.width()); + + this.resize(); + + if (!settings.onunwatch) + { + settings.onunwatch = callback || function() {}; + } + + $.proxy(settings.onunwatch, this)(); + + return this; + }, + + /** + * 显示编辑器 + * Show editor + * + * @param {Function} [callback=function()] 回调函数 + * @returns {editormd} 返回editormd的实例对象 + */ + + show : function(callback) { + callback = callback || function() {}; + + var _this = this; + this.editor.show(0, function() { + $.proxy(callback, _this)(); + }); + + return this; + }, + + /** + * 隐藏编辑器 + * Hide editor + * + * @param {Function} [callback=function()] 回调函数 + * @returns {editormd} 返回editormd的实例对象 + */ + + hide : function(callback) { + callback = callback || function() {}; + + var _this = this; + this.editor.hide(0, function() { + $.proxy(callback, _this)(); + }); + + return this; + }, + + /** + * 隐藏编辑器部分,只预览HTML + * Enter preview html state + * + * @returns {editormd} 返回editormd的实例对象 + */ + + previewing : function() { + + var _this = this; + var editor = this.editor; + var preview = this.preview; + var toolbar = this.toolbar; + var settings = this.settings; + var codeMirror = this.codeMirror; + var previewContainer = this.previewContainer; + + if ($.inArray(settings.mode, ["gfm", "markdown"]) < 0) { + return this; + } + + if (settings.toolbar && toolbar) { + toolbar.toggle(); + toolbar.find(".fa[name=preview]").toggleClass("active"); + } + + codeMirror.toggle(); + + var escHandle = function(event) { + if (event.shiftKey && event.keyCode === 27) { + _this.previewed(); + } + }; + + if (codeMirror.css("display") === "none") // 为了兼容Zepto,而不使用codeMirror.is(":hidden") + { + this.state.preview = true; + + if (this.state.fullscreen) { + preview.css("background", "#fff"); + } + + editor.find("." + this.classPrefix + "preview-close-btn").show().bind(editormd.mouseOrTouch("click", "touchend"), function(){ + _this.previewed(); + }); + + if (!settings.watch) + { + this.save(); + } + else + { + previewContainer.css("padding", ""); + } + + previewContainer.addClass(this.classPrefix + "preview-active"); + + preview.show().css({ + position : "", + top : 0, + width : editor.width(), + height : (settings.autoHeight && !this.state.fullscreen) ? "auto" : editor.height() + }); + + if (this.state.loaded) + { + $.proxy(settings.onpreviewing, this)(); + } + + $(window).bind("keyup", escHandle); + } + else + { + $(window).unbind("keyup", escHandle); + this.previewed(); + } + }, + + /** + * 显示编辑器部分,退出只预览HTML + * Exit preview html state + * + * @returns {editormd} 返回editormd的实例对象 + */ + + previewed : function() { + + var editor = this.editor; + var preview = this.preview; + var toolbar = this.toolbar; + var settings = this.settings; + var previewContainer = this.previewContainer; + var previewCloseBtn = editor.find("." + this.classPrefix + "preview-close-btn"); + + this.state.preview = false; + + this.codeMirror.show(); + + if (settings.toolbar) { + toolbar.show(); + } + + preview[(settings.watch) ? "show" : "hide"](); + + previewCloseBtn.hide().unbind(editormd.mouseOrTouch("click", "touchend")); + + previewContainer.removeClass(this.classPrefix + "preview-active"); + + if (settings.watch) + { + previewContainer.css("padding", "20px"); + } + + preview.css({ + background : null, + position : "absolute", + width : editor.width() / 2, + height : (settings.autoHeight && !this.state.fullscreen) ? "auto" : editor.height() - toolbar.height(), + top : (settings.toolbar) ? toolbar.height() : 0 + }); + + if (this.state.loaded) + { + $.proxy(settings.onpreviewed, this)(); + } + + return this; + }, + + /** + * 编辑器全屏显示 + * Fullscreen show + * + * @returns {editormd} 返回editormd的实例对象 + */ + + fullscreen : function() { + + var _this = this; + var state = this.state; + var editor = this.editor; + var preview = this.preview; + var toolbar = this.toolbar; + var settings = this.settings; + var fullscreenClass = this.classPrefix + "fullscreen"; + + if (toolbar) { + toolbar.find(".fa[name=fullscreen]").parent().toggleClass("active"); + } + + var escHandle = function(event) { + if (!event.shiftKey && event.keyCode === 27) + { + if (state.fullscreen) + { + _this.fullscreenExit(); + } + } + }; + + if (!editor.hasClass(fullscreenClass)) + { + state.fullscreen = true; + + $("html,body").css("overflow", "hidden"); + + editor.css({ + width : $(window).width(), + height : $(window).height() + }).addClass(fullscreenClass); + + this.resize(); + + $.proxy(settings.onfullscreen, this)(); + + $(window).bind("keyup", escHandle); + } + else + { + $(window).unbind("keyup", escHandle); + this.fullscreenExit(); + } + + return this; + }, + + /** + * 编辑器退出全屏显示 + * Exit fullscreen state + * + * @returns {editormd} 返回editormd的实例对象 + */ + + fullscreenExit : function() { + + var editor = this.editor; + var settings = this.settings; + var toolbar = this.toolbar; + var fullscreenClass = this.classPrefix + "fullscreen"; + + this.state.fullscreen = false; + + if (toolbar) { + toolbar.find(".fa[name=fullscreen]").parent().removeClass("active"); + } + + $("html,body").css("overflow", ""); + + editor.css({ + width : editor.data("oldWidth"), + height : editor.data("oldHeight") + }).removeClass(fullscreenClass); + + this.resize(); + + $.proxy(settings.onfullscreenExit, this)(); + + return this; + }, + + /** + * 加载并执行插件 + * Load and execute the plugin + * + * @param {String} name plugin name / function name + * @param {String} path plugin load path + * @returns {editormd} 返回editormd的实例对象 + */ + + executePlugin : function(name, path) { + + var _this = this; + var cm = this.cm; + var settings = this.settings; + + path = settings.pluginPath + path; + + if (typeof define === "function") + { + if (typeof this[name] === "undefined") + { + alert("Error: " + name + " plugin is not found, you are not load this plugin."); + + return this; + } + + this[name](cm); + + return this; + } + + if ($.inArray(path, editormd.loadFiles.plugin) < 0) + { + editormd.loadPlugin(path, function() { + editormd.loadPlugins[name] = _this[name]; + _this[name](cm); + }); + } + else + { + $.proxy(editormd.loadPlugins[name], this)(cm); + } + + return this; + }, + + /** + * 搜索替换 + * Search & replace + * + * @param {String} command CodeMirror serach commands, "find, fintNext, fintPrev, clearSearch, replace, replaceAll" + * @returns {editormd} return this + */ + + search : function(command) { + var settings = this.settings; + + if (!settings.searchReplace) + { + alert("Error: settings.searchReplace == false"); + return this; + } + + if (!settings.readOnly) + { + this.cm.execCommand(command || "find"); + } + + return this; + }, + + searchReplace : function() { + this.search("replace"); + + return this; + }, + + searchReplaceAll : function() { + this.search("replaceAll"); + + return this; + } + }; + + editormd.fn.init.prototype = editormd.fn; + + /** + * 锁屏 + * lock screen when dialog opening + * + * @returns {void} + */ + + editormd.dialogLockScreen = function() { + var settings = this.settings || {dialogLockScreen : true}; + + if (settings.dialogLockScreen) + { + $("html,body").css("overflow", "hidden"); + this.resize(); + } + }; + + /** + * 显示透明背景层 + * Display mask layer when dialog opening + * + * @param {Object} dialog dialog jQuery object + * @returns {void} + */ + + editormd.dialogShowMask = function(dialog) { + var editor = this.editor; + var settings = this.settings || {dialogShowMask : true}; + + dialog.css({ + top : ($(window).height() - dialog.height()) / 2 + "px", + left : ($(window).width() - dialog.width()) / 2 + "px" + }); + + if (settings.dialogShowMask) { + editor.children("." + this.classPrefix + "mask").css("z-index", parseInt(dialog.css("z-index")) - 1).show(); + } + }; + + editormd.toolbarHandlers = { + undo : function() { + this.cm.undo(); + }, + + redo : function() { + this.cm.redo(); + }, + + bold : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + cm.replaceSelection("**" + selection + "**"); + + if(selection === "") { + cm.setCursor(cursor.line, cursor.ch + 2); + } + }, + + del : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + cm.replaceSelection("~~" + selection + "~~"); + + if(selection === "") { + cm.setCursor(cursor.line, cursor.ch + 2); + } + }, + + italic : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + cm.replaceSelection("*" + selection + "*"); + + if(selection === "") { + cm.setCursor(cursor.line, cursor.ch + 1); + } + }, + + quote : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (cursor.ch !== 0) + { + cm.setCursor(cursor.line, 0); + cm.replaceSelection("> " + selection); + cm.setCursor(cursor.line, cursor.ch + 2); + } + else + { + cm.replaceSelection("> " + selection); + } + + //cm.replaceSelection("> " + selection); + //cm.setCursor(cursor.line, (selection === "") ? cursor.ch + 2 : cursor.ch + selection.length + 2); + }, + + ucfirst : function() { + var cm = this.cm; + var selection = cm.getSelection(); + var selections = cm.listSelections(); + + cm.replaceSelection(editormd.firstUpperCase(selection)); + cm.setSelections(selections); + }, + + ucwords : function() { + var cm = this.cm; + var selection = cm.getSelection(); + var selections = cm.listSelections(); + + cm.replaceSelection(editormd.wordsFirstUpperCase(selection)); + cm.setSelections(selections); + }, + + uppercase : function() { + var cm = this.cm; + var selection = cm.getSelection(); + var selections = cm.listSelections(); + + cm.replaceSelection(selection.toUpperCase()); + cm.setSelections(selections); + }, + + lowercase : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + var selections = cm.listSelections(); + + cm.replaceSelection(selection.toLowerCase()); + cm.setSelections(selections); + }, + + h1 : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (cursor.ch !== 0) + { + cm.setCursor(cursor.line, 0); + cm.replaceSelection("# " + selection); + cm.setCursor(cursor.line, cursor.ch + 2); + } + else + { + cm.replaceSelection("# " + selection); + } + }, + + h2 : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (cursor.ch !== 0) + { + cm.setCursor(cursor.line, 0); + cm.replaceSelection("## " + selection); + cm.setCursor(cursor.line, cursor.ch + 3); + } + else + { + cm.replaceSelection("## " + selection); + } + }, + + h3 : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (cursor.ch !== 0) + { + cm.setCursor(cursor.line, 0); + cm.replaceSelection("### " + selection); + cm.setCursor(cursor.line, cursor.ch + 4); + } + else + { + cm.replaceSelection("### " + selection); + } + }, + + h4 : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (cursor.ch !== 0) + { + cm.setCursor(cursor.line, 0); + cm.replaceSelection("#### " + selection); + cm.setCursor(cursor.line, cursor.ch + 5); + } + else + { + cm.replaceSelection("#### " + selection); + } + }, + + h5 : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (cursor.ch !== 0) + { + cm.setCursor(cursor.line, 0); + cm.replaceSelection("##### " + selection); + cm.setCursor(cursor.line, cursor.ch + 6); + } + else + { + cm.replaceSelection("##### " + selection); + } + }, + + h6 : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (cursor.ch !== 0) + { + cm.setCursor(cursor.line, 0); + cm.replaceSelection("###### " + selection); + cm.setCursor(cursor.line, cursor.ch + 7); + } + else + { + cm.replaceSelection("###### " + selection); + } + }, + + "list-ul" : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (selection === "") + { + cm.replaceSelection("- " + selection); + } + else + { + var selectionText = selection.split("\n"); + + for (var i = 0, len = selectionText.length; i < len; i++) + { + selectionText[i] = (selectionText[i] === "") ? "" : "- " + selectionText[i]; + } + + cm.replaceSelection(selectionText.join("\n")); + } + }, + + "list-ol" : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if(selection === "") + { + cm.replaceSelection("1. " + selection); + } + else + { + var selectionText = selection.split("\n"); + + for (var i = 0, len = selectionText.length; i < len; i++) + { + selectionText[i] = (selectionText[i] === "") ? "" : (i+1) + ". " + selectionText[i]; + } + + cm.replaceSelection(selectionText.join("\n")); + } + }, + + hr : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + cm.replaceSelection(((cursor.ch !== 0) ? "\n\n" : "\n") + "------------\n\n"); + }, + + tex : function() { + if (!this.settings.tex) + { + alert("settings.tex === false"); + return this; + } + + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + cm.replaceSelection("$$" + selection + "$$"); + + if(selection === "") { + cm.setCursor(cursor.line, cursor.ch + 2); + } + }, + + link : function() { + this.executePlugin("linkDialog", "link-dialog/link-dialog"); + }, + + "reference-link" : function() { + this.executePlugin("referenceLinkDialog", "reference-link-dialog/reference-link-dialog"); + }, + + pagebreak : function() { + if (!this.settings.pageBreak) + { + alert("settings.pageBreak === false"); + return this; + } + + var cm = this.cm; + var selection = cm.getSelection(); + + cm.replaceSelection("\r\n[========]\r\n"); + }, + + image : function() { + this.executePlugin("imageDialog", "image-dialog/image-dialog"); + }, + + code : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + cm.replaceSelection("`" + selection + "`"); + + if (selection === "") { + cm.setCursor(cursor.line, cursor.ch + 1); + } + }, + + "code-block" : function() { + this.executePlugin("codeBlockDialog", "code-block-dialog/code-block-dialog"); + }, + + "preformatted-text" : function() { + this.executePlugin("preformattedTextDialog", "preformatted-text-dialog/preformatted-text-dialog"); + }, + + table : function() { + this.executePlugin("tableDialog", "table-dialog/table-dialog"); + }, + + datetime : function() { + var cm = this.cm; + var selection = cm.getSelection(); + var date = new Date(); + var langName = this.settings.lang.name; + var datefmt = editormd.dateFormat() + " " + editormd.dateFormat((langName === "zh-cn" || langName === "zh-tw") ? "cn-week-day" : "week-day"); + + cm.replaceSelection(datefmt); + }, + + emoji : function() { + this.executePlugin("emojiDialog", "emoji-dialog/emoji-dialog"); + }, + + "html-entities" : function() { + this.executePlugin("htmlEntitiesDialog", "html-entities-dialog/html-entities-dialog"); + }, + + "goto-line" : function() { + this.executePlugin("gotoLineDialog", "goto-line-dialog/goto-line-dialog"); + }, + + watch : function() { + this[this.settings.watch ? "unwatch" : "watch"](); + }, + + preview : function() { + this.previewing(); + }, + + fullscreen : function() { + this.fullscreen(); + }, + + clear : function() { + this.clear(); + }, + + search : function() { + this.search(); + }, + + help : function() { + this.executePlugin("helpDialog", "help-dialog/help-dialog"); + }, + + info : function() { + this.showInfoDialog(); + } + }; + + editormd.keyMaps = { + "Ctrl-1" : "h1", + "Ctrl-2" : "h2", + "Ctrl-3" : "h3", + "Ctrl-4" : "h4", + "Ctrl-5" : "h5", + "Ctrl-6" : "h6", + "Ctrl-B" : "bold", // if this is string == editormd.toolbarHandlers.xxxx + "Ctrl-D" : "datetime", + + "Ctrl-E" : function() { // emoji + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (!this.settings.emoji) + { + alert("Error: settings.emoji == false"); + return ; + } + + cm.replaceSelection(":" + selection + ":"); + + if (selection === "") { + cm.setCursor(cursor.line, cursor.ch + 1); + } + }, + "Ctrl-Alt-G" : "goto-line", + "Ctrl-H" : "hr", + "Ctrl-I" : "italic", + "Ctrl-K" : "code", + + "Ctrl-L" : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + var title = (selection === "") ? "" : " \""+selection+"\""; + + cm.replaceSelection("[" + selection + "]("+title+")"); + + if (selection === "") { + cm.setCursor(cursor.line, cursor.ch + 1); + } + }, + "Ctrl-U" : "list-ul", + + "Shift-Ctrl-A" : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (!this.settings.atLink) + { + alert("Error: settings.atLink == false"); + return ; + } + + cm.replaceSelection("@" + selection); + + if (selection === "") { + cm.setCursor(cursor.line, cursor.ch + 1); + } + }, + + "Shift-Ctrl-C" : "code", + "Shift-Ctrl-Q" : "quote", + "Shift-Ctrl-S" : "del", + "Shift-Ctrl-K" : "tex", // KaTeX + + "Shift-Alt-C" : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + cm.replaceSelection(["```", selection, "```"].join("\n")); + + if (selection === "") { + cm.setCursor(cursor.line, cursor.ch + 3); + } + }, + + "Shift-Ctrl-Alt-C" : "code-block", + "Shift-Ctrl-H" : "html-entities", + "Shift-Alt-H" : "help", + "Shift-Ctrl-E" : "emoji", + "Shift-Ctrl-U" : "uppercase", + "Shift-Alt-U" : "ucwords", + "Shift-Ctrl-Alt-U" : "ucfirst", + "Shift-Alt-L" : "lowercase", + + "Shift-Ctrl-I" : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + var title = (selection === "") ? "" : " \""+selection+"\""; + + cm.replaceSelection("![" + selection + "]("+title+")"); + + if (selection === "") { + cm.setCursor(cursor.line, cursor.ch + 4); + } + }, + + "Shift-Ctrl-Alt-I" : "image", + "Shift-Ctrl-L" : "link", + "Shift-Ctrl-O" : "list-ol", + "Shift-Ctrl-P" : "preformatted-text", + "Shift-Ctrl-T" : "table", + "Shift-Alt-P" : "pagebreak", + "F9" : "watch", + "F10" : "preview", + "F11" : "fullscreen", + }; + + /** + * 清除字符串两边的空格 + * Clear the space of strings both sides. + * + * @param {String} str string + * @returns {String} trimed string + */ + + var trim = function(str) { + return (!String.prototype.trim) ? str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "") : str.trim(); + }; + + editormd.trim = trim; + + /** + * 所有单词首字母大写 + * Words first to uppercase + * + * @param {String} str string + * @returns {String} string + */ + + var ucwords = function (str) { + return str.toLowerCase().replace(/\b(\w)|\s(\w)/g, function($1) { + return $1.toUpperCase(); + }); + }; + + editormd.ucwords = editormd.wordsFirstUpperCase = ucwords; + + /** + * 字符串首字母大写 + * Only string first char to uppercase + * + * @param {String} str string + * @returns {String} string + */ + + var firstUpperCase = function(str) { + return str.toLowerCase().replace(/\b(\w)/, function($1){ + return $1.toUpperCase(); + }); + }; + + var ucfirst = firstUpperCase; + + editormd.firstUpperCase = editormd.ucfirst = firstUpperCase; + + editormd.urls = { + atLinkBase : "https://github.com/" + }; + + editormd.regexs = { + atLink : /@(\w+)/g, + email : /(\w+)@(\w+)\.(\w+)\.?(\w+)?/g, + emailLink : /(mailto:)?([\w\.\_]+)@(\w+)\.(\w+)\.?(\w+)?/g, + emoji : /:([\w\+-]+):/g, + emojiDatetime : /(\d{2}:\d{2}:\d{2})/g, + twemoji : /:(tw-([\w]+)-?(\w+)?):/g, + fontAwesome : /:(fa-([\w]+)(-(\w+)){0,}):/g, + editormdLogo : /:(editormd-logo-?(\w+)?):/g, + pageBreak : /^\[[=]{8,}\]$/ + }; + + // Emoji graphics files url path + editormd.emoji = { + path : "http://www.emoji-cheat-sheet.com/graphics/emojis/", + ext : ".png" + }; + + // Twitter Emoji (Twemoji) graphics files url path + editormd.twemoji = { + path : "http://twemoji.maxcdn.com/36x36/", + ext : ".png" + }; + + /** + * 自定义marked的解析器 + * Custom Marked renderer rules + * + * @param {Array} markdownToC 传入用于接收TOC的数组 + * @returns {Renderer} markedRenderer 返回marked的Renderer自定义对象 + */ + + editormd.markedRenderer = function(markdownToC, options) { + var defaults = { + toc : true, // Table of contents + tocm : false, + tocStartLevel : 1, // Said from H1 to create ToC + pageBreak : true, + atLink : true, // for @link + emailLink : true, // for mail address auto link + taskList : false, // Enable Github Flavored Markdown task lists + emoji : false, // :emoji: , Support Twemoji, fontAwesome, Editor.md logo emojis. + tex : false, // TeX(LaTeX), based on KaTeX + flowChart : false, // flowChart.js only support IE9+ + sequenceDiagram : false, // sequenceDiagram.js only support IE9+ + }; + + var settings = $.extend(defaults, options || {}); + var marked = editormd.$marked; + var markedRenderer = new marked.Renderer(); + markdownToC = markdownToC || []; + + var regexs = editormd.regexs; + var atLinkReg = regexs.atLink; + var emojiReg = regexs.emoji; + var emailReg = regexs.email; + var emailLinkReg = regexs.emailLink; + var twemojiReg = regexs.twemoji; + var faIconReg = regexs.fontAwesome; + var editormdLogoReg = regexs.editormdLogo; + var pageBreakReg = regexs.pageBreak; + + markedRenderer.emoji = function(text) { + + text = text.replace(editormd.regexs.emojiDatetime, function($1) { + return $1.replace(/:/g, ":"); + }); + + var matchs = text.match(emojiReg); + + if (!matchs || !settings.emoji) { + return text; + } + + for (var i = 0, len = matchs.length; i < len; i++) + { + if (matchs[i] === ":+1:") { + matchs[i] = ":\\+1:"; + } + + text = text.replace(new RegExp(matchs[i]), function($1, $2){ + var faMatchs = $1.match(faIconReg); + var name = $1.replace(/:/g, ""); + + if (faMatchs) + { + for (var fa = 0, len1 = faMatchs.length; fa < len1; fa++) + { + var faName = faMatchs[fa].replace(/:/g, ""); + + return ""; + } + } + else + { + var emdlogoMathcs = $1.match(editormdLogoReg); + var twemojiMatchs = $1.match(twemojiReg); + + if (emdlogoMathcs) + { + for (var x = 0, len2 = emdlogoMathcs.length; x < len2; x++) + { + var logoName = emdlogoMathcs[x].replace(/:/g, ""); + return ""; + } + } + else if (twemojiMatchs) + { + for (var t = 0, len3 = twemojiMatchs.length; t < len3; t++) + { + var twe = twemojiMatchs[t].replace(/:/g, "").replace("tw-", ""); + return "\"twemoji-""; + } + } + else + { + var src = (name === "+1") ? "plus1" : name; + src = (src === "black_large_square") ? "black_square" : src; + src = (src === "moon") ? "waxing_gibbous_moon" : src; + + return "\":""; + } + } + }); + } + + return text; + }; + + markedRenderer.atLink = function(text) { + + if (atLinkReg.test(text)) + { + if (settings.atLink) + { + text = text.replace(emailReg, function($1, $2, $3, $4) { + return $1.replace(/@/g, "_#_@_#_"); + }); + + text = text.replace(atLinkReg, function($1, $2) { + return "" + $1 + ""; + }).replace(/_#_@_#_/g, "@"); + } + + if (settings.emailLink) + { + text = text.replace(emailLinkReg, function($1, $2, $3, $4, $5) { + return (!$2 && $.inArray($5, "jpg|jpeg|png|gif|webp|ico|icon|pdf".split("|")) < 0) ? ""+$1+"" : $1; + }); + } + + return text; + } + + return text; + }; + + markedRenderer.link = function (href, title, text) { + + if (this.options.sanitize) { + try { + var prot = decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase(); + } catch(e) { + return ""; + } + + if (prot.indexOf("javascript:") === 0) { + return ""; + } + } + + var out = "" + text.replace(/@/g, "@") + ""; + } + + if (title) { + out += " title=\"" + title + "\""; + } + + out += ">" + text + ""; + + return out; + }; + + markedRenderer.heading = function(text, level, raw) { + + var linkText = text; + var hasLinkReg = /\s*\]*)\>(.*)\<\/a\>\s*/; + var getLinkTextReg = /\s*\]+)\>([^\>]*)\<\/a\>\s*/g; + + if (hasLinkReg.test(text)) + { + var tempText = []; + text = text.split(/\]+)\>([^\>]*)\<\/a\>/); + + for (var i = 0, len = text.length; i < len; i++) + { + tempText.push(text[i].replace(/\s*href\=\"(.*)\"\s*/g, "")); + } + + text = tempText.join(" "); + } + + text = trim(text); + + var escapedText = text.toLowerCase().replace(/[^\w]+/g, "-"); + var toc = { + text : text, + level : level, + slug : escapedText + }; + + var isChinese = /^[\u4e00-\u9fa5]+$/.test(text); + var id = (isChinese) ? escape(text).replace(/\%/g, "") : text.toLowerCase().replace(/[^\w]+/g, "-"); + + markdownToC.push(toc); + + var headingHTML = ""; + + headingHTML += ""; + headingHTML += ""; + headingHTML += (hasLinkReg) ? this.atLink(this.emoji(linkText)) : this.atLink(this.emoji(text)); + headingHTML += ""; + + return headingHTML; + }; + + markedRenderer.pageBreak = function(text) { + if (pageBreakReg.test(text) && settings.pageBreak) + { + text = "
    "; + } + + return text; + }; + + markedRenderer.paragraph = function(text) { + var isTeXInline = /\$\$(.*)\$\$/g.test(text); + var isTeXLine = /^\$\$(.*)\$\$$/.test(text); + var isTeXAddClass = (isTeXLine) ? " class=\"" + editormd.classNames.tex + "\"" : ""; + var isToC = (settings.tocm) ? /^(\[TOC\]|\[TOCM\])$/.test(text) : /^\[TOC\]$/.test(text); + var isToCMenu = /^\[TOCM\]$/.test(text); + + if (!isTeXLine && isTeXInline) + { + text = text.replace(/(\$\$([^\$]*)\$\$)+/g, function($1, $2) { + return "" + $2.replace(/\$/g, "") + ""; + }); + } + else + { + text = (isTeXLine) ? text.replace(/\$/g, "") : text; + } + + var tocHTML = "
    " + text + "
    "; + + return (isToC) ? ( (isToCMenu) ? "
    " + tocHTML + "

    " : tocHTML ) + : ( (pageBreakReg.test(text)) ? this.pageBreak(text) : "" + this.atLink(this.emoji(text)) + "

    \n" ); + }; + + markedRenderer.code = function (code, lang, escaped) { + + if (lang === "seq" || lang === "sequence") + { + return "
    " + code + "
    "; + } + else if ( lang === "flow") + { + return "
    " + code + "
    "; + } + else if ( lang === "math" || lang === "latex" || lang === "katex") + { + return "

    " + code + "

    "; + } + else + { + + return marked.Renderer.prototype.code.apply(this, arguments); + } + }; + + markedRenderer.tablecell = function(content, flags) { + var type = (flags.header) ? "th" : "td"; + var tag = (flags.align) ? "<" + type +" style=\"text-align:" + flags.align + "\">" : "<" + type + ">"; + + return tag + this.atLink(this.emoji(content)) + "\n"; + }; + + markedRenderer.listitem = function(text) { + if (settings.taskList && /^\s*\[[x\s]\]\s*/.test(text)) + { + text = text.replace(/^\s*\[\s\]\s*/, " ") + .replace(/^\s*\[x\]\s*/, " "); + + return "
  • " + this.atLink(this.emoji(text)) + "
  • "; + } + else + { + return "
  • " + this.atLink(this.emoji(text)) + "
  • "; + } + }; + + return markedRenderer; + }; + + /** + * + * 生成TOC(Table of Contents) + * Creating ToC (Table of Contents) + * + * @param {Array} toc 从marked获取的TOC数组列表 + * @param {Element} container 插入TOC的容器元素 + * @param {Integer} startLevel Hx 起始层级 + * @returns {Object} tocContainer 返回ToC列表容器层的jQuery对象元素 + */ + + editormd.markdownToCRenderer = function(toc, container, tocDropdown, startLevel) { + + var html = ""; + var lastLevel = 0; + var classPrefix = this.classPrefix; + + startLevel = startLevel || 1; + + for (var i = 0, len = toc.length; i < len; i++) + { + var text = toc[i].text; + var level = toc[i].level; + + if (level < startLevel) { + continue; + } + + if (level > lastLevel) + { + html += ""; + } + else if (level < lastLevel) + { + html += (new Array(lastLevel - level + 2)).join(""); + } + else + { + html += ""; + } + + html += "
  • " + text + "
      "; + lastLevel = level; + } + + var tocContainer = container.find(".markdown-toc"); + + if ((tocContainer.length < 1 && container.attr("previewContainer") === "false")) + { + var tocHTML = "
      "; + + tocHTML = (tocDropdown) ? "
      " + tocHTML + "
      " : tocHTML; + + container.html(tocHTML); + + tocContainer = container.find(".markdown-toc"); + } + + if (tocDropdown) + { + tocContainer.wrap("

      "); + } + + tocContainer.html("
        ").children(".markdown-toc-list").html(html.replace(/\r?\n?\\<\/ul\>/g, "")); + + return tocContainer; + }; + + /** + * + * 生成TOC下拉菜单 + * Creating ToC dropdown menu + * + * @param {Object} container 插入TOC的容器jQuery对象元素 + * @param {String} tocTitle ToC title + * @returns {Object} return toc-menu object + */ + + editormd.tocDropdownMenu = function(container, tocTitle) { + + tocTitle = tocTitle || "Table of Contents"; + + var zindex = 400; + var tocMenus = container.find("." + this.classPrefix + "toc-menu"); + + tocMenus.each(function() { + var $this = $(this); + var toc = $this.children(".markdown-toc"); + var icon = ""; + var btn = "" + icon + tocTitle + ""; + var menu = toc.children("ul"); + var list = menu.find("li"); + + toc.append(btn); + + list.first().before("
      • " + tocTitle + " " + icon + "

      • "); + + $this.mouseover(function(){ + menu.show(); + + list.each(function(){ + var li = $(this); + var ul = li.children("ul"); + + if (ul.html() === "") + { + ul.remove(); + } + + if (ul.length > 0 && ul.html() !== "") + { + var firstA = li.children("a").first(); + + if (firstA.children(".fa").length < 1) + { + firstA.append( $(icon).css({ float:"right", paddingTop:"4px" }) ); + } + } + + li.mouseover(function(){ + ul.css("z-index", zindex).show(); + zindex += 1; + }).mouseleave(function(){ + ul.hide(); + }); + }); + }).mouseleave(function(){ + menu.hide(); + }); + }); + + return tocMenus; + }; + + /** + * 简单地过滤指定的HTML标签 + * Filter custom html tags + * + * @param {String} html 要过滤HTML + * @param {String} filters 要过滤的标签 + * @returns {String} html 返回过滤的HTML + */ + + editormd.filterHTMLTags = function(html, filters) { + + if (typeof html !== "string") { + html = new String(html); + } + + if (typeof filters !== "string") { + return html; + } + + var expression = filters.split("|"); + var filterTags = expression[0].split(","); + var attrs = expression[1]; + + for (var i = 0, len = filterTags.length; i < len; i++) + { + var tag = filterTags[i]; + + html = html.replace(new RegExp("\<\s*" + tag + "\s*([^\>]*)\>([^\>]*)\<\s*\/" + tag + "\s*\>", "igm"), ""); + } + + //return html; + + if (typeof attrs !== "undefined") + { + var htmlTagRegex = /\<(\w+)\s*([^\>]*)\>([^\>]*)\<\/(\w+)\>/ig; + + if (attrs === "*") + { + html = html.replace(htmlTagRegex, function($1, $2, $3, $4, $5) { + return "<" + $2 + ">" + $4 + ""; + }); + } + else if (attrs === "on*") + { + html = html.replace(htmlTagRegex, function($1, $2, $3, $4, $5) { + var el = $("<" + $2 + ">" + $4 + ""); + var _attrs = $($1)[0].attributes; + var $attrs = {}; + + $.each(_attrs, function(i, e) { + if (e.nodeName !== '"') $attrs[e.nodeName] = e.nodeValue; + }); + + $.each($attrs, function(i) { + if (i.indexOf("on") === 0) { + delete $attrs[i]; + } + }); + + el.attr($attrs); + + var text = (typeof el[1] !== "undefined") ? $(el[1]).text() : ""; + + return el[0].outerHTML + text; + }); + } + else + { + html = html.replace(htmlTagRegex, function($1, $2, $3, $4) { + var filterAttrs = attrs.split(","); + var el = $($1); + el.html($4); + + $.each(filterAttrs, function(i) { + el.attr(filterAttrs[i], null); + }); + + return el[0].outerHTML; + }); + } + } + + return html; + }; + + /** + * 将Markdown文档解析为HTML用于前台显示 + * Parse Markdown to HTML for Font-end preview. + * + * @param {String} id 用于显示HTML的对象ID + * @param {Object} [options={}] 配置选项,可选 + * @returns {Object} div 返回jQuery对象元素 + */ + + editormd.markdownToHTML = function(id, options) { + var defaults = { + gfm : true, + toc : true, + tocm : false, + tocStartLevel : 1, + tocTitle : "目录", + tocDropdown : false, + tocContainer : "", + markdown : "", + markdownSourceCode : false, + htmlDecode : false, + autoLoadKaTeX : true, + pageBreak : true, + atLink : true, // for @link + emailLink : true, // for mail address auto link + tex : false, + taskList : false, // Github Flavored Markdown task lists + emoji : false, + flowChart : false, + sequenceDiagram : false, + previewCodeHighlight : true + }; + + editormd.$marked = marked; + + var div = $("#" + id); + var settings = div.settings = $.extend(true, defaults, options || {}); + var saveTo = div.find("textarea"); + + if (saveTo.length < 1) + { + div.append(""); + saveTo = div.find("textarea"); + } + + var markdownDoc = (settings.markdown === "") ? saveTo.val() : settings.markdown; + var markdownToC = []; + + var rendererOptions = { + toc : settings.toc, + tocm : settings.tocm, + tocStartLevel : settings.tocStartLevel, + taskList : settings.taskList, + emoji : settings.emoji, + tex : settings.tex, + pageBreak : settings.pageBreak, + atLink : settings.atLink, // for @link + emailLink : settings.emailLink, // for mail address auto link + flowChart : settings.flowChart, + sequenceDiagram : settings.sequenceDiagram, + previewCodeHighlight : settings.previewCodeHighlight, + }; + + var markedOptions = { + renderer : editormd.markedRenderer(markdownToC, rendererOptions), + gfm : settings.gfm, + tables : true, + breaks : true, + pedantic : false, + sanitize : (settings.htmlDecode) ? false : true, // 是否忽略HTML标签,即是否开启HTML标签解析,为了安全性,默认不开启 + smartLists : true, + smartypants : true + }; + + markdownDoc = new String(markdownDoc); + + var markdownParsed = marked(markdownDoc, markedOptions); + + markdownParsed = editormd.filterHTMLTags(markdownParsed, settings.htmlDecode); + + if (settings.markdownSourceCode) { + saveTo.text(markdownDoc); + } else { + saveTo.remove(); + } + + div.addClass("markdown-body " + this.classPrefix + "html-preview").append(markdownParsed); + + var tocContainer = (settings.tocContainer !== "") ? $(settings.tocContainer) : div; + + if (settings.tocContainer !== "") + { + tocContainer.attr("previewContainer", false); + } + + if (settings.toc) + { + div.tocContainer = this.markdownToCRenderer(markdownToC, tocContainer, settings.tocDropdown, settings.tocStartLevel); + + if (settings.tocDropdown || div.find("." + this.classPrefix + "toc-menu").length > 0) + { + this.tocDropdownMenu(div, settings.tocTitle); + } + + if (settings.tocContainer !== "") + { + div.find(".editormd-toc-menu, .editormd-markdown-toc").remove(); + } + } + + if (settings.previewCodeHighlight) + { + div.find("pre").addClass("prettyprint linenums"); + prettyPrint(); + } + + if (!editormd.isIE8) + { + if (settings.flowChart) { + div.find(".flowchart").flowChart(); + } + + if (settings.sequenceDiagram) { + div.find(".sequence-diagram").sequenceDiagram({theme: "simple"}); + } + } + + if (settings.tex) + { + var katexHandle = function() { + div.find("." + editormd.classNames.tex).each(function(){ + var tex = $(this); + katex.render(tex.html().replace(/</g, "<").replace(/>/g, ">"), tex[0]); + tex.find(".katex").css("font-size", "1.6em"); + }); + }; + + if (settings.autoLoadKaTeX && !editormd.$katex && !editormd.kaTeXLoaded) + { + this.loadKaTeX(function() { + editormd.$katex = katex; + editormd.kaTeXLoaded = true; + katexHandle(); + }); + } + else + { + katexHandle(); + } + } + + div.getMarkdown = function() { + return saveTo.val(); + }; + + return div; + }; + + // Editor.md themes, change toolbar themes etc. + // added @1.5.0 + editormd.themes = ["default", "dark"]; + + // Preview area themes + // added @1.5.0 + editormd.previewThemes = ["default", "dark"]; + + // CodeMirror / editor area themes + // @1.5.0 rename -> editorThemes, old version -> themes + editormd.editorThemes = [ + "default", "3024-day", "3024-night", + "ambiance", "ambiance-mobile", + "base16-dark", "base16-light", "blackboard", + "cobalt", + "eclipse", "elegant", "erlang-dark", + "lesser-dark", + "mbo", "mdn-like", "midnight", "monokai", + "neat", "neo", "night", + "paraiso-dark", "paraiso-light", "pastel-on-dark", + "rubyblue", + "solarized", + "the-matrix", "tomorrow-night-eighties", "twilight", + "vibrant-ink", + "xq-dark", "xq-light" + ]; + + editormd.loadPlugins = {}; + + editormd.loadFiles = { + js : [], + css : [], + plugin : [] + }; + + /** + * 动态加载Editor.md插件,但不立即执行 + * Load editor.md plugins + * + * @param {String} fileName 插件文件路径 + * @param {Function} [callback=function()] 加载成功后执行的回调函数 + * @param {String} [into="head"] 嵌入页面的位置 + */ + + editormd.loadPlugin = function(fileName, callback, into) { + callback = callback || function() {}; + + this.loadScript(fileName, function() { + editormd.loadFiles.plugin.push(fileName); + callback(); + }, into); + }; + + /** + * 动态加载CSS文件的方法 + * Load css file method + * + * @param {String} fileName CSS文件名 + * @param {Function} [callback=function()] 加载成功后执行的回调函数 + * @param {String} [into="head"] 嵌入页面的位置 + */ + + editormd.loadCSS = function(fileName, callback, into) { + into = into || "head"; + callback = callback || function() {}; + + var css = document.createElement("link"); + css.type = "text/css"; + css.rel = "stylesheet"; + css.onload = css.onreadystatechange = function() { + editormd.loadFiles.css.push(fileName); + callback(); + }; + + css.href = fileName + ".css"; + + if(into === "head") { + document.getElementsByTagName("head")[0].appendChild(css); + } else { + document.body.appendChild(css); + } + }; + + editormd.isIE = (navigator.appName == "Microsoft Internet Explorer"); + editormd.isIE8 = (editormd.isIE && navigator.appVersion.match(/8./i) == "8."); + + /** + * 动态加载JS文件的方法 + * Load javascript file method + * + * @param {String} fileName JS文件名 + * @param {Function} [callback=function()] 加载成功后执行的回调函数 + * @param {String} [into="head"] 嵌入页面的位置 + */ + + editormd.loadScript = function(fileName, callback, into) { + + into = into || "head"; + callback = callback || function() {}; + + var script = null; + script = document.createElement("script"); + script.id = fileName.replace(/[\./]+/g, "-"); + script.type = "text/javascript"; + script.src = fileName + ".js"; + + if (editormd.isIE8) + { + script.onreadystatechange = function() { + if(script.readyState) + { + if (script.readyState === "loaded" || script.readyState === "complete") + { + script.onreadystatechange = null; + editormd.loadFiles.js.push(fileName); + callback(); + } + } + }; + } + else + { + script.onload = function() { + editormd.loadFiles.js.push(fileName); + callback(); + }; + } + + if (into === "head") { + document.getElementsByTagName("head")[0].appendChild(script); + } else { + document.body.appendChild(script); + } + }; + + // 使用国外的CDN,加载速度有时会很慢,或者自定义URL + // You can custom KaTeX load url. + editormd.katexURL = { + css : "//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min", + js : "//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min" + }; + + editormd.kaTeXLoaded = false; + + /** + * 加载KaTeX文件 + * load KaTeX files + * + * @param {Function} [callback=function()] 加载成功后执行的回调函数 + */ + + editormd.loadKaTeX = function (callback) { + editormd.loadCSS(editormd.katexURL.css, function(){ + editormd.loadScript(editormd.katexURL.js, callback || function(){}); + }); + }; + + /** + * 锁屏 + * lock screen + * + * @param {Boolean} lock Boolean 布尔值,是否锁屏 + * @returns {void} + */ + + editormd.lockScreen = function(lock) { + $("html,body").css("overflow", (lock) ? "hidden" : ""); + }; + + /** + * 动态创建对话框 + * Creating custom dialogs + * + * @param {Object} options 配置项键值对 Key/Value + * @returns {dialog} 返回创建的dialog的jQuery实例对象 + */ + + editormd.createDialog = function(options) { + var defaults = { + name : "", + width : 420, + height: 240, + title : "", + drag : true, + closed : true, + content : "", + mask : true, + maskStyle : { + backgroundColor : "#fff", + opacity : 0.1 + }, + lockScreen : true, + footer : true, + buttons : false + }; + + options = $.extend(true, defaults, options); + + var $this = this; + var editor = this.editor; + var classPrefix = editormd.classPrefix; + var guid = (new Date()).getTime(); + var dialogName = ( (options.name === "") ? classPrefix + "dialog-" + guid : options.name); + var mouseOrTouch = editormd.mouseOrTouch; + + var html = "
        "; + + if (options.title !== "") + { + html += "
        "; + html += "" + options.title + ""; + html += "
        "; + } + + if (options.closed) + { + html += ""; + } + + html += "
        " + options.content; + + if (options.footer || typeof options.footer === "string") + { + html += "
        " + ( (typeof options.footer === "boolean") ? "" : options.footer) + "
        "; + } + + html += "
        "; + + html += "
        "; + html += "
        "; + html += "
        "; + + editor.append(html); + + var dialog = editor.find("." + dialogName); + + dialog.lockScreen = function(lock) { + if (options.lockScreen) + { + $("html,body").css("overflow", (lock) ? "hidden" : ""); + $this.resize(); + } + + return dialog; + }; + + dialog.showMask = function() { + if (options.mask) + { + editor.find("." + classPrefix + "mask").css(options.maskStyle).css("z-index", editormd.dialogZindex - 1).show(); + } + return dialog; + }; + + dialog.hideMask = function() { + if (options.mask) + { + editor.find("." + classPrefix + "mask").hide(); + } + + return dialog; + }; + + dialog.loading = function(show) { + var loading = dialog.find("." + classPrefix + "dialog-mask"); + loading[(show) ? "show" : "hide"](); + + return dialog; + }; + + dialog.lockScreen(true).showMask(); + + dialog.show().css({ + zIndex : editormd.dialogZindex, + border : (editormd.isIE8) ? "1px solid #ddd" : "", + width : (typeof options.width === "number") ? options.width + "px" : options.width, + height : (typeof options.height === "number") ? options.height + "px" : options.height + }); + + var dialogPosition = function(){ + dialog.css({ + top : ($(window).height() - dialog.height()) / 2 + "px", + left : ($(window).width() - dialog.width()) / 2 + "px" + }); + }; + + dialogPosition(); + + $(window).resize(dialogPosition); + + dialog.children("." + classPrefix + "dialog-close").bind(mouseOrTouch("click", "touchend"), function() { + dialog.hide().lockScreen(false).hideMask(); + }); + + if (typeof options.buttons === "object") + { + var footer = dialog.footer = dialog.find("." + classPrefix + "dialog-footer"); + + for (var key in options.buttons) + { + var btn = options.buttons[key]; + var btnClassName = classPrefix + key + "-btn"; + + footer.append(""); + btn[1] = $.proxy(btn[1], dialog); + footer.children("." + btnClassName).bind(mouseOrTouch("click", "touchend"), btn[1]); + } + } + + if (options.title !== "" && options.drag) + { + var posX, posY; + var dialogHeader = dialog.children("." + classPrefix + "dialog-header"); + + if (!options.mask) { + dialogHeader.bind(mouseOrTouch("click", "touchend"), function(){ + editormd.dialogZindex += 2; + dialog.css("z-index", editormd.dialogZindex); + }); + } + + dialogHeader.mousedown(function(e) { + e = e || window.event; //IE + posX = e.clientX - parseInt(dialog[0].style.left); + posY = e.clientY - parseInt(dialog[0].style.top); + + document.onmousemove = moveAction; + }); + + var userCanSelect = function (obj) { + obj.removeClass(classPrefix + "user-unselect").off("selectstart"); + }; + + var userUnselect = function (obj) { + obj.addClass(classPrefix + "user-unselect").on("selectstart", function(event) { // selectstart for IE + return false; + }); + }; + + var moveAction = function (e) { + e = e || window.event; //IE + + var left, top, nowLeft = parseInt(dialog[0].style.left), nowTop = parseInt(dialog[0].style.top); + + if( nowLeft >= 0 ) { + if( nowLeft + dialog.width() <= $(window).width()) { + left = e.clientX - posX; + } else { + left = $(window).width() - dialog.width(); + document.onmousemove = null; + } + } else { + left = 0; + document.onmousemove = null; + } + + if( nowTop >= 0 ) { + top = e.clientY - posY; + } else { + top = 0; + document.onmousemove = null; + } + + + document.onselectstart = function() { + return false; + }; + + userUnselect($("body")); + userUnselect(dialog); + dialog[0].style.left = left + "px"; + dialog[0].style.top = top + "px"; + }; + + document.onmouseup = function() { + userCanSelect($("body")); + userCanSelect(dialog); + + document.onselectstart = null; + document.onmousemove = null; + }; + + dialogHeader.touchDraggable = function() { + var offset = null; + var start = function(e) { + var orig = e.originalEvent; + var pos = $(this).parent().position(); + + offset = { + x : orig.changedTouches[0].pageX - pos.left, + y : orig.changedTouches[0].pageY - pos.top + }; + }; + + var move = function(e) { + e.preventDefault(); + var orig = e.originalEvent; + + $(this).parent().css({ + top : orig.changedTouches[0].pageY - offset.y, + left : orig.changedTouches[0].pageX - offset.x + }); + }; + + this.bind("touchstart", start).bind("touchmove", move); + }; + + dialogHeader.touchDraggable(); + } + + editormd.dialogZindex += 2; + + return dialog; + }; + + /** + * 鼠标和触摸事件的判断/选择方法 + * MouseEvent or TouchEvent type switch + * + * @param {String} [mouseEventType="click"] 供选择的鼠标事件 + * @param {String} [touchEventType="touchend"] 供选择的触摸事件 + * @returns {String} EventType 返回事件类型名称 + */ + + editormd.mouseOrTouch = function(mouseEventType, touchEventType) { + mouseEventType = mouseEventType || "click"; + touchEventType = touchEventType || "touchend"; + + var eventType = mouseEventType; + + try { + document.createEvent("TouchEvent"); + eventType = touchEventType; + } catch(e) {} + + return eventType; + }; + + /** + * 日期时间的格式化方法 + * Datetime format method + * + * @param {String} [format=""] 日期时间的格式,类似PHP的格式 + * @returns {String} datefmt 返回格式化后的日期时间字符串 + */ + + editormd.dateFormat = function(format) { + format = format || ""; + + var addZero = function(d) { + return (d < 10) ? "0" + d : d; + }; + + var date = new Date(); + var year = date.getFullYear(); + var year2 = year.toString().slice(2, 4); + var month = addZero(date.getMonth() + 1); + var day = addZero(date.getDate()); + var weekDay = date.getDay(); + var hour = addZero(date.getHours()); + var min = addZero(date.getMinutes()); + var second = addZero(date.getSeconds()); + var ms = addZero(date.getMilliseconds()); + var datefmt = ""; + + var ymd = year2 + "-" + month + "-" + day; + var fymd = year + "-" + month + "-" + day; + var hms = hour + ":" + min + ":" + second; + + switch (format) + { + case "UNIX Time" : + datefmt = date.getTime(); + break; + + case "UTC" : + datefmt = date.toUTCString(); + break; + + case "yy" : + datefmt = year2; + break; + + case "year" : + case "yyyy" : + datefmt = year; + break; + + case "month" : + case "mm" : + datefmt = month; + break; + + case "cn-week-day" : + case "cn-wd" : + var cnWeekDays = ["日", "一", "二", "三", "四", "五", "六"]; + datefmt = "星期" + cnWeekDays[weekDay]; + break; + + case "week-day" : + case "wd" : + var weekDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; + datefmt = weekDays[weekDay]; + break; + + case "day" : + case "dd" : + datefmt = day; + break; + + case "hour" : + case "hh" : + datefmt = hour; + break; + + case "min" : + case "ii" : + datefmt = min; + break; + + case "second" : + case "ss" : + datefmt = second; + break; + + case "ms" : + datefmt = ms; + break; + + case "yy-mm-dd" : + datefmt = ymd; + break; + + case "yyyy-mm-dd" : + datefmt = fymd; + break; + + case "yyyy-mm-dd h:i:s ms" : + case "full + ms" : + datefmt = fymd + " " + hms + " " + ms; + break; + + case "full" : + case "yyyy-mm-dd h:i:s" : + default: + datefmt = fymd + " " + hms; + break; + } + + return datefmt; + }; + + return editormd; + +})); diff --git a/src/main/webapp/static/global/plugins/editor.md-master/editormd.amd.min.js b/src/main/webapp/static/global/plugins/editor.md-master/editormd.amd.min.js new file mode 100644 index 000000000..83f5f6e75 --- /dev/null +++ b/src/main/webapp/static/global/plugins/editor.md-master/editormd.amd.min.js @@ -0,0 +1,4 @@ +/*! Editor.md v1.5.0 | editormd.amd.min.js | Open source online markdown editor. | MIT License | By: Pandao | https://github.com/pandao/editor.md | 2015-06-09 */ +!function(e){"use strict";if("function"==typeof require&&"object"==typeof exports&&"object"==typeof module)module.exports=e;else if("function"==typeof define)if(define.amd){var t="codemirror/mode/",i="codemirror/addon/",o=["jquery","marked","prettify","katex","raphael","underscore","flowchart","jqueryflowchart","sequenceDiagram","codemirror/lib/codemirror",t+"css/css",t+"sass/sass",t+"shell/shell",t+"sql/sql",t+"clike/clike",t+"php/php",t+"xml/xml",t+"markdown/markdown",t+"javascript/javascript",t+"htmlmixed/htmlmixed",t+"gfm/gfm",t+"http/http",t+"go/go",t+"dart/dart",t+"coffeescript/coffeescript",t+"nginx/nginx",t+"python/python",t+"perl/perl",t+"lua/lua",t+"r/r",t+"ruby/ruby",t+"rst/rst",t+"smartymixed/smartymixed",t+"vb/vb",t+"vbscript/vbscript",t+"velocity/velocity",t+"xquery/xquery",t+"yaml/yaml",t+"erlang/erlang",t+"jade/jade",i+"edit/trailingspace",i+"dialog/dialog",i+"search/searchcursor",i+"search/search",i+"scroll/annotatescrollbar",i+"search/matchesonscrollbar",i+"display/placeholder",i+"edit/closetag",i+"fold/foldcode",i+"fold/foldgutter",i+"fold/indent-fold",i+"fold/brace-fold",i+"fold/xml-fold",i+"fold/markdown-fold",i+"fold/comment-fold",i+"mode/overlay",i+"selection/active-line",i+"edit/closebrackets",i+"display/fullscreen",i+"search/match-highlighter"];define(o,e)}else define(["jquery"],e);else window.editormd=e()}(function(){"function"==typeof define&&define.amd&&(e=arguments[0],marked=arguments[1],prettify=arguments[2],katex=arguments[3],Raphael=arguments[4],_=arguments[5],flowchart=arguments[6],CodeMirror=arguments[9]);var e="undefined"!=typeof jQuery?jQuery:Zepto;if("undefined"!=typeof e){var t=function(e,i){return new t.fn.init(e,i)};t.title=t.$name="Editor.md",t.version="1.5.0",t.homePage="https://pandao.github.io/editor.md/",t.classPrefix="editormd-",t.toolbarModes={full:["undo","redo","|","bold","del","italic","quote","ucwords","uppercase","lowercase","|","h1","h2","h3","h4","h5","h6","|","list-ul","list-ol","hr","|","link","reference-link","image","code","preformatted-text","code-block","table","datetime","emoji","html-entities","pagebreak","|","goto-line","watch","preview","fullscreen","clear","search","|","help","info"],simple:["undo","redo","|","bold","del","italic","quote","uppercase","lowercase","|","h1","h2","h3","h4","h5","h6","|","list-ul","list-ol","hr","|","watch","preview","fullscreen","|","help","info"],mini:["undo","redo","|","watch","preview","|","help","info"]},t.defaults={mode:"gfm",name:"",value:"",theme:"",editorTheme:"default",previewTheme:"",markdown:"",appendMarkdown:"",width:"100%",height:"100%",path:"./lib/",pluginPath:"",delay:300,autoLoadModules:!0,watch:!0,placeholder:"Enjoy Markdown! coding now...",gotoLine:!0,codeFold:!1,autoHeight:!1,autoFocus:!0,autoCloseTags:!0,searchReplace:!0,syncScrolling:!0,readOnly:!1,tabSize:4,indentUnit:4,lineNumbers:!0,lineWrapping:!0,autoCloseBrackets:!0,showTrailingSpace:!0,matchBrackets:!0,indentWithTabs:!0,styleSelectedText:!0,matchWordHighlight:!0,styleActiveLine:!0,dialogLockScreen:!0,dialogShowMask:!0,dialogDraggable:!0,dialogMaskBgColor:"#fff",dialogMaskOpacity:.1,fontSize:"13px",saveHTMLToTextarea:!1,disabledKeyMaps:[],onload:function(){},onresize:function(){},onchange:function(){},onwatch:null,onunwatch:null,onpreviewing:function(){},onpreviewed:function(){},onfullscreen:function(){},onfullscreenExit:function(){},onscroll:function(){},onpreviewscroll:function(){},imageUpload:!1,imageFormats:["jpg","jpeg","gif","png","bmp","webp"],imageUploadURL:"",crossDomainUpload:!1,uploadCallbackURL:"",toc:!0,tocm:!1,tocTitle:"",tocDropdown:!1,tocContainer:"",tocStartLevel:1,htmlDecode:!1,pageBreak:!0,atLink:!0,emailLink:!0,taskList:!1,emoji:!1,tex:!1,flowChart:!1,sequenceDiagram:!1,previewCodeHighlight:!0,toolbar:!0,toolbarAutoFixed:!0,toolbarIcons:"full",toolbarTitles:{},toolbarHandlers:{ucwords:function(){return t.toolbarHandlers.ucwords},lowercase:function(){return t.toolbarHandlers.lowercase}},toolbarCustomIcons:{lowercase:'a',ucwords:'Aa'},toolbarIconsClass:{undo:"fa-undo",redo:"fa-repeat",bold:"fa-bold",del:"fa-strikethrough",italic:"fa-italic",quote:"fa-quote-left",uppercase:"fa-font",h1:t.classPrefix+"bold",h2:t.classPrefix+"bold",h3:t.classPrefix+"bold",h4:t.classPrefix+"bold",h5:t.classPrefix+"bold",h6:t.classPrefix+"bold","list-ul":"fa-list-ul","list-ol":"fa-list-ol",hr:"fa-minus",link:"fa-link","reference-link":"fa-anchor",image:"fa-picture-o",code:"fa-code","preformatted-text":"fa-file-code-o","code-block":"fa-file-code-o",table:"fa-table",datetime:"fa-clock-o",emoji:"fa-smile-o","html-entities":"fa-copyright",pagebreak:"fa-newspaper-o","goto-line":"fa-terminal",watch:"fa-eye-slash",unwatch:"fa-eye",preview:"fa-desktop",search:"fa-search",fullscreen:"fa-arrows-alt",clear:"fa-eraser",help:"fa-question-circle",info:"fa-info-circle"},toolbarIconTexts:{},lang:{name:"zh-cn",description:"开源在线Markdown编辑器
        Open source online Markdown editor.",tocTitle:"目录",toolbar:{undo:"撤销(Ctrl+Z)",redo:"重做(Ctrl+Y)",bold:"粗体",del:"删除线",italic:"斜体",quote:"引用",ucwords:"将每个单词首字母转成大写",uppercase:"将所选转换成大写",lowercase:"将所选转换成小写",h1:"标题1",h2:"标题2",h3:"标题3",h4:"标题4",h5:"标题5",h6:"标题6","list-ul":"无序列表","list-ol":"有序列表",hr:"横线",link:"链接","reference-link":"引用链接",image:"添加图片",code:"行内代码","preformatted-text":"预格式文本 / 代码块(缩进风格)","code-block":"代码块(多语言风格)",table:"添加表格",datetime:"日期时间",emoji:"Emoji表情","html-entities":"HTML实体字符",pagebreak:"插入分页符","goto-line":"跳转到行",watch:"关闭实时预览",unwatch:"开启实时预览",preview:"全窗口预览HTML(按 Shift + ESC还原)",fullscreen:"全屏(按ESC还原)",clear:"清空",search:"搜索",help:"使用帮助",info:"关于"+t.title},buttons:{enter:"确定",cancel:"取消",close:"关闭"},dialog:{link:{title:"添加链接",url:"链接地址",urlTitle:"链接标题",urlEmpty:"错误:请填写链接地址。"},referenceLink:{title:"添加引用链接",name:"引用名称",url:"链接地址",urlId:"链接ID",urlTitle:"链接标题",nameEmpty:"错误:引用链接的名称不能为空。",idEmpty:"错误:请填写引用链接的ID。",urlEmpty:"错误:请填写引用链接的URL地址。"},image:{title:"添加图片",url:"图片地址",link:"图片链接",alt:"图片描述",uploadButton:"本地上传",imageURLEmpty:"错误:图片地址不能为空。",uploadFileEmpty:"错误:上传的图片不能为空。",formatNotAllowed:"错误:只允许上传图片文件,允许上传的图片文件格式有:"},preformattedText:{title:"添加预格式文本或代码块",emptyAlert:"错误:请填写预格式文本或代码的内容。"},codeBlock:{title:"添加代码块",selectLabel:"代码语言:",selectDefaultText:"请选择代码语言",otherLanguage:"其他语言",unselectedLanguageAlert:"错误:请选择代码所属的语言类型。",codeEmptyAlert:"错误:请填写代码内容。"},htmlEntities:{title:"HTML 实体字符"},help:{title:"使用帮助"}}}},t.classNames={tex:t.classPrefix+"tex"},t.dialogZindex=99999,t.$katex=null,t.$marked=null,t.$CodeMirror=null,t.$prettyPrint=null;var i,o;t.prototype=t.fn={state:{watching:!1,loaded:!1,preview:!1,fullscreen:!1},init:function(i,o){o=o||{},"object"==typeof i&&(o=i);var r=this.classPrefix=t.classPrefix,n=this.settings=e.extend(!0,t.defaults,o);i="object"==typeof i?n.id:i;var a=this.editor=e("#"+i);this.id=i,this.lang=n.lang;var s=this.classNames={textarea:{html:r+"html-textarea",markdown:r+"markdown-textarea"}};n.pluginPath=""===n.pluginPath?n.path+"../plugins/":n.pluginPath,this.state.watching=n.watch?!0:!1,a.hasClass("editormd")||a.addClass("editormd"),a.css({width:"number"==typeof n.width?n.width+"px":n.width,height:"number"==typeof n.height?n.height+"px":n.height}),n.autoHeight&&a.css("height","auto");var l=this.markdownTextarea=a.children("textarea");l.length<1&&(a.append(""),l=this.markdownTextarea=a.children("textarea")),l.addClass(s.textarea.markdown).attr("placeholder",n.placeholder),("undefined"==typeof l.attr("name")||""===l.attr("name"))&&l.attr("name",""!==n.name?n.name:i+"-markdown-doc");var c=[n.readOnly?"":'',n.saveHTMLToTextarea?'':"",'
        ','
        ','
        '].join("\n");return a.append(c).addClass(r+"vertical"),""!==n.theme&&a.addClass(r+"theme-"+n.theme),this.mask=a.children("."+r+"mask"),this.containerMask=a.children("."+r+"container-mask"),""!==n.markdown&&l.val(n.markdown),""!==n.appendMarkdown&&l.val(l.val()+n.appendMarkdown),this.htmlTextarea=a.children("."+s.textarea.html),this.preview=a.children("."+r+"preview"),this.previewContainer=this.preview.children("."+r+"preview-container"),""!==n.previewTheme&&this.preview.addClass(r+"preview-theme-"+n.previewTheme),"function"==typeof define&&define.amd&&("undefined"!=typeof katex&&(t.$katex=katex),n.searchReplace&&!n.readOnly&&(t.loadCSS(n.path+"codemirror/addon/dialog/dialog"),t.loadCSS(n.path+"codemirror/addon/search/matchesonscrollbar"))),"function"==typeof define&&define.amd||!n.autoLoadModules?("undefined"!=typeof CodeMirror&&(t.$CodeMirror=CodeMirror),"undefined"!=typeof marked&&(t.$marked=marked),this.setCodeMirror().setToolbar().loadedDisplay()):this.loadQueues(),this},loadQueues:function(){var e=this,i=this.settings,o=i.path,r=function(){return t.isIE8?void e.loadedDisplay():void(i.flowChart||i.sequenceDiagram?t.loadScript(o+"raphael.min",function(){t.loadScript(o+"underscore.min",function(){!i.flowChart&&i.sequenceDiagram?t.loadScript(o+"sequence-diagram.min",function(){e.loadedDisplay()}):i.flowChart&&!i.sequenceDiagram?t.loadScript(o+"flowchart.min",function(){t.loadScript(o+"jquery.flowchart.min",function(){e.loadedDisplay()})}):i.flowChart&&i.sequenceDiagram&&t.loadScript(o+"flowchart.min",function(){t.loadScript(o+"jquery.flowchart.min",function(){t.loadScript(o+"sequence-diagram.min",function(){e.loadedDisplay()})})})})}):e.loadedDisplay())};return t.loadCSS(o+"codemirror/codemirror.min"),i.searchReplace&&!i.readOnly&&(t.loadCSS(o+"codemirror/addon/dialog/dialog"),t.loadCSS(o+"codemirror/addon/search/matchesonscrollbar")),i.codeFold&&t.loadCSS(o+"codemirror/addon/fold/foldgutter"),t.loadScript(o+"codemirror/codemirror.min",function(){t.$CodeMirror=CodeMirror,t.loadScript(o+"codemirror/modes.min",function(){t.loadScript(o+"codemirror/addons.min",function(){return e.setCodeMirror(),"gfm"!==i.mode&&"markdown"!==i.mode?(e.loadedDisplay(),!1):(e.setToolbar(),void t.loadScript(o+"marked.min",function(){t.$marked=marked,i.previewCodeHighlight?t.loadScript(o+"prettify.min",function(){r()}):r()}))})})}),this},setTheme:function(e){var t=this.editor,i=this.settings.theme,o=this.classPrefix+"theme-";return t.removeClass(o+i).addClass(o+e),this.settings.theme=e,this},setEditorTheme:function(e){var i=this.settings;return i.editorTheme=e,"default"!==e&&t.loadCSS(i.path+"codemirror/theme/"+i.editorTheme),this.cm.setOption("theme",e),this},setCodeMirrorTheme:function(e){return this.setEditorTheme(e),this},setPreviewTheme:function(e){var t=this.preview,i=this.settings.previewTheme,o=this.classPrefix+"preview-theme-";return t.removeClass(o+i).addClass(o+e),this.settings.previewTheme=e,this},setCodeMirror:function(){var e=this.settings,i=this.editor;"default"!==e.editorTheme&&t.loadCSS(e.path+"codemirror/theme/"+e.editorTheme);var o={mode:e.mode,theme:e.editorTheme,tabSize:e.tabSize,dragDrop:!1,autofocus:e.autoFocus,autoCloseTags:e.autoCloseTags,readOnly:e.readOnly?"nocursor":!1,indentUnit:e.indentUnit,lineNumbers:e.lineNumbers,lineWrapping:e.lineWrapping,extraKeys:{"Ctrl-Q":function(e){e.foldCode(e.getCursor())}},foldGutter:e.codeFold,gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"],matchBrackets:e.matchBrackets,indentWithTabs:e.indentWithTabs,styleActiveLine:e.styleActiveLine,styleSelectedText:e.styleSelectedText,autoCloseBrackets:e.autoCloseBrackets,showTrailingSpace:e.showTrailingSpace,highlightSelectionMatches:e.matchWordHighlight?{showToken:"onselected"===e.matchWordHighlight?!1:/\w/}:!1};return this.codeEditor=this.cm=t.$CodeMirror.fromTextArea(this.markdownTextarea[0],o),this.codeMirror=this.cmElement=i.children(".CodeMirror"),""!==e.value&&this.cm.setValue(e.value),this.codeMirror.css({fontSize:e.fontSize,width:e.watch?"50%":"100%"}),e.autoHeight&&(this.codeMirror.css("height","auto"),this.cm.setOption("viewportMargin",1/0)),e.lineNumbers||this.codeMirror.find(".CodeMirror-gutters").css("border-right","none"),this},getCodeMirrorOption:function(e){return this.cm.getOption(e)},setCodeMirrorOption:function(e,t){return this.cm.setOption(e,t),this},addKeyMap:function(e,t){return this.cm.addKeyMap(e,t),this},removeKeyMap:function(e){return this.cm.removeKeyMap(e),this},gotoLine:function(t){var i=this.settings;if(!i.gotoLine)return this;var o=this.cm,r=(this.editor,o.lineCount()),n=this.preview;if("string"==typeof t&&("last"===t&&(t=r),"first"===t&&(t=1)),"number"!=typeof t)return alert("Error: The line number must be an integer."),this;if(t=parseInt(t)-1,t>r)return alert("Error: The line number range 1-"+r),this;o.setCursor({line:t,ch:0});var a=o.getScrollInfo(),s=a.clientHeight,l=o.charCoords({line:t,ch:0},"local");if(o.scrollTo(null,(l.top+l.bottom-s)/2),i.watch){var c=this.codeMirror.find(".CodeMirror-scroll")[0],h=e(c).height(),d=c.scrollTop,u=d/c.scrollHeight;n.scrollTop(0===d?0:d+h>=c.scrollHeight-16?n[0].scrollHeight:n[0].scrollHeight*u)}return o.focus(),this},extend:function(){return"undefined"!=typeof arguments[1]&&("function"==typeof arguments[1]&&(arguments[1]=e.proxy(arguments[1],this)),this[arguments[0]]=arguments[1]),"object"==typeof arguments[0]&&"undefined"==typeof arguments[0].length&&e.extend(!0,this,arguments[0]),this},set:function(t,i){return"undefined"!=typeof i&&"function"==typeof i&&(i=e.proxy(i,this)),this[t]=i,this},config:function(t,i){var o=this.settings;return"object"==typeof t&&(o=e.extend(!0,o,t)),"string"==typeof t&&(o[t]=i),this.settings=o,this.recreate(),this},on:function(t,i){var o=this.settings;return"undefined"!=typeof o["on"+t]&&(o["on"+t]=e.proxy(i,this)),this},off:function(e){var t=this.settings;return"undefined"!=typeof t["on"+e]&&(t["on"+e]=function(){}),this},showToolbar:function(t){var i=this.settings;return i.readOnly?this:(i.toolbar&&(this.toolbar.length<1||""===this.toolbar.find("."+this.classPrefix+"menu").html())&&this.setToolbar(),i.toolbar=!0,this.toolbar.show(),this.resize(),e.proxy(t||function(){},this)(),this)},hideToolbar:function(t){var i=this.settings;return i.toolbar=!1,this.toolbar.hide(),this.resize(),e.proxy(t||function(){},this)(),this},setToolbarAutoFixed:function(t){var i=this.state,o=this.editor,r=this.toolbar,n=this.settings;"undefined"!=typeof t&&(n.toolbarAutoFixed=t);var a=function(){var t=e(window),i=t.scrollTop();return n.toolbarAutoFixed?void r.css(i-o.offset().top>10&&i
          ';i.append(n),r=this.toolbar=i.children("."+o+"toolbar")}if(!e.toolbar)return r.hide(),this;r.show();for(var a="function"==typeof e.toolbarIcons?e.toolbarIcons():"string"==typeof e.toolbarIcons?t.toolbarModes[e.toolbarIcons]:e.toolbarIcons,s=r.find("."+this.classPrefix+"menu"),l="",c=!1,h=0,d=a.length;d>h;h++){var u=a[h];if("||"===u)c=!0;else if("|"===u)l+='
        • |
        • ';else{var f=/h(\d)/.test(u),g=u;"watch"!==u||e.watch||(g="unwatch");var p=e.lang.toolbar[g],m=e.toolbarIconTexts[g],w=e.toolbarIconsClass[g];p="undefined"==typeof p?"":p,m="undefined"==typeof m?"":m,w="undefined"==typeof w?"":w;var v=c?'
        • ':"
        • ";"undefined"!=typeof e.toolbarCustomIcons[u]&&"function"!=typeof e.toolbarCustomIcons[u]?v+=e.toolbarCustomIcons[u]:(v+='',v+=''+(f?u.toUpperCase():""===w?m:"")+"",v+=""),v+="
        • ",l=c?v+l:l+v}}return s.html(l),s.find('[title="Lowercase"]').attr("title",e.lang.toolbar.lowercase),s.find('[title="ucwords"]').attr("title",e.lang.toolbar.ucwords),this.setToolbarHandler(),this.setToolbarAutoFixed(),this},dialogLockScreen:function(){return e.proxy(t.dialogLockScreen,this)(),this},dialogShowMask:function(i){return e.proxy(t.dialogShowMask,this)(i),this},getToolbarHandles:function(e){var i=this.toolbarHandlers=t.toolbarHandlers;return e&&"undefined"!=typeof toolbarIconHandlers[e]?i[e]:i},setToolbarHandler:function(){var i=this,o=this.settings;if(!o.toolbar||o.readOnly)return this;var r=this.toolbar,n=this.cm,a=this.classPrefix,s=this.toolbarIcons=r.find("."+a+"menu > li > a"),l=this.getToolbarHandles();return s.bind(t.mouseOrTouch("click","touchend"),function(t){var r=e(this).children(".fa"),a=r.attr("name"),s=n.getCursor(),c=n.getSelection();return""!==a?(i.activeIcon=r,"undefined"!=typeof l[a]?e.proxy(l[a],i)(n):"undefined"!=typeof o.toolbarHandlers[a]&&e.proxy(o.toolbarHandlers[a],i)(n,r,s,c),"link"!==a&&"reference-link"!==a&&"image"!==a&&"code-block"!==a&&"preformatted-text"!==a&&"watch"!==a&&"preview"!==a&&"search"!==a&&"fullscreen"!==a&&"info"!==a&&n.focus(),!1):void 0}),this},createDialog:function(i){return e.proxy(t.createDialog,this)(i)},createInfoDialog:function(){var e=this,i=this.editor,o=this.classPrefix,r=['
          ','
          ','

          '+t.title+"v"+t.version+"

          ","

          "+this.lang.description+"

          ",'

          '+t.homePage+'

          ','

          Copyright © 2015 Pandao, The MIT License.

          ',"
          ",'',"
          "].join("\n");i.append(r);var n=this.infoDialog=i.children("."+o+"dialog-info");return n.find("."+o+"dialog-close").bind(t.mouseOrTouch("click","touchend"),function(){e.hideInfoDialog()}),n.css("border",t.isIE8?"1px solid #ddd":"").css("z-index",t.dialogZindex).show(),this.infoDialogPosition(),this},infoDialogPosition:function(){var t=this.infoDialog,i=function(){t.css({top:(e(window).height()-t.height())/2+"px",left:(e(window).width()-t.width())/2+"px"})};return i(),e(window).resize(i),this},showInfoDialog:function(){e("html,body").css("overflow-x","hidden");var i=this.editor,o=this.settings,r=this.infoDialog=i.children("."+this.classPrefix+"dialog-info");return r.length<1&&this.createInfoDialog(),this.lockScreen(!0),this.mask.css({opacity:o.dialogMaskOpacity,backgroundColor:o.dialogMaskBgColor}).show(),r.css("z-index",t.dialogZindex).show(),this.infoDialogPosition(),this},hideInfoDialog:function(){return e("html,body").css("overflow-x",""),this.infoDialog.hide(),this.mask.hide(),this.lockScreen(!1),this},lockScreen:function(e){return t.lockScreen(e),this.resize(),this},recreate:function(){var e=this.editor,t=this.settings;return this.codeMirror.remove(),this.setCodeMirror(),t.readOnly||(e.find(".editormd-dialog").length>0&&e.find(".editormd-dialog").remove(),t.toolbar&&(this.getToolbarHandles(),this.setToolbar())),this.loadedDisplay(!0),this},previewCodeHighlight:function(){var e=this.settings,t=this.previewContainer;return e.previewCodeHighlight&&(t.find("pre").addClass("prettyprint linenums"),"undefined"!=typeof prettyPrint&&prettyPrint()),this},katexRender:function(){return null===i?this:(this.previewContainer.find("."+t.classNames.tex).each(function(){var i=e(this);t.$katex.render(i.text(),i[0]),i.find(".katex").css("font-size","1.6em")}),this)},flowChartAndSequenceDiagramRender:function(){var i=this,r=this.settings,n=this.previewContainer;if(t.isIE8)return this;if(r.flowChart){if(null===o)return this;n.find(".flowchart").flowChart()}r.sequenceDiagram&&n.find(".sequence-diagram").sequenceDiagram({theme:"simple"});var a=i.preview,s=i.codeMirror,l=s.find(".CodeMirror-scroll"),c=l.height(),h=l.scrollTop(),d=h/l[0].scrollHeight,u=0;a.find(".markdown-toc-list").each(function(){u+=e(this).height()});var f=a.find(".editormd-toc-menu").height();return f=f?f:0,a.scrollTop(0===h?0:h+c>=l[0].scrollHeight-16?a[0].scrollHeight:(a[0].scrollHeight+u+f)*d),this},registerKeyMaps:function(i){var o=this,r=this.cm,n=this.settings,a=t.toolbarHandlers,s=n.disabledKeyMaps;if(i=i||null){for(var l in i)if(e.inArray(l,s)<0){var c={};c[l]=i[l],r.addKeyMap(i)}}else{for(var h in t.keyMaps){var d=t.keyMaps[h],u="string"==typeof d?e.proxy(a[d],o):e.proxy(d,o);if(e.inArray(h,["F9","F10","F11"])<0&&e.inArray(h,s)<0){var f={};f[h]=u,r.addKeyMap(f)}}e(window).keydown(function(t){var i={120:"F9",121:"F10",122:"F11"};if(e.inArray(i[t.keyCode],s)<0)switch(t.keyCode){case 120:return e.proxy(a.watch,o)(),!1;case 121:return e.proxy(a.preview,o)(),!1;case 122:return e.proxy(a.fullscreen,o)(),!1}})}return this},bindScrollEvent:function(){var i=this,o=this.preview,r=this.settings,n=this.codeMirror,a=t.mouseOrTouch;if(!r.syncScrolling)return this;var s=function(){n.find(".CodeMirror-scroll").bind(a("scroll","touchmove"),function(t){var n=e(this).height(),a=e(this).scrollTop(),s=a/e(this)[0].scrollHeight,l=0;o.find(".markdown-toc-list").each(function(){l+=e(this).height()});var c=o.find(".editormd-toc-menu").height();c=c?c:0,o.scrollTop(0===a?0:a+n>=e(this)[0].scrollHeight-16?o[0].scrollHeight:(o[0].scrollHeight+l+c)*s),e.proxy(r.onscroll,i)(t)})},l=function(){n.find(".CodeMirror-scroll").unbind(a("scroll","touchmove"))},c=function(){o.bind(a("scroll","touchmove"),function(t){var o=e(this).height(),a=e(this).scrollTop(),s=a/e(this)[0].scrollHeight,l=n.find(".CodeMirror-scroll");l.scrollTop(0===a?0:a+o>=e(this)[0].scrollHeight?l[0].scrollHeight:l[0].scrollHeight*s),e.proxy(r.onpreviewscroll,i)(t)})},h=function(){o.unbind(a("scroll","touchmove"))};return n.bind({mouseover:s,mouseout:l,touchstart:s,touchend:l}),"single"===r.syncScrolling?this:(o.bind({mouseover:c,mouseout:h,touchstart:c,touchend:h}),this)},bindChangeEvent:function(){var e=this,t=this.cm,o=this.settings;return o.syncScrolling?(t.on("change",function(t,r){o.watch&&e.previewContainer.css("padding",o.autoHeight?"20px 20px 50px 40px":"20px"),i=setTimeout(function(){clearTimeout(i),e.save(),i=null},o.delay)}),this):this},loadedDisplay:function(t){t=t||!1;var i=this,o=this.editor,r=this.preview,n=this.settings;return this.containerMask.hide(),this.save(),n.watch&&r.show(),o.data("oldWidth",o.width()).data("oldHeight",o.height()),this.resize(),this.registerKeyMaps(),e(window).resize(function(){i.resize()}),this.bindScrollEvent().bindChangeEvent(),t||e.proxy(n.onload,this)(),this.state.loaded=!0,this},width:function(e){return this.editor.css("width","number"==typeof e?e+"px":e),this.resize(),this},height:function(e){return this.editor.css("height","number"==typeof e?e+"px":e),this.resize(),this},resize:function(t,i){t=t||null,i=i||null;var o=this.state,r=this.editor,n=this.preview,a=this.toolbar,s=this.settings,l=this.codeMirror;if(t&&r.css("width","number"==typeof t?t+"px":t),!s.autoHeight||o.fullscreen||o.preview?(i&&r.css("height","number"==typeof i?i+"px":i),o.fullscreen&&r.height(e(window).height()),s.toolbar&&!s.readOnly?l.css("margin-top",a.height()+1).height(r.height()-a.height()):l.css("margin-top",0).height(r.height())):(r.css("height","auto"),l.css("height","auto")),s.watch)if(l.width(r.width()/2),n.width(o.preview?r.width():r.width()/2),this.previewContainer.css("padding",s.autoHeight?"20px 20px 50px 40px":"20px"),s.toolbar&&!s.readOnly?n.css("top",a.height()+1):n.css("top",0),!s.autoHeight||o.fullscreen||o.preview){var c=s.toolbar&&!s.readOnly?r.height()-a.height():r.height();n.height(c)}else n.height("");else l.width(r.width()),n.hide();return o.loaded&&e.proxy(s.onresize,this)(),this},save:function(){if(null===i)return this;var r=this,n=this.state,a=this.settings,s=this.cm,l=s.getValue(),c=this.previewContainer;if("gfm"!==a.mode&&"markdown"!==a.mode)return this.markdownTextarea.val(l),this;var h=t.$marked,d=this.markdownToC=[],u=this.markedRendererOptions={toc:a.toc,tocm:a.tocm,tocStartLevel:a.tocStartLevel,pageBreak:a.pageBreak,taskList:a.taskList,emoji:a.emoji,tex:a.tex,atLink:a.atLink,emailLink:a.emailLink,flowChart:a.flowChart,sequenceDiagram:a.sequenceDiagram,previewCodeHighlight:a.previewCodeHighlight},f=this.markedOptions={renderer:t.markedRenderer(d,u),gfm:!0,tables:!0,breaks:!0,pedantic:!1,sanitize:a.htmlDecode?!1:!0,smartLists:!0,smartypants:!0};h.setOptions(f);var g=t.$marked(l,f);if(g=t.filterHTMLTags(g,a.htmlDecode),this.markdownTextarea.text(l),s.save(),a.saveHTMLToTextarea&&this.htmlTextarea.text(g),a.watch||!a.watch&&n.preview){if(c.html(g),this.previewCodeHighlight(),a.toc){var p=""===a.tocContainer?c:e(a.tocContainer),m=p.find("."+this.classPrefix+"toc-menu");p.attr("previewContainer",""===a.tocContainer?"true":"false"),""!==a.tocContainer&&m.length>0&&m.remove(),t.markdownToCRenderer(d,p,a.tocDropdown,a.tocStartLevel),(a.tocDropdown||p.find("."+this.classPrefix+"toc-menu").length>0)&&t.tocDropdownMenu(p,""!==a.tocTitle?a.tocTitle:this.lang.tocTitle),""!==a.tocContainer&&c.find(".markdown-toc").css("border","none")}a.tex&&(!t.kaTeXLoaded&&a.autoLoadModules?t.loadKaTeX(function(){t.$katex=katex,t.kaTeXLoaded=!0,r.katexRender()}):(t.$katex=katex,this.katexRender())),(a.flowChart||a.sequenceDiagram)&&(o=setTimeout(function(){clearTimeout(o),r.flowChartAndSequenceDiagramRender(),o=null},10)),n.loaded&&e.proxy(a.onchange,this)()}return this},focus:function(){return this.cm.focus(),this},setCursor:function(e){return this.cm.setCursor(e),this},getCursor:function(){return this.cm.getCursor()},setSelection:function(e,t){return this.cm.setSelection(e,t),this},getSelection:function(){return this.cm.getSelection()},setSelections:function(e){return this.cm.setSelections(e),this},getSelections:function(){return this.cm.getSelections()},replaceSelection:function(e){return this.cm.replaceSelection(e),this},insertValue:function(e){return this.replaceSelection(e),this},appendMarkdown:function(e){var t=(this.settings,this.cm);return t.setValue(t.getValue()+e),this},setMarkdown:function(e){return this.cm.setValue(e||this.settings.markdown),this},getMarkdown:function(){return this.cm.getValue()},getValue:function(){return this.cm.getValue()},setValue:function(e){return this.cm.setValue(e),this},clear:function(){return this.cm.setValue(""),this},getHTML:function(){return this.settings.saveHTMLToTextarea?this.htmlTextarea.val():(alert("Error: settings.saveHTMLToTextarea == false"),!1)},getTextareaSavedHTML:function(){return this.getHTML()},getPreviewedHTML:function(){return this.settings.watch?this.previewContainer.html():(alert("Error: settings.watch == false"),!1)},watch:function(t){var o=this.settings;if(e.inArray(o.mode,["gfm","markdown"])<0)return this;if(this.state.watching=o.watch=!0,this.preview.show(),this.toolbar){var r=o.toolbarIconsClass.watch,n=o.toolbarIconsClass.unwatch,a=this.toolbar.find(".fa[name=watch]");a.parent().attr("title",o.lang.toolbar.watch),a.removeClass(n).addClass(r)}return this.codeMirror.css("border-right","1px solid #ddd").width(this.editor.width()/2),i=0,this.save().resize(),o.onwatch||(o.onwatch=t||function(){}),e.proxy(o.onwatch,this)(),this},unwatch:function(t){var i=this.settings;if(this.state.watching=i.watch=!1,this.preview.hide(),this.toolbar){var o=i.toolbarIconsClass.watch,r=i.toolbarIconsClass.unwatch,n=this.toolbar.find(".fa[name=watch]");n.parent().attr("title",i.lang.toolbar.unwatch),n.removeClass(o).addClass(r)}return this.codeMirror.css("border-right","none").width(this.editor.width()),this.resize(),i.onunwatch||(i.onunwatch=t||function(){}),e.proxy(i.onunwatch,this)(),this},show:function(t){t=t||function(){};var i=this;return this.editor.show(0,function(){e.proxy(t,i)()}),this},hide:function(t){t=t||function(){};var i=this;return this.editor.hide(0,function(){e.proxy(t,i)()}),this},previewing:function(){var i=this,o=this.editor,r=this.preview,n=this.toolbar,a=this.settings,s=this.codeMirror,l=this.previewContainer;if(e.inArray(a.mode,["gfm","markdown"])<0)return this;a.toolbar&&n&&(n.toggle(),n.find(".fa[name=preview]").toggleClass("active")),s.toggle();var c=function(e){e.shiftKey&&27===e.keyCode&&i.previewed()};"none"===s.css("display")?(this.state.preview=!0,this.state.fullscreen&&r.css("background","#fff"),o.find("."+this.classPrefix+"preview-close-btn").show().bind(t.mouseOrTouch("click","touchend"),function(){i.previewed()}),a.watch?l.css("padding",""):this.save(),l.addClass(this.classPrefix+"preview-active"),r.show().css({position:"",top:0,width:o.width(),height:a.autoHeight&&!this.state.fullscreen?"auto":o.height()}),this.state.loaded&&e.proxy(a.onpreviewing,this)(),e(window).bind("keyup",c)):(e(window).unbind("keyup",c),this.previewed())},previewed:function(){var i=this.editor,o=this.preview,r=this.toolbar,n=this.settings,a=this.previewContainer,s=i.find("."+this.classPrefix+"preview-close-btn");return this.state.preview=!1,this.codeMirror.show(),n.toolbar&&r.show(),o[n.watch?"show":"hide"](),s.hide().unbind(t.mouseOrTouch("click","touchend")),a.removeClass(this.classPrefix+"preview-active"),n.watch&&a.css("padding","20px"),o.css({background:null,position:"absolute",width:i.width()/2,height:n.autoHeight&&!this.state.fullscreen?"auto":i.height()-r.height(),top:n.toolbar?r.height():0}),this.state.loaded&&e.proxy(n.onpreviewed,this)(),this},fullscreen:function(){var t=this,i=this.state,o=this.editor,r=(this.preview,this.toolbar),n=this.settings,a=this.classPrefix+"fullscreen";r&&r.find(".fa[name=fullscreen]").parent().toggleClass("active");var s=function(e){e.shiftKey||27!==e.keyCode||i.fullscreen&&t.fullscreenExit()};return o.hasClass(a)?(e(window).unbind("keyup",s),this.fullscreenExit()):(i.fullscreen=!0,e("html,body").css("overflow","hidden"),o.css({width:e(window).width(),height:e(window).height()}).addClass(a),this.resize(),e.proxy(n.onfullscreen,this)(),e(window).bind("keyup",s)),this},fullscreenExit:function(){var t=this.editor,i=this.settings,o=this.toolbar,r=this.classPrefix+"fullscreen";return this.state.fullscreen=!1,o&&o.find(".fa[name=fullscreen]").parent().removeClass("active"),e("html,body").css("overflow",""),t.css({width:t.data("oldWidth"),height:t.data("oldHeight")}).removeClass(r),this.resize(),e.proxy(i.onfullscreenExit,this)(),this},executePlugin:function(i,o){var r=this,n=this.cm,a=this.settings;return o=a.pluginPath+o,"function"==typeof define?"undefined"==typeof this[i]?(alert("Error: "+i+" plugin is not found, you are not load this plugin."),this):(this[i](n),this):(e.inArray(o,t.loadFiles.plugin)<0?t.loadPlugin(o,function(){t.loadPlugins[i]=r[i],r[i](n)}):e.proxy(t.loadPlugins[i],this)(n),this)},search:function(e){var t=this.settings;return t.searchReplace?(t.readOnly||this.cm.execCommand(e||"find"),this):(alert("Error: settings.searchReplace == false"),this)},searchReplace:function(){return this.search("replace"),this},searchReplaceAll:function(){return this.search("replaceAll"),this}},t.fn.init.prototype=t.fn,t.dialogLockScreen=function(){var t=this.settings||{dialogLockScreen:!0};t.dialogLockScreen&&(e("html,body").css("overflow","hidden"),this.resize())},t.dialogShowMask=function(t){var i=this.editor,o=this.settings||{dialogShowMask:!0};t.css({top:(e(window).height()-t.height())/2+"px",left:(e(window).width()-t.width())/2+"px"}),o.dialogShowMask&&i.children("."+this.classPrefix+"mask").css("z-index",parseInt(t.css("z-index"))-1).show()},t.toolbarHandlers={undo:function(){this.cm.undo()},redo:function(){this.cm.redo()},bold:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection(); + +e.replaceSelection("**"+i+"**"),""===i&&e.setCursor(t.line,t.ch+2)},del:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();e.replaceSelection("~~"+i+"~~"),""===i&&e.setCursor(t.line,t.ch+2)},italic:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();e.replaceSelection("*"+i+"*"),""===i&&e.setCursor(t.line,t.ch+1)},quote:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();0!==t.ch?(e.setCursor(t.line,0),e.replaceSelection("> "+i),e.setCursor(t.line,t.ch+2)):e.replaceSelection("> "+i)},ucfirst:function(){var e=this.cm,i=e.getSelection(),o=e.listSelections();e.replaceSelection(t.firstUpperCase(i)),e.setSelections(o)},ucwords:function(){var e=this.cm,i=e.getSelection(),o=e.listSelections();e.replaceSelection(t.wordsFirstUpperCase(i)),e.setSelections(o)},uppercase:function(){var e=this.cm,t=e.getSelection(),i=e.listSelections();e.replaceSelection(t.toUpperCase()),e.setSelections(i)},lowercase:function(){var e=this.cm,t=(e.getCursor(),e.getSelection()),i=e.listSelections();e.replaceSelection(t.toLowerCase()),e.setSelections(i)},h1:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();0!==t.ch?(e.setCursor(t.line,0),e.replaceSelection("# "+i),e.setCursor(t.line,t.ch+2)):e.replaceSelection("# "+i)},h2:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();0!==t.ch?(e.setCursor(t.line,0),e.replaceSelection("## "+i),e.setCursor(t.line,t.ch+3)):e.replaceSelection("## "+i)},h3:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();0!==t.ch?(e.setCursor(t.line,0),e.replaceSelection("### "+i),e.setCursor(t.line,t.ch+4)):e.replaceSelection("### "+i)},h4:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();0!==t.ch?(e.setCursor(t.line,0),e.replaceSelection("#### "+i),e.setCursor(t.line,t.ch+5)):e.replaceSelection("#### "+i)},h5:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();0!==t.ch?(e.setCursor(t.line,0),e.replaceSelection("##### "+i),e.setCursor(t.line,t.ch+6)):e.replaceSelection("##### "+i)},h6:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();0!==t.ch?(e.setCursor(t.line,0),e.replaceSelection("###### "+i),e.setCursor(t.line,t.ch+7)):e.replaceSelection("###### "+i)},"list-ul":function(){var e=this.cm,t=(e.getCursor(),e.getSelection());if(""===t)e.replaceSelection("- "+t);else{for(var i=t.split("\n"),o=0,r=i.length;r>o;o++)i[o]=""===i[o]?"":"- "+i[o];e.replaceSelection(i.join("\n"))}},"list-ol":function(){var e=this.cm,t=(e.getCursor(),e.getSelection());if(""===t)e.replaceSelection("1. "+t);else{for(var i=t.split("\n"),o=0,r=i.length;r>o;o++)i[o]=""===i[o]?"":o+1+". "+i[o];e.replaceSelection(i.join("\n"))}},hr:function(){{var e=this.cm,t=e.getCursor();e.getSelection()}e.replaceSelection((0!==t.ch?"\n\n":"\n")+"------------\n\n")},tex:function(){if(!this.settings.tex)return alert("settings.tex === false"),this;var e=this.cm,t=e.getCursor(),i=e.getSelection();e.replaceSelection("$$"+i+"$$"),""===i&&e.setCursor(t.line,t.ch+2)},link:function(){this.executePlugin("linkDialog","link-dialog/link-dialog")},"reference-link":function(){this.executePlugin("referenceLinkDialog","reference-link-dialog/reference-link-dialog")},pagebreak:function(){if(!this.settings.pageBreak)return alert("settings.pageBreak === false"),this;{var e=this.cm;e.getSelection()}e.replaceSelection("\r\n[========]\r\n")},image:function(){this.executePlugin("imageDialog","image-dialog/image-dialog")},code:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();e.replaceSelection("`"+i+"`"),""===i&&e.setCursor(t.line,t.ch+1)},"code-block":function(){this.executePlugin("codeBlockDialog","code-block-dialog/code-block-dialog")},"preformatted-text":function(){this.executePlugin("preformattedTextDialog","preformatted-text-dialog/preformatted-text-dialog")},table:function(){this.executePlugin("tableDialog","table-dialog/table-dialog")},datetime:function(){var e=this.cm,i=(e.getSelection(),new Date,this.settings.lang.name),o=t.dateFormat()+" "+t.dateFormat("zh-cn"===i||"zh-tw"===i?"cn-week-day":"week-day");e.replaceSelection(o)},emoji:function(){this.executePlugin("emojiDialog","emoji-dialog/emoji-dialog")},"html-entities":function(){this.executePlugin("htmlEntitiesDialog","html-entities-dialog/html-entities-dialog")},"goto-line":function(){this.executePlugin("gotoLineDialog","goto-line-dialog/goto-line-dialog")},watch:function(){this[this.settings.watch?"unwatch":"watch"]()},preview:function(){this.previewing()},fullscreen:function(){this.fullscreen()},clear:function(){this.clear()},search:function(){this.search()},help:function(){this.executePlugin("helpDialog","help-dialog/help-dialog")},info:function(){this.showInfoDialog()}},t.keyMaps={"Ctrl-1":"h1","Ctrl-2":"h2","Ctrl-3":"h3","Ctrl-4":"h4","Ctrl-5":"h5","Ctrl-6":"h6","Ctrl-B":"bold","Ctrl-D":"datetime","Ctrl-E":function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();return this.settings.emoji?(e.replaceSelection(":"+i+":"),void(""===i&&e.setCursor(t.line,t.ch+1))):void alert("Error: settings.emoji == false")},"Ctrl-Alt-G":"goto-line","Ctrl-H":"hr","Ctrl-I":"italic","Ctrl-K":"code","Ctrl-L":function(){var e=this.cm,t=e.getCursor(),i=e.getSelection(),o=""===i?"":' "'+i+'"';e.replaceSelection("["+i+"]("+o+")"),""===i&&e.setCursor(t.line,t.ch+1)},"Ctrl-U":"list-ul","Shift-Ctrl-A":function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();return this.settings.atLink?(e.replaceSelection("@"+i),void(""===i&&e.setCursor(t.line,t.ch+1))):void alert("Error: settings.atLink == false")},"Shift-Ctrl-C":"code","Shift-Ctrl-Q":"quote","Shift-Ctrl-S":"del","Shift-Ctrl-K":"tex","Shift-Alt-C":function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();e.replaceSelection(["```",i,"```"].join("\n")),""===i&&e.setCursor(t.line,t.ch+3)},"Shift-Ctrl-Alt-C":"code-block","Shift-Ctrl-H":"html-entities","Shift-Alt-H":"help","Shift-Ctrl-E":"emoji","Shift-Ctrl-U":"uppercase","Shift-Alt-U":"ucwords","Shift-Ctrl-Alt-U":"ucfirst","Shift-Alt-L":"lowercase","Shift-Ctrl-I":function(){var e=this.cm,t=e.getCursor(),i=e.getSelection(),o=""===i?"":' "'+i+'"';e.replaceSelection("!["+i+"]("+o+")"),""===i&&e.setCursor(t.line,t.ch+4)},"Shift-Ctrl-Alt-I":"image","Shift-Ctrl-L":"link","Shift-Ctrl-O":"list-ol","Shift-Ctrl-P":"preformatted-text","Shift-Ctrl-T":"table","Shift-Alt-P":"pagebreak",F9:"watch",F10:"preview",F11:"fullscreen"};var r=function(e){return String.prototype.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")};t.trim=r;var n=function(e){return e.toLowerCase().replace(/\b(\w)|\s(\w)/g,function(e){return e.toUpperCase()})};t.ucwords=t.wordsFirstUpperCase=n;var a=function(e){return e.toLowerCase().replace(/\b(\w)/,function(e){return e.toUpperCase()})};return t.firstUpperCase=t.ucfirst=a,t.urls={atLinkBase:"https://github.com/"},t.regexs={atLink:/@(\w+)/g,email:/(\w+)@(\w+)\.(\w+)\.?(\w+)?/g,emailLink:/(mailto:)?([\w\.\_]+)@(\w+)\.(\w+)\.?(\w+)?/g,emoji:/:([\w\+-]+):/g,emojiDatetime:/(\d{2}:\d{2}:\d{2})/g,twemoji:/:(tw-([\w]+)-?(\w+)?):/g,fontAwesome:/:(fa-([\w]+)(-(\w+)){0,}):/g,editormdLogo:/:(editormd-logo-?(\w+)?):/g,pageBreak:/^\[[=]{8,}\]$/},t.emoji={path:"http://www.emoji-cheat-sheet.com/graphics/emojis/",ext:".png"},t.twemoji={path:"http://twemoji.maxcdn.com/36x36/",ext:".png"},t.markedRenderer=function(i,o){var n={toc:!0,tocm:!1,tocStartLevel:1,pageBreak:!0,atLink:!0,emailLink:!0,taskList:!1,emoji:!1,tex:!1,flowChart:!1,sequenceDiagram:!1},a=e.extend(n,o||{}),s=t.$marked,l=new s.Renderer;i=i||[];var c=t.regexs,h=c.atLink,d=c.emoji,u=c.email,f=c.emailLink,g=c.twemoji,p=c.fontAwesome,m=c.editormdLogo,w=c.pageBreak;return l.emoji=function(e){e=e.replace(t.regexs.emojiDatetime,function(e){return e.replace(/:/g,":")});var i=e.match(d);if(!i||!a.emoji)return e;for(var o=0,r=i.length;r>o;o++)":+1:"===i[o]&&(i[o]=":\\+1:"),e=e.replace(new RegExp(i[o]),function(e,i){var o=e.match(p),r=e.replace(/:/g,"");if(o)for(var n=0,a=o.length;a>n;n++){var s=o[n].replace(/:/g,"");return''}else{var l=e.match(m),c=e.match(g);if(l)for(var h=0,d=l.length;d>h;h++){var u=l[h].replace(/:/g,"");return''}else{if(!c){var f="+1"===r?"plus1":r;return f="black_large_square"===f?"black_square":f,f="moon"===f?"waxing_gibbous_moon":f,':'+r+':'}for(var w=0,v=c.length;v>w;w++){var k=c[w].replace(/:/g,"").replace("tw-","");return'twemoji-'+k+''}}}});return e},l.atLink=function(i){return h.test(i)?(a.atLink&&(i=i.replace(u,function(e,t,i,o){return e.replace(/@/g,"_#_@_#_")}),i=i.replace(h,function(e,i){return''+e+""}).replace(/_#_@_#_/g,"@")),a.emailLink&&(i=i.replace(f,function(t,i,o,r,n){return!i&&e.inArray(n,"jpg|jpeg|png|gif|webp|ico|icon|pdf".split("|"))<0?''+t+"":t})),i):i},l.link=function(e,t,i){if(this.options.sanitize){try{var o=decodeURIComponent(unescape(e)).replace(/[^\w:]/g,"").toLowerCase()}catch(r){return""}if(0===o.indexOf("javascript:"))return""}var n=''+i.replace(/@/g,"@")+""):(t&&(n+=' title="'+t+'"'),n+=">"+i+"")},l.heading=function(e,t,o){var n=e,a=/\s*\]*)\>(.*)\<\/a\>\s*/;if(a.test(e)){var s=[];e=e.split(/\]+)\>([^\>]*)\<\/a\>/);for(var l=0,c=e.length;c>l;l++)s.push(e[l].replace(/\s*href\=\"(.*)\"\s*/g,""));e=s.join(" ")}e=r(e);var h=e.toLowerCase().replace(/[^\w]+/g,"-"),d={text:e,level:t,slug:h},u=/^[\u4e00-\u9fa5]+$/.test(e),f=u?escape(e).replace(/\%/g,""):e.toLowerCase().replace(/[^\w]+/g,"-");i.push(d);var g="';return g+='',g+='',g+=this.atLink(a?this.emoji(n):this.emoji(e)),g+=""},l.pageBreak=function(e){return w.test(e)&&a.pageBreak&&(e='
          '),e},l.paragraph=function(e){var i=/\$\$(.*)\$\$/g.test(e),o=/^\$\$(.*)\$\$$/.test(e),r=o?' class="'+t.classNames.tex+'"':"",n=a.tocm?/^(\[TOC\]|\[TOCM\])$/.test(e):/^\[TOC\]$/.test(e),s=/^\[TOCM\]$/.test(e);e=!o&&i?e.replace(/(\$\$([^\$]*)\$\$)+/g,function(e,i){return''+i.replace(/\$/g,"")+""}):o?e.replace(/\$/g,""):e;var l='
          '+e+"
          ";return n?s?'
          '+l+"

          ":l:w.test(e)?this.pageBreak(e):""+this.atLink(this.emoji(e))+"

          \n"},l.code=function(e,i,o){return"seq"===i||"sequence"===i?'
          '+e+"
          ":"flow"===i?'
          '+e+"
          ":"math"===i||"latex"===i||"katex"===i?'

          '+e+"

          ":s.Renderer.prototype.code.apply(this,arguments)},l.tablecell=function(e,t){var i=t.header?"th":"td",o=t.align?"<"+i+' style="text-align:'+t.align+'">':"<"+i+">";return o+this.atLink(this.emoji(e))+"\n"},l.listitem=function(e){return a.taskList&&/^\s*\[[x\s]\]\s*/.test(e)?(e=e.replace(/^\s*\[\s\]\s*/,' ').replace(/^\s*\[x\]\s*/,' '),'
        • '+this.atLink(this.emoji(e))+"
        • "):"
        • "+this.atLink(this.emoji(e))+"
        • "},l},t.markdownToCRenderer=function(e,t,i,o){var r="",n=0,a=this.classPrefix;o=o||1;for(var s=0,l=e.length;l>s;s++){var c=e[s].text,h=e[s].level;o>h||(r+=h>n?"":n>h?new Array(n-h+2).join("
      • "):"",r+='
      • '+c+"
          ",n=h)}var d=t.find(".markdown-toc");if(d.length<1&&"false"===t.attr("previewContainer")){var u='
          ';u=i?'
          '+u+"
          ":u,t.html(u),d=t.find(".markdown-toc")}return i&&d.wrap('

          '),d.html('
            ').children(".markdown-toc-list").html(r.replace(/\r?\n?\\<\/ul\>/g,"")),d},t.tocDropdownMenu=function(t,i){i=i||"Table of Contents";var o=400,r=t.find("."+this.classPrefix+"toc-menu");return r.each(function(){var t=e(this),r=t.children(".markdown-toc"),n='',a=''+n+i+"",s=r.children("ul"),l=s.find("li");r.append(a),l.first().before("
          • "+i+" "+n+"

          • "),t.mouseover(function(){s.show(),l.each(function(){var t=e(this),i=t.children("ul");if(""===i.html()&&i.remove(),i.length>0&&""!==i.html()){var r=t.children("a").first();r.children(".fa").length<1&&r.append(e(n).css({"float":"right",paddingTop:"4px"}))}t.mouseover(function(){i.css("z-index",o).show(),o+=1}).mouseleave(function(){i.hide()})})}).mouseleave(function(){s.hide()})}),r},t.filterHTMLTags=function(t,i){if("string"!=typeof t&&(t=new String(t)),"string"!=typeof i)return t;for(var o=i.split("|"),r=o[0].split(","),n=o[1],a=0,s=r.length;s>a;a++){var l=r[a];t=t.replace(new RegExp("]*)>([^>]*)","igm"),"")}if("undefined"!=typeof n){var c=/\<(\w+)\s*([^\>]*)\>([^\>]*)\<\/(\w+)\>/gi;t="*"===n?t.replace(c,function(e,t,i,o,r){return"<"+t+">"+o+""}):"on*"===n?t.replace(c,function(t,i,o,r,n){var a=e("<"+i+">"+r+""),s=e(t)[0].attributes,l={};e.each(s,function(e,t){'"'!==t.nodeName&&(l[t.nodeName]=t.nodeValue)}),e.each(l,function(e){0===e.indexOf("on")&&delete l[e]}),a.attr(l);var c="undefined"!=typeof a[1]?e(a[1]).text():"";return a[0].outerHTML+c}):t.replace(c,function(t,i,o,r){var a=n.split(","),s=e(t);return s.html(r),e.each(a,function(e){s.attr(a[e],null)}),s[0].outerHTML})}return t},t.markdownToHTML=function(i,o){var r={gfm:!0,toc:!0,tocm:!1,tocStartLevel:1,tocTitle:"目录",tocDropdown:!1,tocContainer:"",markdown:"",markdownSourceCode:!1,htmlDecode:!1,autoLoadKaTeX:!0,pageBreak:!0,atLink:!0,emailLink:!0,tex:!1,taskList:!1,emoji:!1,flowChart:!1,sequenceDiagram:!1,previewCodeHighlight:!0};t.$marked=marked;var n=e("#"+i),a=n.settings=e.extend(!0,r,o||{}),s=n.find("textarea");s.length<1&&(n.append(""),s=n.find("textarea"));var l=""===a.markdown?s.val():a.markdown,c=[],h={toc:a.toc,tocm:a.tocm,tocStartLevel:a.tocStartLevel,taskList:a.taskList,emoji:a.emoji,tex:a.tex,pageBreak:a.pageBreak,atLink:a.atLink,emailLink:a.emailLink,flowChart:a.flowChart,sequenceDiagram:a.sequenceDiagram,previewCodeHighlight:a.previewCodeHighlight},d={renderer:t.markedRenderer(c,h),gfm:a.gfm,tables:!0,breaks:!0,pedantic:!1,sanitize:a.htmlDecode?!1:!0,smartLists:!0,smartypants:!0};l=new String(l);var u=marked(l,d);u=t.filterHTMLTags(u,a.htmlDecode),a.markdownSourceCode?s.text(l):s.remove(),n.addClass("markdown-body "+this.classPrefix+"html-preview").append(u);var f=""!==a.tocContainer?e(a.tocContainer):n;if(""!==a.tocContainer&&f.attr("previewContainer",!1),a.toc&&(n.tocContainer=this.markdownToCRenderer(c,f,a.tocDropdown,a.tocStartLevel),(a.tocDropdown||n.find("."+this.classPrefix+"toc-menu").length>0)&&this.tocDropdownMenu(n,a.tocTitle),""!==a.tocContainer&&n.find(".editormd-toc-menu, .editormd-markdown-toc").remove()),a.previewCodeHighlight&&(n.find("pre").addClass("prettyprint linenums"),prettyPrint()),t.isIE8||(a.flowChart&&n.find(".flowchart").flowChart(),a.sequenceDiagram&&n.find(".sequence-diagram").sequenceDiagram({theme:"simple"})),a.tex){var g=function(){n.find("."+t.classNames.tex).each(function(){var t=e(this);katex.render(t.html().replace(/</g,"<").replace(/>/g,">"),t[0]),t.find(".katex").css("font-size","1.6em")})};!a.autoLoadKaTeX||t.$katex||t.kaTeXLoaded?g():this.loadKaTeX(function(){t.$katex=katex,t.kaTeXLoaded=!0,g()})}return n.getMarkdown=function(){return s.val()},n},t.themes=["default","dark"],t.previewThemes=["default","dark"],t.editorThemes=["default","3024-day","3024-night","ambiance","ambiance-mobile","base16-dark","base16-light","blackboard","cobalt","eclipse","elegant","erlang-dark","lesser-dark","mbo","mdn-like","midnight","monokai","neat","neo","night","paraiso-dark","paraiso-light","pastel-on-dark","rubyblue","solarized","the-matrix","tomorrow-night-eighties","twilight","vibrant-ink","xq-dark","xq-light"],t.loadPlugins={},t.loadFiles={js:[],css:[],plugin:[]},t.loadPlugin=function(e,i,o){i=i||function(){},this.loadScript(e,function(){t.loadFiles.plugin.push(e),i()},o)},t.loadCSS=function(e,i,o){o=o||"head",i=i||function(){};var r=document.createElement("link");r.type="text/css",r.rel="stylesheet",r.onload=r.onreadystatechange=function(){t.loadFiles.css.push(e),i()},r.href=e+".css","head"===o?document.getElementsByTagName("head")[0].appendChild(r):document.body.appendChild(r)},t.isIE="Microsoft Internet Explorer"==navigator.appName,t.isIE8=t.isIE&&"8."==navigator.appVersion.match(/8./i),t.loadScript=function(e,i,o){o=o||"head",i=i||function(){};var r=null;r=document.createElement("script"),r.id=e.replace(/[\./]+/g,"-"),r.type="text/javascript",r.src=e+".js",t.isIE8?r.onreadystatechange=function(){r.readyState&&("loaded"===r.readyState||"complete"===r.readyState)&&(r.onreadystatechange=null,t.loadFiles.js.push(e),i())}:r.onload=function(){t.loadFiles.js.push(e),i()},"head"===o?document.getElementsByTagName("head")[0].appendChild(r):document.body.appendChild(r)},t.katexURL={css:"//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min",js:"//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min"},t.kaTeXLoaded=!1,t.loadKaTeX=function(e){t.loadCSS(t.katexURL.css,function(){t.loadScript(t.katexURL.js,e||function(){})})},t.lockScreen=function(t){e("html,body").css("overflow",t?"hidden":"")},t.createDialog=function(i){var o={name:"",width:420,height:240,title:"",drag:!0,closed:!0,content:"",mask:!0,maskStyle:{backgroundColor:"#fff",opacity:.1},lockScreen:!0,footer:!0,buttons:!1};i=e.extend(!0,o,i);var r=this,n=this.editor,a=t.classPrefix,s=(new Date).getTime(),l=""===i.name?a+"dialog-"+s:i.name,c=t.mouseOrTouch,h='
            ';""!==i.title&&(h+='
            ",h+=''+i.title+"",h+="
            "),i.closed&&(h+=''),h+='
            '+i.content,(i.footer||"string"==typeof i.footer)&&(h+='"),h+="
            ",h+='
            ',h+='
            ',h+="
            ",n.append(h);var d=n.find("."+l);d.lockScreen=function(t){return i.lockScreen&&(e("html,body").css("overflow",t?"hidden":""),r.resize()),d},d.showMask=function(){return i.mask&&n.find("."+a+"mask").css(i.maskStyle).css("z-index",t.dialogZindex-1).show(),d},d.hideMask=function(){return i.mask&&n.find("."+a+"mask").hide(),d},d.loading=function(e){var t=d.find("."+a+"dialog-mask");return t[e?"show":"hide"](),d},d.lockScreen(!0).showMask(),d.show().css({zIndex:t.dialogZindex,border:t.isIE8?"1px solid #ddd":"",width:"number"==typeof i.width?i.width+"px":i.width,height:"number"==typeof i.height?i.height+"px":i.height});var u=function(){d.css({top:(e(window).height()-d.height())/2+"px",left:(e(window).width()-d.width())/2+"px"})};if(u(),e(window).resize(u),d.children("."+a+"dialog-close").bind(c("click","touchend"),function(){d.hide().lockScreen(!1).hideMask()}),"object"==typeof i.buttons){var f=d.footer=d.find("."+a+"dialog-footer");for(var g in i.buttons){var p=i.buttons[g],m=a+g+"-btn";f.append('"),p[1]=e.proxy(p[1],d),f.children("."+m).bind(c("click","touchend"),p[1])}}if(""!==i.title&&i.drag){var w,v,k=d.children("."+a+"dialog-header");i.mask||k.bind(c("click","touchend"),function(){t.dialogZindex+=2,d.css("z-index",t.dialogZindex)}),k.mousedown(function(e){e=e||window.event,w=e.clientX-parseInt(d[0].style.left),v=e.clientY-parseInt(d[0].style.top),document.onmousemove=y});var b=function(e){e.removeClass(a+"user-unselect").off("selectstart")},x=function(e){e.addClass(a+"user-unselect").on("selectstart",function(e){return!1})},y=function(t){t=t||window.event;var i,o,r=parseInt(d[0].style.left),n=parseInt(d[0].style.top);r>=0?r+d.width()<=e(window).width()?i=t.clientX-w:(i=e(window).width()-d.width(),document.onmousemove=null):(i=0,document.onmousemove=null),n>=0?o=t.clientY-v:(o=0,document.onmousemove=null),document.onselectstart=function(){return!1},x(e("body")),x(d),d[0].style.left=i+"px",d[0].style.top=o+"px"};document.onmouseup=function(){b(e("body")),b(d),document.onselectstart=null,document.onmousemove=null},k.touchDraggable=function(){var t=null,i=function(i){var o=i.originalEvent,r=e(this).parent().position();t={x:o.changedTouches[0].pageX-r.left,y:o.changedTouches[0].pageY-r.top}},o=function(i){i.preventDefault();var o=i.originalEvent;e(this).parent().css({top:o.changedTouches[0].pageY-t.y,left:o.changedTouches[0].pageX-t.x})};this.bind("touchstart",i).bind("touchmove",o)},k.touchDraggable()}return t.dialogZindex+=2,d},t.mouseOrTouch=function(e,t){e=e||"click",t=t||"touchend";var i=e;try{document.createEvent("TouchEvent"),i=t}catch(o){}return i},t.dateFormat=function(e){e=e||"";var t=function(e){return 10>e?"0"+e:e},i=new Date,o=i.getFullYear(),r=o.toString().slice(2,4),n=t(i.getMonth()+1),a=t(i.getDate()),s=i.getDay(),l=t(i.getHours()),c=t(i.getMinutes()),h=t(i.getSeconds()),d=t(i.getMilliseconds()),u="",f=r+"-"+n+"-"+a,g=o+"-"+n+"-"+a,p=l+":"+c+":"+h;switch(e){case"UNIX Time":u=i.getTime();break;case"UTC":u=i.toUTCString();break;case"yy":u=r;break;case"year":case"yyyy":u=o;break;case"month":case"mm":u=n;break;case"cn-week-day":case"cn-wd":var m=["日","一","二","三","四","五","六"];u="星期"+m[s];break;case"week-day":case"wd":var w=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];u=w[s];break;case"day":case"dd":u=a;break;case"hour":case"hh":u=l;break;case"min":case"ii":u=c;break;case"second":case"ss":u=h;break;case"ms":u=d;break;case"yy-mm-dd":u=f;break;case"yyyy-mm-dd":u=g;break;case"yyyy-mm-dd h:i:s ms":case"full + ms":u=g+" "+p+" "+d;break;case"full":case"yyyy-mm-dd h:i:s":default:u=g+" "+p}return u},t}}); \ No newline at end of file diff --git a/src/main/webapp/static/global/plugins/editor.md-master/editormd.js b/src/main/webapp/static/global/plugins/editor.md-master/editormd.js new file mode 100644 index 000000000..b901a8bb3 --- /dev/null +++ b/src/main/webapp/static/global/plugins/editor.md-master/editormd.js @@ -0,0 +1,4598 @@ +/* + * Editor.md + * + * @file editormd.js + * @version v1.5.0 + * @description Open source online markdown editor. + * @license MIT License + * @author Pandao + * {@link https://github.com/pandao/editor.md} + * @updateTime 2015-06-09 + */ + +;(function(factory) { + "use strict"; + + // CommonJS/Node.js + if (typeof require === "function" && typeof exports === "object" && typeof module === "object") + { + module.exports = factory; + } + else if (typeof define === "function") // AMD/CMD/Sea.js + { + if (define.amd) // for Require.js + { + /* Require.js define replace */ + } + else + { + define(["jquery"], factory); // for Sea.js + } + } + else + { + window.editormd = factory(); + } + +}(function() { + + /* Require.js assignment replace */ + + "use strict"; + + var $ = (typeof (jQuery) !== "undefined") ? jQuery : Zepto; + + if (typeof ($) === "undefined") { + return ; + } + + /** + * editormd + * + * @param {String} id 编辑器的ID + * @param {Object} options 配置选项 Key/Value + * @returns {Object} editormd 返回editormd对象 + */ + + var editormd = function (id, options) { + return new editormd.fn.init(id, options); + }; + + editormd.title = editormd.$name = "Editor.md"; + editormd.version = "1.5.0"; + editormd.homePage = "https://pandao.github.io/editor.md/"; + editormd.classPrefix = "editormd-"; + + editormd.toolbarModes = { + full : [ + "undo", "redo", "|", + "bold", "del", "italic", "quote", "ucwords", "uppercase", "lowercase", "|", + "h1", "h2", "h3", "h4", "h5", "h6", "|", + "list-ul", "list-ol", "hr", "|", + "link", "reference-link", "image", "code", "preformatted-text", "code-block", "table", "datetime", "emoji", "html-entities", "pagebreak", "|", + "goto-line", "watch", "preview", "fullscreen", "clear", "search", "|", + "help", "info" + ], + simple : [ + "undo", "redo", "|", + "bold", "del", "italic", "quote", "uppercase", "lowercase", "|", + "h1", "h2", "h3", "h4", "h5", "h6", "|", + "list-ul", "list-ol", "hr", "|", + "watch", "preview", "fullscreen", "|", + "help", "info" + ], + mini : [ + "undo", "redo", "|", + "watch", "preview", "|", + "help", "info" + ] + }; + + editormd.defaults = { + mode : "gfm", //gfm or markdown + name : "", // Form element name + value : "", // value for CodeMirror, if mode not gfm/markdown + theme : "", // Editor.md self themes, before v1.5.0 is CodeMirror theme, default empty + editorTheme : "default", // Editor area, this is CodeMirror theme at v1.5.0 + previewTheme : "", // Preview area theme, default empty + markdown : "", // Markdown source code + appendMarkdown : "", // if in init textarea value not empty, append markdown to textarea + width : "100%", + height : "100%", + path : "./lib/", // Dependents module file directory + pluginPath : "", // If this empty, default use settings.path + "../plugins/" + delay : 300, // Delay parse markdown to html, Uint : ms + autoLoadModules : true, // Automatic load dependent module files + watch : true, + placeholder : "Enjoy Markdown! coding now...", + gotoLine : true, + codeFold : false, + autoHeight : false, + autoFocus : true, + autoCloseTags : true, + searchReplace : true, + syncScrolling : true, // true | false | "single", default true + readOnly : false, + tabSize : 4, + indentUnit : 4, + lineNumbers : true, + lineWrapping : true, + autoCloseBrackets : true, + showTrailingSpace : true, + matchBrackets : true, + indentWithTabs : true, + styleSelectedText : true, + matchWordHighlight : true, // options: true, false, "onselected" + styleActiveLine : true, // Highlight the current line + dialogLockScreen : true, + dialogShowMask : true, + dialogDraggable : true, + dialogMaskBgColor : "#fff", + dialogMaskOpacity : 0.1, + fontSize : "13px", + saveHTMLToTextarea : false, + disabledKeyMaps : [], + + onload : function() {}, + onresize : function() {}, + onchange : function() {}, + onwatch : null, + onunwatch : null, + onpreviewing : function() {}, + onpreviewed : function() {}, + onfullscreen : function() {}, + onfullscreenExit : function() {}, + onscroll : function() {}, + onpreviewscroll : function() {}, + + imageUpload : false, + imageFormats : ["jpg", "jpeg", "gif", "png", "bmp", "webp"], + imageUploadURL : "", + crossDomainUpload : false, + uploadCallbackURL : "", + + toc : true, // Table of contents + tocm : false, // Using [TOCM], auto create ToC dropdown menu + tocTitle : "", // for ToC dropdown menu btn + tocDropdown : false, + tocContainer : "", + tocStartLevel : 1, // Said from H1 to create ToC + htmlDecode : false, // Open the HTML tag identification + pageBreak : true, // Enable parse page break [========] + atLink : true, // for @link + emailLink : true, // for email address auto link + taskList : false, // Enable Github Flavored Markdown task lists + emoji : false, // :emoji: , Support Github emoji, Twitter Emoji (Twemoji); + // Support FontAwesome icon emoji :fa-xxx: > Using fontAwesome icon web fonts; + // Support Editor.md logo icon emoji :editormd-logo: :editormd-logo-1x: > 1~8x; + tex : false, // TeX(LaTeX), based on KaTeX + flowChart : false, // flowChart.js only support IE9+ + sequenceDiagram : false, // sequenceDiagram.js only support IE9+ + previewCodeHighlight : true, + + toolbar : true, // show/hide toolbar + toolbarAutoFixed : true, // on window scroll auto fixed position + toolbarIcons : "full", + toolbarTitles : {}, + toolbarHandlers : { + ucwords : function() { + return editormd.toolbarHandlers.ucwords; + }, + lowercase : function() { + return editormd.toolbarHandlers.lowercase; + } + }, + toolbarCustomIcons : { // using html tag create toolbar icon, unused default tag. + lowercase : "a", + "ucwords" : "Aa" + }, + toolbarIconsClass : { + undo : "fa-undo", + redo : "fa-repeat", + bold : "fa-bold", + del : "fa-strikethrough", + italic : "fa-italic", + quote : "fa-quote-left", + uppercase : "fa-font", + h1 : editormd.classPrefix + "bold", + h2 : editormd.classPrefix + "bold", + h3 : editormd.classPrefix + "bold", + h4 : editormd.classPrefix + "bold", + h5 : editormd.classPrefix + "bold", + h6 : editormd.classPrefix + "bold", + "list-ul" : "fa-list-ul", + "list-ol" : "fa-list-ol", + hr : "fa-minus", + link : "fa-link", + "reference-link" : "fa-anchor", + image : "fa-picture-o", + code : "fa-code", + "preformatted-text" : "fa-file-code-o", + "code-block" : "fa-file-code-o", + table : "fa-table", + datetime : "fa-clock-o", + emoji : "fa-smile-o", + "html-entities" : "fa-copyright", + pagebreak : "fa-newspaper-o", + "goto-line" : "fa-terminal", // fa-crosshairs + watch : "fa-eye-slash", + unwatch : "fa-eye", + preview : "fa-desktop", + search : "fa-search", + fullscreen : "fa-arrows-alt", + clear : "fa-eraser", + help : "fa-question-circle", + info : "fa-info-circle" + }, + toolbarIconTexts : {}, + + lang : { + name : "zh-cn", + description : "开源在线Markdown编辑器
            Open source online Markdown editor.", + tocTitle : "目录", + toolbar : { + undo : "撤销(Ctrl+Z)", + redo : "重做(Ctrl+Y)", + bold : "粗体", + del : "删除线", + italic : "斜体", + quote : "引用", + ucwords : "将每个单词首字母转成大写", + uppercase : "将所选转换成大写", + lowercase : "将所选转换成小写", + h1 : "标题1", + h2 : "标题2", + h3 : "标题3", + h4 : "标题4", + h5 : "标题5", + h6 : "标题6", + "list-ul" : "无序列表", + "list-ol" : "有序列表", + hr : "横线", + link : "链接", + "reference-link" : "引用链接", + image : "添加图片", + code : "行内代码", + "preformatted-text" : "预格式文本 / 代码块(缩进风格)", + "code-block" : "代码块(多语言风格)", + table : "添加表格", + datetime : "日期时间", + emoji : "Emoji表情", + "html-entities" : "HTML实体字符", + pagebreak : "插入分页符", + "goto-line" : "跳转到行", + watch : "关闭实时预览", + unwatch : "开启实时预览", + preview : "全窗口预览HTML(按 Shift + ESC还原)", + fullscreen : "全屏(按ESC还原)", + clear : "清空", + search : "搜索", + help : "使用帮助", + info : "关于" + editormd.title + }, + buttons : { + enter : "确定", + cancel : "取消", + close : "关闭" + }, + dialog : { + link : { + title : "添加链接", + url : "链接地址", + urlTitle : "链接标题", + urlEmpty : "错误:请填写链接地址。" + }, + referenceLink : { + title : "添加引用链接", + name : "引用名称", + url : "链接地址", + urlId : "链接ID", + urlTitle : "链接标题", + nameEmpty: "错误:引用链接的名称不能为空。", + idEmpty : "错误:请填写引用链接的ID。", + urlEmpty : "错误:请填写引用链接的URL地址。" + }, + image : { + title : "添加图片", + url : "图片地址", + link : "图片链接", + alt : "图片描述", + uploadButton : "本地上传", + imageURLEmpty : "错误:图片地址不能为空。", + uploadFileEmpty : "错误:上传的图片不能为空。", + formatNotAllowed : "错误:只允许上传图片文件,允许上传的图片文件格式有:" + }, + preformattedText : { + title : "添加预格式文本或代码块", + emptyAlert : "错误:请填写预格式文本或代码的内容。" + }, + codeBlock : { + title : "添加代码块", + selectLabel : "代码语言:", + selectDefaultText : "请选择代码语言", + otherLanguage : "其他语言", + unselectedLanguageAlert : "错误:请选择代码所属的语言类型。", + codeEmptyAlert : "错误:请填写代码内容。" + }, + htmlEntities : { + title : "HTML 实体字符" + }, + help : { + title : "使用帮助" + } + } + } + }; + + editormd.classNames = { + tex : editormd.classPrefix + "tex" + }; + + editormd.dialogZindex = 99999; + + editormd.$katex = null; + editormd.$marked = null; + editormd.$CodeMirror = null; + editormd.$prettyPrint = null; + + var timer, flowchartTimer; + + editormd.prototype = editormd.fn = { + state : { + watching : false, + loaded : false, + preview : false, + fullscreen : false + }, + + /** + * 构造函数/实例初始化 + * Constructor / instance initialization + * + * @param {String} id 编辑器的ID + * @param {Object} [options={}] 配置选项 Key/Value + * @returns {editormd} 返回editormd的实例对象 + */ + + init : function (id, options) { + + options = options || {}; + + if (typeof id === "object") + { + options = id; + } + + var _this = this; + var classPrefix = this.classPrefix = editormd.classPrefix; + var settings = this.settings = $.extend(true, editormd.defaults, options); + + id = (typeof id === "object") ? settings.id : id; + + var editor = this.editor = $("#" + id); + + this.id = id; + this.lang = settings.lang; + + var classNames = this.classNames = { + textarea : { + html : classPrefix + "html-textarea", + markdown : classPrefix + "markdown-textarea" + } + }; + + settings.pluginPath = (settings.pluginPath === "") ? settings.path + "../plugins/" : settings.pluginPath; + + this.state.watching = (settings.watch) ? true : false; + + if ( !editor.hasClass("editormd") ) { + editor.addClass("editormd"); + } + + editor.css({ + width : (typeof settings.width === "number") ? settings.width + "px" : settings.width, + height : (typeof settings.height === "number") ? settings.height + "px" : settings.height + }); + + if (settings.autoHeight) + { + editor.css("height", "auto"); + } + + var markdownTextarea = this.markdownTextarea = editor.children("textarea"); + + if (markdownTextarea.length < 1) + { + editor.append(""); + markdownTextarea = this.markdownTextarea = editor.children("textarea"); + } + + markdownTextarea.addClass(classNames.textarea.markdown).attr("placeholder", settings.placeholder); + + if (typeof markdownTextarea.attr("name") === "undefined" || markdownTextarea.attr("name") === "") + { + markdownTextarea.attr("name", (settings.name !== "") ? settings.name : id + "-markdown-doc"); + } + + var appendElements = [ + (!settings.readOnly) ? "" : "", + ( (settings.saveHTMLToTextarea) ? "" : "" ), + "
            ", + "
            ", + "
            " + ].join("\n"); + + editor.append(appendElements).addClass(classPrefix + "vertical"); + + if (settings.theme !== "") + { + editor.addClass(classPrefix + "theme-" + settings.theme); + } + + this.mask = editor.children("." + classPrefix + "mask"); + this.containerMask = editor.children("." + classPrefix + "container-mask"); + + if (settings.markdown !== "") + { + markdownTextarea.val(settings.markdown); + } + + if (settings.appendMarkdown !== "") + { + markdownTextarea.val(markdownTextarea.val() + settings.appendMarkdown); + } + + this.htmlTextarea = editor.children("." + classNames.textarea.html); + this.preview = editor.children("." + classPrefix + "preview"); + this.previewContainer = this.preview.children("." + classPrefix + "preview-container"); + + if (settings.previewTheme !== "") + { + this.preview.addClass(classPrefix + "preview-theme-" + settings.previewTheme); + } + + if (typeof define === "function" && define.amd) + { + if (typeof katex !== "undefined") + { + editormd.$katex = katex; + } + + if (settings.searchReplace && !settings.readOnly) + { + editormd.loadCSS(settings.path + "codemirror/addon/dialog/dialog"); + editormd.loadCSS(settings.path + "codemirror/addon/search/matchesonscrollbar"); + } + } + + if ((typeof define === "function" && define.amd) || !settings.autoLoadModules) + { + if (typeof CodeMirror !== "undefined") { + editormd.$CodeMirror = CodeMirror; + } + + if (typeof marked !== "undefined") { + editormd.$marked = marked; + } + + this.setCodeMirror().setToolbar().loadedDisplay(); + } + else + { + this.loadQueues(); + } + + return this; + }, + + /** + * 所需组件加载队列 + * Required components loading queue + * + * @returns {editormd} 返回editormd的实例对象 + */ + + loadQueues : function() { + var _this = this; + var settings = this.settings; + var loadPath = settings.path; + + var loadFlowChartOrSequenceDiagram = function() { + + if (editormd.isIE8) + { + _this.loadedDisplay(); + + return ; + } + + if (settings.flowChart || settings.sequenceDiagram) + { + editormd.loadScript(loadPath + "raphael.min", function() { + + editormd.loadScript(loadPath + "underscore.min", function() { + + if (!settings.flowChart && settings.sequenceDiagram) + { + editormd.loadScript(loadPath + "sequence-diagram.min", function() { + _this.loadedDisplay(); + }); + } + else if (settings.flowChart && !settings.sequenceDiagram) + { + editormd.loadScript(loadPath + "flowchart.min", function() { + editormd.loadScript(loadPath + "jquery.flowchart.min", function() { + _this.loadedDisplay(); + }); + }); + } + else if (settings.flowChart && settings.sequenceDiagram) + { + editormd.loadScript(loadPath + "flowchart.min", function() { + editormd.loadScript(loadPath + "jquery.flowchart.min", function() { + editormd.loadScript(loadPath + "sequence-diagram.min", function() { + _this.loadedDisplay(); + }); + }); + }); + } + }); + + }); + } + else + { + _this.loadedDisplay(); + } + }; + + editormd.loadCSS(loadPath + "codemirror/codemirror.min"); + + if (settings.searchReplace && !settings.readOnly) + { + editormd.loadCSS(loadPath + "codemirror/addon/dialog/dialog"); + editormd.loadCSS(loadPath + "codemirror/addon/search/matchesonscrollbar"); + } + + if (settings.codeFold) + { + editormd.loadCSS(loadPath + "codemirror/addon/fold/foldgutter"); + } + + editormd.loadScript(loadPath + "codemirror/codemirror.min", function() { + editormd.$CodeMirror = CodeMirror; + + editormd.loadScript(loadPath + "codemirror/modes.min", function() { + + editormd.loadScript(loadPath + "codemirror/addons.min", function() { + + _this.setCodeMirror(); + + if (settings.mode !== "gfm" && settings.mode !== "markdown") + { + _this.loadedDisplay(); + + return false; + } + + _this.setToolbar(); + + editormd.loadScript(loadPath + "marked.min", function() { + + editormd.$marked = marked; + + if (settings.previewCodeHighlight) + { + editormd.loadScript(loadPath + "prettify.min", function() { + loadFlowChartOrSequenceDiagram(); + }); + } + else + { + loadFlowChartOrSequenceDiagram(); + } + }); + + }); + + }); + + }); + + return this; + }, + + /** + * 设置 Editor.md 的整体主题,主要是工具栏 + * Setting Editor.md theme + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setTheme : function(theme) { + var editor = this.editor; + var oldTheme = this.settings.theme; + var themePrefix = this.classPrefix + "theme-"; + + editor.removeClass(themePrefix + oldTheme).addClass(themePrefix + theme); + + this.settings.theme = theme; + + return this; + }, + + /** + * 设置 CodeMirror(编辑区)的主题 + * Setting CodeMirror (Editor area) theme + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setEditorTheme : function(theme) { + var settings = this.settings; + settings.editorTheme = theme; + + if (theme !== "default") + { + editormd.loadCSS(settings.path + "codemirror/theme/" + settings.editorTheme); + } + + this.cm.setOption("theme", theme); + + return this; + }, + + /** + * setEditorTheme() 的别名 + * setEditorTheme() alias + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setCodeMirrorTheme : function (theme) { + this.setEditorTheme(theme); + + return this; + }, + + /** + * 设置 Editor.md 的主题 + * Setting Editor.md theme + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setPreviewTheme : function(theme) { + var preview = this.preview; + var oldTheme = this.settings.previewTheme; + var themePrefix = this.classPrefix + "preview-theme-"; + + preview.removeClass(themePrefix + oldTheme).addClass(themePrefix + theme); + + this.settings.previewTheme = theme; + + return this; + }, + + /** + * 配置和初始化CodeMirror组件 + * CodeMirror initialization + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setCodeMirror : function() { + var settings = this.settings; + var editor = this.editor; + + if (settings.editorTheme !== "default") + { + editormd.loadCSS(settings.path + "codemirror/theme/" + settings.editorTheme); + } + + var codeMirrorConfig = { + mode : settings.mode, + theme : settings.editorTheme, + tabSize : settings.tabSize, + dragDrop : false, + autofocus : settings.autoFocus, + autoCloseTags : settings.autoCloseTags, + readOnly : (settings.readOnly) ? "nocursor" : false, + indentUnit : settings.indentUnit, + lineNumbers : settings.lineNumbers, + lineWrapping : settings.lineWrapping, + extraKeys : { + "Ctrl-Q": function(cm) { + cm.foldCode(cm.getCursor()); + } + }, + foldGutter : settings.codeFold, + gutters : ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], + matchBrackets : settings.matchBrackets, + indentWithTabs : settings.indentWithTabs, + styleActiveLine : settings.styleActiveLine, + styleSelectedText : settings.styleSelectedText, + autoCloseBrackets : settings.autoCloseBrackets, + showTrailingSpace : settings.showTrailingSpace, + highlightSelectionMatches : ( (!settings.matchWordHighlight) ? false : { showToken: (settings.matchWordHighlight === "onselected") ? false : /\w/ } ) + }; + + this.codeEditor = this.cm = editormd.$CodeMirror.fromTextArea(this.markdownTextarea[0], codeMirrorConfig); + this.codeMirror = this.cmElement = editor.children(".CodeMirror"); + + if (settings.value !== "") + { + this.cm.setValue(settings.value); + } + + this.codeMirror.css({ + fontSize : settings.fontSize, + width : (!settings.watch) ? "100%" : "50%" + }); + + if (settings.autoHeight) + { + this.codeMirror.css("height", "auto"); + this.cm.setOption("viewportMargin", Infinity); + } + + if (!settings.lineNumbers) + { + this.codeMirror.find(".CodeMirror-gutters").css("border-right", "none"); + } + + return this; + }, + + /** + * 获取CodeMirror的配置选项 + * Get CodeMirror setting options + * + * @returns {Mixed} return CodeMirror setting option value + */ + + getCodeMirrorOption : function(key) { + return this.cm.getOption(key); + }, + + /** + * 配置和重配置CodeMirror的选项 + * CodeMirror setting options / resettings + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setCodeMirrorOption : function(key, value) { + + this.cm.setOption(key, value); + + return this; + }, + + /** + * 添加 CodeMirror 键盘快捷键 + * Add CodeMirror keyboard shortcuts key map + * + * @returns {editormd} 返回editormd的实例对象 + */ + + addKeyMap : function(map, bottom) { + this.cm.addKeyMap(map, bottom); + + return this; + }, + + /** + * 移除 CodeMirror 键盘快捷键 + * Remove CodeMirror keyboard shortcuts key map + * + * @returns {editormd} 返回editormd的实例对象 + */ + + removeKeyMap : function(map) { + this.cm.removeKeyMap(map); + + return this; + }, + + /** + * 跳转到指定的行 + * Goto CodeMirror line + * + * @param {String|Intiger} line line number or "first"|"last" + * @returns {editormd} 返回editormd的实例对象 + */ + + gotoLine : function (line) { + + var settings = this.settings; + + if (!settings.gotoLine) + { + return this; + } + + var cm = this.cm; + var editor = this.editor; + var count = cm.lineCount(); + var preview = this.preview; + + if (typeof line === "string") + { + if(line === "last") + { + line = count; + } + + if (line === "first") + { + line = 1; + } + } + + if (typeof line !== "number") + { + alert("Error: The line number must be an integer."); + return this; + } + + line = parseInt(line) - 1; + + if (line > count) + { + alert("Error: The line number range 1-" + count); + + return this; + } + + cm.setCursor( {line : line, ch : 0} ); + + var scrollInfo = cm.getScrollInfo(); + var clientHeight = scrollInfo.clientHeight; + var coords = cm.charCoords({line : line, ch : 0}, "local"); + + cm.scrollTo(null, (coords.top + coords.bottom - clientHeight) / 2); + + if (settings.watch) + { + var cmScroll = this.codeMirror.find(".CodeMirror-scroll")[0]; + var height = $(cmScroll).height(); + var scrollTop = cmScroll.scrollTop; + var percent = (scrollTop / cmScroll.scrollHeight); + + if (scrollTop === 0) + { + preview.scrollTop(0); + } + else if (scrollTop + height >= cmScroll.scrollHeight - 16) + { + preview.scrollTop(preview[0].scrollHeight); + } + else + { + preview.scrollTop(preview[0].scrollHeight * percent); + } + } + + cm.focus(); + + return this; + }, + + /** + * 扩展当前实例对象,可同时设置多个或者只设置一个 + * Extend editormd instance object, can mutil setting. + * + * @returns {editormd} this(editormd instance object.) + */ + + extend : function() { + if (typeof arguments[1] !== "undefined") + { + if (typeof arguments[1] === "function") + { + arguments[1] = $.proxy(arguments[1], this); + } + + this[arguments[0]] = arguments[1]; + } + + if (typeof arguments[0] === "object" && typeof arguments[0].length === "undefined") + { + $.extend(true, this, arguments[0]); + } + + return this; + }, + + /** + * 设置或扩展当前实例对象,单个设置 + * Extend editormd instance object, one by one + * + * @param {String|Object} key option key + * @param {String|Object} value option value + * @returns {editormd} this(editormd instance object.) + */ + + set : function (key, value) { + + if (typeof value !== "undefined" && typeof value === "function") + { + value = $.proxy(value, this); + } + + this[key] = value; + + return this; + }, + + /** + * 重新配置 + * Resetting editor options + * + * @param {String|Object} key option key + * @param {String|Object} value option value + * @returns {editormd} this(editormd instance object.) + */ + + config : function(key, value) { + var settings = this.settings; + + if (typeof key === "object") + { + settings = $.extend(true, settings, key); + } + + if (typeof key === "string") + { + settings[key] = value; + } + + this.settings = settings; + this.recreate(); + + return this; + }, + + /** + * 注册事件处理方法 + * Bind editor event handle + * + * @param {String} eventType event type + * @param {Function} callback 回调函数 + * @returns {editormd} this(editormd instance object.) + */ + + on : function(eventType, callback) { + var settings = this.settings; + + if (typeof settings["on" + eventType] !== "undefined") + { + settings["on" + eventType] = $.proxy(callback, this); + } + + return this; + }, + + /** + * 解除事件处理方法 + * Unbind editor event handle + * + * @param {String} eventType event type + * @returns {editormd} this(editormd instance object.) + */ + + off : function(eventType) { + var settings = this.settings; + + if (typeof settings["on" + eventType] !== "undefined") + { + settings["on" + eventType] = function(){}; + } + + return this; + }, + + /** + * 显示工具栏 + * Display toolbar + * + * @param {Function} [callback=function(){}] 回调函数 + * @returns {editormd} 返回editormd的实例对象 + */ + + showToolbar : function(callback) { + var settings = this.settings; + + if(settings.readOnly) { + return this; + } + + if (settings.toolbar && (this.toolbar.length < 1 || this.toolbar.find("." + this.classPrefix + "menu").html() === "") ) + { + this.setToolbar(); + } + + settings.toolbar = true; + + this.toolbar.show(); + this.resize(); + + $.proxy(callback || function(){}, this)(); + + return this; + }, + + /** + * 隐藏工具栏 + * Hide toolbar + * + * @param {Function} [callback=function(){}] 回调函数 + * @returns {editormd} this(editormd instance object.) + */ + + hideToolbar : function(callback) { + var settings = this.settings; + + settings.toolbar = false; + this.toolbar.hide(); + this.resize(); + + $.proxy(callback || function(){}, this)(); + + return this; + }, + + /** + * 页面滚动时工具栏的固定定位 + * Set toolbar in window scroll auto fixed position + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setToolbarAutoFixed : function(fixed) { + + var state = this.state; + var editor = this.editor; + var toolbar = this.toolbar; + var settings = this.settings; + + if (typeof fixed !== "undefined") + { + settings.toolbarAutoFixed = fixed; + } + + var autoFixedHandle = function(){ + var $window = $(window); + var top = $window.scrollTop(); + + if (!settings.toolbarAutoFixed) + { + return false; + } + + if (top - editor.offset().top > 10 && top < editor.height()) + { + toolbar.css({ + position : "fixed", + width : editor.width() + "px", + left : ($window.width() - editor.width()) / 2 + "px" + }); + } + else + { + toolbar.css({ + position : "absolute", + width : "100%", + left : 0 + }); + } + }; + + if (!state.fullscreen && !state.preview && settings.toolbar && settings.toolbarAutoFixed) + { + $(window).bind("scroll", autoFixedHandle); + } + + return this; + }, + + /** + * 配置和初始化工具栏 + * Set toolbar and Initialization + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setToolbar : function() { + var settings = this.settings; + + if(settings.readOnly) { + return this; + } + + var editor = this.editor; + var preview = this.preview; + var classPrefix = this.classPrefix; + + var toolbar = this.toolbar = editor.children("." + classPrefix + "toolbar"); + + if (settings.toolbar && toolbar.length < 1) + { + var toolbarHTML = "
              "; + + editor.append(toolbarHTML); + toolbar = this.toolbar = editor.children("." + classPrefix + "toolbar"); + } + + if (!settings.toolbar) + { + toolbar.hide(); + + return this; + } + + toolbar.show(); + + var icons = (typeof settings.toolbarIcons === "function") ? settings.toolbarIcons() + : ((typeof settings.toolbarIcons === "string") ? editormd.toolbarModes[settings.toolbarIcons] : settings.toolbarIcons); + + var toolbarMenu = toolbar.find("." + this.classPrefix + "menu"), menu = ""; + var pullRight = false; + + for (var i = 0, len = icons.length; i < len; i++) + { + var name = icons[i]; + + if (name === "||") + { + pullRight = true; + } + else if (name === "|") + { + menu += "
            • |
            • "; + } + else + { + var isHeader = (/h(\d)/.test(name)); + var index = name; + + if (name === "watch" && !settings.watch) { + index = "unwatch"; + } + + var title = settings.lang.toolbar[index]; + var iconTexts = settings.toolbarIconTexts[index]; + var iconClass = settings.toolbarIconsClass[index]; + + title = (typeof title === "undefined") ? "" : title; + iconTexts = (typeof iconTexts === "undefined") ? "" : iconTexts; + iconClass = (typeof iconClass === "undefined") ? "" : iconClass; + + var menuItem = pullRight ? "
            • " : "
            • "; + + if (typeof settings.toolbarCustomIcons[name] !== "undefined" && typeof settings.toolbarCustomIcons[name] !== "function") + { + menuItem += settings.toolbarCustomIcons[name]; + } + else + { + menuItem += ""; + menuItem += ""+((isHeader) ? name.toUpperCase() : ( (iconClass === "") ? iconTexts : "") ) + ""; + menuItem += ""; + } + + menuItem += "
            • "; + + menu = pullRight ? menuItem + menu : menu + menuItem; + } + } + + toolbarMenu.html(menu); + + toolbarMenu.find("[title=\"Lowercase\"]").attr("title", settings.lang.toolbar.lowercase); + toolbarMenu.find("[title=\"ucwords\"]").attr("title", settings.lang.toolbar.ucwords); + + this.setToolbarHandler(); + this.setToolbarAutoFixed(); + + return this; + }, + + /** + * 工具栏图标事件处理对象序列 + * Get toolbar icons event handlers + * + * @param {Object} cm CodeMirror的实例对象 + * @param {String} name 要获取的事件处理器名称 + * @returns {Object} 返回处理对象序列 + */ + + dialogLockScreen : function() { + $.proxy(editormd.dialogLockScreen, this)(); + + return this; + }, + + dialogShowMask : function(dialog) { + $.proxy(editormd.dialogShowMask, this)(dialog); + + return this; + }, + + getToolbarHandles : function(name) { + var toolbarHandlers = this.toolbarHandlers = editormd.toolbarHandlers; + + return (name && typeof toolbarIconHandlers[name] !== "undefined") ? toolbarHandlers[name] : toolbarHandlers; + }, + + /** + * 工具栏图标事件处理器 + * Bind toolbar icons event handle + * + * @returns {editormd} 返回editormd的实例对象 + */ + + setToolbarHandler : function() { + var _this = this; + var settings = this.settings; + + if (!settings.toolbar || settings.readOnly) { + return this; + } + + var toolbar = this.toolbar; + var cm = this.cm; + var classPrefix = this.classPrefix; + var toolbarIcons = this.toolbarIcons = toolbar.find("." + classPrefix + "menu > li > a"); + var toolbarIconHandlers = this.getToolbarHandles(); + + toolbarIcons.bind(editormd.mouseOrTouch("click", "touchend"), function(event) { + + var icon = $(this).children(".fa"); + var name = icon.attr("name"); + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (name === "") { + return ; + } + + _this.activeIcon = icon; + + if (typeof toolbarIconHandlers[name] !== "undefined") + { + $.proxy(toolbarIconHandlers[name], _this)(cm); + } + else + { + if (typeof settings.toolbarHandlers[name] !== "undefined") + { + $.proxy(settings.toolbarHandlers[name], _this)(cm, icon, cursor, selection); + } + } + + if (name !== "link" && name !== "reference-link" && name !== "image" && name !== "code-block" && + name !== "preformatted-text" && name !== "watch" && name !== "preview" && name !== "search" && name !== "fullscreen" && name !== "info") + { + cm.focus(); + } + + return false; + + }); + + return this; + }, + + /** + * 动态创建对话框 + * Creating custom dialogs + * + * @param {Object} options 配置项键值对 Key/Value + * @returns {dialog} 返回创建的dialog的jQuery实例对象 + */ + + createDialog : function(options) { + return $.proxy(editormd.createDialog, this)(options); + }, + + /** + * 创建关于Editor.md的对话框 + * Create about Editor.md dialog + * + * @returns {editormd} 返回editormd的实例对象 + */ + + createInfoDialog : function() { + var _this = this; + var editor = this.editor; + var classPrefix = this.classPrefix; + + var infoDialogHTML = [ + "
              ", + "
              ", + "

              " + editormd.title + "v" + editormd.version + "

              ", + "

              " + this.lang.description + "

              ", + "

              " + editormd.homePage + "

              ", + "

              Copyright © 2015 Pandao, The MIT License.

              ", + "
              ", + "", + "
              " + ].join("\n"); + + editor.append(infoDialogHTML); + + var infoDialog = this.infoDialog = editor.children("." + classPrefix + "dialog-info"); + + infoDialog.find("." + classPrefix + "dialog-close").bind(editormd.mouseOrTouch("click", "touchend"), function() { + _this.hideInfoDialog(); + }); + + infoDialog.css("border", (editormd.isIE8) ? "1px solid #ddd" : "").css("z-index", editormd.dialogZindex).show(); + + this.infoDialogPosition(); + + return this; + }, + + /** + * 关于Editor.md对话居中定位 + * Editor.md dialog position handle + * + * @returns {editormd} 返回editormd的实例对象 + */ + + infoDialogPosition : function() { + var infoDialog = this.infoDialog; + + var _infoDialogPosition = function() { + infoDialog.css({ + top : ($(window).height() - infoDialog.height()) / 2 + "px", + left : ($(window).width() - infoDialog.width()) / 2 + "px" + }); + }; + + _infoDialogPosition(); + + $(window).resize(_infoDialogPosition); + + return this; + }, + + /** + * 显示关于Editor.md + * Display about Editor.md dialog + * + * @returns {editormd} 返回editormd的实例对象 + */ + + showInfoDialog : function() { + + $("html,body").css("overflow-x", "hidden"); + + var _this = this; + var editor = this.editor; + var settings = this.settings; + var infoDialog = this.infoDialog = editor.children("." + this.classPrefix + "dialog-info"); + + if (infoDialog.length < 1) + { + this.createInfoDialog(); + } + + this.lockScreen(true); + + this.mask.css({ + opacity : settings.dialogMaskOpacity, + backgroundColor : settings.dialogMaskBgColor + }).show(); + + infoDialog.css("z-index", editormd.dialogZindex).show(); + + this.infoDialogPosition(); + + return this; + }, + + /** + * 隐藏关于Editor.md + * Hide about Editor.md dialog + * + * @returns {editormd} 返回editormd的实例对象 + */ + + hideInfoDialog : function() { + $("html,body").css("overflow-x", ""); + this.infoDialog.hide(); + this.mask.hide(); + this.lockScreen(false); + + return this; + }, + + /** + * 锁屏 + * lock screen + * + * @param {Boolean} lock Boolean 布尔值,是否锁屏 + * @returns {editormd} 返回editormd的实例对象 + */ + + lockScreen : function(lock) { + editormd.lockScreen(lock); + this.resize(); + + return this; + }, + + /** + * 编辑器界面重建,用于动态语言包或模块加载等 + * Recreate editor + * + * @returns {editormd} 返回editormd的实例对象 + */ + + recreate : function() { + var _this = this; + var editor = this.editor; + var settings = this.settings; + + this.codeMirror.remove(); + + this.setCodeMirror(); + + if (!settings.readOnly) + { + if (editor.find(".editormd-dialog").length > 0) { + editor.find(".editormd-dialog").remove(); + } + + if (settings.toolbar) + { + this.getToolbarHandles(); + this.setToolbar(); + } + } + + this.loadedDisplay(true); + + return this; + }, + + /** + * 高亮预览HTML的pre代码部分 + * highlight of preview codes + * + * @returns {editormd} 返回editormd的实例对象 + */ + + previewCodeHighlight : function() { + var settings = this.settings; + var previewContainer = this.previewContainer; + + if (settings.previewCodeHighlight) + { + previewContainer.find("pre").addClass("prettyprint linenums"); + + if (typeof prettyPrint !== "undefined") + { + prettyPrint(); + } + } + + return this; + }, + + /** + * 解析TeX(KaTeX)科学公式 + * TeX(KaTeX) Renderer + * + * @returns {editormd} 返回editormd的实例对象 + */ + + katexRender : function() { + + if (timer === null) + { + return this; + } + + this.previewContainer.find("." + editormd.classNames.tex).each(function(){ + var tex = $(this); + editormd.$katex.render(tex.text(), tex[0]); + + tex.find(".katex").css("font-size", "1.6em"); + }); + + return this; + }, + + /** + * 解析和渲染流程图及时序图 + * FlowChart and SequenceDiagram Renderer + * + * @returns {editormd} 返回editormd的实例对象 + */ + + flowChartAndSequenceDiagramRender : function() { + var $this = this; + var settings = this.settings; + var previewContainer = this.previewContainer; + + if (editormd.isIE8) { + return this; + } + + if (settings.flowChart) { + if (flowchartTimer === null) { + return this; + } + + previewContainer.find(".flowchart").flowChart(); + } + + if (settings.sequenceDiagram) { + previewContainer.find(".sequence-diagram").sequenceDiagram({theme: "simple"}); + } + + var preview = $this.preview; + var codeMirror = $this.codeMirror; + var codeView = codeMirror.find(".CodeMirror-scroll"); + + var height = codeView.height(); + var scrollTop = codeView.scrollTop(); + var percent = (scrollTop / codeView[0].scrollHeight); + var tocHeight = 0; + + preview.find(".markdown-toc-list").each(function(){ + tocHeight += $(this).height(); + }); + + var tocMenuHeight = preview.find(".editormd-toc-menu").height(); + tocMenuHeight = (!tocMenuHeight) ? 0 : tocMenuHeight; + + if (scrollTop === 0) + { + preview.scrollTop(0); + } + else if (scrollTop + height >= codeView[0].scrollHeight - 16) + { + preview.scrollTop(preview[0].scrollHeight); + } + else + { + preview.scrollTop((preview[0].scrollHeight + tocHeight + tocMenuHeight) * percent); + } + + return this; + }, + + /** + * 注册键盘快捷键处理 + * Register CodeMirror keyMaps (keyboard shortcuts). + * + * @param {Object} keyMap KeyMap key/value {"(Ctrl/Shift/Alt)-Key" : function(){}} + * @returns {editormd} return this + */ + + registerKeyMaps : function(keyMap) { + + var _this = this; + var cm = this.cm; + var settings = this.settings; + var toolbarHandlers = editormd.toolbarHandlers; + var disabledKeyMaps = settings.disabledKeyMaps; + + keyMap = keyMap || null; + + if (keyMap) + { + for (var i in keyMap) + { + if ($.inArray(i, disabledKeyMaps) < 0) + { + var map = {}; + map[i] = keyMap[i]; + + cm.addKeyMap(keyMap); + } + } + } + else + { + for (var k in editormd.keyMaps) + { + var _keyMap = editormd.keyMaps[k]; + var handle = (typeof _keyMap === "string") ? $.proxy(toolbarHandlers[_keyMap], _this) : $.proxy(_keyMap, _this); + + if ($.inArray(k, ["F9", "F10", "F11"]) < 0 && $.inArray(k, disabledKeyMaps) < 0) + { + var _map = {}; + _map[k] = handle; + + cm.addKeyMap(_map); + } + } + + $(window).keydown(function(event) { + + var keymaps = { + "120" : "F9", + "121" : "F10", + "122" : "F11" + }; + + if ( $.inArray(keymaps[event.keyCode], disabledKeyMaps) < 0 ) + { + switch (event.keyCode) + { + case 120: + $.proxy(toolbarHandlers["watch"], _this)(); + return false; + break; + + case 121: + $.proxy(toolbarHandlers["preview"], _this)(); + return false; + break; + + case 122: + $.proxy(toolbarHandlers["fullscreen"], _this)(); + return false; + break; + + default: + break; + } + } + }); + } + + return this; + }, + + /** + * 绑定同步滚动 + * + * @returns {editormd} return this + */ + + bindScrollEvent : function() { + + var _this = this; + var preview = this.preview; + var settings = this.settings; + var codeMirror = this.codeMirror; + var mouseOrTouch = editormd.mouseOrTouch; + + if (!settings.syncScrolling) { + return this; + } + + var cmBindScroll = function() { + codeMirror.find(".CodeMirror-scroll").bind(mouseOrTouch("scroll", "touchmove"), function(event) { + var height = $(this).height(); + var scrollTop = $(this).scrollTop(); + var percent = (scrollTop / $(this)[0].scrollHeight); + + var tocHeight = 0; + + preview.find(".markdown-toc-list").each(function(){ + tocHeight += $(this).height(); + }); + + var tocMenuHeight = preview.find(".editormd-toc-menu").height(); + tocMenuHeight = (!tocMenuHeight) ? 0 : tocMenuHeight; + + if (scrollTop === 0) + { + preview.scrollTop(0); + } + else if (scrollTop + height >= $(this)[0].scrollHeight - 16) + { + preview.scrollTop(preview[0].scrollHeight); + } + else + { + preview.scrollTop((preview[0].scrollHeight + tocHeight + tocMenuHeight) * percent); + } + + $.proxy(settings.onscroll, _this)(event); + }); + }; + + var cmUnbindScroll = function() { + codeMirror.find(".CodeMirror-scroll").unbind(mouseOrTouch("scroll", "touchmove")); + }; + + var previewBindScroll = function() { + + preview.bind(mouseOrTouch("scroll", "touchmove"), function(event) { + var height = $(this).height(); + var scrollTop = $(this).scrollTop(); + var percent = (scrollTop / $(this)[0].scrollHeight); + var codeView = codeMirror.find(".CodeMirror-scroll"); + + if(scrollTop === 0) + { + codeView.scrollTop(0); + } + else if (scrollTop + height >= $(this)[0].scrollHeight) + { + codeView.scrollTop(codeView[0].scrollHeight); + } + else + { + codeView.scrollTop(codeView[0].scrollHeight * percent); + } + + $.proxy(settings.onpreviewscroll, _this)(event); + }); + + }; + + var previewUnbindScroll = function() { + preview.unbind(mouseOrTouch("scroll", "touchmove")); + }; + + codeMirror.bind({ + mouseover : cmBindScroll, + mouseout : cmUnbindScroll, + touchstart : cmBindScroll, + touchend : cmUnbindScroll + }); + + if (settings.syncScrolling === "single") { + return this; + } + + preview.bind({ + mouseover : previewBindScroll, + mouseout : previewUnbindScroll, + touchstart : previewBindScroll, + touchend : previewUnbindScroll + }); + + return this; + }, + + bindChangeEvent : function() { + + var _this = this; + var cm = this.cm; + var settings = this.settings; + + if (!settings.syncScrolling) { + return this; + } + + cm.on("change", function(_cm, changeObj) { + + if (settings.watch) + { + _this.previewContainer.css("padding", settings.autoHeight ? "20px 20px 50px 40px" : "20px"); + } + + timer = setTimeout(function() { + clearTimeout(timer); + _this.save(); + timer = null; + }, settings.delay); + }); + + return this; + }, + + /** + * 加载队列完成之后的显示处理 + * Display handle of the module queues loaded after. + * + * @param {Boolean} recreate 是否为重建编辑器 + * @returns {editormd} 返回editormd的实例对象 + */ + + loadedDisplay : function(recreate) { + + recreate = recreate || false; + + var _this = this; + var editor = this.editor; + var preview = this.preview; + var settings = this.settings; + + this.containerMask.hide(); + + this.save(); + + if (settings.watch) { + preview.show(); + } + + editor.data("oldWidth", editor.width()).data("oldHeight", editor.height()); // 为了兼容Zepto + + this.resize(); + this.registerKeyMaps(); + + $(window).resize(function(){ + _this.resize(); + }); + + this.bindScrollEvent().bindChangeEvent(); + + if (!recreate) + { + $.proxy(settings.onload, this)(); + } + + this.state.loaded = true; + + return this; + }, + + /** + * 设置编辑器的宽度 + * Set editor width + * + * @param {Number|String} width 编辑器宽度值 + * @returns {editormd} 返回editormd的实例对象 + */ + + width : function(width) { + + this.editor.css("width", (typeof width === "number") ? width + "px" : width); + this.resize(); + + return this; + }, + + /** + * 设置编辑器的高度 + * Set editor height + * + * @param {Number|String} height 编辑器高度值 + * @returns {editormd} 返回editormd的实例对象 + */ + + height : function(height) { + + this.editor.css("height", (typeof height === "number") ? height + "px" : height); + this.resize(); + + return this; + }, + + /** + * 调整编辑器的尺寸和布局 + * Resize editor layout + * + * @param {Number|String} [width=null] 编辑器宽度值 + * @param {Number|String} [height=null] 编辑器高度值 + * @returns {editormd} 返回editormd的实例对象 + */ + + resize : function(width, height) { + + width = width || null; + height = height || null; + + var state = this.state; + var editor = this.editor; + var preview = this.preview; + var toolbar = this.toolbar; + var settings = this.settings; + var codeMirror = this.codeMirror; + + if (width) + { + editor.css("width", (typeof width === "number") ? width + "px" : width); + } + + if (settings.autoHeight && !state.fullscreen && !state.preview) + { + editor.css("height", "auto"); + codeMirror.css("height", "auto"); + } + else + { + if (height) + { + editor.css("height", (typeof height === "number") ? height + "px" : height); + } + + if (state.fullscreen) + { + editor.height($(window).height()); + } + + if (settings.toolbar && !settings.readOnly) + { + codeMirror.css("margin-top", toolbar.height() + 1).height(editor.height() - toolbar.height()); + } + else + { + codeMirror.css("margin-top", 0).height(editor.height()); + } + } + + if(settings.watch) + { + codeMirror.width(editor.width() / 2); + preview.width((!state.preview) ? editor.width() / 2 : editor.width()); + + this.previewContainer.css("padding", settings.autoHeight ? "20px 20px 50px 40px" : "20px"); + + if (settings.toolbar && !settings.readOnly) + { + preview.css("top", toolbar.height() + 1); + } + else + { + preview.css("top", 0); + } + + if (settings.autoHeight && !state.fullscreen && !state.preview) + { + preview.height(""); + } + else + { + var previewHeight = (settings.toolbar && !settings.readOnly) ? editor.height() - toolbar.height() : editor.height(); + + preview.height(previewHeight); + } + } + else + { + codeMirror.width(editor.width()); + preview.hide(); + } + + if (state.loaded) + { + $.proxy(settings.onresize, this)(); + } + + return this; + }, + + /** + * 解析和保存Markdown代码 + * Parse & Saving Markdown source code + * + * @returns {editormd} 返回editormd的实例对象 + */ + + save : function() { + + var _this = this; + var state = this.state; + var settings = this.settings; + + if (timer === null && !(!settings.watch && state.preview)) + { + return this; + } + + var cm = this.cm; + var cmValue = cm.getValue(); + var previewContainer = this.previewContainer; + + if (settings.mode !== "gfm" && settings.mode !== "markdown") + { + this.markdownTextarea.val(cmValue); + + return this; + } + + var marked = editormd.$marked; + var markdownToC = this.markdownToC = []; + var rendererOptions = this.markedRendererOptions = { + toc : settings.toc, + tocm : settings.tocm, + tocStartLevel : settings.tocStartLevel, + pageBreak : settings.pageBreak, + taskList : settings.taskList, + emoji : settings.emoji, + tex : settings.tex, + atLink : settings.atLink, // for @link + emailLink : settings.emailLink, // for mail address auto link + flowChart : settings.flowChart, + sequenceDiagram : settings.sequenceDiagram, + previewCodeHighlight : settings.previewCodeHighlight, + }; + + var markedOptions = this.markedOptions = { + renderer : editormd.markedRenderer(markdownToC, rendererOptions), + gfm : true, + tables : true, + breaks : true, + pedantic : false, + sanitize : (settings.htmlDecode) ? false : true, // 关闭忽略HTML标签,即开启识别HTML标签,默认为false + smartLists : true, + smartypants : true + }; + + marked.setOptions(markedOptions); + + var newMarkdownDoc = editormd.$marked(cmValue, markedOptions); + + //console.info("cmValue", cmValue, newMarkdownDoc); + + newMarkdownDoc = editormd.filterHTMLTags(newMarkdownDoc, settings.htmlDecode); + + //console.error("cmValue", cmValue, newMarkdownDoc); + + this.markdownTextarea.text(cmValue); + + cm.save(); + + if (settings.saveHTMLToTextarea) + { + this.htmlTextarea.text(newMarkdownDoc); + } + + if(settings.watch || (!settings.watch && state.preview)) + { + previewContainer.html(newMarkdownDoc); + + this.previewCodeHighlight(); + + if (settings.toc) + { + var tocContainer = (settings.tocContainer === "") ? previewContainer : $(settings.tocContainer); + var tocMenu = tocContainer.find("." + this.classPrefix + "toc-menu"); + + tocContainer.attr("previewContainer", (settings.tocContainer === "") ? "true" : "false"); + + if (settings.tocContainer !== "" && tocMenu.length > 0) + { + tocMenu.remove(); + } + + editormd.markdownToCRenderer(markdownToC, tocContainer, settings.tocDropdown, settings.tocStartLevel); + + if (settings.tocDropdown || tocContainer.find("." + this.classPrefix + "toc-menu").length > 0) + { + editormd.tocDropdownMenu(tocContainer, (settings.tocTitle !== "") ? settings.tocTitle : this.lang.tocTitle); + } + + if (settings.tocContainer !== "") + { + previewContainer.find(".markdown-toc").css("border", "none"); + } + } + + if (settings.tex) + { + if (!editormd.kaTeXLoaded && settings.autoLoadModules) + { + editormd.loadKaTeX(function() { + editormd.$katex = katex; + editormd.kaTeXLoaded = true; + _this.katexRender(); + }); + } + else + { + editormd.$katex = katex; + this.katexRender(); + } + } + + if (settings.flowChart || settings.sequenceDiagram) + { + flowchartTimer = setTimeout(function(){ + clearTimeout(flowchartTimer); + _this.flowChartAndSequenceDiagramRender(); + flowchartTimer = null; + }, 10); + } + + if (state.loaded) + { + $.proxy(settings.onchange, this)(); + } + } + + return this; + }, + + /** + * 聚焦光标位置 + * Focusing the cursor position + * + * @returns {editormd} 返回editormd的实例对象 + */ + + focus : function() { + this.cm.focus(); + + return this; + }, + + /** + * 设置光标的位置 + * Set cursor position + * + * @param {Object} cursor 要设置的光标位置键值对象,例:{line:1, ch:0} + * @returns {editormd} 返回editormd的实例对象 + */ + + setCursor : function(cursor) { + this.cm.setCursor(cursor); + + return this; + }, + + /** + * 获取当前光标的位置 + * Get the current position of the cursor + * + * @returns {Cursor} 返回一个光标Cursor对象 + */ + + getCursor : function() { + return this.cm.getCursor(); + }, + + /** + * 设置光标选中的范围 + * Set cursor selected ranges + * + * @param {Object} from 开始位置的光标键值对象,例:{line:1, ch:0} + * @param {Object} to 结束位置的光标键值对象,例:{line:1, ch:0} + * @returns {editormd} 返回editormd的实例对象 + */ + + setSelection : function(from, to) { + + this.cm.setSelection(from, to); + + return this; + }, + + /** + * 获取光标选中的文本 + * Get the texts from cursor selected + * + * @returns {String} 返回选中文本的字符串形式 + */ + + getSelection : function() { + return this.cm.getSelection(); + }, + + /** + * 设置光标选中的文本范围 + * Set the cursor selection ranges + * + * @param {Array} ranges cursor selection ranges array + * @returns {Array} return this + */ + + setSelections : function(ranges) { + this.cm.setSelections(ranges); + + return this; + }, + + /** + * 获取光标选中的文本范围 + * Get the cursor selection ranges + * + * @returns {Array} return selection ranges array + */ + + getSelections : function() { + return this.cm.getSelections(); + }, + + /** + * 替换当前光标选中的文本或在当前光标处插入新字符 + * Replace the text at the current cursor selected or insert a new character at the current cursor position + * + * @param {String} value 要插入的字符值 + * @returns {editormd} 返回editormd的实例对象 + */ + + replaceSelection : function(value) { + this.cm.replaceSelection(value); + + return this; + }, + + /** + * 在当前光标处插入新字符 + * Insert a new character at the current cursor position + * + * 同replaceSelection()方法 + * With the replaceSelection() method + * + * @param {String} value 要插入的字符值 + * @returns {editormd} 返回editormd的实例对象 + */ + + insertValue : function(value) { + this.replaceSelection(value); + + return this; + }, + + /** + * 追加markdown + * append Markdown to editor + * + * @param {String} md 要追加的markdown源文档 + * @returns {editormd} 返回editormd的实例对象 + */ + + appendMarkdown : function(md) { + var settings = this.settings; + var cm = this.cm; + + cm.setValue(cm.getValue() + md); + + return this; + }, + + /** + * 设置和传入编辑器的markdown源文档 + * Set Markdown source document + * + * @param {String} md 要传入的markdown源文档 + * @returns {editormd} 返回editormd的实例对象 + */ + + setMarkdown : function(md) { + this.cm.setValue(md || this.settings.markdown); + + return this; + }, + + /** + * 获取编辑器的markdown源文档 + * Set Editor.md markdown/CodeMirror value + * + * @returns {editormd} 返回editormd的实例对象 + */ + + getMarkdown : function() { + return this.cm.getValue(); + }, + + /** + * 获取编辑器的源文档 + * Get CodeMirror value + * + * @returns {editormd} 返回editormd的实例对象 + */ + + getValue : function() { + return this.cm.getValue(); + }, + + /** + * 设置编辑器的源文档 + * Set CodeMirror value + * + * @param {String} value set code/value/string/text + * @returns {editormd} 返回editormd的实例对象 + */ + + setValue : function(value) { + this.cm.setValue(value); + + return this; + }, + + /** + * 清空编辑器 + * Empty CodeMirror editor container + * + * @returns {editormd} 返回editormd的实例对象 + */ + + clear : function() { + this.cm.setValue(""); + + return this; + }, + + /** + * 获取解析后存放在Textarea的HTML源码 + * Get parsed html code from Textarea + * + * @returns {String} 返回HTML源码 + */ + + getHTML : function() { + if (!this.settings.saveHTMLToTextarea) + { + alert("Error: settings.saveHTMLToTextarea == false"); + + return false; + } + + return this.htmlTextarea.val(); + }, + + /** + * getHTML()的别名 + * getHTML (alias) + * + * @returns {String} Return html code 返回HTML源码 + */ + + getTextareaSavedHTML : function() { + return this.getHTML(); + }, + + /** + * 获取预览窗口的HTML源码 + * Get html from preview container + * + * @returns {editormd} 返回editormd的实例对象 + */ + + getPreviewedHTML : function() { + if (!this.settings.watch) + { + alert("Error: settings.watch == false"); + + return false; + } + + return this.previewContainer.html(); + }, + + /** + * 开启实时预览 + * Enable real-time watching + * + * @returns {editormd} 返回editormd的实例对象 + */ + + watch : function(callback) { + var settings = this.settings; + + if ($.inArray(settings.mode, ["gfm", "markdown"]) < 0) + { + return this; + } + + this.state.watching = settings.watch = true; + this.preview.show(); + + if (this.toolbar) + { + var watchIcon = settings.toolbarIconsClass.watch; + var unWatchIcon = settings.toolbarIconsClass.unwatch; + + var icon = this.toolbar.find(".fa[name=watch]"); + icon.parent().attr("title", settings.lang.toolbar.watch); + icon.removeClass(unWatchIcon).addClass(watchIcon); + } + + this.codeMirror.css("border-right", "1px solid #ddd").width(this.editor.width() / 2); + + timer = 0; + + this.save().resize(); + + if (!settings.onwatch) + { + settings.onwatch = callback || function() {}; + } + + $.proxy(settings.onwatch, this)(); + + return this; + }, + + /** + * 关闭实时预览 + * Disable real-time watching + * + * @returns {editormd} 返回editormd的实例对象 + */ + + unwatch : function(callback) { + var settings = this.settings; + this.state.watching = settings.watch = false; + this.preview.hide(); + + if (this.toolbar) + { + var watchIcon = settings.toolbarIconsClass.watch; + var unWatchIcon = settings.toolbarIconsClass.unwatch; + + var icon = this.toolbar.find(".fa[name=watch]"); + icon.parent().attr("title", settings.lang.toolbar.unwatch); + icon.removeClass(watchIcon).addClass(unWatchIcon); + } + + this.codeMirror.css("border-right", "none").width(this.editor.width()); + + this.resize(); + + if (!settings.onunwatch) + { + settings.onunwatch = callback || function() {}; + } + + $.proxy(settings.onunwatch, this)(); + + return this; + }, + + /** + * 显示编辑器 + * Show editor + * + * @param {Function} [callback=function()] 回调函数 + * @returns {editormd} 返回editormd的实例对象 + */ + + show : function(callback) { + callback = callback || function() {}; + + var _this = this; + this.editor.show(0, function() { + $.proxy(callback, _this)(); + }); + + return this; + }, + + /** + * 隐藏编辑器 + * Hide editor + * + * @param {Function} [callback=function()] 回调函数 + * @returns {editormd} 返回editormd的实例对象 + */ + + hide : function(callback) { + callback = callback || function() {}; + + var _this = this; + this.editor.hide(0, function() { + $.proxy(callback, _this)(); + }); + + return this; + }, + + /** + * 隐藏编辑器部分,只预览HTML + * Enter preview html state + * + * @returns {editormd} 返回editormd的实例对象 + */ + + previewing : function() { + + var _this = this; + var editor = this.editor; + var preview = this.preview; + var toolbar = this.toolbar; + var settings = this.settings; + var codeMirror = this.codeMirror; + var previewContainer = this.previewContainer; + + if ($.inArray(settings.mode, ["gfm", "markdown"]) < 0) { + return this; + } + + if (settings.toolbar && toolbar) { + toolbar.toggle(); + toolbar.find(".fa[name=preview]").toggleClass("active"); + } + + codeMirror.toggle(); + + var escHandle = function(event) { + if (event.shiftKey && event.keyCode === 27) { + _this.previewed(); + } + }; + + if (codeMirror.css("display") === "none") // 为了兼容Zepto,而不使用codeMirror.is(":hidden") + { + this.state.preview = true; + + if (this.state.fullscreen) { + preview.css("background", "#fff"); + } + + editor.find("." + this.classPrefix + "preview-close-btn").show().bind(editormd.mouseOrTouch("click", "touchend"), function(){ + _this.previewed(); + }); + + if (!settings.watch) + { + this.save(); + } + else + { + previewContainer.css("padding", ""); + } + + previewContainer.addClass(this.classPrefix + "preview-active"); + + preview.show().css({ + position : "", + top : 0, + width : editor.width(), + height : (settings.autoHeight && !this.state.fullscreen) ? "auto" : editor.height() + }); + + if (this.state.loaded) + { + $.proxy(settings.onpreviewing, this)(); + } + + $(window).bind("keyup", escHandle); + } + else + { + $(window).unbind("keyup", escHandle); + this.previewed(); + } + }, + + /** + * 显示编辑器部分,退出只预览HTML + * Exit preview html state + * + * @returns {editormd} 返回editormd的实例对象 + */ + + previewed : function() { + + var editor = this.editor; + var preview = this.preview; + var toolbar = this.toolbar; + var settings = this.settings; + var previewContainer = this.previewContainer; + var previewCloseBtn = editor.find("." + this.classPrefix + "preview-close-btn"); + + this.state.preview = false; + + this.codeMirror.show(); + + if (settings.toolbar) { + toolbar.show(); + } + + preview[(settings.watch) ? "show" : "hide"](); + + previewCloseBtn.hide().unbind(editormd.mouseOrTouch("click", "touchend")); + + previewContainer.removeClass(this.classPrefix + "preview-active"); + + if (settings.watch) + { + previewContainer.css("padding", "20px"); + } + + preview.css({ + background : null, + position : "absolute", + width : editor.width() / 2, + height : (settings.autoHeight && !this.state.fullscreen) ? "auto" : editor.height() - toolbar.height(), + top : (settings.toolbar) ? toolbar.height() : 0 + }); + + if (this.state.loaded) + { + $.proxy(settings.onpreviewed, this)(); + } + + return this; + }, + + /** + * 编辑器全屏显示 + * Fullscreen show + * + * @returns {editormd} 返回editormd的实例对象 + */ + + fullscreen : function() { + + var _this = this; + var state = this.state; + var editor = this.editor; + var preview = this.preview; + var toolbar = this.toolbar; + var settings = this.settings; + var fullscreenClass = this.classPrefix + "fullscreen"; + + if (toolbar) { + toolbar.find(".fa[name=fullscreen]").parent().toggleClass("active"); + } + + var escHandle = function(event) { + if (!event.shiftKey && event.keyCode === 27) + { + if (state.fullscreen) + { + _this.fullscreenExit(); + } + } + }; + + if (!editor.hasClass(fullscreenClass)) + { + state.fullscreen = true; + + $("html,body").css("overflow", "hidden"); + + editor.css({ + width : $(window).width(), + height : $(window).height() + }).addClass(fullscreenClass); + + this.resize(); + + $.proxy(settings.onfullscreen, this)(); + + $(window).bind("keyup", escHandle); + } + else + { + $(window).unbind("keyup", escHandle); + this.fullscreenExit(); + } + + return this; + }, + + /** + * 编辑器退出全屏显示 + * Exit fullscreen state + * + * @returns {editormd} 返回editormd的实例对象 + */ + + fullscreenExit : function() { + + var editor = this.editor; + var settings = this.settings; + var toolbar = this.toolbar; + var fullscreenClass = this.classPrefix + "fullscreen"; + + this.state.fullscreen = false; + + if (toolbar) { + toolbar.find(".fa[name=fullscreen]").parent().removeClass("active"); + } + + $("html,body").css("overflow", ""); + + editor.css({ + width : editor.data("oldWidth"), + height : editor.data("oldHeight") + }).removeClass(fullscreenClass); + + this.resize(); + + $.proxy(settings.onfullscreenExit, this)(); + + return this; + }, + + /** + * 加载并执行插件 + * Load and execute the plugin + * + * @param {String} name plugin name / function name + * @param {String} path plugin load path + * @returns {editormd} 返回editormd的实例对象 + */ + + executePlugin : function(name, path) { + + var _this = this; + var cm = this.cm; + var settings = this.settings; + + path = settings.pluginPath + path; + + if (typeof define === "function") + { + if (typeof this[name] === "undefined") + { + alert("Error: " + name + " plugin is not found, you are not load this plugin."); + + return this; + } + + this[name](cm); + + return this; + } + + if ($.inArray(path, editormd.loadFiles.plugin) < 0) + { + editormd.loadPlugin(path, function() { + editormd.loadPlugins[name] = _this[name]; + _this[name](cm); + }); + } + else + { + $.proxy(editormd.loadPlugins[name], this)(cm); + } + + return this; + }, + + /** + * 搜索替换 + * Search & replace + * + * @param {String} command CodeMirror serach commands, "find, fintNext, fintPrev, clearSearch, replace, replaceAll" + * @returns {editormd} return this + */ + + search : function(command) { + var settings = this.settings; + + if (!settings.searchReplace) + { + alert("Error: settings.searchReplace == false"); + return this; + } + + if (!settings.readOnly) + { + this.cm.execCommand(command || "find"); + } + + return this; + }, + + searchReplace : function() { + this.search("replace"); + + return this; + }, + + searchReplaceAll : function() { + this.search("replaceAll"); + + return this; + } + }; + + editormd.fn.init.prototype = editormd.fn; + + /** + * 锁屏 + * lock screen when dialog opening + * + * @returns {void} + */ + + editormd.dialogLockScreen = function() { + var settings = this.settings || {dialogLockScreen : true}; + + if (settings.dialogLockScreen) + { + $("html,body").css("overflow", "hidden"); + this.resize(); + } + }; + + /** + * 显示透明背景层 + * Display mask layer when dialog opening + * + * @param {Object} dialog dialog jQuery object + * @returns {void} + */ + + editormd.dialogShowMask = function(dialog) { + var editor = this.editor; + var settings = this.settings || {dialogShowMask : true}; + + dialog.css({ + top : ($(window).height() - dialog.height()) / 2 + "px", + left : ($(window).width() - dialog.width()) / 2 + "px" + }); + + if (settings.dialogShowMask) { + editor.children("." + this.classPrefix + "mask").css("z-index", parseInt(dialog.css("z-index")) - 1).show(); + } + }; + + editormd.toolbarHandlers = { + undo : function() { + this.cm.undo(); + }, + + redo : function() { + this.cm.redo(); + }, + + bold : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + cm.replaceSelection("**" + selection + "**"); + + if(selection === "") { + cm.setCursor(cursor.line, cursor.ch + 2); + } + }, + + del : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + cm.replaceSelection("~~" + selection + "~~"); + + if(selection === "") { + cm.setCursor(cursor.line, cursor.ch + 2); + } + }, + + italic : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + cm.replaceSelection("*" + selection + "*"); + + if(selection === "") { + cm.setCursor(cursor.line, cursor.ch + 1); + } + }, + + quote : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (cursor.ch !== 0) + { + cm.setCursor(cursor.line, 0); + cm.replaceSelection("> " + selection); + cm.setCursor(cursor.line, cursor.ch + 2); + } + else + { + cm.replaceSelection("> " + selection); + } + + //cm.replaceSelection("> " + selection); + //cm.setCursor(cursor.line, (selection === "") ? cursor.ch + 2 : cursor.ch + selection.length + 2); + }, + + ucfirst : function() { + var cm = this.cm; + var selection = cm.getSelection(); + var selections = cm.listSelections(); + + cm.replaceSelection(editormd.firstUpperCase(selection)); + cm.setSelections(selections); + }, + + ucwords : function() { + var cm = this.cm; + var selection = cm.getSelection(); + var selections = cm.listSelections(); + + cm.replaceSelection(editormd.wordsFirstUpperCase(selection)); + cm.setSelections(selections); + }, + + uppercase : function() { + var cm = this.cm; + var selection = cm.getSelection(); + var selections = cm.listSelections(); + + cm.replaceSelection(selection.toUpperCase()); + cm.setSelections(selections); + }, + + lowercase : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + var selections = cm.listSelections(); + + cm.replaceSelection(selection.toLowerCase()); + cm.setSelections(selections); + }, + + h1 : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (cursor.ch !== 0) + { + cm.setCursor(cursor.line, 0); + cm.replaceSelection("# " + selection); + cm.setCursor(cursor.line, cursor.ch + 2); + } + else + { + cm.replaceSelection("# " + selection); + } + }, + + h2 : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (cursor.ch !== 0) + { + cm.setCursor(cursor.line, 0); + cm.replaceSelection("## " + selection); + cm.setCursor(cursor.line, cursor.ch + 3); + } + else + { + cm.replaceSelection("## " + selection); + } + }, + + h3 : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (cursor.ch !== 0) + { + cm.setCursor(cursor.line, 0); + cm.replaceSelection("### " + selection); + cm.setCursor(cursor.line, cursor.ch + 4); + } + else + { + cm.replaceSelection("### " + selection); + } + }, + + h4 : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (cursor.ch !== 0) + { + cm.setCursor(cursor.line, 0); + cm.replaceSelection("#### " + selection); + cm.setCursor(cursor.line, cursor.ch + 5); + } + else + { + cm.replaceSelection("#### " + selection); + } + }, + + h5 : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (cursor.ch !== 0) + { + cm.setCursor(cursor.line, 0); + cm.replaceSelection("##### " + selection); + cm.setCursor(cursor.line, cursor.ch + 6); + } + else + { + cm.replaceSelection("##### " + selection); + } + }, + + h6 : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (cursor.ch !== 0) + { + cm.setCursor(cursor.line, 0); + cm.replaceSelection("###### " + selection); + cm.setCursor(cursor.line, cursor.ch + 7); + } + else + { + cm.replaceSelection("###### " + selection); + } + }, + + "list-ul" : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (selection === "") + { + cm.replaceSelection("- " + selection); + } + else + { + var selectionText = selection.split("\n"); + + for (var i = 0, len = selectionText.length; i < len; i++) + { + selectionText[i] = (selectionText[i] === "") ? "" : "- " + selectionText[i]; + } + + cm.replaceSelection(selectionText.join("\n")); + } + }, + + "list-ol" : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if(selection === "") + { + cm.replaceSelection("1. " + selection); + } + else + { + var selectionText = selection.split("\n"); + + for (var i = 0, len = selectionText.length; i < len; i++) + { + selectionText[i] = (selectionText[i] === "") ? "" : (i+1) + ". " + selectionText[i]; + } + + cm.replaceSelection(selectionText.join("\n")); + } + }, + + hr : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + cm.replaceSelection(((cursor.ch !== 0) ? "\n\n" : "\n") + "------------\n\n"); + }, + + tex : function() { + if (!this.settings.tex) + { + alert("settings.tex === false"); + return this; + } + + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + cm.replaceSelection("$$" + selection + "$$"); + + if(selection === "") { + cm.setCursor(cursor.line, cursor.ch + 2); + } + }, + + link : function() { + this.executePlugin("linkDialog", "link-dialog/link-dialog"); + }, + + "reference-link" : function() { + this.executePlugin("referenceLinkDialog", "reference-link-dialog/reference-link-dialog"); + }, + + pagebreak : function() { + if (!this.settings.pageBreak) + { + alert("settings.pageBreak === false"); + return this; + } + + var cm = this.cm; + var selection = cm.getSelection(); + + cm.replaceSelection("\r\n[========]\r\n"); + }, + + image : function() { + this.executePlugin("imageDialog", "image-dialog/image-dialog"); + }, + + code : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + cm.replaceSelection("`" + selection + "`"); + + if (selection === "") { + cm.setCursor(cursor.line, cursor.ch + 1); + } + }, + + "code-block" : function() { + this.executePlugin("codeBlockDialog", "code-block-dialog/code-block-dialog"); + }, + + "preformatted-text" : function() { + this.executePlugin("preformattedTextDialog", "preformatted-text-dialog/preformatted-text-dialog"); + }, + + table : function() { + this.executePlugin("tableDialog", "table-dialog/table-dialog"); + }, + + datetime : function() { + var cm = this.cm; + var selection = cm.getSelection(); + var date = new Date(); + var langName = this.settings.lang.name; + var datefmt = editormd.dateFormat() + " " + editormd.dateFormat((langName === "zh-cn" || langName === "zh-tw") ? "cn-week-day" : "week-day"); + + cm.replaceSelection(datefmt); + }, + + emoji : function() { + this.executePlugin("emojiDialog", "emoji-dialog/emoji-dialog"); + }, + + "html-entities" : function() { + this.executePlugin("htmlEntitiesDialog", "html-entities-dialog/html-entities-dialog"); + }, + + "goto-line" : function() { + this.executePlugin("gotoLineDialog", "goto-line-dialog/goto-line-dialog"); + }, + + watch : function() { + this[this.settings.watch ? "unwatch" : "watch"](); + }, + + preview : function() { + this.previewing(); + }, + + fullscreen : function() { + this.fullscreen(); + }, + + clear : function() { + this.clear(); + }, + + search : function() { + this.search(); + }, + + help : function() { + this.executePlugin("helpDialog", "help-dialog/help-dialog"); + }, + + info : function() { + this.showInfoDialog(); + } + }; + + editormd.keyMaps = { + "Ctrl-1" : "h1", + "Ctrl-2" : "h2", + "Ctrl-3" : "h3", + "Ctrl-4" : "h4", + "Ctrl-5" : "h5", + "Ctrl-6" : "h6", + "Ctrl-B" : "bold", // if this is string == editormd.toolbarHandlers.xxxx + "Ctrl-D" : "datetime", + + "Ctrl-E" : function() { // emoji + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (!this.settings.emoji) + { + alert("Error: settings.emoji == false"); + return ; + } + + cm.replaceSelection(":" + selection + ":"); + + if (selection === "") { + cm.setCursor(cursor.line, cursor.ch + 1); + } + }, + "Ctrl-Alt-G" : "goto-line", + "Ctrl-H" : "hr", + "Ctrl-I" : "italic", + "Ctrl-K" : "code", + + "Ctrl-L" : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + var title = (selection === "") ? "" : " \""+selection+"\""; + + cm.replaceSelection("[" + selection + "]("+title+")"); + + if (selection === "") { + cm.setCursor(cursor.line, cursor.ch + 1); + } + }, + "Ctrl-U" : "list-ul", + + "Shift-Ctrl-A" : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + if (!this.settings.atLink) + { + alert("Error: settings.atLink == false"); + return ; + } + + cm.replaceSelection("@" + selection); + + if (selection === "") { + cm.setCursor(cursor.line, cursor.ch + 1); + } + }, + + "Shift-Ctrl-C" : "code", + "Shift-Ctrl-Q" : "quote", + "Shift-Ctrl-S" : "del", + "Shift-Ctrl-K" : "tex", // KaTeX + + "Shift-Alt-C" : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + cm.replaceSelection(["```", selection, "```"].join("\n")); + + if (selection === "") { + cm.setCursor(cursor.line, cursor.ch + 3); + } + }, + + "Shift-Ctrl-Alt-C" : "code-block", + "Shift-Ctrl-H" : "html-entities", + "Shift-Alt-H" : "help", + "Shift-Ctrl-E" : "emoji", + "Shift-Ctrl-U" : "uppercase", + "Shift-Alt-U" : "ucwords", + "Shift-Ctrl-Alt-U" : "ucfirst", + "Shift-Alt-L" : "lowercase", + + "Shift-Ctrl-I" : function() { + var cm = this.cm; + var cursor = cm.getCursor(); + var selection = cm.getSelection(); + + var title = (selection === "") ? "" : " \""+selection+"\""; + + cm.replaceSelection("![" + selection + "]("+title+")"); + + if (selection === "") { + cm.setCursor(cursor.line, cursor.ch + 4); + } + }, + + "Shift-Ctrl-Alt-I" : "image", + "Shift-Ctrl-L" : "link", + "Shift-Ctrl-O" : "list-ol", + "Shift-Ctrl-P" : "preformatted-text", + "Shift-Ctrl-T" : "table", + "Shift-Alt-P" : "pagebreak", + "F9" : "watch", + "F10" : "preview", + "F11" : "fullscreen", + }; + + /** + * 清除字符串两边的空格 + * Clear the space of strings both sides. + * + * @param {String} str string + * @returns {String} trimed string + */ + + var trim = function(str) { + return (!String.prototype.trim) ? str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "") : str.trim(); + }; + + editormd.trim = trim; + + /** + * 所有单词首字母大写 + * Words first to uppercase + * + * @param {String} str string + * @returns {String} string + */ + + var ucwords = function (str) { + return str.toLowerCase().replace(/\b(\w)|\s(\w)/g, function($1) { + return $1.toUpperCase(); + }); + }; + + editormd.ucwords = editormd.wordsFirstUpperCase = ucwords; + + /** + * 字符串首字母大写 + * Only string first char to uppercase + * + * @param {String} str string + * @returns {String} string + */ + + var firstUpperCase = function(str) { + return str.toLowerCase().replace(/\b(\w)/, function($1){ + return $1.toUpperCase(); + }); + }; + + var ucfirst = firstUpperCase; + + editormd.firstUpperCase = editormd.ucfirst = firstUpperCase; + + editormd.urls = { + atLinkBase : "https://github.com/" + }; + + editormd.regexs = { + atLink : /@(\w+)/g, + email : /(\w+)@(\w+)\.(\w+)\.?(\w+)?/g, + emailLink : /(mailto:)?([\w\.\_]+)@(\w+)\.(\w+)\.?(\w+)?/g, + emoji : /:([\w\+-]+):/g, + emojiDatetime : /(\d{2}:\d{2}:\d{2})/g, + twemoji : /:(tw-([\w]+)-?(\w+)?):/g, + fontAwesome : /:(fa-([\w]+)(-(\w+)){0,}):/g, + editormdLogo : /:(editormd-logo-?(\w+)?):/g, + pageBreak : /^\[[=]{8,}\]$/ + }; + + // Emoji graphics files url path + editormd.emoji = { + path : "http://www.emoji-cheat-sheet.com/graphics/emojis/", + ext : ".png" + }; + + // Twitter Emoji (Twemoji) graphics files url path + editormd.twemoji = { + path : "http://twemoji.maxcdn.com/36x36/", + ext : ".png" + }; + + /** + * 自定义marked的解析器 + * Custom Marked renderer rules + * + * @param {Array} markdownToC 传入用于接收TOC的数组 + * @returns {Renderer} markedRenderer 返回marked的Renderer自定义对象 + */ + + editormd.markedRenderer = function(markdownToC, options) { + var defaults = { + toc : true, // Table of contents + tocm : false, + tocStartLevel : 1, // Said from H1 to create ToC + pageBreak : true, + atLink : true, // for @link + emailLink : true, // for mail address auto link + taskList : false, // Enable Github Flavored Markdown task lists + emoji : false, // :emoji: , Support Twemoji, fontAwesome, Editor.md logo emojis. + tex : false, // TeX(LaTeX), based on KaTeX + flowChart : false, // flowChart.js only support IE9+ + sequenceDiagram : false, // sequenceDiagram.js only support IE9+ + }; + + var settings = $.extend(defaults, options || {}); + var marked = editormd.$marked; + var markedRenderer = new marked.Renderer(); + markdownToC = markdownToC || []; + + var regexs = editormd.regexs; + var atLinkReg = regexs.atLink; + var emojiReg = regexs.emoji; + var emailReg = regexs.email; + var emailLinkReg = regexs.emailLink; + var twemojiReg = regexs.twemoji; + var faIconReg = regexs.fontAwesome; + var editormdLogoReg = regexs.editormdLogo; + var pageBreakReg = regexs.pageBreak; + + markedRenderer.emoji = function(text) { + + text = text.replace(editormd.regexs.emojiDatetime, function($1) { + return $1.replace(/:/g, ":"); + }); + + var matchs = text.match(emojiReg); + + if (!matchs || !settings.emoji) { + return text; + } + + for (var i = 0, len = matchs.length; i < len; i++) + { + if (matchs[i] === ":+1:") { + matchs[i] = ":\\+1:"; + } + + text = text.replace(new RegExp(matchs[i]), function($1, $2){ + var faMatchs = $1.match(faIconReg); + var name = $1.replace(/:/g, ""); + + if (faMatchs) + { + for (var fa = 0, len1 = faMatchs.length; fa < len1; fa++) + { + var faName = faMatchs[fa].replace(/:/g, ""); + + return ""; + } + } + else + { + var emdlogoMathcs = $1.match(editormdLogoReg); + var twemojiMatchs = $1.match(twemojiReg); + + if (emdlogoMathcs) + { + for (var x = 0, len2 = emdlogoMathcs.length; x < len2; x++) + { + var logoName = emdlogoMathcs[x].replace(/:/g, ""); + return ""; + } + } + else if (twemojiMatchs) + { + for (var t = 0, len3 = twemojiMatchs.length; t < len3; t++) + { + var twe = twemojiMatchs[t].replace(/:/g, "").replace("tw-", ""); + return "\"twemoji-""; + } + } + else + { + var src = (name === "+1") ? "plus1" : name; + src = (src === "black_large_square") ? "black_square" : src; + src = (src === "moon") ? "waxing_gibbous_moon" : src; + + return "\":""; + } + } + }); + } + + return text; + }; + + markedRenderer.atLink = function(text) { + + if (atLinkReg.test(text)) + { + if (settings.atLink) + { + text = text.replace(emailReg, function($1, $2, $3, $4) { + return $1.replace(/@/g, "_#_@_#_"); + }); + + text = text.replace(atLinkReg, function($1, $2) { + return "" + $1 + ""; + }).replace(/_#_@_#_/g, "@"); + } + + if (settings.emailLink) + { + text = text.replace(emailLinkReg, function($1, $2, $3, $4, $5) { + return (!$2 && $.inArray($5, "jpg|jpeg|png|gif|webp|ico|icon|pdf".split("|")) < 0) ? ""+$1+"" : $1; + }); + } + + return text; + } + + return text; + }; + + markedRenderer.link = function (href, title, text) { + + if (this.options.sanitize) { + try { + var prot = decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase(); + } catch(e) { + return ""; + } + + if (prot.indexOf("javascript:") === 0) { + return ""; + } + } + + var out = "" + text.replace(/@/g, "@") + ""; + } + + if (title) { + out += " title=\"" + title + "\""; + } + + out += ">" + text + ""; + + return out; + }; + + markedRenderer.heading = function(text, level, raw) { + + var linkText = text; + var hasLinkReg = /\s*\]*)\>(.*)\<\/a\>\s*/; + var getLinkTextReg = /\s*\]+)\>([^\>]*)\<\/a\>\s*/g; + + if (hasLinkReg.test(text)) + { + var tempText = []; + text = text.split(/\]+)\>([^\>]*)\<\/a\>/); + + for (var i = 0, len = text.length; i < len; i++) + { + tempText.push(text[i].replace(/\s*href\=\"(.*)\"\s*/g, "")); + } + + text = tempText.join(" "); + } + + text = trim(text); + + var escapedText = text.toLowerCase().replace(/[^\w]+/g, "-"); + var toc = { + text : text, + level : level, + slug : escapedText + }; + + var isChinese = /^[\u4e00-\u9fa5]+$/.test(text); + var id = (isChinese) ? escape(text).replace(/\%/g, "") : text.toLowerCase().replace(/[^\w]+/g, "-"); + + markdownToC.push(toc); + + var headingHTML = ""; + + headingHTML += ""; + headingHTML += ""; + headingHTML += (hasLinkReg) ? this.atLink(this.emoji(linkText)) : this.atLink(this.emoji(text)); + headingHTML += ""; + + return headingHTML; + }; + + markedRenderer.pageBreak = function(text) { + if (pageBreakReg.test(text) && settings.pageBreak) + { + text = "
              "; + } + + return text; + }; + + markedRenderer.paragraph = function(text) { + var isTeXInline = /\$\$(.*)\$\$/g.test(text); + var isTeXLine = /^\$\$(.*)\$\$$/.test(text); + var isTeXAddClass = (isTeXLine) ? " class=\"" + editormd.classNames.tex + "\"" : ""; + var isToC = (settings.tocm) ? /^(\[TOC\]|\[TOCM\])$/.test(text) : /^\[TOC\]$/.test(text); + var isToCMenu = /^\[TOCM\]$/.test(text); + + if (!isTeXLine && isTeXInline) + { + text = text.replace(/(\$\$([^\$]*)\$\$)+/g, function($1, $2) { + return "" + $2.replace(/\$/g, "") + ""; + }); + } + else + { + text = (isTeXLine) ? text.replace(/\$/g, "") : text; + } + + var tocHTML = "
              " + text + "
              "; + + return (isToC) ? ( (isToCMenu) ? "
              " + tocHTML + "

              " : tocHTML ) + : ( (pageBreakReg.test(text)) ? this.pageBreak(text) : "" + this.atLink(this.emoji(text)) + "

              \n" ); + }; + + markedRenderer.code = function (code, lang, escaped) { + + if (lang === "seq" || lang === "sequence") + { + return "
              " + code + "
              "; + } + else if ( lang === "flow") + { + return "
              " + code + "
              "; + } + else if ( lang === "math" || lang === "latex" || lang === "katex") + { + return "

              " + code + "

              "; + } + else + { + + return marked.Renderer.prototype.code.apply(this, arguments); + } + }; + + markedRenderer.tablecell = function(content, flags) { + var type = (flags.header) ? "th" : "td"; + var tag = (flags.align) ? "<" + type +" style=\"text-align:" + flags.align + "\">" : "<" + type + ">"; + + return tag + this.atLink(this.emoji(content)) + "\n"; + }; + + markedRenderer.listitem = function(text) { + if (settings.taskList && /^\s*\[[x\s]\]\s*/.test(text)) + { + text = text.replace(/^\s*\[\s\]\s*/, " ") + .replace(/^\s*\[x\]\s*/, " "); + + return "
            • " + this.atLink(this.emoji(text)) + "
            • "; + } + else + { + return "
            • " + this.atLink(this.emoji(text)) + "
            • "; + } + }; + + return markedRenderer; + }; + + /** + * + * 生成TOC(Table of Contents) + * Creating ToC (Table of Contents) + * + * @param {Array} toc 从marked获取的TOC数组列表 + * @param {Element} container 插入TOC的容器元素 + * @param {Integer} startLevel Hx 起始层级 + * @returns {Object} tocContainer 返回ToC列表容器层的jQuery对象元素 + */ + + editormd.markdownToCRenderer = function(toc, container, tocDropdown, startLevel) { + + var html = ""; + var lastLevel = 0; + var classPrefix = this.classPrefix; + + startLevel = startLevel || 1; + + for (var i = 0, len = toc.length; i < len; i++) + { + var text = toc[i].text; + var level = toc[i].level; + + if (level < startLevel) { + continue; + } + + if (level > lastLevel) + { + html += ""; + } + else if (level < lastLevel) + { + html += (new Array(lastLevel - level + 2)).join("
          • "); + } + else + { + html += ""; + } + + html += "
          • " + text + "
              "; + lastLevel = level; + } + + var tocContainer = container.find(".markdown-toc"); + + if ((tocContainer.length < 1 && container.attr("previewContainer") === "false")) + { + var tocHTML = "
              "; + + tocHTML = (tocDropdown) ? "
              " + tocHTML + "
              " : tocHTML; + + container.html(tocHTML); + + tocContainer = container.find(".markdown-toc"); + } + + if (tocDropdown) + { + tocContainer.wrap("

              "); + } + + tocContainer.html("
                ").children(".markdown-toc-list").html(html.replace(/\r?\n?\\<\/ul\>/g, "")); + + return tocContainer; + }; + + /** + * + * 生成TOC下拉菜单 + * Creating ToC dropdown menu + * + * @param {Object} container 插入TOC的容器jQuery对象元素 + * @param {String} tocTitle ToC title + * @returns {Object} return toc-menu object + */ + + editormd.tocDropdownMenu = function(container, tocTitle) { + + tocTitle = tocTitle || "Table of Contents"; + + var zindex = 400; + var tocMenus = container.find("." + this.classPrefix + "toc-menu"); + + tocMenus.each(function() { + var $this = $(this); + var toc = $this.children(".markdown-toc"); + var icon = ""; + var btn = "" + icon + tocTitle + ""; + var menu = toc.children("ul"); + var list = menu.find("li"); + + toc.append(btn); + + list.first().before("
              • " + tocTitle + " " + icon + "

              • "); + + $this.mouseover(function(){ + menu.show(); + + list.each(function(){ + var li = $(this); + var ul = li.children("ul"); + + if (ul.html() === "") + { + ul.remove(); + } + + if (ul.length > 0 && ul.html() !== "") + { + var firstA = li.children("a").first(); + + if (firstA.children(".fa").length < 1) + { + firstA.append( $(icon).css({ float:"right", paddingTop:"4px" }) ); + } + } + + li.mouseover(function(){ + ul.css("z-index", zindex).show(); + zindex += 1; + }).mouseleave(function(){ + ul.hide(); + }); + }); + }).mouseleave(function(){ + menu.hide(); + }); + }); + + return tocMenus; + }; + + /** + * 简单地过滤指定的HTML标签 + * Filter custom html tags + * + * @param {String} html 要过滤HTML + * @param {String} filters 要过滤的标签 + * @returns {String} html 返回过滤的HTML + */ + + editormd.filterHTMLTags = function(html, filters) { + + if (typeof html !== "string") { + html = new String(html); + } + + if (typeof filters !== "string") { + return html; + } + + var expression = filters.split("|"); + var filterTags = expression[0].split(","); + var attrs = expression[1]; + + for (var i = 0, len = filterTags.length; i < len; i++) + { + var tag = filterTags[i]; + + html = html.replace(new RegExp("\<\s*" + tag + "\s*([^\>]*)\>([^\>]*)\<\s*\/" + tag + "\s*\>", "igm"), ""); + } + + //return html; + + if (typeof attrs !== "undefined") + { + var htmlTagRegex = /\<(\w+)\s*([^\>]*)\>([^\>]*)\<\/(\w+)\>/ig; + + if (attrs === "*") + { + html = html.replace(htmlTagRegex, function($1, $2, $3, $4, $5) { + return "<" + $2 + ">" + $4 + ""; + }); + } + else if (attrs === "on*") + { + html = html.replace(htmlTagRegex, function($1, $2, $3, $4, $5) { + var el = $("<" + $2 + ">" + $4 + ""); + var _attrs = $($1)[0].attributes; + var $attrs = {}; + + $.each(_attrs, function(i, e) { + if (e.nodeName !== '"') $attrs[e.nodeName] = e.nodeValue; + }); + + $.each($attrs, function(i) { + if (i.indexOf("on") === 0) { + delete $attrs[i]; + } + }); + + el.attr($attrs); + + var text = (typeof el[1] !== "undefined") ? $(el[1]).text() : ""; + + return el[0].outerHTML + text; + }); + } + else + { + html = html.replace(htmlTagRegex, function($1, $2, $3, $4) { + var filterAttrs = attrs.split(","); + var el = $($1); + el.html($4); + + $.each(filterAttrs, function(i) { + el.attr(filterAttrs[i], null); + }); + + return el[0].outerHTML; + }); + } + } + + return html; + }; + + /** + * 将Markdown文档解析为HTML用于前台显示 + * Parse Markdown to HTML for Font-end preview. + * + * @param {String} id 用于显示HTML的对象ID + * @param {Object} [options={}] 配置选项,可选 + * @returns {Object} div 返回jQuery对象元素 + */ + + editormd.markdownToHTML = function(id, options) { + var defaults = { + gfm : true, + toc : true, + tocm : false, + tocStartLevel : 1, + tocTitle : "目录", + tocDropdown : false, + tocContainer : "", + markdown : "", + markdownSourceCode : false, + htmlDecode : false, + autoLoadKaTeX : true, + pageBreak : true, + atLink : true, // for @link + emailLink : true, // for mail address auto link + tex : false, + taskList : false, // Github Flavored Markdown task lists + emoji : false, + flowChart : false, + sequenceDiagram : false, + previewCodeHighlight : true + }; + + editormd.$marked = marked; + + var div = $("#" + id); + var settings = div.settings = $.extend(true, defaults, options || {}); + var saveTo = div.find("textarea"); + + if (saveTo.length < 1) + { + div.append(""); + saveTo = div.find("textarea"); + } + + var markdownDoc = (settings.markdown === "") ? saveTo.val() : settings.markdown; + var markdownToC = []; + + var rendererOptions = { + toc : settings.toc, + tocm : settings.tocm, + tocStartLevel : settings.tocStartLevel, + taskList : settings.taskList, + emoji : settings.emoji, + tex : settings.tex, + pageBreak : settings.pageBreak, + atLink : settings.atLink, // for @link + emailLink : settings.emailLink, // for mail address auto link + flowChart : settings.flowChart, + sequenceDiagram : settings.sequenceDiagram, + previewCodeHighlight : settings.previewCodeHighlight, + }; + + var markedOptions = { + renderer : editormd.markedRenderer(markdownToC, rendererOptions), + gfm : settings.gfm, + tables : true, + breaks : true, + pedantic : false, + sanitize : (settings.htmlDecode) ? false : true, // 是否忽略HTML标签,即是否开启HTML标签解析,为了安全性,默认不开启 + smartLists : true, + smartypants : true + }; + + markdownDoc = new String(markdownDoc); + + var markdownParsed = marked(markdownDoc, markedOptions); + + markdownParsed = editormd.filterHTMLTags(markdownParsed, settings.htmlDecode); + + if (settings.markdownSourceCode) { + saveTo.text(markdownDoc); + } else { + saveTo.remove(); + } + + div.addClass("markdown-body " + this.classPrefix + "html-preview").append(markdownParsed); + + var tocContainer = (settings.tocContainer !== "") ? $(settings.tocContainer) : div; + + if (settings.tocContainer !== "") + { + tocContainer.attr("previewContainer", false); + } + + if (settings.toc) + { + div.tocContainer = this.markdownToCRenderer(markdownToC, tocContainer, settings.tocDropdown, settings.tocStartLevel); + + if (settings.tocDropdown || div.find("." + this.classPrefix + "toc-menu").length > 0) + { + this.tocDropdownMenu(div, settings.tocTitle); + } + + if (settings.tocContainer !== "") + { + div.find(".editormd-toc-menu, .editormd-markdown-toc").remove(); + } + } + + if (settings.previewCodeHighlight) + { + div.find("pre").addClass("prettyprint linenums"); + prettyPrint(); + } + + if (!editormd.isIE8) + { + if (settings.flowChart) { + div.find(".flowchart").flowChart(); + } + + if (settings.sequenceDiagram) { + div.find(".sequence-diagram").sequenceDiagram({theme: "simple"}); + } + } + + if (settings.tex) + { + var katexHandle = function() { + div.find("." + editormd.classNames.tex).each(function(){ + var tex = $(this); + katex.render(tex.html().replace(/</g, "<").replace(/>/g, ">"), tex[0]); + tex.find(".katex").css("font-size", "1.6em"); + }); + }; + + if (settings.autoLoadKaTeX && !editormd.$katex && !editormd.kaTeXLoaded) + { + this.loadKaTeX(function() { + editormd.$katex = katex; + editormd.kaTeXLoaded = true; + katexHandle(); + }); + } + else + { + katexHandle(); + } + } + + div.getMarkdown = function() { + return saveTo.val(); + }; + + return div; + }; + + // Editor.md themes, change toolbar themes etc. + // added @1.5.0 + editormd.themes = ["default", "dark"]; + + // Preview area themes + // added @1.5.0 + editormd.previewThemes = ["default", "dark"]; + + // CodeMirror / editor area themes + // @1.5.0 rename -> editorThemes, old version -> themes + editormd.editorThemes = [ + "default", "3024-day", "3024-night", + "ambiance", "ambiance-mobile", + "base16-dark", "base16-light", "blackboard", + "cobalt", + "eclipse", "elegant", "erlang-dark", + "lesser-dark", + "mbo", "mdn-like", "midnight", "monokai", + "neat", "neo", "night", + "paraiso-dark", "paraiso-light", "pastel-on-dark", + "rubyblue", + "solarized", + "the-matrix", "tomorrow-night-eighties", "twilight", + "vibrant-ink", + "xq-dark", "xq-light" + ]; + + editormd.loadPlugins = {}; + + editormd.loadFiles = { + js : [], + css : [], + plugin : [] + }; + + /** + * 动态加载Editor.md插件,但不立即执行 + * Load editor.md plugins + * + * @param {String} fileName 插件文件路径 + * @param {Function} [callback=function()] 加载成功后执行的回调函数 + * @param {String} [into="head"] 嵌入页面的位置 + */ + + editormd.loadPlugin = function(fileName, callback, into) { + callback = callback || function() {}; + + this.loadScript(fileName, function() { + editormd.loadFiles.plugin.push(fileName); + callback(); + }, into); + }; + + /** + * 动态加载CSS文件的方法 + * Load css file method + * + * @param {String} fileName CSS文件名 + * @param {Function} [callback=function()] 加载成功后执行的回调函数 + * @param {String} [into="head"] 嵌入页面的位置 + */ + + editormd.loadCSS = function(fileName, callback, into) { + into = into || "head"; + callback = callback || function() {}; + + var css = document.createElement("link"); + css.type = "text/css"; + css.rel = "stylesheet"; + css.onload = css.onreadystatechange = function() { + editormd.loadFiles.css.push(fileName); + callback(); + }; + + css.href = fileName + ".css"; + + if(into === "head") { + document.getElementsByTagName("head")[0].appendChild(css); + } else { + document.body.appendChild(css); + } + }; + + editormd.isIE = (navigator.appName == "Microsoft Internet Explorer"); + editormd.isIE8 = (editormd.isIE && navigator.appVersion.match(/8./i) == "8."); + + /** + * 动态加载JS文件的方法 + * Load javascript file method + * + * @param {String} fileName JS文件名 + * @param {Function} [callback=function()] 加载成功后执行的回调函数 + * @param {String} [into="head"] 嵌入页面的位置 + */ + + editormd.loadScript = function(fileName, callback, into) { + + into = into || "head"; + callback = callback || function() {}; + + var script = null; + script = document.createElement("script"); + script.id = fileName.replace(/[\./]+/g, "-"); + script.type = "text/javascript"; + script.src = fileName + ".js"; + + if (editormd.isIE8) + { + script.onreadystatechange = function() { + if(script.readyState) + { + if (script.readyState === "loaded" || script.readyState === "complete") + { + script.onreadystatechange = null; + editormd.loadFiles.js.push(fileName); + callback(); + } + } + }; + } + else + { + script.onload = function() { + editormd.loadFiles.js.push(fileName); + callback(); + }; + } + + if (into === "head") { + document.getElementsByTagName("head")[0].appendChild(script); + } else { + document.body.appendChild(script); + } + }; + + // 使用国外的CDN,加载速度有时会很慢,或者自定义URL + // You can custom KaTeX load url. + editormd.katexURL = { + css : "//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min", + js : "//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min" + }; + + editormd.kaTeXLoaded = false; + + /** + * 加载KaTeX文件 + * load KaTeX files + * + * @param {Function} [callback=function()] 加载成功后执行的回调函数 + */ + + editormd.loadKaTeX = function (callback) { + editormd.loadCSS(editormd.katexURL.css, function(){ + editormd.loadScript(editormd.katexURL.js, callback || function(){}); + }); + }; + + /** + * 锁屏 + * lock screen + * + * @param {Boolean} lock Boolean 布尔值,是否锁屏 + * @returns {void} + */ + + editormd.lockScreen = function(lock) { + $("html,body").css("overflow", (lock) ? "hidden" : ""); + }; + + /** + * 动态创建对话框 + * Creating custom dialogs + * + * @param {Object} options 配置项键值对 Key/Value + * @returns {dialog} 返回创建的dialog的jQuery实例对象 + */ + + editormd.createDialog = function(options) { + var defaults = { + name : "", + width : 420, + height: 240, + title : "", + drag : true, + closed : true, + content : "", + mask : true, + maskStyle : { + backgroundColor : "#fff", + opacity : 0.1 + }, + lockScreen : true, + footer : true, + buttons : false + }; + + options = $.extend(true, defaults, options); + + var $this = this; + var editor = this.editor; + var classPrefix = editormd.classPrefix; + var guid = (new Date()).getTime(); + var dialogName = ( (options.name === "") ? classPrefix + "dialog-" + guid : options.name); + var mouseOrTouch = editormd.mouseOrTouch; + + var html = "
                "; + + if (options.title !== "") + { + html += "
                "; + html += "" + options.title + ""; + html += "
                "; + } + + if (options.closed) + { + html += ""; + } + + html += "
                " + options.content; + + if (options.footer || typeof options.footer === "string") + { + html += "
                " + ( (typeof options.footer === "boolean") ? "" : options.footer) + "
                "; + } + + html += "
                "; + + html += "
                "; + html += "
                "; + html += "
                "; + + editor.append(html); + + var dialog = editor.find("." + dialogName); + + dialog.lockScreen = function(lock) { + if (options.lockScreen) + { + $("html,body").css("overflow", (lock) ? "hidden" : ""); + $this.resize(); + } + + return dialog; + }; + + dialog.showMask = function() { + if (options.mask) + { + editor.find("." + classPrefix + "mask").css(options.maskStyle).css("z-index", editormd.dialogZindex - 1).show(); + } + return dialog; + }; + + dialog.hideMask = function() { + if (options.mask) + { + editor.find("." + classPrefix + "mask").hide(); + } + + return dialog; + }; + + dialog.loading = function(show) { + var loading = dialog.find("." + classPrefix + "dialog-mask"); + loading[(show) ? "show" : "hide"](); + + return dialog; + }; + + dialog.lockScreen(true).showMask(); + + dialog.show().css({ + zIndex : editormd.dialogZindex, + border : (editormd.isIE8) ? "1px solid #ddd" : "", + width : (typeof options.width === "number") ? options.width + "px" : options.width, + height : (typeof options.height === "number") ? options.height + "px" : options.height + }); + + var dialogPosition = function(){ + dialog.css({ + top : ($(window).height() - dialog.height()) / 2 + "px", + left : ($(window).width() - dialog.width()) / 2 + "px" + }); + }; + + dialogPosition(); + + $(window).resize(dialogPosition); + + dialog.children("." + classPrefix + "dialog-close").bind(mouseOrTouch("click", "touchend"), function() { + dialog.hide().lockScreen(false).hideMask(); + }); + + if (typeof options.buttons === "object") + { + var footer = dialog.footer = dialog.find("." + classPrefix + "dialog-footer"); + + for (var key in options.buttons) + { + var btn = options.buttons[key]; + var btnClassName = classPrefix + key + "-btn"; + + footer.append(""); + btn[1] = $.proxy(btn[1], dialog); + footer.children("." + btnClassName).bind(mouseOrTouch("click", "touchend"), btn[1]); + } + } + + if (options.title !== "" && options.drag) + { + var posX, posY; + var dialogHeader = dialog.children("." + classPrefix + "dialog-header"); + + if (!options.mask) { + dialogHeader.bind(mouseOrTouch("click", "touchend"), function(){ + editormd.dialogZindex += 2; + dialog.css("z-index", editormd.dialogZindex); + }); + } + + dialogHeader.mousedown(function(e) { + e = e || window.event; //IE + posX = e.clientX - parseInt(dialog[0].style.left); + posY = e.clientY - parseInt(dialog[0].style.top); + + document.onmousemove = moveAction; + }); + + var userCanSelect = function (obj) { + obj.removeClass(classPrefix + "user-unselect").off("selectstart"); + }; + + var userUnselect = function (obj) { + obj.addClass(classPrefix + "user-unselect").on("selectstart", function(event) { // selectstart for IE + return false; + }); + }; + + var moveAction = function (e) { + e = e || window.event; //IE + + var left, top, nowLeft = parseInt(dialog[0].style.left), nowTop = parseInt(dialog[0].style.top); + + if( nowLeft >= 0 ) { + if( nowLeft + dialog.width() <= $(window).width()) { + left = e.clientX - posX; + } else { + left = $(window).width() - dialog.width(); + document.onmousemove = null; + } + } else { + left = 0; + document.onmousemove = null; + } + + if( nowTop >= 0 ) { + top = e.clientY - posY; + } else { + top = 0; + document.onmousemove = null; + } + + + document.onselectstart = function() { + return false; + }; + + userUnselect($("body")); + userUnselect(dialog); + dialog[0].style.left = left + "px"; + dialog[0].style.top = top + "px"; + }; + + document.onmouseup = function() { + userCanSelect($("body")); + userCanSelect(dialog); + + document.onselectstart = null; + document.onmousemove = null; + }; + + dialogHeader.touchDraggable = function() { + var offset = null; + var start = function(e) { + var orig = e.originalEvent; + var pos = $(this).parent().position(); + + offset = { + x : orig.changedTouches[0].pageX - pos.left, + y : orig.changedTouches[0].pageY - pos.top + }; + }; + + var move = function(e) { + e.preventDefault(); + var orig = e.originalEvent; + + $(this).parent().css({ + top : orig.changedTouches[0].pageY - offset.y, + left : orig.changedTouches[0].pageX - offset.x + }); + }; + + this.bind("touchstart", start).bind("touchmove", move); + }; + + dialogHeader.touchDraggable(); + } + + editormd.dialogZindex += 2; + + return dialog; + }; + + /** + * 鼠标和触摸事件的判断/选择方法 + * MouseEvent or TouchEvent type switch + * + * @param {String} [mouseEventType="click"] 供选择的鼠标事件 + * @param {String} [touchEventType="touchend"] 供选择的触摸事件 + * @returns {String} EventType 返回事件类型名称 + */ + + editormd.mouseOrTouch = function(mouseEventType, touchEventType) { + mouseEventType = mouseEventType || "click"; + touchEventType = touchEventType || "touchend"; + + var eventType = mouseEventType; + + try { + document.createEvent("TouchEvent"); + eventType = touchEventType; + } catch(e) {} + + return eventType; + }; + + /** + * 日期时间的格式化方法 + * Datetime format method + * + * @param {String} [format=""] 日期时间的格式,类似PHP的格式 + * @returns {String} datefmt 返回格式化后的日期时间字符串 + */ + + editormd.dateFormat = function(format) { + format = format || ""; + + var addZero = function(d) { + return (d < 10) ? "0" + d : d; + }; + + var date = new Date(); + var year = date.getFullYear(); + var year2 = year.toString().slice(2, 4); + var month = addZero(date.getMonth() + 1); + var day = addZero(date.getDate()); + var weekDay = date.getDay(); + var hour = addZero(date.getHours()); + var min = addZero(date.getMinutes()); + var second = addZero(date.getSeconds()); + var ms = addZero(date.getMilliseconds()); + var datefmt = ""; + + var ymd = year2 + "-" + month + "-" + day; + var fymd = year + "-" + month + "-" + day; + var hms = hour + ":" + min + ":" + second; + + switch (format) + { + case "UNIX Time" : + datefmt = date.getTime(); + break; + + case "UTC" : + datefmt = date.toUTCString(); + break; + + case "yy" : + datefmt = year2; + break; + + case "year" : + case "yyyy" : + datefmt = year; + break; + + case "month" : + case "mm" : + datefmt = month; + break; + + case "cn-week-day" : + case "cn-wd" : + var cnWeekDays = ["日", "一", "二", "三", "四", "五", "六"]; + datefmt = "星期" + cnWeekDays[weekDay]; + break; + + case "week-day" : + case "wd" : + var weekDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; + datefmt = weekDays[weekDay]; + break; + + case "day" : + case "dd" : + datefmt = day; + break; + + case "hour" : + case "hh" : + datefmt = hour; + break; + + case "min" : + case "ii" : + datefmt = min; + break; + + case "second" : + case "ss" : + datefmt = second; + break; + + case "ms" : + datefmt = ms; + break; + + case "yy-mm-dd" : + datefmt = ymd; + break; + + case "yyyy-mm-dd" : + datefmt = fymd; + break; + + case "yyyy-mm-dd h:i:s ms" : + case "full + ms" : + datefmt = fymd + " " + hms + " " + ms; + break; + + case "full" : + case "yyyy-mm-dd h:i:s" : + default: + datefmt = fymd + " " + hms; + break; + } + + return datefmt; + }; + + return editormd; + +})); diff --git a/src/main/webapp/static/global/plugins/editor.md-master/editormd.min.js b/src/main/webapp/static/global/plugins/editor.md-master/editormd.min.js new file mode 100644 index 000000000..f3f38cc17 --- /dev/null +++ b/src/main/webapp/static/global/plugins/editor.md-master/editormd.min.js @@ -0,0 +1,3 @@ +/*! Editor.md v1.5.0 | editormd.min.js | Open source online markdown editor. | MIT License | By: Pandao | https://github.com/pandao/editor.md | 2015-06-09 */ +!function(e){"use strict";"function"==typeof require&&"object"==typeof exports&&"object"==typeof module?module.exports=e:"function"==typeof define?define.amd||define(["jquery"],e):window.editormd=e()}(function(){"use strict";var e="undefined"!=typeof jQuery?jQuery:Zepto;if("undefined"!=typeof e){var t=function(e,i){return new t.fn.init(e,i)};t.title=t.$name="Editor.md",t.version="1.5.0",t.homePage="https://pandao.github.io/editor.md/",t.classPrefix="editormd-",t.toolbarModes={full:["undo","redo","|","bold","del","italic","quote","ucwords","uppercase","lowercase","|","h1","h2","h3","h4","h5","h6","|","list-ul","list-ol","hr","|","link","reference-link","image","code","preformatted-text","code-block","table","datetime","emoji","html-entities","pagebreak","|","goto-line","watch","preview","fullscreen","clear","search","|","help","info"],simple:["undo","redo","|","bold","del","italic","quote","uppercase","lowercase","|","h1","h2","h3","h4","h5","h6","|","list-ul","list-ol","hr","|","watch","preview","fullscreen","|","help","info"],mini:["undo","redo","|","watch","preview","|","help","info"]},t.defaults={mode:"gfm",name:"",value:"",theme:"",editorTheme:"default",previewTheme:"",markdown:"",appendMarkdown:"",width:"100%",height:"100%",path:"./lib/",pluginPath:"",delay:300,autoLoadModules:!0,watch:!0,placeholder:"Enjoy Markdown! coding now...",gotoLine:!0,codeFold:!1,autoHeight:!1,autoFocus:!0,autoCloseTags:!0,searchReplace:!0,syncScrolling:!0,readOnly:!1,tabSize:4,indentUnit:4,lineNumbers:!0,lineWrapping:!0,autoCloseBrackets:!0,showTrailingSpace:!0,matchBrackets:!0,indentWithTabs:!0,styleSelectedText:!0,matchWordHighlight:!0,styleActiveLine:!0,dialogLockScreen:!0,dialogShowMask:!0,dialogDraggable:!0,dialogMaskBgColor:"#fff",dialogMaskOpacity:.1,fontSize:"13px",saveHTMLToTextarea:!1,disabledKeyMaps:[],onload:function(){},onresize:function(){},onchange:function(){},onwatch:null,onunwatch:null,onpreviewing:function(){},onpreviewed:function(){},onfullscreen:function(){},onfullscreenExit:function(){},onscroll:function(){},onpreviewscroll:function(){},imageUpload:!1,imageFormats:["jpg","jpeg","gif","png","bmp","webp"],imageUploadURL:"",crossDomainUpload:!1,uploadCallbackURL:"",toc:!0,tocm:!1,tocTitle:"",tocDropdown:!1,tocContainer:"",tocStartLevel:1,htmlDecode:!1,pageBreak:!0,atLink:!0,emailLink:!0,taskList:!1,emoji:!1,tex:!1,flowChart:!1,sequenceDiagram:!1,previewCodeHighlight:!0,toolbar:!0,toolbarAutoFixed:!0,toolbarIcons:"full",toolbarTitles:{},toolbarHandlers:{ucwords:function(){return t.toolbarHandlers.ucwords},lowercase:function(){return t.toolbarHandlers.lowercase}},toolbarCustomIcons:{lowercase:'a',ucwords:'Aa'},toolbarIconsClass:{undo:"fa-undo",redo:"fa-repeat",bold:"fa-bold",del:"fa-strikethrough",italic:"fa-italic",quote:"fa-quote-left",uppercase:"fa-font",h1:t.classPrefix+"bold",h2:t.classPrefix+"bold",h3:t.classPrefix+"bold",h4:t.classPrefix+"bold",h5:t.classPrefix+"bold",h6:t.classPrefix+"bold","list-ul":"fa-list-ul","list-ol":"fa-list-ol",hr:"fa-minus",link:"fa-link","reference-link":"fa-anchor",image:"fa-picture-o",code:"fa-code","preformatted-text":"fa-file-code-o","code-block":"fa-file-code-o",table:"fa-table",datetime:"fa-clock-o",emoji:"fa-smile-o","html-entities":"fa-copyright",pagebreak:"fa-newspaper-o","goto-line":"fa-terminal",watch:"fa-eye-slash",unwatch:"fa-eye",preview:"fa-desktop",search:"fa-search",fullscreen:"fa-arrows-alt",clear:"fa-eraser",help:"fa-question-circle",info:"fa-info-circle"},toolbarIconTexts:{},lang:{name:"zh-cn",description:"开源在线Markdown编辑器
                Open source online Markdown editor.",tocTitle:"目录",toolbar:{undo:"撤销(Ctrl+Z)",redo:"重做(Ctrl+Y)",bold:"粗体",del:"删除线",italic:"斜体",quote:"引用",ucwords:"将每个单词首字母转成大写",uppercase:"将所选转换成大写",lowercase:"将所选转换成小写",h1:"标题1",h2:"标题2",h3:"标题3",h4:"标题4",h5:"标题5",h6:"标题6","list-ul":"无序列表","list-ol":"有序列表",hr:"横线",link:"链接","reference-link":"引用链接",image:"添加图片",code:"行内代码","preformatted-text":"预格式文本 / 代码块(缩进风格)","code-block":"代码块(多语言风格)",table:"添加表格",datetime:"日期时间",emoji:"Emoji表情","html-entities":"HTML实体字符",pagebreak:"插入分页符","goto-line":"跳转到行",watch:"关闭实时预览",unwatch:"开启实时预览",preview:"全窗口预览HTML(按 Shift + ESC还原)",fullscreen:"全屏(按ESC还原)",clear:"清空",search:"搜索",help:"使用帮助",info:"关于"+t.title},buttons:{enter:"确定",cancel:"取消",close:"关闭"},dialog:{link:{title:"添加链接",url:"链接地址",urlTitle:"链接标题",urlEmpty:"错误:请填写链接地址。"},referenceLink:{title:"添加引用链接",name:"引用名称",url:"链接地址",urlId:"链接ID",urlTitle:"链接标题",nameEmpty:"错误:引用链接的名称不能为空。",idEmpty:"错误:请填写引用链接的ID。",urlEmpty:"错误:请填写引用链接的URL地址。"},image:{title:"添加图片",url:"图片地址",link:"图片链接",alt:"图片描述",uploadButton:"本地上传",imageURLEmpty:"错误:图片地址不能为空。",uploadFileEmpty:"错误:上传的图片不能为空。",formatNotAllowed:"错误:只允许上传图片文件,允许上传的图片文件格式有:"},preformattedText:{title:"添加预格式文本或代码块",emptyAlert:"错误:请填写预格式文本或代码的内容。"},codeBlock:{title:"添加代码块",selectLabel:"代码语言:",selectDefaultText:"请选择代码语言",otherLanguage:"其他语言",unselectedLanguageAlert:"错误:请选择代码所属的语言类型。",codeEmptyAlert:"错误:请填写代码内容。"},htmlEntities:{title:"HTML 实体字符"},help:{title:"使用帮助"}}}},t.classNames={tex:t.classPrefix+"tex"},t.dialogZindex=99999,t.$katex=null,t.$marked=null,t.$CodeMirror=null,t.$prettyPrint=null;var i,o;t.prototype=t.fn={state:{watching:!1,loaded:!1,preview:!1,fullscreen:!1},init:function(i,o){o=o||{},"object"==typeof i&&(o=i);var r=this.classPrefix=t.classPrefix,n=this.settings=e.extend(!0,t.defaults,o);i="object"==typeof i?n.id:i;var a=this.editor=e("#"+i);this.id=i,this.lang=n.lang;var s=this.classNames={textarea:{html:r+"html-textarea",markdown:r+"markdown-textarea"}};n.pluginPath=""===n.pluginPath?n.path+"../plugins/":n.pluginPath,this.state.watching=n.watch?!0:!1,a.hasClass("editormd")||a.addClass("editormd"),a.css({width:"number"==typeof n.width?n.width+"px":n.width,height:"number"==typeof n.height?n.height+"px":n.height}),n.autoHeight&&a.css("height","auto");var l=this.markdownTextarea=a.children("textarea");l.length<1&&(a.append(""),l=this.markdownTextarea=a.children("textarea")),l.addClass(s.textarea.markdown).attr("placeholder",n.placeholder),("undefined"==typeof l.attr("name")||""===l.attr("name"))&&l.attr("name",""!==n.name?n.name:i+"-markdown-doc");var c=[n.readOnly?"":'',n.saveHTMLToTextarea?'':"",'
                ','
                ','
                '].join("\n");return a.append(c).addClass(r+"vertical"),""!==n.theme&&a.addClass(r+"theme-"+n.theme),this.mask=a.children("."+r+"mask"),this.containerMask=a.children("."+r+"container-mask"),""!==n.markdown&&l.val(n.markdown),""!==n.appendMarkdown&&l.val(l.val()+n.appendMarkdown),this.htmlTextarea=a.children("."+s.textarea.html),this.preview=a.children("."+r+"preview"),this.previewContainer=this.preview.children("."+r+"preview-container"),""!==n.previewTheme&&this.preview.addClass(r+"preview-theme-"+n.previewTheme),"function"==typeof define&&define.amd&&("undefined"!=typeof katex&&(t.$katex=katex),n.searchReplace&&!n.readOnly&&(t.loadCSS(n.path+"codemirror/addon/dialog/dialog"),t.loadCSS(n.path+"codemirror/addon/search/matchesonscrollbar"))),"function"==typeof define&&define.amd||!n.autoLoadModules?("undefined"!=typeof CodeMirror&&(t.$CodeMirror=CodeMirror),"undefined"!=typeof marked&&(t.$marked=marked),this.setCodeMirror().setToolbar().loadedDisplay()):this.loadQueues(),this},loadQueues:function(){var e=this,i=this.settings,o=i.path,r=function(){return t.isIE8?void e.loadedDisplay():void(i.flowChart||i.sequenceDiagram?t.loadScript(o+"raphael.min",function(){t.loadScript(o+"underscore.min",function(){!i.flowChart&&i.sequenceDiagram?t.loadScript(o+"sequence-diagram.min",function(){e.loadedDisplay()}):i.flowChart&&!i.sequenceDiagram?t.loadScript(o+"flowchart.min",function(){t.loadScript(o+"jquery.flowchart.min",function(){e.loadedDisplay()})}):i.flowChart&&i.sequenceDiagram&&t.loadScript(o+"flowchart.min",function(){t.loadScript(o+"jquery.flowchart.min",function(){t.loadScript(o+"sequence-diagram.min",function(){e.loadedDisplay()})})})})}):e.loadedDisplay())};return t.loadCSS(o+"codemirror/codemirror.min"),i.searchReplace&&!i.readOnly&&(t.loadCSS(o+"codemirror/addon/dialog/dialog"),t.loadCSS(o+"codemirror/addon/search/matchesonscrollbar")),i.codeFold&&t.loadCSS(o+"codemirror/addon/fold/foldgutter"),t.loadScript(o+"codemirror/codemirror.min",function(){t.$CodeMirror=CodeMirror,t.loadScript(o+"codemirror/modes.min",function(){t.loadScript(o+"codemirror/addons.min",function(){return e.setCodeMirror(),"gfm"!==i.mode&&"markdown"!==i.mode?(e.loadedDisplay(),!1):(e.setToolbar(),void t.loadScript(o+"marked.min",function(){t.$marked=marked,i.previewCodeHighlight?t.loadScript(o+"prettify.min",function(){r()}):r()}))})})}),this},setTheme:function(e){var t=this.editor,i=this.settings.theme,o=this.classPrefix+"theme-";return t.removeClass(o+i).addClass(o+e),this.settings.theme=e,this},setEditorTheme:function(e){var i=this.settings;return i.editorTheme=e,"default"!==e&&t.loadCSS(i.path+"codemirror/theme/"+i.editorTheme),this.cm.setOption("theme",e),this},setCodeMirrorTheme:function(e){return this.setEditorTheme(e),this},setPreviewTheme:function(e){var t=this.preview,i=this.settings.previewTheme,o=this.classPrefix+"preview-theme-";return t.removeClass(o+i).addClass(o+e),this.settings.previewTheme=e,this},setCodeMirror:function(){var e=this.settings,i=this.editor;"default"!==e.editorTheme&&t.loadCSS(e.path+"codemirror/theme/"+e.editorTheme);var o={mode:e.mode,theme:e.editorTheme,tabSize:e.tabSize,dragDrop:!1,autofocus:e.autoFocus,autoCloseTags:e.autoCloseTags,readOnly:e.readOnly?"nocursor":!1,indentUnit:e.indentUnit,lineNumbers:e.lineNumbers,lineWrapping:e.lineWrapping,extraKeys:{"Ctrl-Q":function(e){e.foldCode(e.getCursor())}},foldGutter:e.codeFold,gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"],matchBrackets:e.matchBrackets,indentWithTabs:e.indentWithTabs,styleActiveLine:e.styleActiveLine,styleSelectedText:e.styleSelectedText,autoCloseBrackets:e.autoCloseBrackets,showTrailingSpace:e.showTrailingSpace,highlightSelectionMatches:e.matchWordHighlight?{showToken:"onselected"===e.matchWordHighlight?!1:/\w/}:!1};return this.codeEditor=this.cm=t.$CodeMirror.fromTextArea(this.markdownTextarea[0],o),this.codeMirror=this.cmElement=i.children(".CodeMirror"),""!==e.value&&this.cm.setValue(e.value),this.codeMirror.css({fontSize:e.fontSize,width:e.watch?"50%":"100%"}),e.autoHeight&&(this.codeMirror.css("height","auto"),this.cm.setOption("viewportMargin",1/0)),e.lineNumbers||this.codeMirror.find(".CodeMirror-gutters").css("border-right","none"),this},getCodeMirrorOption:function(e){return this.cm.getOption(e)},setCodeMirrorOption:function(e,t){return this.cm.setOption(e,t),this},addKeyMap:function(e,t){return this.cm.addKeyMap(e,t),this},removeKeyMap:function(e){return this.cm.removeKeyMap(e),this},gotoLine:function(t){var i=this.settings;if(!i.gotoLine)return this;var o=this.cm,r=(this.editor,o.lineCount()),n=this.preview;if("string"==typeof t&&("last"===t&&(t=r),"first"===t&&(t=1)),"number"!=typeof t)return alert("Error: The line number must be an integer."),this;if(t=parseInt(t)-1,t>r)return alert("Error: The line number range 1-"+r),this;o.setCursor({line:t,ch:0});var a=o.getScrollInfo(),s=a.clientHeight,l=o.charCoords({line:t,ch:0},"local");if(o.scrollTo(null,(l.top+l.bottom-s)/2),i.watch){var c=this.codeMirror.find(".CodeMirror-scroll")[0],h=e(c).height(),d=c.scrollTop,u=d/c.scrollHeight;n.scrollTop(0===d?0:d+h>=c.scrollHeight-16?n[0].scrollHeight:n[0].scrollHeight*u)}return o.focus(),this},extend:function(){return"undefined"!=typeof arguments[1]&&("function"==typeof arguments[1]&&(arguments[1]=e.proxy(arguments[1],this)),this[arguments[0]]=arguments[1]),"object"==typeof arguments[0]&&"undefined"==typeof arguments[0].length&&e.extend(!0,this,arguments[0]),this},set:function(t,i){return"undefined"!=typeof i&&"function"==typeof i&&(i=e.proxy(i,this)),this[t]=i,this},config:function(t,i){var o=this.settings;return"object"==typeof t&&(o=e.extend(!0,o,t)),"string"==typeof t&&(o[t]=i),this.settings=o,this.recreate(),this},on:function(t,i){var o=this.settings;return"undefined"!=typeof o["on"+t]&&(o["on"+t]=e.proxy(i,this)),this},off:function(e){var t=this.settings;return"undefined"!=typeof t["on"+e]&&(t["on"+e]=function(){}),this},showToolbar:function(t){var i=this.settings;return i.readOnly?this:(i.toolbar&&(this.toolbar.length<1||""===this.toolbar.find("."+this.classPrefix+"menu").html())&&this.setToolbar(),i.toolbar=!0,this.toolbar.show(),this.resize(),e.proxy(t||function(){},this)(),this)},hideToolbar:function(t){var i=this.settings;return i.toolbar=!1,this.toolbar.hide(),this.resize(),e.proxy(t||function(){},this)(),this},setToolbarAutoFixed:function(t){var i=this.state,o=this.editor,r=this.toolbar,n=this.settings;"undefined"!=typeof t&&(n.toolbarAutoFixed=t);var a=function(){var t=e(window),i=t.scrollTop();return n.toolbarAutoFixed?void r.css(i-o.offset().top>10&&i
                  ';i.append(n),r=this.toolbar=i.children("."+o+"toolbar")}if(!e.toolbar)return r.hide(),this;r.show();for(var a="function"==typeof e.toolbarIcons?e.toolbarIcons():"string"==typeof e.toolbarIcons?t.toolbarModes[e.toolbarIcons]:e.toolbarIcons,s=r.find("."+this.classPrefix+"menu"),l="",c=!1,h=0,d=a.length;d>h;h++){var u=a[h];if("||"===u)c=!0;else if("|"===u)l+='
                • |
                • ';else{var f=/h(\d)/.test(u),g=u;"watch"!==u||e.watch||(g="unwatch");var p=e.lang.toolbar[g],m=e.toolbarIconTexts[g],w=e.toolbarIconsClass[g];p="undefined"==typeof p?"":p,m="undefined"==typeof m?"":m,w="undefined"==typeof w?"":w;var v=c?'
                • ':"
                • ";"undefined"!=typeof e.toolbarCustomIcons[u]&&"function"!=typeof e.toolbarCustomIcons[u]?v+=e.toolbarCustomIcons[u]:(v+='',v+=''+(f?u.toUpperCase():""===w?m:"")+"",v+=""),v+="
                • ",l=c?v+l:l+v}}return s.html(l),s.find('[title="Lowercase"]').attr("title",e.lang.toolbar.lowercase),s.find('[title="ucwords"]').attr("title",e.lang.toolbar.ucwords),this.setToolbarHandler(),this.setToolbarAutoFixed(),this},dialogLockScreen:function(){return e.proxy(t.dialogLockScreen,this)(),this},dialogShowMask:function(i){return e.proxy(t.dialogShowMask,this)(i),this},getToolbarHandles:function(e){var i=this.toolbarHandlers=t.toolbarHandlers;return e&&"undefined"!=typeof toolbarIconHandlers[e]?i[e]:i},setToolbarHandler:function(){var i=this,o=this.settings;if(!o.toolbar||o.readOnly)return this;var r=this.toolbar,n=this.cm,a=this.classPrefix,s=this.toolbarIcons=r.find("."+a+"menu > li > a"),l=this.getToolbarHandles();return s.bind(t.mouseOrTouch("click","touchend"),function(t){var r=e(this).children(".fa"),a=r.attr("name"),s=n.getCursor(),c=n.getSelection();return""!==a?(i.activeIcon=r,"undefined"!=typeof l[a]?e.proxy(l[a],i)(n):"undefined"!=typeof o.toolbarHandlers[a]&&e.proxy(o.toolbarHandlers[a],i)(n,r,s,c),"link"!==a&&"reference-link"!==a&&"image"!==a&&"code-block"!==a&&"preformatted-text"!==a&&"watch"!==a&&"preview"!==a&&"search"!==a&&"fullscreen"!==a&&"info"!==a&&n.focus(),!1):void 0}),this},createDialog:function(i){return e.proxy(t.createDialog,this)(i)},createInfoDialog:function(){var e=this,i=this.editor,o=this.classPrefix,r=['
                  ','
                  ','

                  '+t.title+"v"+t.version+"

                  ","

                  "+this.lang.description+"

                  ",'

                  '+t.homePage+'

                  ','

                  Copyright © 2015 Pandao, The MIT License.

                  ',"
                  ",'',"
                  "].join("\n");i.append(r);var n=this.infoDialog=i.children("."+o+"dialog-info");return n.find("."+o+"dialog-close").bind(t.mouseOrTouch("click","touchend"),function(){e.hideInfoDialog()}),n.css("border",t.isIE8?"1px solid #ddd":"").css("z-index",t.dialogZindex).show(),this.infoDialogPosition(),this},infoDialogPosition:function(){var t=this.infoDialog,i=function(){t.css({top:(e(window).height()-t.height())/2+"px",left:(e(window).width()-t.width())/2+"px"})};return i(),e(window).resize(i),this},showInfoDialog:function(){e("html,body").css("overflow-x","hidden");var i=this.editor,o=this.settings,r=this.infoDialog=i.children("."+this.classPrefix+"dialog-info");return r.length<1&&this.createInfoDialog(),this.lockScreen(!0),this.mask.css({opacity:o.dialogMaskOpacity,backgroundColor:o.dialogMaskBgColor}).show(),r.css("z-index",t.dialogZindex).show(),this.infoDialogPosition(),this},hideInfoDialog:function(){return e("html,body").css("overflow-x",""),this.infoDialog.hide(),this.mask.hide(),this.lockScreen(!1),this},lockScreen:function(e){return t.lockScreen(e),this.resize(),this},recreate:function(){var e=this.editor,t=this.settings;return this.codeMirror.remove(),this.setCodeMirror(),t.readOnly||(e.find(".editormd-dialog").length>0&&e.find(".editormd-dialog").remove(),t.toolbar&&(this.getToolbarHandles(),this.setToolbar())),this.loadedDisplay(!0),this},previewCodeHighlight:function(){var e=this.settings,t=this.previewContainer;return e.previewCodeHighlight&&(t.find("pre").addClass("prettyprint linenums"),"undefined"!=typeof prettyPrint&&prettyPrint()),this},katexRender:function(){return null===i?this:(this.previewContainer.find("."+t.classNames.tex).each(function(){var i=e(this);t.$katex.render(i.text(),i[0]),i.find(".katex").css("font-size","1.6em")}),this)},flowChartAndSequenceDiagramRender:function(){var i=this,r=this.settings,n=this.previewContainer;if(t.isIE8)return this;if(r.flowChart){if(null===o)return this;n.find(".flowchart").flowChart()}r.sequenceDiagram&&n.find(".sequence-diagram").sequenceDiagram({theme:"simple"});var a=i.preview,s=i.codeMirror,l=s.find(".CodeMirror-scroll"),c=l.height(),h=l.scrollTop(),d=h/l[0].scrollHeight,u=0;a.find(".markdown-toc-list").each(function(){u+=e(this).height()});var f=a.find(".editormd-toc-menu").height();return f=f?f:0,a.scrollTop(0===h?0:h+c>=l[0].scrollHeight-16?a[0].scrollHeight:(a[0].scrollHeight+u+f)*d),this},registerKeyMaps:function(i){var o=this,r=this.cm,n=this.settings,a=t.toolbarHandlers,s=n.disabledKeyMaps;if(i=i||null){for(var l in i)if(e.inArray(l,s)<0){var c={};c[l]=i[l],r.addKeyMap(i)}}else{for(var h in t.keyMaps){var d=t.keyMaps[h],u="string"==typeof d?e.proxy(a[d],o):e.proxy(d,o);if(e.inArray(h,["F9","F10","F11"])<0&&e.inArray(h,s)<0){var f={};f[h]=u,r.addKeyMap(f)}}e(window).keydown(function(t){var i={120:"F9",121:"F10",122:"F11"};if(e.inArray(i[t.keyCode],s)<0)switch(t.keyCode){case 120:return e.proxy(a.watch,o)(),!1;case 121:return e.proxy(a.preview,o)(),!1;case 122:return e.proxy(a.fullscreen,o)(),!1}})}return this},bindScrollEvent:function(){var i=this,o=this.preview,r=this.settings,n=this.codeMirror,a=t.mouseOrTouch;if(!r.syncScrolling)return this;var s=function(){n.find(".CodeMirror-scroll").bind(a("scroll","touchmove"),function(t){var n=e(this).height(),a=e(this).scrollTop(),s=a/e(this)[0].scrollHeight,l=0;o.find(".markdown-toc-list").each(function(){l+=e(this).height()});var c=o.find(".editormd-toc-menu").height();c=c?c:0,o.scrollTop(0===a?0:a+n>=e(this)[0].scrollHeight-16?o[0].scrollHeight:(o[0].scrollHeight+l+c)*s),e.proxy(r.onscroll,i)(t)})},l=function(){n.find(".CodeMirror-scroll").unbind(a("scroll","touchmove"))},c=function(){o.bind(a("scroll","touchmove"),function(t){var o=e(this).height(),a=e(this).scrollTop(),s=a/e(this)[0].scrollHeight,l=n.find(".CodeMirror-scroll");l.scrollTop(0===a?0:a+o>=e(this)[0].scrollHeight?l[0].scrollHeight:l[0].scrollHeight*s),e.proxy(r.onpreviewscroll,i)(t)})},h=function(){o.unbind(a("scroll","touchmove"))};return n.bind({mouseover:s,mouseout:l,touchstart:s,touchend:l}),"single"===r.syncScrolling?this:(o.bind({mouseover:c,mouseout:h,touchstart:c,touchend:h}),this)},bindChangeEvent:function(){var e=this,t=this.cm,o=this.settings;return o.syncScrolling?(t.on("change",function(t,r){o.watch&&e.previewContainer.css("padding",o.autoHeight?"20px 20px 50px 40px":"20px"),i=setTimeout(function(){clearTimeout(i),e.save(),i=null},o.delay)}),this):this},loadedDisplay:function(t){t=t||!1;var i=this,o=this.editor,r=this.preview,n=this.settings;return this.containerMask.hide(),this.save(),n.watch&&r.show(),o.data("oldWidth",o.width()).data("oldHeight",o.height()),this.resize(),this.registerKeyMaps(),e(window).resize(function(){i.resize()}),this.bindScrollEvent().bindChangeEvent(),t||e.proxy(n.onload,this)(),this.state.loaded=!0,this},width:function(e){return this.editor.css("width","number"==typeof e?e+"px":e),this.resize(),this},height:function(e){return this.editor.css("height","number"==typeof e?e+"px":e),this.resize(),this},resize:function(t,i){t=t||null,i=i||null;var o=this.state,r=this.editor,n=this.preview,a=this.toolbar,s=this.settings,l=this.codeMirror;if(t&&r.css("width","number"==typeof t?t+"px":t),!s.autoHeight||o.fullscreen||o.preview?(i&&r.css("height","number"==typeof i?i+"px":i),o.fullscreen&&r.height(e(window).height()),s.toolbar&&!s.readOnly?l.css("margin-top",a.height()+1).height(r.height()-a.height()):l.css("margin-top",0).height(r.height())):(r.css("height","auto"),l.css("height","auto")),s.watch)if(l.width(r.width()/2),n.width(o.preview?r.width():r.width()/2),this.previewContainer.css("padding",s.autoHeight?"20px 20px 50px 40px":"20px"),s.toolbar&&!s.readOnly?n.css("top",a.height()+1):n.css("top",0),!s.autoHeight||o.fullscreen||o.preview){var c=s.toolbar&&!s.readOnly?r.height()-a.height():r.height();n.height(c)}else n.height("");else l.width(r.width()),n.hide();return o.loaded&&e.proxy(s.onresize,this)(),this},save:function(){if(null===i)return this;var r=this,n=this.state,a=this.settings,s=this.cm,l=s.getValue(),c=this.previewContainer;if("gfm"!==a.mode&&"markdown"!==a.mode)return this.markdownTextarea.val(l),this;var h=t.$marked,d=this.markdownToC=[],u=this.markedRendererOptions={toc:a.toc,tocm:a.tocm,tocStartLevel:a.tocStartLevel,pageBreak:a.pageBreak,taskList:a.taskList,emoji:a.emoji,tex:a.tex,atLink:a.atLink,emailLink:a.emailLink,flowChart:a.flowChart,sequenceDiagram:a.sequenceDiagram,previewCodeHighlight:a.previewCodeHighlight},f=this.markedOptions={renderer:t.markedRenderer(d,u),gfm:!0,tables:!0,breaks:!0,pedantic:!1,sanitize:a.htmlDecode?!1:!0,smartLists:!0,smartypants:!0};h.setOptions(f);var g=t.$marked(l,f);if(g=t.filterHTMLTags(g,a.htmlDecode),this.markdownTextarea.text(l),s.save(),a.saveHTMLToTextarea&&this.htmlTextarea.text(g),a.watch||!a.watch&&n.preview){if(c.html(g),this.previewCodeHighlight(),a.toc){var p=""===a.tocContainer?c:e(a.tocContainer),m=p.find("."+this.classPrefix+"toc-menu");p.attr("previewContainer",""===a.tocContainer?"true":"false"),""!==a.tocContainer&&m.length>0&&m.remove(),t.markdownToCRenderer(d,p,a.tocDropdown,a.tocStartLevel),(a.tocDropdown||p.find("."+this.classPrefix+"toc-menu").length>0)&&t.tocDropdownMenu(p,""!==a.tocTitle?a.tocTitle:this.lang.tocTitle),""!==a.tocContainer&&c.find(".markdown-toc").css("border","none")}a.tex&&(!t.kaTeXLoaded&&a.autoLoadModules?t.loadKaTeX(function(){t.$katex=katex,t.kaTeXLoaded=!0,r.katexRender()}):(t.$katex=katex,this.katexRender())),(a.flowChart||a.sequenceDiagram)&&(o=setTimeout(function(){clearTimeout(o),r.flowChartAndSequenceDiagramRender(),o=null},10)),n.loaded&&e.proxy(a.onchange,this)()}return this},focus:function(){return this.cm.focus(),this},setCursor:function(e){return this.cm.setCursor(e),this},getCursor:function(){return this.cm.getCursor()},setSelection:function(e,t){return this.cm.setSelection(e,t),this},getSelection:function(){return this.cm.getSelection()},setSelections:function(e){return this.cm.setSelections(e),this},getSelections:function(){return this.cm.getSelections()},replaceSelection:function(e){return this.cm.replaceSelection(e),this},insertValue:function(e){return this.replaceSelection(e),this},appendMarkdown:function(e){var t=(this.settings,this.cm);return t.setValue(t.getValue()+e),this},setMarkdown:function(e){return this.cm.setValue(e||this.settings.markdown),this},getMarkdown:function(){return this.cm.getValue()},getValue:function(){return this.cm.getValue()},setValue:function(e){return this.cm.setValue(e),this},clear:function(){return this.cm.setValue(""),this},getHTML:function(){return this.settings.saveHTMLToTextarea?this.htmlTextarea.val():(alert("Error: settings.saveHTMLToTextarea == false"),!1)},getTextareaSavedHTML:function(){return this.getHTML()},getPreviewedHTML:function(){return this.settings.watch?this.previewContainer.html():(alert("Error: settings.watch == false"),!1)},watch:function(t){var o=this.settings;if(e.inArray(o.mode,["gfm","markdown"])<0)return this;if(this.state.watching=o.watch=!0,this.preview.show(),this.toolbar){var r=o.toolbarIconsClass.watch,n=o.toolbarIconsClass.unwatch,a=this.toolbar.find(".fa[name=watch]");a.parent().attr("title",o.lang.toolbar.watch),a.removeClass(n).addClass(r)}return this.codeMirror.css("border-right","1px solid #ddd").width(this.editor.width()/2),i=0,this.save().resize(),o.onwatch||(o.onwatch=t||function(){}),e.proxy(o.onwatch,this)(),this},unwatch:function(t){var i=this.settings;if(this.state.watching=i.watch=!1,this.preview.hide(),this.toolbar){var o=i.toolbarIconsClass.watch,r=i.toolbarIconsClass.unwatch,n=this.toolbar.find(".fa[name=watch]");n.parent().attr("title",i.lang.toolbar.unwatch),n.removeClass(o).addClass(r)}return this.codeMirror.css("border-right","none").width(this.editor.width()),this.resize(),i.onunwatch||(i.onunwatch=t||function(){}),e.proxy(i.onunwatch,this)(),this},show:function(t){t=t||function(){};var i=this;return this.editor.show(0,function(){e.proxy(t,i)()}),this},hide:function(t){t=t||function(){};var i=this;return this.editor.hide(0,function(){e.proxy(t,i)()}),this},previewing:function(){var i=this,o=this.editor,r=this.preview,n=this.toolbar,a=this.settings,s=this.codeMirror,l=this.previewContainer;if(e.inArray(a.mode,["gfm","markdown"])<0)return this;a.toolbar&&n&&(n.toggle(),n.find(".fa[name=preview]").toggleClass("active")),s.toggle();var c=function(e){e.shiftKey&&27===e.keyCode&&i.previewed()};"none"===s.css("display")?(this.state.preview=!0,this.state.fullscreen&&r.css("background","#fff"),o.find("."+this.classPrefix+"preview-close-btn").show().bind(t.mouseOrTouch("click","touchend"),function(){i.previewed()}),a.watch?l.css("padding",""):this.save(),l.addClass(this.classPrefix+"preview-active"),r.show().css({position:"",top:0,width:o.width(),height:a.autoHeight&&!this.state.fullscreen?"auto":o.height()}),this.state.loaded&&e.proxy(a.onpreviewing,this)(),e(window).bind("keyup",c)):(e(window).unbind("keyup",c),this.previewed())},previewed:function(){var i=this.editor,o=this.preview,r=this.toolbar,n=this.settings,a=this.previewContainer,s=i.find("."+this.classPrefix+"preview-close-btn");return this.state.preview=!1,this.codeMirror.show(),n.toolbar&&r.show(),o[n.watch?"show":"hide"](),s.hide().unbind(t.mouseOrTouch("click","touchend")),a.removeClass(this.classPrefix+"preview-active"),n.watch&&a.css("padding","20px"),o.css({background:null,position:"absolute",width:i.width()/2,height:n.autoHeight&&!this.state.fullscreen?"auto":i.height()-r.height(),top:n.toolbar?r.height():0}),this.state.loaded&&e.proxy(n.onpreviewed,this)(),this},fullscreen:function(){var t=this,i=this.state,o=this.editor,r=(this.preview,this.toolbar),n=this.settings,a=this.classPrefix+"fullscreen";r&&r.find(".fa[name=fullscreen]").parent().toggleClass("active");var s=function(e){e.shiftKey||27!==e.keyCode||i.fullscreen&&t.fullscreenExit()};return o.hasClass(a)?(e(window).unbind("keyup",s),this.fullscreenExit()):(i.fullscreen=!0,e("html,body").css("overflow","hidden"),o.css({width:e(window).width(),height:e(window).height()}).addClass(a),this.resize(),e.proxy(n.onfullscreen,this)(),e(window).bind("keyup",s)),this},fullscreenExit:function(){var t=this.editor,i=this.settings,o=this.toolbar,r=this.classPrefix+"fullscreen";return this.state.fullscreen=!1,o&&o.find(".fa[name=fullscreen]").parent().removeClass("active"),e("html,body").css("overflow",""),t.css({width:t.data("oldWidth"),height:t.data("oldHeight")}).removeClass(r),this.resize(),e.proxy(i.onfullscreenExit,this)(),this},executePlugin:function(i,o){var r=this,n=this.cm,a=this.settings;return o=a.pluginPath+o,"function"==typeof define?"undefined"==typeof this[i]?(alert("Error: "+i+" plugin is not found, you are not load this plugin."),this):(this[i](n),this):(e.inArray(o,t.loadFiles.plugin)<0?t.loadPlugin(o,function(){t.loadPlugins[i]=r[i],r[i](n)}):e.proxy(t.loadPlugins[i],this)(n),this)},search:function(e){var t=this.settings;return t.searchReplace?(t.readOnly||this.cm.execCommand(e||"find"),this):(alert("Error: settings.searchReplace == false"),this)},searchReplace:function(){return this.search("replace"),this},searchReplaceAll:function(){return this.search("replaceAll"),this}},t.fn.init.prototype=t.fn,t.dialogLockScreen=function(){var t=this.settings||{dialogLockScreen:!0};t.dialogLockScreen&&(e("html,body").css("overflow","hidden"),this.resize())},t.dialogShowMask=function(t){var i=this.editor,o=this.settings||{dialogShowMask:!0};t.css({top:(e(window).height()-t.height())/2+"px",left:(e(window).width()-t.width())/2+"px"}),o.dialogShowMask&&i.children("."+this.classPrefix+"mask").css("z-index",parseInt(t.css("z-index"))-1).show()},t.toolbarHandlers={undo:function(){this.cm.undo()},redo:function(){this.cm.redo()},bold:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();e.replaceSelection("**"+i+"**"),""===i&&e.setCursor(t.line,t.ch+2)},del:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();e.replaceSelection("~~"+i+"~~"),""===i&&e.setCursor(t.line,t.ch+2)},italic:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();e.replaceSelection("*"+i+"*"),""===i&&e.setCursor(t.line,t.ch+1)},quote:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();0!==t.ch?(e.setCursor(t.line,0),e.replaceSelection("> "+i),e.setCursor(t.line,t.ch+2)):e.replaceSelection("> "+i)},ucfirst:function(){var e=this.cm,i=e.getSelection(),o=e.listSelections();e.replaceSelection(t.firstUpperCase(i)),e.setSelections(o)},ucwords:function(){var e=this.cm,i=e.getSelection(),o=e.listSelections();e.replaceSelection(t.wordsFirstUpperCase(i)),e.setSelections(o)},uppercase:function(){var e=this.cm,t=e.getSelection(),i=e.listSelections();e.replaceSelection(t.toUpperCase()),e.setSelections(i)},lowercase:function(){var e=this.cm,t=(e.getCursor(),e.getSelection()),i=e.listSelections();e.replaceSelection(t.toLowerCase()),e.setSelections(i)},h1:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();0!==t.ch?(e.setCursor(t.line,0),e.replaceSelection("# "+i),e.setCursor(t.line,t.ch+2)):e.replaceSelection("# "+i)},h2:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();0!==t.ch?(e.setCursor(t.line,0), +e.replaceSelection("## "+i),e.setCursor(t.line,t.ch+3)):e.replaceSelection("## "+i)},h3:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();0!==t.ch?(e.setCursor(t.line,0),e.replaceSelection("### "+i),e.setCursor(t.line,t.ch+4)):e.replaceSelection("### "+i)},h4:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();0!==t.ch?(e.setCursor(t.line,0),e.replaceSelection("#### "+i),e.setCursor(t.line,t.ch+5)):e.replaceSelection("#### "+i)},h5:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();0!==t.ch?(e.setCursor(t.line,0),e.replaceSelection("##### "+i),e.setCursor(t.line,t.ch+6)):e.replaceSelection("##### "+i)},h6:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();0!==t.ch?(e.setCursor(t.line,0),e.replaceSelection("###### "+i),e.setCursor(t.line,t.ch+7)):e.replaceSelection("###### "+i)},"list-ul":function(){var e=this.cm,t=(e.getCursor(),e.getSelection());if(""===t)e.replaceSelection("- "+t);else{for(var i=t.split("\n"),o=0,r=i.length;r>o;o++)i[o]=""===i[o]?"":"- "+i[o];e.replaceSelection(i.join("\n"))}},"list-ol":function(){var e=this.cm,t=(e.getCursor(),e.getSelection());if(""===t)e.replaceSelection("1. "+t);else{for(var i=t.split("\n"),o=0,r=i.length;r>o;o++)i[o]=""===i[o]?"":o+1+". "+i[o];e.replaceSelection(i.join("\n"))}},hr:function(){{var e=this.cm,t=e.getCursor();e.getSelection()}e.replaceSelection((0!==t.ch?"\n\n":"\n")+"------------\n\n")},tex:function(){if(!this.settings.tex)return alert("settings.tex === false"),this;var e=this.cm,t=e.getCursor(),i=e.getSelection();e.replaceSelection("$$"+i+"$$"),""===i&&e.setCursor(t.line,t.ch+2)},link:function(){this.executePlugin("linkDialog","link-dialog/link-dialog")},"reference-link":function(){this.executePlugin("referenceLinkDialog","reference-link-dialog/reference-link-dialog")},pagebreak:function(){if(!this.settings.pageBreak)return alert("settings.pageBreak === false"),this;{var e=this.cm;e.getSelection()}e.replaceSelection("\r\n[========]\r\n")},image:function(){this.executePlugin("imageDialog","image-dialog/image-dialog")},code:function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();e.replaceSelection("`"+i+"`"),""===i&&e.setCursor(t.line,t.ch+1)},"code-block":function(){this.executePlugin("codeBlockDialog","code-block-dialog/code-block-dialog")},"preformatted-text":function(){this.executePlugin("preformattedTextDialog","preformatted-text-dialog/preformatted-text-dialog")},table:function(){this.executePlugin("tableDialog","table-dialog/table-dialog")},datetime:function(){var e=this.cm,i=(e.getSelection(),new Date,this.settings.lang.name),o=t.dateFormat()+" "+t.dateFormat("zh-cn"===i||"zh-tw"===i?"cn-week-day":"week-day");e.replaceSelection(o)},emoji:function(){this.executePlugin("emojiDialog","emoji-dialog/emoji-dialog")},"html-entities":function(){this.executePlugin("htmlEntitiesDialog","html-entities-dialog/html-entities-dialog")},"goto-line":function(){this.executePlugin("gotoLineDialog","goto-line-dialog/goto-line-dialog")},watch:function(){this[this.settings.watch?"unwatch":"watch"]()},preview:function(){this.previewing()},fullscreen:function(){this.fullscreen()},clear:function(){this.clear()},search:function(){this.search()},help:function(){this.executePlugin("helpDialog","help-dialog/help-dialog")},info:function(){this.showInfoDialog()}},t.keyMaps={"Ctrl-1":"h1","Ctrl-2":"h2","Ctrl-3":"h3","Ctrl-4":"h4","Ctrl-5":"h5","Ctrl-6":"h6","Ctrl-B":"bold","Ctrl-D":"datetime","Ctrl-E":function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();return this.settings.emoji?(e.replaceSelection(":"+i+":"),void(""===i&&e.setCursor(t.line,t.ch+1))):void alert("Error: settings.emoji == false")},"Ctrl-Alt-G":"goto-line","Ctrl-H":"hr","Ctrl-I":"italic","Ctrl-K":"code","Ctrl-L":function(){var e=this.cm,t=e.getCursor(),i=e.getSelection(),o=""===i?"":' "'+i+'"';e.replaceSelection("["+i+"]("+o+")"),""===i&&e.setCursor(t.line,t.ch+1)},"Ctrl-U":"list-ul","Shift-Ctrl-A":function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();return this.settings.atLink?(e.replaceSelection("@"+i),void(""===i&&e.setCursor(t.line,t.ch+1))):void alert("Error: settings.atLink == false")},"Shift-Ctrl-C":"code","Shift-Ctrl-Q":"quote","Shift-Ctrl-S":"del","Shift-Ctrl-K":"tex","Shift-Alt-C":function(){var e=this.cm,t=e.getCursor(),i=e.getSelection();e.replaceSelection(["```",i,"```"].join("\n")),""===i&&e.setCursor(t.line,t.ch+3)},"Shift-Ctrl-Alt-C":"code-block","Shift-Ctrl-H":"html-entities","Shift-Alt-H":"help","Shift-Ctrl-E":"emoji","Shift-Ctrl-U":"uppercase","Shift-Alt-U":"ucwords","Shift-Ctrl-Alt-U":"ucfirst","Shift-Alt-L":"lowercase","Shift-Ctrl-I":function(){var e=this.cm,t=e.getCursor(),i=e.getSelection(),o=""===i?"":' "'+i+'"';e.replaceSelection("!["+i+"]("+o+")"),""===i&&e.setCursor(t.line,t.ch+4)},"Shift-Ctrl-Alt-I":"image","Shift-Ctrl-L":"link","Shift-Ctrl-O":"list-ol","Shift-Ctrl-P":"preformatted-text","Shift-Ctrl-T":"table","Shift-Alt-P":"pagebreak",F9:"watch",F10:"preview",F11:"fullscreen"};var r=function(e){return String.prototype.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")};t.trim=r;var n=function(e){return e.toLowerCase().replace(/\b(\w)|\s(\w)/g,function(e){return e.toUpperCase()})};t.ucwords=t.wordsFirstUpperCase=n;var a=function(e){return e.toLowerCase().replace(/\b(\w)/,function(e){return e.toUpperCase()})};return t.firstUpperCase=t.ucfirst=a,t.urls={atLinkBase:"https://github.com/"},t.regexs={atLink:/@(\w+)/g,email:/(\w+)@(\w+)\.(\w+)\.?(\w+)?/g,emailLink:/(mailto:)?([\w\.\_]+)@(\w+)\.(\w+)\.?(\w+)?/g,emoji:/:([\w\+-]+):/g,emojiDatetime:/(\d{2}:\d{2}:\d{2})/g,twemoji:/:(tw-([\w]+)-?(\w+)?):/g,fontAwesome:/:(fa-([\w]+)(-(\w+)){0,}):/g,editormdLogo:/:(editormd-logo-?(\w+)?):/g,pageBreak:/^\[[=]{8,}\]$/},t.emoji={path:"http://www.emoji-cheat-sheet.com/graphics/emojis/",ext:".png"},t.twemoji={path:"http://twemoji.maxcdn.com/36x36/",ext:".png"},t.markedRenderer=function(i,o){var n={toc:!0,tocm:!1,tocStartLevel:1,pageBreak:!0,atLink:!0,emailLink:!0,taskList:!1,emoji:!1,tex:!1,flowChart:!1,sequenceDiagram:!1},a=e.extend(n,o||{}),s=t.$marked,l=new s.Renderer;i=i||[];var c=t.regexs,h=c.atLink,d=c.emoji,u=c.email,f=c.emailLink,g=c.twemoji,p=c.fontAwesome,m=c.editormdLogo,w=c.pageBreak;return l.emoji=function(e){e=e.replace(t.regexs.emojiDatetime,function(e){return e.replace(/:/g,":")});var i=e.match(d);if(!i||!a.emoji)return e;for(var o=0,r=i.length;r>o;o++)":+1:"===i[o]&&(i[o]=":\\+1:"),e=e.replace(new RegExp(i[o]),function(e,i){var o=e.match(p),r=e.replace(/:/g,"");if(o)for(var n=0,a=o.length;a>n;n++){var s=o[n].replace(/:/g,"");return''}else{var l=e.match(m),c=e.match(g);if(l)for(var h=0,d=l.length;d>h;h++){var u=l[h].replace(/:/g,"");return''}else{if(!c){var f="+1"===r?"plus1":r;return f="black_large_square"===f?"black_square":f,f="moon"===f?"waxing_gibbous_moon":f,':'+r+':'}for(var w=0,v=c.length;v>w;w++){var k=c[w].replace(/:/g,"").replace("tw-","");return'twemoji-'+k+''}}}});return e},l.atLink=function(i){return h.test(i)?(a.atLink&&(i=i.replace(u,function(e,t,i,o){return e.replace(/@/g,"_#_@_#_")}),i=i.replace(h,function(e,i){return''+e+""}).replace(/_#_@_#_/g,"@")),a.emailLink&&(i=i.replace(f,function(t,i,o,r,n){return!i&&e.inArray(n,"jpg|jpeg|png|gif|webp|ico|icon|pdf".split("|"))<0?''+t+"":t})),i):i},l.link=function(e,t,i){if(this.options.sanitize){try{var o=decodeURIComponent(unescape(e)).replace(/[^\w:]/g,"").toLowerCase()}catch(r){return""}if(0===o.indexOf("javascript:"))return""}var n=''+i.replace(/@/g,"@")+""):(t&&(n+=' title="'+t+'"'),n+=">"+i+"")},l.heading=function(e,t,o){var n=e,a=/\s*\]*)\>(.*)\<\/a\>\s*/;if(a.test(e)){var s=[];e=e.split(/\]+)\>([^\>]*)\<\/a\>/);for(var l=0,c=e.length;c>l;l++)s.push(e[l].replace(/\s*href\=\"(.*)\"\s*/g,""));e=s.join(" ")}e=r(e);var h=e.toLowerCase().replace(/[^\w]+/g,"-"),d={text:e,level:t,slug:h},u=/^[\u4e00-\u9fa5]+$/.test(e),f=u?escape(e).replace(/\%/g,""):e.toLowerCase().replace(/[^\w]+/g,"-");i.push(d);var g="';return g+='',g+='',g+=this.atLink(a?this.emoji(n):this.emoji(e)),g+=""},l.pageBreak=function(e){return w.test(e)&&a.pageBreak&&(e='
                  '),e},l.paragraph=function(e){var i=/\$\$(.*)\$\$/g.test(e),o=/^\$\$(.*)\$\$$/.test(e),r=o?' class="'+t.classNames.tex+'"':"",n=a.tocm?/^(\[TOC\]|\[TOCM\])$/.test(e):/^\[TOC\]$/.test(e),s=/^\[TOCM\]$/.test(e);e=!o&&i?e.replace(/(\$\$([^\$]*)\$\$)+/g,function(e,i){return''+i.replace(/\$/g,"")+""}):o?e.replace(/\$/g,""):e;var l='
                  '+e+"
                  ";return n?s?'
                  '+l+"

                  ":l:w.test(e)?this.pageBreak(e):""+this.atLink(this.emoji(e))+"

                  \n"},l.code=function(e,i,o){return"seq"===i||"sequence"===i?'
                  '+e+"
                  ":"flow"===i?'
                  '+e+"
                  ":"math"===i||"latex"===i||"katex"===i?'

                  '+e+"

                  ":s.Renderer.prototype.code.apply(this,arguments)},l.tablecell=function(e,t){var i=t.header?"th":"td",o=t.align?"<"+i+' style="text-align:'+t.align+'">':"<"+i+">";return o+this.atLink(this.emoji(e))+"\n"},l.listitem=function(e){return a.taskList&&/^\s*\[[x\s]\]\s*/.test(e)?(e=e.replace(/^\s*\[\s\]\s*/,' ').replace(/^\s*\[x\]\s*/,' '),'
                • '+this.atLink(this.emoji(e))+"
                • "):"
                • "+this.atLink(this.emoji(e))+"
                • "},l},t.markdownToCRenderer=function(e,t,i,o){var r="",n=0,a=this.classPrefix;o=o||1;for(var s=0,l=e.length;l>s;s++){var c=e[s].text,h=e[s].level;o>h||(r+=h>n?"":n>h?new Array(n-h+2).join("
              • "):"",r+='
              • '+c+"