diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/AttachmentController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/AttachmentController.java index 0bc2b6b40..43b909fe4 100755 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/AttachmentController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/AttachmentController.java @@ -153,11 +153,11 @@ public class AttachmentController { //压缩图片 Thumbnails.of(new StringBuffer(mediaPath.getAbsolutePath()).append("/").append(fileName).toString()).size(256, 256).keepAspectRatio(false).toFile(new StringBuffer(mediaPath.getAbsolutePath()).append("/").append(nameWithOutSuffix).append("_small.").append(fileSuffix).toString()); - + String filePath = new StringBuffer("/upload/").append(DateUtil.thisYear()).append("/").append(DateUtil.thisMonth()).append("/").append(fileName).toString(); //保存在数据库 Attachment attachment = new Attachment(); attachment.setAttachName(fileName); - attachment.setAttachPath(new StringBuffer("/upload/").append(DateUtil.thisYear()).append("/").append(DateUtil.thisMonth()).append("/").append(fileName).toString()); + attachment.setAttachPath(filePath); attachment.setAttachSmallPath(new StringBuffer("/upload/").append(DateUtil.thisYear()).append("/").append(DateUtil.thisMonth()).append("/").append(nameWithOutSuffix).append("_small.").append(fileSuffix).toString()); attachment.setAttachType(file.getContentType()); attachment.setAttachSuffix(new StringBuffer(".").append(fileSuffix).toString()); @@ -173,6 +173,7 @@ public class AttachmentController { result.put("success", 1); result.put("message", localeMessageUtil.getMessage("code.admin.attachment.upload-success")); result.put("url", attachment.getAttachPath()); + result.put("filename",filePath); } catch (Exception e) { log.error("上传文件失败:{}", e.getMessage()); result.put("success", 0); diff --git a/src/main/resources/static/plugins/editor.md/css/editormd.css b/src/main/resources/static/plugins/editor.md/css/editormd.css deleted file mode 100755 index 866644ef9..000000000 --- a/src/main/resources/static/plugins/editor.md/css/editormd.css +++ /dev/null @@ -1,4451 +0,0 @@ -/* - * Editor.md - * - * @file editormd.css - * @version v2.0.1 - * @description Open source online markdown editor. - * @license MIT License - * @author Pandao - * {@link https://github.com/pandao/editor.md} - * @updateTime 2018-03-29 - */ - -@charset "UTF-8"; -/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */ -.editormd { - width: 90%; - height: 640px; - margin: 0 auto; - text-align: left; - overflow: hidden; - position: relative; - margin-bottom: 15px; - border: 1px solid #ddd; - font-family: "Meiryo UI", "Microsoft YaHei", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, "Monaco", monospace, Tahoma, STXihei, "华文细黑", STHeiti, "Helvetica Neue", "Droid Sans", "wenquanyi micro hei", FreeSans, Arimo, Arial, SimSun, "宋体", Heiti, "黑体", sans-serif; -} -.editormd *, .editormd *:before, .editormd *:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.editormd a { - text-decoration: none; -} -.editormd img { - border: none; - vertical-align: middle; -} -.editormd > textarea, -.editormd .editormd-html-textarea, -.editormd .editormd-markdown-textarea { - width: 0; - height: 0; - outline: 0; - resize: none; -} -.editormd .editormd-html-textarea, -.editormd .editormd-markdown-textarea { - display: none; -} -.editormd input[type="text"], -.editormd input[type="button"], -.editormd input[type="submit"], -.editormd select, .editormd textarea, .editormd button { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - appearance: none; -} -.editormd ::-webkit-scrollbar { - height: 10px; - width: 7px; - background: rgba(0, 0, 0, 0.1); -} -.editormd ::-webkit-scrollbar:hover { - background: rgba(0, 0, 0, 0.2); -} -.editormd ::-webkit-scrollbar-thumb { - background: rgba(0, 0, 0, 0.3); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - -ms-border-radius: 6px; - -o-border-radius: 6px; - border-radius: 6px; -} -.editormd ::-webkit-scrollbar-thumb:hover { - -webkit-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25); - /* Webkit browsers */ - -moz-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25); - /* Firefox */ - -ms-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25); - /* IE9 */ - -o-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25); - /* Opera(Old) */ - box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.25); - /* IE9+, News */ - background-color: rgba(0, 0, 0, 0.4); -} - -.editormd-user-unselect { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - -o-user-select: none; - user-select: none; -} - -.editormd-toolbar { - width: 100%; - min-height: 37px; - background: #fff; - display: none; - position: absolute; - top: 0; - left: 0; - z-index: 10; - border-bottom: 1px solid #ddd; -} - -.editormd-toolbar-container { - padding: 0 8px; - min-height: 35px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - -o-user-select: none; - user-select: none; -} - -.editormd-menu { - margin: 0; - padding: 0; - list-style: none; -} -.editormd-menu > li { - margin: 0; - padding: 5px 1px; - display: inline-block; - position: relative; -} -.editormd-menu > li.divider { - display: inline-block; - text-indent: -9999px; - margin: 0 5px; - height: 65%; - border-right: 1px solid #ddd; -} -.editormd-menu > li > a { - outline: 0; - color: #666; - display: inline-block; - min-width: 24px; - font-size: 16px; - text-decoration: none; - text-align: center; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - -ms-border-radius: 2px; - -o-border-radius: 2px; - border-radius: 2px; - border: 1px solid #fff; - -webkit-transition: all 300ms ease-out; - /* Safari, Chrome */ - -moz-transition: all 300ms ease-out; - /* Firefox 4.0~16.0 */ - transition: all 300ms ease-out; - /* IE >9, FF >15, Opera >12.0 */ -} -.editormd-menu > li > a:hover, .editormd-menu > li > a.active { - border: 1px solid #ddd; - background: #eee; -} -.editormd-menu > li > a > .fa { - text-align: center; - display: block; - padding: 5px; -} -.editormd-menu > li > a > .editormd-bold { - padding: 5px 2px; - display: inline-block; - font-weight: bold; -} -.editormd-menu > li:hover .editormd-dropdown-menu { - display: block; -} -.editormd-menu > li + li > a { - margin-left: 3px; -} - -.editormd-dropdown-menu { - display: none; - background: #fff; - border: 1px solid #ddd; - width: 148px; - list-style: none; - position: absolute; - top: 33px; - left: 0; - z-index: 100; - -webkit-box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.15); - /* Webkit browsers */ - -moz-box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.15); - /* Firefox */ - -ms-box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.15); - /* IE9 */ - -o-box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.15); - /* Opera(Old) */ - box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.15); - /* IE9+, News */ -} -.editormd-dropdown-menu:before, .editormd-dropdown-menu:after { - width: 0; - height: 0; - display: block; - content: ""; - position: absolute; - top: -11px; - left: 8px; - border: 5px solid transparent; -} -.editormd-dropdown-menu:before { - border-bottom-color: #ccc; -} -.editormd-dropdown-menu:after { - border-bottom-color: #ffffff; - top: -10px; -} -.editormd-dropdown-menu > li > a { - color: #666; - display: block; - text-decoration: none; - padding: 8px 10px; -} -.editormd-dropdown-menu > li > a:hover { - background: #f6f6f6; - -webkit-transition: all 300ms ease-out; - /* Safari, Chrome */ - -moz-transition: all 300ms ease-out; - /* Firefox 4.0~16.0 */ - transition: all 300ms ease-out; - /* IE >9, FF >15, Opera >12.0 */ -} -.editormd-dropdown-menu > li + li { - border-top: 1px solid #ddd; -} - -.editormd-container { - margin: 0; - width: 100%; - height: 100%; - overflow: hidden; - padding: 35px 0 0; - position: relative; - background: #fff; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.editormd-dialog { - color: #666; - position: fixed; - z-index: 99999; - display: none; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); - /* Webkit browsers */ - -moz-box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); - /* Firefox */ - -ms-box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); - /* IE9 */ - -o-box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); - /* Opera(Old) */ - box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); - /* IE9+, News */ - background: #fff; - font-size: 14px; -} - -.editormd-dialog-container { - position: relative; - padding: 20px; - line-height: 1.4; -} -.editormd-dialog-container h1 { - font-size: 24px; - margin-bottom: 10px; -} -.editormd-dialog-container h1 .fa { - color: #2C7EEA; - padding-right: 5px; -} -.editormd-dialog-container h1 small { - padding-left: 5px; - font-weight: normal; - font-size: 12px; - color: #999; -} -.editormd-dialog-container select { - color: #999; - padding: 3px 8px; - border: 1px solid #ddd; -} - -.editormd-dialog-close { - position: absolute; - top: 12px; - right: 15px; - font-size: 18px; - color: #ccc; - -webkit-transition: color 300ms ease-out; - /* Safari, Chrome */ - -moz-transition: color 300ms ease-out; - /* Firefox 4.0~16.0 */ - transition: color 300ms ease-out; - /* IE >9, FF >15, Opera >12.0 */ -} -.editormd-dialog-close:hover { - color: #999; -} - -.editormd-dialog-header { - padding: 11px 20px; - border-bottom: 1px solid #eee; - -webkit-transition: background 300ms ease-out; - /* Safari, Chrome */ - -moz-transition: background 300ms ease-out; - /* Firefox 4.0~16.0 */ - transition: background 300ms ease-out; - /* IE >9, FF >15, Opera >12.0 */ -} -.editormd-dialog-header:hover { - background: #f6f6f6; -} - -.editormd-dialog-title { - font-size: 14px; -} - -.editormd-dialog-footer { - padding: 10px 0 0 0; - text-align: right; -} - -.editormd-dialog-info { - width: 420px; -} -.editormd-dialog-info h1 { - font-weight: normal; -} -.editormd-dialog-info .editormd-dialog-container { - padding: 20px 25px 25px; -} -.editormd-dialog-info .editormd-dialog-close { - top: 10px; - right: 10px; -} -.editormd-dialog-info p > a, .editormd-dialog-info .hover-link:hover { - color: #2196F3; -} -.editormd-dialog-info .hover-link { - color: #666; -} -.editormd-dialog-info a .fa-external-link { - display: none; -} -.editormd-dialog-info a:hover { - color: #2196F3; -} -.editormd-dialog-info a:hover .fa-external-link { - display: inline-block; -} - -.editormd-mask, -.editormd-container-mask, -.editormd-dialog-mask { - display: none; - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; -} - -.editormd-mask, -.editormd-dialog-mask-bg { - background: #fff; - opacity: 0.5; - filter: alpha(opacity=50); -} - -.editormd-mask { - position: fixed; - background: #000; - opacity: 0.2; - /* W3C */ - filter: alpha(opacity=20); - /* IE */ - z-index: 99998; -} - -.editormd-container-mask, -.editormd-dialog-mask-con { - background: url(../images/loading.gif) no-repeat center center; - -webkit-background-size: 32px 32px; - /* Chrome, iOS, Safari */ - -moz-background-size: 32px 32px; - /* Firefox 3.6~4.0 */ - -o-background-size: 32px 32px; - /* Opera 9.5 */ - background-size: 32px 32px; - /* IE9+, New */ -} - -.editormd-container-mask { - z-index: 20; - display: block; - background-color: #fff; -} - -@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2) { - .editormd-container-mask, - .editormd-dialog-mask-con { - background-image: url(../images/loading@2x.gif); - } -} -@media only screen and (-webkit-min-device-pixel-ratio: 3), only screen and (min-device-pixel-ratio: 3) { - .editormd-container-mask, - .editormd-dialog-mask-con { - background-image: url(../images/loading@3x.gif); - } -} -.editormd-code-block-dialog textarea, -.editormd-preformatted-text-dialog textarea { - width: 100%; - height: 400px; - margin-bottom: 6px; - overflow: auto; - border: 1px solid #eee; - background: #fff; - padding: 15px; - resize: none; -} - -.editormd-code-toolbar { - color: #999; - font-size: 14px; - margin: -5px 0 10px; -} - -.editormd-grid-table { - width: 99%; - display: table; - border: 1px solid #ddd; - border-collapse: collapse; -} - -.editormd-grid-table-row { - width: 100%; - display: table-row; -} -.editormd-grid-table-row a { - font-size: 1.4em; - width: 5%; - height: 36px; - color: #999; - text-align: center; - display: table-cell; - vertical-align: middle; - border: 1px solid #ddd; - text-decoration: none; - -webkit-transition: background-color 300ms ease-out, color 100ms ease-in; - /* Safari, Chrome */ - -moz-transition: background-color 300ms ease-out, color 100ms ease-in; - /* Firefox 4.0~16.0 */ - transition: background-color 300ms ease-out, color 100ms ease-in; - /* IE >9, FF >15, Opera >12.0 */ -} -.editormd-grid-table-row a.selected { - color: #666; - background-color: #eee; -} -.editormd-grid-table-row a:hover { - color: #777; - background-color: #f6f6f6; -} - -.editormd-tab-head { - list-style: none; - border-bottom: 1px solid #ddd; -} -.editormd-tab-head li { - display: inline-block; -} -.editormd-tab-head li a { - color: #999; - display: block; - padding: 6px 12px 5px; - text-align: center; - text-decoration: none; - margin-bottom: -1px; - border: 1px solid #ddd; - -webkit-border-top-left-radius: 3px; - -moz-border-top-left-radius: 3px; - -ms-border-top-left-radius: 3px; - -o-border-top-left-radius: 3px; - border-top-left-radius: 3px; - -webkit-border-top-right-radius: 3px; - -moz-border-top-right-radius: 3px; - -ms-border-top-right-radius: 3px; - -o-border-top-right-radius: 3px; - border-top-right-radius: 3px; - background: #f6f6f6; - -webkit-transition: all 300ms ease-out; - /* Safari, Chrome */ - -moz-transition: all 300ms ease-out; - /* Firefox 4.0~16.0 */ - transition: all 300ms ease-out; - /* IE >9, FF >15, Opera >12.0 */ -} -.editormd-tab-head li a:hover { - color: #666; - background: #eee; -} -.editormd-tab-head li.active a { - color: #666; - background: #fff; - border-bottom-color: #fff; -} -.editormd-tab-head li + li { - margin-left: 3px; -} - -.editormd-tab-box { - padding: 20px 0; -} - -.editormd-form { - color: #666; -} -.editormd-form label { - float: left; - display: block; - width: 75px; - text-align: left; - padding: 7px 0 15px 5px; - margin: 0 0 2px; - font-weight: normal; -} -.editormd-form br { - clear: both; -} -.editormd-form iframe { - display: none; -} -.editormd-form input:focus { - outline: 0; -} -.editormd-form input[type="text"], .editormd-form input[type="number"] { - color: #999; - padding: 8px; - border: 1px solid #ddd; -} -.editormd-form input[type="number"] { - width: 40px; - display: inline-block; - padding: 6px 8px; -} -.editormd-form input[type="text"] { - display: inline-block; - width: 264px; -} -.editormd-form .fa-btns { - display: inline-block; -} -.editormd-form .fa-btns a { - color: #999; - padding: 7px 10px 0 0; - display: inline-block; - text-decoration: none; - text-align: center; -} -.editormd-form .fa-btns .fa { - font-size: 1.3em; -} -.editormd-form .fa-btns label { - float: none; - display: inline-block; - width: auto; - text-align: left; - padding: 0 0 0 5px; - cursor: pointer; -} - -.editormd-form input[type="submit"], .editormd-form .editormd-btn, .editormd-form button, -.editormd-dialog-container input[type="submit"], -.editormd-dialog-container .editormd-btn, -.editormd-dialog-container button, -.editormd-dialog-footer input[type="submit"], -.editormd-dialog-footer .editormd-btn, -.editormd-dialog-footer button { - color: #666; - min-width: 75px; - cursor: pointer; - background: #fff; - padding: 7px 10px; - border: 1px solid #ddd; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - -webkit-transition: background 300ms ease-out; - /* Safari, Chrome */ - -moz-transition: background 300ms ease-out; - /* Firefox 4.0~16.0 */ - transition: background 300ms ease-out; - /* IE >9, FF >15, Opera >12.0 */ -} -.editormd-form input[type="submit"]:hover, .editormd-form .editormd-btn:hover, .editormd-form button:hover, -.editormd-dialog-container input[type="submit"]:hover, -.editormd-dialog-container .editormd-btn:hover, -.editormd-dialog-container button:hover, -.editormd-dialog-footer input[type="submit"]:hover, -.editormd-dialog-footer .editormd-btn:hover, -.editormd-dialog-footer button:hover { - background: #eee; -} -.editormd-form .editormd-btn, -.editormd-dialog-container .editormd-btn, -.editormd-dialog-footer .editormd-btn { - padding: 5px 8px 4px\0; -} -.editormd-form .editormd-btn + .editormd-btn, -.editormd-dialog-container .editormd-btn + .editormd-btn, -.editormd-dialog-footer .editormd-btn + .editormd-btn { - margin-left: 8px; -} - -.editormd-file-input { - width: 75px; - height: 32px; - margin-left: 8px; - position: relative; - display: inline-block; -} -.editormd-file-input input[type="file"] { - width: 75px; - height: 32px; - opacity: 0; - cursor: pointer; - background: #000; - display: inline-block; - position: absolute; - top: 0; - right: 0; -} -.editormd-file-input input[type="file"]::-webkit-file-upload-button { - visibility: hidden; -} -.editormd-file-input:hover input[type="submit"] { - background: #eee; -} - -.editormd .CodeMirror, .editormd-preview { - display: inline-block; - width: 50%; - height: 100%; - vertical-align: top; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - margin: 0; -} - -.editormd-preview { - position: absolute; - top: 35px; - right: 0; - right: -1px\0; - overflow: auto; - line-height: 1.6; - display: none; - background: #fff; - z-index: 10; -} - -.editormd .CodeMirror { - z-index: 10; - float: left; - border-right: 1px solid #ddd; - font-size: 14px; - font-family: "YaHei Consolas Hybrid", Consolas, "微软雅黑", "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, "Monaco", courier, monospace; - line-height: 1.6; - margin-top: 35px; -} -.editormd .CodeMirror pre { - font-size: 14px; - padding: 0 12px; -} -.editormd .CodeMirror-linenumbers { - padding: 0 5px; -} -.editormd .CodeMirror-selected { - background: #70B7FF; -} -.editormd .CodeMirror-focused .CodeMirror-selected { - background: #70B7FF; -} -.editormd .CodeMirror, .editormd .CodeMirror-scroll, .editormd .editormd-preview { - -webkit-overflow-scrolling: touch; -} -.editormd .styled-background { - background-color: #ff7; -} -.editormd .CodeMirror-focused .cm-matchhighlight { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAFklEQVQI12NgYGBgkKzc8x9CMDAwAAAmhwSbidEoSQAAAABJRU5ErkJggg==); - background-position: bottom; - background-repeat: repeat-x; -} -.editormd .CodeMirror-empty.CodeMirror-focused { - outline: none; -} -.editormd .CodeMirror pre.CodeMirror-placeholder { - color: #999; -} -.editormd .cm-trailingspace { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAACCAYAAAB/qH1jAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QUXCToH00Y1UgAAACFJREFUCNdjPMDBUc/AwNDAAAFMTAwMDA0OP34wQgX/AQBYgwYEx4f9lQAAAABJRU5ErkJggg==); - background-position: bottom left; - background-repeat: repeat-x; -} -.editormd .cm-tab { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=); - background-position: right; - background-repeat: no-repeat; -} - -/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */ -/*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ -/* FONT PATH - * -------------------------- */ -@font-face { - font-family: 'FontAwesome'; - src: url("../fonts/fontawesome-webfont.eot?v=4.3.0"); - src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.3.0") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.3.0") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.3.0") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular") format("svg"); - font-weight: normal; - font-style: normal; -} -.fa { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); -} - -/* makes the font 33% larger relative to the icon container */ -.fa-lg { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; -} - -.fa-2x { - font-size: 2em; -} - -.fa-3x { - font-size: 3em; -} - -.fa-4x { - font-size: 4em; -} - -.fa-5x { - font-size: 5em; -} - -.fa-fw { - width: 1.28571429em; - text-align: center; -} - -.fa-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; -} - -.fa-ul > li { - position: relative; -} - -.fa-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; -} - -.fa-li.fa-lg { - left: -1.85714286em; -} - -.fa-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; -} - -.pull-right { - float: right; -} - -.pull-left { - float: left; -} - -.fa.pull-left { - margin-right: .3em; -} - -.fa.pull-right { - margin-left: .3em; -} - -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} - -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} - -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -.fa-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} - -.fa-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} - -.fa-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} - -.fa-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} - -.fa-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} - -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - filter: none; -} - -.fa-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} - -.fa-stack-1x, -.fa-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} - -.fa-stack-1x { - line-height: inherit; -} - -.fa-stack-2x { - font-size: 2em; -} - -.fa-inverse { - color: #ffffff; -} - -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.fa-glass:before { - content: "\f000"; -} - -.fa-music:before { - content: "\f001"; -} - -.fa-search:before { - content: "\f002"; -} - -.fa-envelope-o:before { - content: "\f003"; -} - -.fa-heart:before { - content: "\f004"; -} - -.fa-star:before { - content: "\f005"; -} - -.fa-star-o:before { - content: "\f006"; -} - -.fa-user:before { - content: "\f007"; -} - -.fa-film:before { - content: "\f008"; -} - -.fa-th-large:before { - content: "\f009"; -} - -.fa-th:before { - content: "\f00a"; -} - -.fa-th-list:before { - content: "\f00b"; -} - -.fa-check:before { - content: "\f00c"; -} - -.fa-remove:before, -.fa-close:before, -.fa-times:before { - content: "\f00d"; -} - -.fa-search-plus:before { - content: "\f00e"; -} - -.fa-search-minus:before { - content: "\f010"; -} - -.fa-power-off:before { - content: "\f011"; -} - -.fa-signal:before { - content: "\f012"; -} - -.fa-gear:before, -.fa-cog:before { - content: "\f013"; -} - -.fa-trash-o:before { - content: "\f014"; -} - -.fa-home:before { - content: "\f015"; -} - -.fa-file-o:before { - content: "\f016"; -} - -.fa-clock-o:before { - content: "\f017"; -} - -.fa-road:before { - content: "\f018"; -} - -.fa-download:before { - content: "\f019"; -} - -.fa-arrow-circle-o-down:before { - content: "\f01a"; -} - -.fa-arrow-circle-o-up:before { - content: "\f01b"; -} - -.fa-inbox:before { - content: "\f01c"; -} - -.fa-play-circle-o:before { - content: "\f01d"; -} - -.fa-rotate-right:before, -.fa-repeat:before { - content: "\f01e"; -} - -.fa-refresh:before { - content: "\f021"; -} - -.fa-list-alt:before { - content: "\f022"; -} - -.fa-lock:before { - content: "\f023"; -} - -.fa-flag:before { - content: "\f024"; -} - -.fa-headphones:before { - content: "\f025"; -} - -.fa-volume-off:before { - content: "\f026"; -} - -.fa-volume-down:before { - content: "\f027"; -} - -.fa-volume-up:before { - content: "\f028"; -} - -.fa-qrcode:before { - content: "\f029"; -} - -.fa-barcode:before { - content: "\f02a"; -} - -.fa-tag:before { - content: "\f02b"; -} - -.fa-tags:before { - content: "\f02c"; -} - -.fa-book:before { - content: "\f02d"; -} - -.fa-bookmark:before { - content: "\f02e"; -} - -.fa-print:before { - content: "\f02f"; -} - -.fa-camera:before { - content: "\f030"; -} - -.fa-font:before { - content: "\f031"; -} - -.fa-bold:before { - content: "\f032"; -} - -.fa-italic:before { - content: "\f033"; -} - -.fa-text-height:before { - content: "\f034"; -} - -.fa-text-width:before { - content: "\f035"; -} - -.fa-align-left:before { - content: "\f036"; -} - -.fa-align-center:before { - content: "\f037"; -} - -.fa-align-right:before { - content: "\f038"; -} - -.fa-align-justify:before { - content: "\f039"; -} - -.fa-list:before { - content: "\f03a"; -} - -.fa-dedent:before, -.fa-outdent:before { - content: "\f03b"; -} - -.fa-indent:before { - content: "\f03c"; -} - -.fa-video-camera:before { - content: "\f03d"; -} - -.fa-photo:before, -.fa-image:before, -.fa-picture-o:before { - content: "\f03e"; -} - -.fa-pencil:before { - content: "\f040"; -} - -.fa-map-marker:before { - content: "\f041"; -} - -.fa-adjust:before { - content: "\f042"; -} - -.fa-tint:before { - content: "\f043"; -} - -.fa-edit:before, -.fa-pencil-square-o:before { - content: "\f044"; -} - -.fa-share-square-o:before { - content: "\f045"; -} - -.fa-check-square-o:before { - content: "\f046"; -} - -.fa-arrows:before { - content: "\f047"; -} - -.fa-step-backward:before { - content: "\f048"; -} - -.fa-fast-backward:before { - content: "\f049"; -} - -.fa-backward:before { - content: "\f04a"; -} - -.fa-play:before { - content: "\f04b"; -} - -.fa-pause:before { - content: "\f04c"; -} - -.fa-stop:before { - content: "\f04d"; -} - -.fa-forward:before { - content: "\f04e"; -} - -.fa-fast-forward:before { - content: "\f050"; -} - -.fa-step-forward:before { - content: "\f051"; -} - -.fa-eject:before { - content: "\f052"; -} - -.fa-chevron-left:before { - content: "\f053"; -} - -.fa-chevron-right:before { - content: "\f054"; -} - -.fa-plus-circle:before { - content: "\f055"; -} - -.fa-minus-circle:before { - content: "\f056"; -} - -.fa-times-circle:before { - content: "\f057"; -} - -.fa-check-circle:before { - content: "\f058"; -} - -.fa-question-circle:before { - content: "\f059"; -} - -.fa-info-circle:before { - content: "\f05a"; -} - -.fa-crosshairs:before { - content: "\f05b"; -} - -.fa-times-circle-o:before { - content: "\f05c"; -} - -.fa-check-circle-o:before { - content: "\f05d"; -} - -.fa-ban:before { - content: "\f05e"; -} - -.fa-arrow-left:before { - content: "\f060"; -} - -.fa-arrow-right:before { - content: "\f061"; -} - -.fa-arrow-up:before { - content: "\f062"; -} - -.fa-arrow-down:before { - content: "\f063"; -} - -.fa-mail-forward:before, -.fa-share:before { - content: "\f064"; -} - -.fa-expand:before { - content: "\f065"; -} - -.fa-compress:before { - content: "\f066"; -} - -.fa-plus:before { - content: "\f067"; -} - -.fa-minus:before { - content: "\f068"; -} - -.fa-asterisk:before { - content: "\f069"; -} - -.fa-exclamation-circle:before { - content: "\f06a"; -} - -.fa-gift:before { - content: "\f06b"; -} - -.fa-leaf:before { - content: "\f06c"; -} - -.fa-fire:before { - content: "\f06d"; -} - -.fa-eye:before { - content: "\f06e"; -} - -.fa-eye-slash:before { - content: "\f070"; -} - -.fa-warning:before, -.fa-exclamation-triangle:before { - content: "\f071"; -} - -.fa-plane:before { - content: "\f072"; -} - -.fa-calendar:before { - content: "\f073"; -} - -.fa-random:before { - content: "\f074"; -} - -.fa-comment:before { - content: "\f075"; -} - -.fa-magnet:before { - content: "\f076"; -} - -.fa-chevron-up:before { - content: "\f077"; -} - -.fa-chevron-down:before { - content: "\f078"; -} - -.fa-retweet:before { - content: "\f079"; -} - -.fa-shopping-cart:before { - content: "\f07a"; -} - -.fa-folder:before { - content: "\f07b"; -} - -.fa-folder-open:before { - content: "\f07c"; -} - -.fa-arrows-v:before { - content: "\f07d"; -} - -.fa-arrows-h:before { - content: "\f07e"; -} - -.fa-bar-chart-o:before, -.fa-bar-chart:before { - content: "\f080"; -} - -.fa-twitter-square:before { - content: "\f081"; -} - -.fa-facebook-square:before { - content: "\f082"; -} - -.fa-camera-retro:before { - content: "\f083"; -} - -.fa-key:before { - content: "\f084"; -} - -.fa-gears:before, -.fa-cogs:before { - content: "\f085"; -} - -.fa-comments:before { - content: "\f086"; -} - -.fa-thumbs-o-up:before { - content: "\f087"; -} - -.fa-thumbs-o-down:before { - content: "\f088"; -} - -.fa-star-half:before { - content: "\f089"; -} - -.fa-heart-o:before { - content: "\f08a"; -} - -.fa-sign-out:before { - content: "\f08b"; -} - -.fa-linkedin-square:before { - content: "\f08c"; -} - -.fa-thumb-tack:before { - content: "\f08d"; -} - -.fa-external-link:before { - content: "\f08e"; -} - -.fa-sign-in:before { - content: "\f090"; -} - -.fa-trophy:before { - content: "\f091"; -} - -.fa-github-square:before { - content: "\f092"; -} - -.fa-upload:before { - content: "\f093"; -} - -.fa-lemon-o:before { - content: "\f094"; -} - -.fa-phone:before { - content: "\f095"; -} - -.fa-square-o:before { - content: "\f096"; -} - -.fa-bookmark-o:before { - content: "\f097"; -} - -.fa-phone-square:before { - content: "\f098"; -} - -.fa-twitter:before { - content: "\f099"; -} - -.fa-facebook-f:before, -.fa-facebook:before { - content: "\f09a"; -} - -.fa-github:before { - content: "\f09b"; -} - -.fa-unlock:before { - content: "\f09c"; -} - -.fa-credit-card:before { - content: "\f09d"; -} - -.fa-rss:before { - content: "\f09e"; -} - -.fa-hdd-o:before { - content: "\f0a0"; -} - -.fa-bullhorn:before { - content: "\f0a1"; -} - -.fa-bell:before { - content: "\f0f3"; -} - -.fa-certificate:before { - content: "\f0a3"; -} - -.fa-hand-o-right:before { - content: "\f0a4"; -} - -.fa-hand-o-left:before { - content: "\f0a5"; -} - -.fa-hand-o-up:before { - content: "\f0a6"; -} - -.fa-hand-o-down:before { - content: "\f0a7"; -} - -.fa-arrow-circle-left:before { - content: "\f0a8"; -} - -.fa-arrow-circle-right:before { - content: "\f0a9"; -} - -.fa-arrow-circle-up:before { - content: "\f0aa"; -} - -.fa-arrow-circle-down:before { - content: "\f0ab"; -} - -.fa-globe:before { - content: "\f0ac"; -} - -.fa-wrench:before { - content: "\f0ad"; -} - -.fa-tasks:before { - content: "\f0ae"; -} - -.fa-filter:before { - content: "\f0b0"; -} - -.fa-briefcase:before { - content: "\f0b1"; -} - -.fa-arrows-alt:before { - content: "\f0b2"; -} - -.fa-group:before, -.fa-users:before { - content: "\f0c0"; -} - -.fa-chain:before, -.fa-link:before { - content: "\f0c1"; -} - -.fa-cloud:before { - content: "\f0c2"; -} - -.fa-flask:before { - content: "\f0c3"; -} - -.fa-cut:before, -.fa-scissors:before { - content: "\f0c4"; -} - -.fa-copy:before, -.fa-files-o:before { - content: "\f0c5"; -} - -.fa-paperclip:before { - content: "\f0c6"; -} - -.fa-save:before, -.fa-floppy-o:before { - content: "\f0c7"; -} - -.fa-square:before { - content: "\f0c8"; -} - -.fa-navicon:before, -.fa-reorder:before, -.fa-bars:before { - content: "\f0c9"; -} - -.fa-list-ul:before { - content: "\f0ca"; -} - -.fa-list-ol:before { - content: "\f0cb"; -} - -.fa-strikethrough:before { - content: "\f0cc"; -} - -.fa-underline:before { - content: "\f0cd"; -} - -.fa-table:before { - content: "\f0ce"; -} - -.fa-magic:before { - content: "\f0d0"; -} - -.fa-truck:before { - content: "\f0d1"; -} - -.fa-pinterest:before { - content: "\f0d2"; -} - -.fa-pinterest-square:before { - content: "\f0d3"; -} - -.fa-google-plus-square:before { - content: "\f0d4"; -} - -.fa-google-plus:before { - content: "\f0d5"; -} - -.fa-money:before { - content: "\f0d6"; -} - -.fa-caret-down:before { - content: "\f0d7"; -} - -.fa-caret-up:before { - content: "\f0d8"; -} - -.fa-caret-left:before { - content: "\f0d9"; -} - -.fa-caret-right:before { - content: "\f0da"; -} - -.fa-columns:before { - content: "\f0db"; -} - -.fa-unsorted:before, -.fa-sort:before { - content: "\f0dc"; -} - -.fa-sort-down:before, -.fa-sort-desc:before { - content: "\f0dd"; -} - -.fa-sort-up:before, -.fa-sort-asc:before { - content: "\f0de"; -} - -.fa-envelope:before { - content: "\f0e0"; -} - -.fa-linkedin:before { - content: "\f0e1"; -} - -.fa-rotate-left:before, -.fa-undo:before { - content: "\f0e2"; -} - -.fa-legal:before, -.fa-gavel:before { - content: "\f0e3"; -} - -.fa-dashboard:before, -.fa-tachometer:before { - content: "\f0e4"; -} - -.fa-comment-o:before { - content: "\f0e5"; -} - -.fa-comments-o:before { - content: "\f0e6"; -} - -.fa-flash:before, -.fa-bolt:before { - content: "\f0e7"; -} - -.fa-sitemap:before { - content: "\f0e8"; -} - -.fa-umbrella:before { - content: "\f0e9"; -} - -.fa-paste:before, -.fa-clipboard:before { - content: "\f0ea"; -} - -.fa-lightbulb-o:before { - content: "\f0eb"; -} - -.fa-exchange:before { - content: "\f0ec"; -} - -.fa-cloud-download:before { - content: "\f0ed"; -} - -.fa-cloud-upload:before { - content: "\f0ee"; -} - -.fa-user-md:before { - content: "\f0f0"; -} - -.fa-stethoscope:before { - content: "\f0f1"; -} - -.fa-suitcase:before { - content: "\f0f2"; -} - -.fa-bell-o:before { - content: "\f0a2"; -} - -.fa-coffee:before { - content: "\f0f4"; -} - -.fa-cutlery:before { - content: "\f0f5"; -} - -.fa-file-text-o:before { - content: "\f0f6"; -} - -.fa-building-o:before { - content: "\f0f7"; -} - -.fa-hospital-o:before { - content: "\f0f8"; -} - -.fa-ambulance:before { - content: "\f0f9"; -} - -.fa-medkit:before { - content: "\f0fa"; -} - -.fa-fighter-jet:before { - content: "\f0fb"; -} - -.fa-beer:before { - content: "\f0fc"; -} - -.fa-h-square:before { - content: "\f0fd"; -} - -.fa-plus-square:before { - content: "\f0fe"; -} - -.fa-angle-double-left:before { - content: "\f100"; -} - -.fa-angle-double-right:before { - content: "\f101"; -} - -.fa-angle-double-up:before { - content: "\f102"; -} - -.fa-angle-double-down:before { - content: "\f103"; -} - -.fa-angle-left:before { - content: "\f104"; -} - -.fa-angle-right:before { - content: "\f105"; -} - -.fa-angle-up:before { - content: "\f106"; -} - -.fa-angle-down:before { - content: "\f107"; -} - -.fa-desktop:before { - content: "\f108"; -} - -.fa-laptop:before { - content: "\f109"; -} - -.fa-tablet:before { - content: "\f10a"; -} - -.fa-mobile-phone:before, -.fa-mobile:before { - content: "\f10b"; -} - -.fa-circle-o:before { - content: "\f10c"; -} - -.fa-quote-left:before { - content: "\f10d"; -} - -.fa-quote-right:before { - content: "\f10e"; -} - -.fa-spinner:before { - content: "\f110"; -} - -.fa-circle:before { - content: "\f111"; -} - -.fa-mail-reply:before, -.fa-reply:before { - content: "\f112"; -} - -.fa-github-alt:before { - content: "\f113"; -} - -.fa-folder-o:before { - content: "\f114"; -} - -.fa-folder-open-o:before { - content: "\f115"; -} - -.fa-smile-o:before { - content: "\f118"; -} - -.fa-frown-o:before { - content: "\f119"; -} - -.fa-meh-o:before { - content: "\f11a"; -} - -.fa-gamepad:before { - content: "\f11b"; -} - -.fa-keyboard-o:before { - content: "\f11c"; -} - -.fa-flag-o:before { - content: "\f11d"; -} - -.fa-flag-checkered:before { - content: "\f11e"; -} - -.fa-terminal:before { - content: "\f120"; -} - -.fa-code:before { - content: "\f121"; -} - -.fa-mail-reply-all:before, -.fa-reply-all:before { - content: "\f122"; -} - -.fa-star-half-empty:before, -.fa-star-half-full:before, -.fa-star-half-o:before { - content: "\f123"; -} - -.fa-location-arrow:before { - content: "\f124"; -} - -.fa-crop:before { - content: "\f125"; -} - -.fa-code-fork:before { - content: "\f126"; -} - -.fa-unlink:before, -.fa-chain-broken:before { - content: "\f127"; -} - -.fa-question:before { - content: "\f128"; -} - -.fa-info:before { - content: "\f129"; -} - -.fa-exclamation:before { - content: "\f12a"; -} - -.fa-superscript:before { - content: "\f12b"; -} - -.fa-subscript:before { - content: "\f12c"; -} - -.fa-eraser:before { - content: "\f12d"; -} - -.fa-puzzle-piece:before { - content: "\f12e"; -} - -.fa-microphone:before { - content: "\f130"; -} - -.fa-microphone-slash:before { - content: "\f131"; -} - -.fa-shield:before { - content: "\f132"; -} - -.fa-calendar-o:before { - content: "\f133"; -} - -.fa-fire-extinguisher:before { - content: "\f134"; -} - -.fa-rocket:before { - content: "\f135"; -} - -.fa-maxcdn:before { - content: "\f136"; -} - -.fa-chevron-circle-left:before { - content: "\f137"; -} - -.fa-chevron-circle-right:before { - content: "\f138"; -} - -.fa-chevron-circle-up:before { - content: "\f139"; -} - -.fa-chevron-circle-down:before { - content: "\f13a"; -} - -.fa-html5:before { - content: "\f13b"; -} - -.fa-css3:before { - content: "\f13c"; -} - -.fa-anchor:before { - content: "\f13d"; -} - -.fa-unlock-alt:before { - content: "\f13e"; -} - -.fa-bullseye:before { - content: "\f140"; -} - -.fa-ellipsis-h:before { - content: "\f141"; -} - -.fa-ellipsis-v:before { - content: "\f142"; -} - -.fa-rss-square:before { - content: "\f143"; -} - -.fa-play-circle:before { - content: "\f144"; -} - -.fa-ticket:before { - content: "\f145"; -} - -.fa-minus-square:before { - content: "\f146"; -} - -.fa-minus-square-o:before { - content: "\f147"; -} - -.fa-level-up:before { - content: "\f148"; -} - -.fa-level-down:before { - content: "\f149"; -} - -.fa-check-square:before { - content: "\f14a"; -} - -.fa-pencil-square:before { - content: "\f14b"; -} - -.fa-external-link-square:before { - content: "\f14c"; -} - -.fa-share-square:before { - content: "\f14d"; -} - -.fa-compass:before { - content: "\f14e"; -} - -.fa-toggle-down:before, -.fa-caret-square-o-down:before { - content: "\f150"; -} - -.fa-toggle-up:before, -.fa-caret-square-o-up:before { - content: "\f151"; -} - -.fa-toggle-right:before, -.fa-caret-square-o-right:before { - content: "\f152"; -} - -.fa-euro:before, -.fa-eur:before { - content: "\f153"; -} - -.fa-gbp:before { - content: "\f154"; -} - -.fa-dollar:before, -.fa-usd:before { - content: "\f155"; -} - -.fa-rupee:before, -.fa-inr:before { - content: "\f156"; -} - -.fa-cny:before, -.fa-rmb:before, -.fa-yen:before, -.fa-jpy:before { - content: "\f157"; -} - -.fa-ruble:before, -.fa-rouble:before, -.fa-rub:before { - content: "\f158"; -} - -.fa-won:before, -.fa-krw:before { - content: "\f159"; -} - -.fa-bitcoin:before, -.fa-btc:before { - content: "\f15a"; -} - -.fa-file:before { - content: "\f15b"; -} - -.fa-file-text:before { - content: "\f15c"; -} - -.fa-sort-alpha-asc:before { - content: "\f15d"; -} - -.fa-sort-alpha-desc:before { - content: "\f15e"; -} - -.fa-sort-amount-asc:before { - content: "\f160"; -} - -.fa-sort-amount-desc:before { - content: "\f161"; -} - -.fa-sort-numeric-asc:before { - content: "\f162"; -} - -.fa-sort-numeric-desc:before { - content: "\f163"; -} - -.fa-thumbs-up:before { - content: "\f164"; -} - -.fa-thumbs-down:before { - content: "\f165"; -} - -.fa-youtube-square:before { - content: "\f166"; -} - -.fa-youtube:before { - content: "\f167"; -} - -.fa-xing:before { - content: "\f168"; -} - -.fa-xing-square:before { - content: "\f169"; -} - -.fa-youtube-play:before { - content: "\f16a"; -} - -.fa-dropbox:before { - content: "\f16b"; -} - -.fa-stack-overflow:before { - content: "\f16c"; -} - -.fa-instagram:before { - content: "\f16d"; -} - -.fa-flickr:before { - content: "\f16e"; -} - -.fa-adn:before { - content: "\f170"; -} - -.fa-bitbucket:before { - content: "\f171"; -} - -.fa-bitbucket-square:before { - content: "\f172"; -} - -.fa-tumblr:before { - content: "\f173"; -} - -.fa-tumblr-square:before { - content: "\f174"; -} - -.fa-long-arrow-down:before { - content: "\f175"; -} - -.fa-long-arrow-up:before { - content: "\f176"; -} - -.fa-long-arrow-left:before { - content: "\f177"; -} - -.fa-long-arrow-right:before { - content: "\f178"; -} - -.fa-apple:before { - content: "\f179"; -} - -.fa-windows:before { - content: "\f17a"; -} - -.fa-android:before { - content: "\f17b"; -} - -.fa-linux:before { - content: "\f17c"; -} - -.fa-dribbble:before { - content: "\f17d"; -} - -.fa-skype:before { - content: "\f17e"; -} - -.fa-foursquare:before { - content: "\f180"; -} - -.fa-trello:before { - content: "\f181"; -} - -.fa-female:before { - content: "\f182"; -} - -.fa-male:before { - content: "\f183"; -} - -.fa-gittip:before, -.fa-gratipay:before { - content: "\f184"; -} - -.fa-sun-o:before { - content: "\f185"; -} - -.fa-moon-o:before { - content: "\f186"; -} - -.fa-archive:before { - content: "\f187"; -} - -.fa-bug:before { - content: "\f188"; -} - -.fa-vk:before { - content: "\f189"; -} - -.fa-weibo:before { - content: "\f18a"; -} - -.fa-renren:before { - content: "\f18b"; -} - -.fa-pagelines:before { - content: "\f18c"; -} - -.fa-stack-exchange:before { - content: "\f18d"; -} - -.fa-arrow-circle-o-right:before { - content: "\f18e"; -} - -.fa-arrow-circle-o-left:before { - content: "\f190"; -} - -.fa-toggle-left:before, -.fa-caret-square-o-left:before { - content: "\f191"; -} - -.fa-dot-circle-o:before { - content: "\f192"; -} - -.fa-wheelchair:before { - content: "\f193"; -} - -.fa-vimeo-square:before { - content: "\f194"; -} - -.fa-turkish-lira:before, -.fa-try:before { - content: "\f195"; -} - -.fa-plus-square-o:before { - content: "\f196"; -} - -.fa-space-shuttle:before { - content: "\f197"; -} - -.fa-slack:before { - content: "\f198"; -} - -.fa-envelope-square:before { - content: "\f199"; -} - -.fa-wordpress:before { - content: "\f19a"; -} - -.fa-openid:before { - content: "\f19b"; -} - -.fa-institution:before, -.fa-bank:before, -.fa-university:before { - content: "\f19c"; -} - -.fa-mortar-board:before, -.fa-graduation-cap:before { - content: "\f19d"; -} - -.fa-yahoo:before { - content: "\f19e"; -} - -.fa-google:before { - content: "\f1a0"; -} - -.fa-reddit:before { - content: "\f1a1"; -} - -.fa-reddit-square:before { - content: "\f1a2"; -} - -.fa-stumbleupon-circle:before { - content: "\f1a3"; -} - -.fa-stumbleupon:before { - content: "\f1a4"; -} - -.fa-delicious:before { - content: "\f1a5"; -} - -.fa-digg:before { - content: "\f1a6"; -} - -.fa-pied-piper:before { - content: "\f1a7"; -} - -.fa-pied-piper-alt:before { - content: "\f1a8"; -} - -.fa-drupal:before { - content: "\f1a9"; -} - -.fa-joomla:before { - content: "\f1aa"; -} - -.fa-language:before { - content: "\f1ab"; -} - -.fa-fax:before { - content: "\f1ac"; -} - -.fa-building:before { - content: "\f1ad"; -} - -.fa-child:before { - content: "\f1ae"; -} - -.fa-paw:before { - content: "\f1b0"; -} - -.fa-spoon:before { - content: "\f1b1"; -} - -.fa-cube:before { - content: "\f1b2"; -} - -.fa-cubes:before { - content: "\f1b3"; -} - -.fa-behance:before { - content: "\f1b4"; -} - -.fa-behance-square:before { - content: "\f1b5"; -} - -.fa-steam:before { - content: "\f1b6"; -} - -.fa-steam-square:before { - content: "\f1b7"; -} - -.fa-recycle:before { - content: "\f1b8"; -} - -.fa-automobile:before, -.fa-car:before { - content: "\f1b9"; -} - -.fa-cab:before, -.fa-taxi:before { - content: "\f1ba"; -} - -.fa-tree:before { - content: "\f1bb"; -} - -.fa-spotify:before { - content: "\f1bc"; -} - -.fa-deviantart:before { - content: "\f1bd"; -} - -.fa-soundcloud:before { - content: "\f1be"; -} - -.fa-database:before { - content: "\f1c0"; -} - -.fa-file-pdf-o:before { - content: "\f1c1"; -} - -.fa-file-word-o:before { - content: "\f1c2"; -} - -.fa-file-excel-o:before { - content: "\f1c3"; -} - -.fa-file-powerpoint-o:before { - content: "\f1c4"; -} - -.fa-file-photo-o:before, -.fa-file-picture-o:before, -.fa-file-image-o:before { - content: "\f1c5"; -} - -.fa-file-zip-o:before, -.fa-file-archive-o:before { - content: "\f1c6"; -} - -.fa-file-sound-o:before, -.fa-file-audio-o:before { - content: "\f1c7"; -} - -.fa-file-movie-o:before, -.fa-file-video-o:before { - content: "\f1c8"; -} - -.fa-file-code-o:before { - content: "\f1c9"; -} - -.fa-vine:before { - content: "\f1ca"; -} - -.fa-codepen:before { - content: "\f1cb"; -} - -.fa-jsfiddle:before { - content: "\f1cc"; -} - -.fa-life-bouy:before, -.fa-life-buoy:before, -.fa-life-saver:before, -.fa-support:before, -.fa-life-ring:before { - content: "\f1cd"; -} - -.fa-circle-o-notch:before { - content: "\f1ce"; -} - -.fa-ra:before, -.fa-rebel:before { - content: "\f1d0"; -} - -.fa-ge:before, -.fa-empire:before { - content: "\f1d1"; -} - -.fa-git-square:before { - content: "\f1d2"; -} - -.fa-git:before { - content: "\f1d3"; -} - -.fa-hacker-news:before { - content: "\f1d4"; -} - -.fa-tencent-weibo:before { - content: "\f1d5"; -} - -.fa-qq:before { - content: "\f1d6"; -} - -.fa-wechat:before, -.fa-weixin:before { - content: "\f1d7"; -} - -.fa-send:before, -.fa-paper-plane:before { - content: "\f1d8"; -} - -.fa-send-o:before, -.fa-paper-plane-o:before { - content: "\f1d9"; -} - -.fa-history:before { - content: "\f1da"; -} - -.fa-genderless:before, -.fa-circle-thin:before { - content: "\f1db"; -} - -.fa-header:before { - content: "\f1dc"; -} - -.fa-paragraph:before { - content: "\f1dd"; -} - -.fa-sliders:before { - content: "\f1de"; -} - -.fa-share-alt:before { - content: "\f1e0"; -} - -.fa-share-alt-square:before { - content: "\f1e1"; -} - -.fa-bomb:before { - content: "\f1e2"; -} - -.fa-soccer-ball-o:before, -.fa-futbol-o:before { - content: "\f1e3"; -} - -.fa-tty:before { - content: "\f1e4"; -} - -.fa-binoculars:before { - content: "\f1e5"; -} - -.fa-plug:before { - content: "\f1e6"; -} - -.fa-slideshare:before { - content: "\f1e7"; -} - -.fa-twitch:before { - content: "\f1e8"; -} - -.fa-yelp:before { - content: "\f1e9"; -} - -.fa-newspaper-o:before { - content: "\f1ea"; -} - -.fa-wifi:before { - content: "\f1eb"; -} - -.fa-calculator:before { - content: "\f1ec"; -} - -.fa-paypal:before { - content: "\f1ed"; -} - -.fa-google-wallet:before { - content: "\f1ee"; -} - -.fa-cc-visa:before { - content: "\f1f0"; -} - -.fa-cc-mastercard:before { - content: "\f1f1"; -} - -.fa-cc-discover:before { - content: "\f1f2"; -} - -.fa-cc-amex:before { - content: "\f1f3"; -} - -.fa-cc-paypal:before { - content: "\f1f4"; -} - -.fa-cc-stripe:before { - content: "\f1f5"; -} - -.fa-bell-slash:before { - content: "\f1f6"; -} - -.fa-bell-slash-o:before { - content: "\f1f7"; -} - -.fa-trash:before { - content: "\f1f8"; -} - -.fa-copyright:before { - content: "\f1f9"; -} - -.fa-at:before { - content: "\f1fa"; -} - -.fa-eyedropper:before { - content: "\f1fb"; -} - -.fa-paint-brush:before { - content: "\f1fc"; -} - -.fa-birthday-cake:before { - content: "\f1fd"; -} - -.fa-area-chart:before { - content: "\f1fe"; -} - -.fa-pie-chart:before { - content: "\f200"; -} - -.fa-line-chart:before { - content: "\f201"; -} - -.fa-lastfm:before { - content: "\f202"; -} - -.fa-lastfm-square:before { - content: "\f203"; -} - -.fa-toggle-off:before { - content: "\f204"; -} - -.fa-toggle-on:before { - content: "\f205"; -} - -.fa-bicycle:before { - content: "\f206"; -} - -.fa-bus:before { - content: "\f207"; -} - -.fa-ioxhost:before { - content: "\f208"; -} - -.fa-angellist:before { - content: "\f209"; -} - -.fa-cc:before { - content: "\f20a"; -} - -.fa-shekel:before, -.fa-sheqel:before, -.fa-ils:before { - content: "\f20b"; -} - -.fa-meanpath:before { - content: "\f20c"; -} - -.fa-buysellads:before { - content: "\f20d"; -} - -.fa-connectdevelop:before { - content: "\f20e"; -} - -.fa-dashcube:before { - content: "\f210"; -} - -.fa-forumbee:before { - content: "\f211"; -} - -.fa-leanpub:before { - content: "\f212"; -} - -.fa-sellsy:before { - content: "\f213"; -} - -.fa-shirtsinbulk:before { - content: "\f214"; -} - -.fa-simplybuilt:before { - content: "\f215"; -} - -.fa-skyatlas:before { - content: "\f216"; -} - -.fa-cart-plus:before { - content: "\f217"; -} - -.fa-cart-arrow-down:before { - content: "\f218"; -} - -.fa-diamond:before { - content: "\f219"; -} - -.fa-ship:before { - content: "\f21a"; -} - -.fa-user-secret:before { - content: "\f21b"; -} - -.fa-motorcycle:before { - content: "\f21c"; -} - -.fa-street-view:before { - content: "\f21d"; -} - -.fa-heartbeat:before { - content: "\f21e"; -} - -.fa-venus:before { - content: "\f221"; -} - -.fa-mars:before { - content: "\f222"; -} - -.fa-mercury:before { - content: "\f223"; -} - -.fa-transgender:before { - content: "\f224"; -} - -.fa-transgender-alt:before { - content: "\f225"; -} - -.fa-venus-double:before { - content: "\f226"; -} - -.fa-mars-double:before { - content: "\f227"; -} - -.fa-venus-mars:before { - content: "\f228"; -} - -.fa-mars-stroke:before { - content: "\f229"; -} - -.fa-mars-stroke-v:before { - content: "\f22a"; -} - -.fa-mars-stroke-h:before { - content: "\f22b"; -} - -.fa-neuter:before { - content: "\f22c"; -} - -.fa-facebook-official:before { - content: "\f230"; -} - -.fa-pinterest-p:before { - content: "\f231"; -} - -.fa-whatsapp:before { - content: "\f232"; -} - -.fa-server:before { - content: "\f233"; -} - -.fa-user-plus:before { - content: "\f234"; -} - -.fa-user-times:before { - content: "\f235"; -} - -.fa-hotel:before, -.fa-bed:before { - content: "\f236"; -} - -.fa-viacoin:before { - content: "\f237"; -} - -.fa-train:before { - content: "\f238"; -} - -.fa-subway:before { - content: "\f239"; -} - -.fa-medium:before { - content: "\f23a"; -} - -/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */ -@font-face { - font-family: 'editormd-logo'; - src: url("../fonts/editormd-logo.eot?-5y8q6h"); - src: url(".../fonts/editormd-logo.eot?#iefix-5y8q6h") format("embedded-opentype"), url("../fonts/editormd-logo.woff?-5y8q6h") format("woff"), url("../fonts/editormd-logo.ttf?-5y8q6h") format("truetype"), url("../fonts/editormd-logo.svg?-5y8q6h#icomoon") format("svg"); - font-weight: normal; - font-style: normal; -} -.editormd-logo, -.editormd-logo-1x, -.editormd-logo-2x, -.editormd-logo-3x, -.editormd-logo-4x, -.editormd-logo-5x, -.editormd-logo-6x, -.editormd-logo-7x, -.editormd-logo-8x { - font-family: 'editormd-logo'; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - font-size: inherit; - line-height: 1; - display: inline-block; - text-rendering: auto; - vertical-align: inherit; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.editormd-logo:before, -.editormd-logo-1x:before, -.editormd-logo-2x:before, -.editormd-logo-3x:before, -.editormd-logo-4x:before, -.editormd-logo-5x:before, -.editormd-logo-6x:before, -.editormd-logo-7x:before, -.editormd-logo-8x:before { - content: "\e1987"; - /* - HTML Entity 󡦇 - example: - */ -} - -.editormd-logo-1x { - font-size: 1em; -} - -.editormd-logo-lg { - font-size: 1.2em; -} - -.editormd-logo-2x { - font-size: 2em; -} - -.editormd-logo-3x { - font-size: 3em; -} - -.editormd-logo-4x { - font-size: 4em; -} - -.editormd-logo-5x { - font-size: 5em; -} - -.editormd-logo-6x { - font-size: 6em; -} - -.editormd-logo-7x { - font-size: 7em; -} - -.editormd-logo-8x { - font-size: 8em; -} - -.editormd-logo-color { - color: #2196F3; -} - -/*! github-markdown-css | The MIT License (MIT) | Copyright (c) Sindre Sorhus (sindresorhus.com) | https://github.com/sindresorhus/github-markdown-css */ -@font-face { - font-family: octicons-anchor; - src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAYcAA0AAAAACjQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABwAAAAca8vGTk9TLzIAAAFMAAAARAAAAFZG1VHVY21hcAAAAZAAAAA+AAABQgAP9AdjdnQgAAAB0AAAAAQAAAAEACICiGdhc3AAAAHUAAAACAAAAAj//wADZ2x5ZgAAAdwAAADRAAABEKyikaNoZWFkAAACsAAAAC0AAAA2AtXoA2hoZWEAAALgAAAAHAAAACQHngNFaG10eAAAAvwAAAAQAAAAEAwAACJsb2NhAAADDAAAAAoAAAAKALIAVG1heHAAAAMYAAAAHwAAACABEAB2bmFtZQAAAzgAAALBAAAFu3I9x/Nwb3N0AAAF/AAAAB0AAAAvaoFvbwAAAAEAAAAAzBdyYwAAAADP2IQvAAAAAM/bz7t4nGNgZGFgnMDAysDB1Ml0hoGBoR9CM75mMGLkYGBgYmBlZsAKAtJcUxgcPsR8iGF2+O/AEMPsznAYKMwIkgMA5REMOXicY2BgYGaAYBkGRgYQsAHyGMF8FgYFIM0ChED+h5j//yEk/3KoSgZGNgYYk4GRCUgwMaACRoZhDwCs7QgGAAAAIgKIAAAAAf//AAJ4nHWMMQrCQBBF/0zWrCCIKUQsTDCL2EXMohYGSSmorScInsRGL2DOYJe0Ntp7BK+gJ1BxF1stZvjz/v8DRghQzEc4kIgKwiAppcA9LtzKLSkdNhKFY3HF4lK69ExKslx7Xa+vPRVS43G98vG1DnkDMIBUgFN0MDXflU8tbaZOUkXUH0+U27RoRpOIyCKjbMCVejwypzJJG4jIwb43rfl6wbwanocrJm9XFYfskuVC5K/TPyczNU7b84CXcbxks1Un6H6tLH9vf2LRnn8Ax7A5WQAAAHicY2BkYGAA4teL1+yI57f5ysDNwgAC529f0kOmWRiYVgEpDgYmEA8AUzEKsQAAAHicY2BkYGB2+O/AEMPCAAJAkpEBFbAAADgKAe0EAAAiAAAAAAQAAAAEAAAAAAAAKgAqACoAiAAAeJxjYGRgYGBhsGFgYgABEMkFhAwM/xn0QAIAD6YBhwB4nI1Ty07cMBS9QwKlQapQW3VXySvEqDCZGbGaHULiIQ1FKgjWMxknMfLEke2A+IJu+wntrt/QbVf9gG75jK577Lg8K1qQPCfnnnt8fX1NRC/pmjrk/zprC+8D7tBy9DHgBXoWfQ44Av8t4Bj4Z8CLtBL9CniJluPXASf0Lm4CXqFX8Q84dOLnMB17N4c7tBo1AS/Qi+hTwBH4rwHHwN8DXqQ30XXAS7QaLwSc0Gn8NuAVWou/gFmnjLrEaEh9GmDdDGgL3B4JsrRPDU2hTOiMSuJUIdKQQayiAth69r6akSSFqIJuA19TrzCIaY8sIoxyrNIrL//pw7A2iMygkX5vDj+G+kuoLdX4GlGK/8Lnlz6/h9MpmoO9rafrz7ILXEHHaAx95s9lsI7AHNMBWEZHULnfAXwG9/ZqdzLI08iuwRloXE8kfhXYAvE23+23DU3t626rbs8/8adv+9DWknsHp3E17oCf+Z48rvEQNZ78paYM38qfk3v/u3l3u3GXN2Dmvmvpf1Srwk3pB/VSsp512bA/GG5i2WJ7wu430yQ5K3nFGiOqgtmSB5pJVSizwaacmUZzZhXLlZTq8qGGFY2YcSkqbth6aW1tRmlaCFs2016m5qn36SbJrqosG4uMV4aP2PHBmB3tjtmgN2izkGQyLWprekbIntJFing32a5rKWCN/SdSoga45EJykyQ7asZvHQ8PTm6cslIpwyeyjbVltNikc2HTR7YKh9LBl9DADC0U/jLcBZDKrMhUBfQBvXRzLtFtjU9eNHKin0x5InTqb8lNpfKv1s1xHzTXRqgKzek/mb7nB8RZTCDhGEX3kK/8Q75AmUM/eLkfA+0Hi908Kx4eNsMgudg5GLdRD7a84npi+YxNr5i5KIbW5izXas7cHXIMAau1OueZhfj+cOcP3P8MNIWLyYOBuxL6DRylJ4cAAAB4nGNgYoAALjDJyIAOWMCiTIxMLDmZedkABtIBygAAAA==) format("woff"); -} -.markdown-body { - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - color: #333; - overflow: hidden; - font-family: "Microsoft YaHei", Helvetica, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", "Monaco", monospace, Tahoma, STXihei, "华文细黑", STHeiti, "Helvetica Neue", "Droid Sans", "wenquanyi micro hei", FreeSans, Arimo, Arial, SimSun, "宋体", Heiti, "黑体", sans-serif; - font-size: 16px; - line-height: 1.6; - word-wrap: break-word; -} - -.markdown-body a { - background: transparent; -} - -.markdown-body a:active, -.markdown-body a:hover { - outline: 0; -} - -.markdown-body strong { - font-weight: bold; -} - -.markdown-body h1 { - font-size: 2em; - margin: 0.67em 0; -} - -.markdown-body img { - border: 0; -} - -.markdown-body hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -.markdown-body pre { - overflow: auto; -} - -.markdown-body code, -.markdown-body kbd, -.markdown-body pre { - font-family: "Meiryo UI", "YaHei Consolas Hybrid", Consolas, "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; - font-size: 1em; -} - -.markdown-body input { - color: inherit; - font: inherit; - margin: 0; -} - -.markdown-body html input[disabled] { - cursor: default; -} - -.markdown-body input { - line-height: normal; -} - -.markdown-body input[type="checkbox"] { - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; -} - -.markdown-body table { - border-collapse: collapse; - border-spacing: 0; -} - -.markdown-body td, -.markdown-body th { - padding: 0; -} - -.markdown-body * { - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.markdown-body input { - font: 13px/1.4 Helvetica, arial, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; -} - -.markdown-body a { - color: #4183c4; - text-decoration: none; -} - -.markdown-body a:hover, -.markdown-body a:active { - text-decoration: underline; -} - -.markdown-body hr { - height: 0; - margin: 15px 0; - overflow: hidden; - background: transparent; - border: 0; - border-bottom: 1px solid #ddd; -} - -.markdown-body hr:before { - display: table; - content: ""; -} - -.markdown-body hr:after { - display: table; - clear: both; - content: ""; -} - -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h5, -.markdown-body h6 { - margin-top: 15px; - margin-bottom: 15px; - line-height: 1.1; -} - -.markdown-body h1 { - font-size: 30px; -} - -.markdown-body h2 { - font-size: 21px; -} - -.markdown-body h3 { - font-size: 16px; -} - -.markdown-body h4 { - font-size: 14px; -} - -.markdown-body h5 { - font-size: 12px; -} - -.markdown-body h6 { - font-size: 11px; -} - -.markdown-body blockquote { - margin: 0; -} - -.markdown-body ul, -.markdown-body ol { - padding: 0; - margin-top: 0; - margin-bottom: 0; -} - -.markdown-body ol ol, -.markdown-body ul ol { - list-style-type: lower-roman; -} - -.markdown-body ul ul ol, -.markdown-body ul ol ol, -.markdown-body ol ul ol, -.markdown-body ol ol ol { - list-style-type: lower-alpha; -} - -.markdown-body dd { - margin-left: 0; -} - -.markdown-body code { - font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 12px; -} - -.markdown-body pre { - margin-top: 0; - margin-bottom: 0; - font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; -} - -.markdown-body .octicon { - font: normal normal 16px octicons-anchor; - line-height: 1; - display: inline-block; - text-decoration: none; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.markdown-body .octicon-link:before { - content: '\f05c'; -} - -.markdown-body > *:first-child { - margin-top: 0 !important; -} - -.markdown-body > *:last-child { - margin-bottom: 0 !important; -} - -.markdown-body .anchor { - position: absolute; - top: 0; - left: 0; - display: block; - padding-right: 6px; - padding-left: 30px; - margin-left: -30px; -} - -.markdown-body .anchor:focus { - outline: none; -} - -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h5, -.markdown-body h6 { - position: relative; - margin-top: 1em; - margin-bottom: 16px; - font-weight: bold; - line-height: 1.4; -} - -.markdown-body h1 .octicon-link, -.markdown-body h2 .octicon-link, -.markdown-body h3 .octicon-link, -.markdown-body h4 .octicon-link, -.markdown-body h5 .octicon-link, -.markdown-body h6 .octicon-link { - display: none; - color: #000; - vertical-align: middle; -} - -.markdown-body h1:hover .anchor, -.markdown-body h2:hover .anchor, -.markdown-body h3:hover .anchor, -.markdown-body h4:hover .anchor, -.markdown-body h5:hover .anchor, -.markdown-body h6:hover .anchor { - padding-left: 8px; - margin-left: -30px; - text-decoration: none; -} - -.markdown-body h1:hover .anchor .octicon-link, -.markdown-body h2:hover .anchor .octicon-link, -.markdown-body h3:hover .anchor .octicon-link, -.markdown-body h4:hover .anchor .octicon-link, -.markdown-body h5:hover .anchor .octicon-link, -.markdown-body h6:hover .anchor .octicon-link { - display: inline-block; -} - -.markdown-body h1 { - padding-bottom: 0.3em; - font-size: 2.25em; - line-height: 1.2; - border-bottom: 1px solid #eee; -} - -.markdown-body h1 .anchor { - line-height: 1; -} - -.markdown-body h2 { - padding-bottom: 0.3em; - font-size: 1.75em; - line-height: 1.225; - border-bottom: 1px solid #eee; -} - -.markdown-body h2 .anchor { - line-height: 1; -} - -.markdown-body h3 { - font-size: 1.5em; - line-height: 1.43; -} - -.markdown-body h3 .anchor { - line-height: 1.2; -} - -.markdown-body h4 { - font-size: 1.25em; -} - -.markdown-body h4 .anchor { - line-height: 1.2; -} - -.markdown-body h5 { - font-size: 1em; -} - -.markdown-body h5 .anchor { - line-height: 1.1; -} - -.markdown-body h6 { - font-size: 1em; - color: #777; -} - -.markdown-body h6 .anchor { - line-height: 1.1; -} - -.markdown-body p, -.markdown-body blockquote, -.markdown-body ul, -.markdown-body ol, -.markdown-body dl, -.markdown-body table, -.markdown-body pre { - margin-top: 0; - margin-bottom: 16px; -} - -/* -.markdown-body hr { - height: 4px; - padding: 0; - margin: 16px 0; - background-color: #e7e7e7; - border: 0 none; -}*/ -.markdown-body ul, -.markdown-body ol { - padding-left: 2em; -} - -.markdown-body ul ul, -.markdown-body ul ol, -.markdown-body ol ol, -.markdown-body ol ul { - margin-top: 0; - margin-bottom: 0; -} - -.markdown-body li > p { - margin-top: 16px; -} - -.markdown-body dl { - padding: 0; -} - -.markdown-body dl dt { - padding: 0; - margin-top: 16px; - font-size: 1em; - font-style: italic; - font-weight: bold; -} - -.markdown-body dl dd { - padding: 0 16px; - margin-bottom: 16px; -} - -.markdown-body blockquote { - padding: 0 15px; - color: #777; - border-left: 4px solid #ddd; -} - -.markdown-body blockquote > :first-child { - margin-top: 0; -} - -.markdown-body blockquote > :last-child { - margin-bottom: 0; -} - -.markdown-body table { - display: block; - width: 100%; - overflow: auto; - word-break: normal; - word-break: keep-all; -} - -.markdown-body table th { - font-weight: bold; -} - -.markdown-body table th, -.markdown-body table td { - padding: 6px 13px; - border: 1px solid #ddd; -} - -.markdown-body table tr { - background-color: #fff; - border-top: 1px solid #ccc; -} - -.markdown-body table tr:nth-child(2n) { - background-color: #f8f8f8; -} - -.markdown-body img { - max-width: 100%; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.markdown-body code { - padding: 0; - padding-top: 0.2em; - padding-bottom: 0.2em; - margin: 0; - font-size: 85%; - background-color: rgba(0, 0, 0, 0.04); - border-radius: 3px; -} - -.markdown-body code:before, -.markdown-body code:after { - letter-spacing: -0.2em; - content: "\00a0"; -} - -.markdown-body pre > code { - padding: 0; - margin: 0; - font-size: 100%; - word-break: normal; - white-space: pre; - background: transparent; - border: 0; -} - -.markdown-body .highlight { - margin-bottom: 16px; -} - -.markdown-body .highlight pre, -.markdown-body pre { - padding: 16px; - overflow: auto; - font-size: 85%; - line-height: 1.45; - background-color: #f7f7f7; - border-radius: 3px; -} - -.markdown-body .highlight pre { - margin-bottom: 0; - word-break: normal; -} - -.markdown-body pre { - word-wrap: normal; -} - -.markdown-body pre code { - display: inline; - max-width: initial; - padding: 0; - margin: 0; - overflow: initial; - line-height: inherit; - word-wrap: normal; - background-color: transparent; - border: 0; -} - -.markdown-body pre code:before, -.markdown-body pre code:after { - content: normal; -} - -.markdown-body kbd { - display: inline-block; - padding: 3px 5px; - font-size: 11px; - line-height: 10px; - color: #555; - vertical-align: middle; - background-color: #fcfcfc; - border: solid 1px #ccc; - border-bottom-color: #bbb; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #bbb; -} - -.markdown-body .pl-c { - color: #969896; -} - -.markdown-body .pl-c1, -.markdown-body .pl-mdh, -.markdown-body .pl-mm, -.markdown-body .pl-mp, -.markdown-body .pl-mr, -.markdown-body .pl-s1 .pl-v, -.markdown-body .pl-s3, -.markdown-body .pl-sc, -.markdown-body .pl-sv { - color: #0086b3; -} - -.markdown-body .pl-e, -.markdown-body .pl-en { - color: #795da3; -} - -.markdown-body .pl-s1 .pl-s2, -.markdown-body .pl-smi, -.markdown-body .pl-smp, -.markdown-body .pl-stj, -.markdown-body .pl-vo, -.markdown-body .pl-vpf { - color: #333; -} - -.markdown-body .pl-ent { - color: #63a35c; -} - -.markdown-body .pl-k, -.markdown-body .pl-s, -.markdown-body .pl-st { - color: #a71d5d; -} - -.markdown-body .pl-pds, -.markdown-body .pl-s1, -.markdown-body .pl-s1 .pl-pse .pl-s2, -.markdown-body .pl-sr, -.markdown-body .pl-sr .pl-cce, -.markdown-body .pl-sr .pl-sra, -.markdown-body .pl-sr .pl-sre, -.markdown-body .pl-src { - color: #df5000; -} - -.markdown-body .pl-mo, -.markdown-body .pl-v { - color: #1d3e81; -} - -.markdown-body .pl-id { - color: #b52a1d; -} - -.markdown-body .pl-ii { - background-color: #b52a1d; - color: #f8f8f8; -} - -.markdown-body .pl-sr .pl-cce { - color: #63a35c; - font-weight: bold; -} - -.markdown-body .pl-ml { - color: #693a17; -} - -.markdown-body .pl-mh, -.markdown-body .pl-mh .pl-en, -.markdown-body .pl-ms { - color: #1d3e81; - font-weight: bold; -} - -.markdown-body .pl-mq { - color: #008080; -} - -.markdown-body .pl-mi { - color: #333; - font-style: italic; -} - -.markdown-body .pl-mb { - color: #333; - font-weight: bold; -} - -.markdown-body .pl-md, -.markdown-body .pl-mdhf { - background-color: #ffecec; - color: #bd2c00; -} - -.markdown-body .pl-mdht, -.markdown-body .pl-mi1 { - background-color: #eaffea; - color: #55a532; -} - -.markdown-body .pl-mdr { - color: #795da3; - font-weight: bold; -} - -.markdown-body kbd { - display: inline-block; - padding: 3px 5px; - font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; - line-height: 10px; - color: #555; - vertical-align: middle; - background-color: #fcfcfc; - border: solid 1px #ccc; - border-bottom-color: #bbb; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #bbb; -} - -.markdown-body .task-list-item { - list-style-type: none; -} - -.markdown-body .task-list-item + .task-list-item { - margin-top: 3px; -} - -.markdown-body .task-list-item input { - float: left; - margin: 0.3em 0 0.25em -1.6em; - vertical-align: middle; -} - -.markdown-body :checked + .radio-label { - z-index: 1; - position: relative; - border-color: #4183c4; -} - -.editormd-preview-container, .editormd-html-preview { - text-align: left; - font-size: 14px; - line-height: 1.6; - padding: 20px; - overflow: auto; - width: 100%; - background-color: #fff; -} -.editormd-preview-container blockquote, .editormd-html-preview blockquote { - color: #666; - border-left: 4px solid #ddd; - padding-left: 20px; - margin-left: 0; - font-size: 14px; - font-style: italic; -} -.editormd-preview-container p code, .editormd-html-preview p code { - margin-left: 5px; - margin-right: 4px; -} -.editormd-preview-container abbr, .editormd-html-preview abbr { - background: #ffffdd; -} -.editormd-preview-container hr, .editormd-html-preview hr { - height: 1px; - border: none; - border-top: 1px solid #ddd; - background: none; -} -.editormd-preview-container code, .editormd-html-preview code { - border: 1px solid #ddd; - background: #f6f6f6; - padding: 3px; - border-radius: 3px; - font-size: 14px; -} -.editormd-preview-container pre, .editormd-html-preview pre { - border: 1px solid #ddd; - background: #f6f6f6; - padding: 10px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; -} -.editormd-preview-container pre code, .editormd-html-preview pre code { - padding: 0; -} -.editormd-preview-container pre, .editormd-preview-container code, .editormd-preview-container kbd, .editormd-html-preview pre, .editormd-html-preview code, .editormd-html-preview kbd { - font-family: "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; -} -.editormd-preview-container table thead tr, .editormd-html-preview table thead tr { - background-color: #F8F8F8; -} -.editormd-preview-container p.editormd-tex, .editormd-html-preview p.editormd-tex { - text-align: center; -} -.editormd-preview-container span.editormd-tex, .editormd-html-preview span.editormd-tex { - margin: 0 5px; -} -.editormd-preview-container .emoji, .editormd-html-preview .emoji { - width: 24px; - height: 24px; -} -.editormd-preview-container .katex, .editormd-html-preview .katex { - font-size: 1.4em; -} -.editormd-preview-container .sequence-diagram, .editormd-preview-container .flowchart, .editormd-html-preview .sequence-diagram, .editormd-html-preview .flowchart { - margin: 0 auto; - text-align: center; -} -.editormd-preview-container .sequence-diagram svg, .editormd-preview-container .flowchart svg, .editormd-html-preview .sequence-diagram svg, .editormd-html-preview .flowchart svg { - margin: 0 auto; -} -.editormd-preview-container .sequence-diagram text, .editormd-preview-container .flowchart text, .editormd-html-preview .sequence-diagram text, .editormd-html-preview .flowchart text { - font-size: 15px !important; - font-family: "YaHei Consolas Hybrid", Consolas, "Microsoft YaHei", "Malgun Gothic", "Segoe UI", Helvetica, Arial !important; -} - -/*! Pretty printing styles. Used with prettify.js. */ -/* SPAN elements with the classes below are added by prettyprint. */ -.pln { - color: #000; -} - -/* plain text */ -@media screen { - .str { - color: #080; - } - - /* string content */ - .kwd { - color: #008; - } - - /* a keyword */ - .com { - color: #800; - } - - /* a comment */ - .typ { - color: #606; - } - - /* a type name */ - .lit { - color: #066; - } - - /* a literal value */ - /* punctuation, lisp open bracket, lisp close bracket */ - .pun, .opn, .clo { - color: #660; - } - - .tag { - color: #008; - } - - /* a markup tag name */ - .atn { - color: #606; - } - - /* a markup attribute name */ - .atv { - color: #080; - } - - /* a markup attribute value */ - .dec, .var { - color: #606; - } - - /* a declaration; a variable name */ - .fun { - color: red; - } - - /* a function name */ -} -/* Use higher contrast and text-weight for printable form. */ -@media print, projection { - .str { - color: #060; - } - - .kwd { - color: #006; - font-weight: bold; - } - - .com { - color: #600; - font-style: italic; - } - - .typ { - color: #404; - font-weight: bold; - } - - .lit { - color: #044; - } - - .pun, .opn, .clo { - color: #440; - } - - .tag { - color: #006; - font-weight: bold; - } - - .atn { - color: #404; - } - - .atv { - color: #060; - } -} -/* Put a border around prettyprinted code snippets. */ -pre.prettyprint { - padding: 2px; - border: 1px solid #888; -} - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin-top: 0; - margin-bottom: 0; -} - -/* IE indents via margin-left */ -li.L0, -li.L1, -li.L2, -li.L3, -li.L5, -li.L6, -li.L7, -li.L8 { - list-style-type: none; -} - -/* Alternate shading for lines */ -li.L1, -li.L3, -li.L5, -li.L7, -li.L9 { - background: #eee; -} - -.editormd-preview-container pre.prettyprint, .editormd-html-preview pre.prettyprint { - padding: 10px; - border: 1px solid #ddd; - white-space: pre-wrap; - word-wrap: break-word; -} -.editormd-preview-container ol.linenums, .editormd-html-preview ol.linenums { - color: #999; - padding-left: 2.5em; -} -.editormd-preview-container ol.linenums li, .editormd-html-preview ol.linenums li { - list-style-type: decimal; -} -.editormd-preview-container ol.linenums li code, .editormd-html-preview ol.linenums li code { - border: none; - background: none; - padding: 0; -} - -.editormd-preview-container .editormd-toc-menu, .editormd-html-preview .editormd-toc-menu { - margin: 8px 0 12px 0; - display: inline-block; -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc, .editormd-html-preview .editormd-toc-menu > .markdown-toc { - position: relative; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; - border: 1px solid #ddd; - display: inline-block; - font-size: 1em; -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc > ul, .editormd-html-preview .editormd-toc-menu > .markdown-toc > ul { - width: 160%; - min-width: 180px; - position: absolute; - left: -1px; - top: -2px; - z-index: 100; - padding: 0 10px 10px; - display: none; - background: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* Webkit browsers */ - -moz-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* Firefox */ - -ms-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* IE9 */ - -o-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* Opera(Old) */ - box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* IE9+, News */ -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc > ul > li ul, .editormd-html-preview .editormd-toc-menu > .markdown-toc > ul > li ul { - width: 100%; - min-width: 180px; - border: 1px solid #ddd; - display: none; - background: #fff; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc > ul > li a, .editormd-html-preview .editormd-toc-menu > .markdown-toc > ul > li a { - color: #666; - padding: 6px 10px; - display: block; - -webkit-transition: background-color 500ms ease-out; - /* Safari, Chrome */ - -moz-transition: background-color 500ms ease-out; - /* Firefox 4.0~16.0 */ - transition: background-color 500ms ease-out; - /* IE >9, FF >15, Opera >12.0 */ -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc > ul > li a:hover, .editormd-html-preview .editormd-toc-menu > .markdown-toc > ul > li a:hover { - background-color: #f6f6f6; -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc li, .editormd-html-preview .editormd-toc-menu > .markdown-toc li { - position: relative; -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc li > ul, .editormd-html-preview .editormd-toc-menu > .markdown-toc li > ul { - position: absolute; - top: 32px; - left: 10%; - display: none; - -webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* Webkit browsers */ - -moz-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* Firefox */ - -ms-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* IE9 */ - -o-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* Opera(Old) */ - box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* IE9+, News */ -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc li > ul:before, .editormd-preview-container .editormd-toc-menu > .markdown-toc li > ul:after, .editormd-html-preview .editormd-toc-menu > .markdown-toc li > ul:before, .editormd-html-preview .editormd-toc-menu > .markdown-toc li > ul:after { - pointer-events: pointer-events; - position: absolute; - left: 15px; - top: -6px; - display: block; - content: ""; - width: 0; - height: 0; - border: 6px solid transparent; - border-width: 0 6px 6px; - z-index: 10; -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc li > ul:before, .editormd-html-preview .editormd-toc-menu > .markdown-toc li > ul:before { - border-bottom-color: #ccc; -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc li > ul:after, .editormd-html-preview .editormd-toc-menu > .markdown-toc li > ul:after { - border-bottom-color: #ffffff; - top: -5px; -} -.editormd-preview-container .editormd-toc-menu ul, .editormd-html-preview .editormd-toc-menu ul { - list-style: none; -} -.editormd-preview-container .editormd-toc-menu a, .editormd-html-preview .editormd-toc-menu a { - text-decoration: none; -} -.editormd-preview-container .editormd-toc-menu h1, .editormd-html-preview .editormd-toc-menu h1 { - font-size: 16px; - padding: 5px 0 10px 10px; - line-height: 1; - border-bottom: 1px solid #eee; -} -.editormd-preview-container .editormd-toc-menu h1 .fa, .editormd-html-preview .editormd-toc-menu h1 .fa { - padding-left: 10px; -} -.editormd-preview-container .editormd-toc-menu .toc-menu-btn, .editormd-html-preview .editormd-toc-menu .toc-menu-btn { - color: #666; - min-width: 180px; - padding: 5px 10px; - border-radius: 4px; - display: inline-block; - -webkit-transition: background-color 500ms ease-out; - /* Safari, Chrome */ - -moz-transition: background-color 500ms ease-out; - /* Firefox 4.0~16.0 */ - transition: background-color 500ms ease-out; - /* IE >9, FF >15, Opera >12.0 */ -} -.editormd-preview-container .editormd-toc-menu .toc-menu-btn:hover, .editormd-html-preview .editormd-toc-menu .toc-menu-btn:hover { - background-color: #f6f6f6; -} -.editormd-preview-container .editormd-toc-menu .toc-menu-btn .fa, .editormd-html-preview .editormd-toc-menu .toc-menu-btn .fa { - float: right; - padding: 3px 0 0 10px; - font-size: 1.3em; -} - -.markdown-body .editormd-toc-menu ul { - padding-left: 0; -} -.markdown-body .highlight pre, .markdown-body pre { - line-height: 1.6; -} - -hr.editormd-page-break { - border: 1px dotted #ccc; - font-size: 0; - height: 2px; -} - -@media only print { - hr.editormd-page-break { - background: none; - border: none; - height: 0; - } -} -.editormd-html-preview textarea { - display: none; -} -.editormd-html-preview hr.editormd-page-break { - background: none; - border: none; - height: 0; -} - -.editormd-preview-close-btn { - color: #fff; - padding: 4px 6px; - font-size: 18px; - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - -ms-border-radius: 500px; - -o-border-radius: 500px; - border-radius: 500px; - display: none; - background-color: #ccc; - position: absolute; - top: 25px; - right: 35px; - z-index: 19; - -webkit-transition: background-color 300ms ease-out; - /* Safari, Chrome */ - -moz-transition: background-color 300ms ease-out; - /* Firefox 4.0~16.0 */ - transition: background-color 300ms ease-out; - /* IE >9, FF >15, Opera >12.0 */ -} -.editormd-preview-close-btn:hover { - background-color: #999; -} - -.editormd-preview-active { - width: 100%; - padding: 40px; -} - -/* Preview dark theme */ -.editormd-preview-theme-dark { - color: #777; - background: #2C2827; -} -.editormd-preview-theme-dark .editormd-preview-container { - color: #888; - background-color: #2C2827; -} -.editormd-preview-theme-dark .editormd-preview-container pre.prettyprint { - border: none; -} -.editormd-preview-theme-dark .editormd-preview-container blockquote { - color: #555; - padding: 0.5em; - background: #222; - border-color: #333; -} -.editormd-preview-theme-dark .editormd-preview-container abbr { - color: #fff; - padding: 1px 3px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - background: #ff9900; -} -.editormd-preview-theme-dark .editormd-preview-container code { - color: #fff; - border: none; - padding: 1px 3px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - background: #5A9600; -} -.editormd-preview-theme-dark .editormd-preview-container table { - border: none; -} -.editormd-preview-theme-dark .editormd-preview-container .fa-emoji { - color: #B4BF42; -} -.editormd-preview-theme-dark .editormd-preview-container .katex { - color: #FEC93F; -} -.editormd-preview-theme-dark .editormd-toc-menu > .markdown-toc { - background: #fff; - border: none; -} -.editormd-preview-theme-dark .editormd-toc-menu > .markdown-toc h1 { - border-color: #ddd; -} -.editormd-preview-theme-dark .markdown-body h1, .editormd-preview-theme-dark .markdown-body h2, .editormd-preview-theme-dark .markdown-body hr { - border-color: #222; -} -.editormd-preview-theme-dark pre { - color: #999; - background-color: #111; - background-color: rgba(0, 0, 0, 0.4); - /* plain text */ -} -.editormd-preview-theme-dark pre .pln { - color: #999; -} -.editormd-preview-theme-dark li.L1, .editormd-preview-theme-dark li.L3, .editormd-preview-theme-dark li.L5, .editormd-preview-theme-dark li.L7, .editormd-preview-theme-dark li.L9 { - background: none; -} -.editormd-preview-theme-dark [class*=editormd-logo] { - color: #2196F3; -} -.editormd-preview-theme-dark .sequence-diagram text { - fill: #fff; -} -.editormd-preview-theme-dark .sequence-diagram rect, .editormd-preview-theme-dark .sequence-diagram path { - color: #fff; - fill: #64D1CB; - stroke: #64D1CB; -} -.editormd-preview-theme-dark .flowchart rect, .editormd-preview-theme-dark .flowchart path { - stroke: #A6C6FF; -} -.editormd-preview-theme-dark .flowchart rect { - fill: #A6C6FF; -} -.editormd-preview-theme-dark .flowchart text { - fill: #5879B4; -} - -@media screen { - .editormd-preview-theme-dark { - /* string content */ - /* a keyword */ - /* a comment */ - /* a type name */ - /* a literal value */ - /* punctuation, lisp open bracket, lisp close bracket */ - /* a markup tag name */ - /* a markup attribute name */ - /* a markup attribute value */ - /* a declaration; a variable name */ - /* a function name */ - } - .editormd-preview-theme-dark .str { - color: #080; - } - .editormd-preview-theme-dark .kwd { - color: #ff9900; - } - .editormd-preview-theme-dark .com { - color: #444444; - } - .editormd-preview-theme-dark .typ { - color: #606; - } - .editormd-preview-theme-dark .lit { - color: #066; - } - .editormd-preview-theme-dark .pun, .editormd-preview-theme-dark .opn, .editormd-preview-theme-dark .clo { - color: #660; - } - .editormd-preview-theme-dark .tag { - color: #ff9900; - } - .editormd-preview-theme-dark .atn { - color: #6C95F5; - } - .editormd-preview-theme-dark .atv { - color: #080; - } - .editormd-preview-theme-dark .dec, .editormd-preview-theme-dark .var { - color: #008BA7; - } - .editormd-preview-theme-dark .fun { - color: red; - } -} -.editormd-onlyread .editormd-toolbar { - display: none; -} -.editormd-onlyread .CodeMirror { - margin-top: 0; -} -.editormd-onlyread .editormd-preview { - top: 0; -} - -.editormd-fullscreen { - position: fixed; - top: 0; - left: 0; - border: none; - margin: 0 auto; -} - -/* Editor.md Dark theme */ -.editormd-theme-dark { - border-color: #1a1a17; -} -.editormd-theme-dark .editormd-toolbar { - background: #1A1A17; - border-color: #1a1a17; -} -.editormd-theme-dark .editormd-menu > li > a { - color: #777; - border-color: #1a1a17; -} -.editormd-theme-dark .editormd-menu > li > a:hover, .editormd-theme-dark .editormd-menu > li > a.active { - border-color: #333; - background: #333; -} -.editormd-theme-dark .editormd-menu > li.divider { - border-right: 1px solid #111; -} -.editormd-theme-dark .CodeMirror { - border-right: 1px solid rgba(0, 0, 0, 0.1); -} diff --git a/src/main/resources/static/plugins/editor.md/css/editormd.logo.css b/src/main/resources/static/plugins/editor.md/css/editormd.logo.css deleted file mode 100755 index 6f90a52b8..000000000 --- a/src/main/resources/static/plugins/editor.md/css/editormd.logo.css +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Editor.md - * - * @file editormd.logo.css - * @version v2.0.1 - * @description Open source online markdown editor. - * @license MIT License - * @author Pandao - * {@link https://github.com/pandao/editor.md} - * @updateTime 2018-03-29 - */ - -/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */ -@font-face { - font-family: 'editormd-logo'; - src: url("../fonts/editormd-logo.eot?-5y8q6h"); - src: url(".../fonts/editormd-logo.eot?#iefix-5y8q6h") format("embedded-opentype"), url("../fonts/editormd-logo.woff?-5y8q6h") format("woff"), url("../fonts/editormd-logo.ttf?-5y8q6h") format("truetype"), url("../fonts/editormd-logo.svg?-5y8q6h#icomoon") format("svg"); - font-weight: normal; - font-style: normal; -} -.editormd-logo, -.editormd-logo-1x, -.editormd-logo-2x, -.editormd-logo-3x, -.editormd-logo-4x, -.editormd-logo-5x, -.editormd-logo-6x, -.editormd-logo-7x, -.editormd-logo-8x { - font-family: 'editormd-logo'; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - font-size: inherit; - line-height: 1; - display: inline-block; - text-rendering: auto; - vertical-align: inherit; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.editormd-logo:before, -.editormd-logo-1x:before, -.editormd-logo-2x:before, -.editormd-logo-3x:before, -.editormd-logo-4x:before, -.editormd-logo-5x:before, -.editormd-logo-6x:before, -.editormd-logo-7x:before, -.editormd-logo-8x:before { - content: "\e1987"; - /* - HTML Entity 󡦇 - example: - */ -} - -.editormd-logo-1x { - font-size: 1em; -} - -.editormd-logo-lg { - font-size: 1.2em; -} - -.editormd-logo-2x { - font-size: 2em; -} - -.editormd-logo-3x { - font-size: 3em; -} - -.editormd-logo-4x { - font-size: 4em; -} - -.editormd-logo-5x { - font-size: 5em; -} - -.editormd-logo-6x { - font-size: 6em; -} - -.editormd-logo-7x { - font-size: 7em; -} - -.editormd-logo-8x { - font-size: 8em; -} - -.editormd-logo-color { - color: #2196F3; -} diff --git a/src/main/resources/static/plugins/editor.md/css/editormd.logo.min.css b/src/main/resources/static/plugins/editor.md/css/editormd.logo.min.css deleted file mode 100755 index bb70afd5e..000000000 --- a/src/main/resources/static/plugins/editor.md/css/editormd.logo.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! Editor.md v2.0.1 | editormd.logo.min.css | Open source online markdown editor. | MIT License | By: Pandao | https://github.com/pandao/editor.md | 2018-03-29 */ -/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */@font-face{font-family:editormd-logo;src:url(../fonts/editormd-logo.eot?-5y8q6h);src:url(.../fonts/editormd-logo.eot?#iefix-5y8q6h) format("embedded-opentype"),url(../fonts/editormd-logo.woff?-5y8q6h) format("woff"),url(../fonts/editormd-logo.ttf?-5y8q6h) format("truetype"),url(../fonts/editormd-logo.svg?-5y8q6h#icomoon) format("svg");font-weight:400;font-style:normal}.editormd-logo,.editormd-logo-1x,.editormd-logo-2x,.editormd-logo-3x,.editormd-logo-4x,.editormd-logo-5x,.editormd-logo-6x,.editormd-logo-7x,.editormd-logo-8x{font-family:editormd-logo;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;font-size:inherit;line-height:1;display:inline-block;text-rendering:auto;vertical-align:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.editormd-logo-1x:before,.editormd-logo-2x:before,.editormd-logo-3x:before,.editormd-logo-4x:before,.editormd-logo-5x:before,.editormd-logo-6x:before,.editormd-logo-7x:before,.editormd-logo-8x:before,.editormd-logo:before{content:"\e1987"}.editormd-logo-1x{font-size:1em}.editormd-logo-lg{font-size:1.2em}.editormd-logo-2x{font-size:2em}.editormd-logo-3x{font-size:3em}.editormd-logo-4x{font-size:4em}.editormd-logo-5x{font-size:5em}.editormd-logo-6x{font-size:6em}.editormd-logo-7x{font-size:7em}.editormd-logo-8x{font-size:8em}.editormd-logo-color{color:#2196F3} \ No newline at end of file diff --git a/src/main/resources/static/plugins/editor.md/css/editormd.min.css b/src/main/resources/static/plugins/editor.md/css/editormd.min.css deleted file mode 100755 index e990c6c1d..000000000 --- a/src/main/resources/static/plugins/editor.md/css/editormd.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! Editor.md v2.0.1 | editormd.min.css | Open source online markdown editor. | MIT License | By: Pandao | https://github.com/pandao/editor.md | 2018-03-29 */ -@charset "UTF-8";/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */.editormd-toolbar-container,.editormd-user-unselect{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.editormd-form br,.markdown-body hr:after{clear:both}.fa,.markdown-body .octicon{-moz-osx-font-smoothing:grayscale}.editormd{width:90%;height:640px;margin:0 auto 15px;text-align:left;overflow:hidden;position:relative;border:1px solid #ddd;font-family:"Meiryo UI","Microsoft YaHei","Malgun Gothic","Segoe UI","Trebuchet MS",Helvetica,Monaco,monospace,Tahoma,STXihei,"华文细黑",STHeiti,"Helvetica Neue","Droid Sans","wenquanyi micro hei",FreeSans,Arimo,Arial,SimSun,"宋体",Heiti,"黑体",sans-serif}.editormd *,.editormd :after,.editormd :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.editormd a{text-decoration:none}.editormd img{border:none;vertical-align:middle}.editormd .editormd-html-textarea,.editormd .editormd-markdown-textarea,.editormd>textarea{width:0;height:0;outline:0;resize:none}.editormd .editormd-html-textarea,.editormd .editormd-markdown-textarea{display:none}.editormd button,.editormd input[type=text],.editormd input[type=button],.editormd input[type=submit],.editormd select,.editormd textarea{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none}.editormd ::-webkit-scrollbar{height:10px;width:7px;background:rgba(0,0,0,.1)}.editormd ::-webkit-scrollbar:hover{background:rgba(0,0,0,.2)}.editormd ::-webkit-scrollbar-thumb{background:rgba(0,0,0,.3);-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px}.editormd ::-webkit-scrollbar-thumb:hover{-webkit-box-shadow:inset 1px 1px 1px rgba(0,0,0,.25);-moz-box-shadow:inset 1px 1px 1px rgba(0,0,0,.25);-ms-box-shadow:inset 1px 1px 1px rgba(0,0,0,.25);-o-box-shadow:inset 1px 1px 1px rgba(0,0,0,.25);box-shadow:inset 1px 1px 1px rgba(0,0,0,.25);background-color:rgba(0,0,0,.4)}.editormd-user-unselect{-o-user-select:none;user-select:none}.editormd-toolbar{width:100%;min-height:37px;background:#fff;display:none;position:absolute;top:0;left:0;z-index:10;border-bottom:1px solid #ddd}.editormd-toolbar-container{padding:0 8px;min-height:35px;-o-user-select:none;user-select:none}.editormd-menu{margin:0;padding:0;list-style:none}.editormd-menu>li{margin:0;padding:5px 1px;display:inline-block;position:relative}.editormd-menu>li.divider{display:inline-block;text-indent:-9999px;margin:0 5px;height:65%;border-right:1px solid #ddd}.editormd-menu>li>a{outline:0;color:#666;display:inline-block;min-width:24px;font-size:16px;text-decoration:none;text-align:center;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;border:1px solid #fff;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;transition:all .3s ease-out}.editormd-menu>li>a.active,.editormd-menu>li>a:hover{border:1px solid #ddd;background:#eee}.editormd-menu>li>a>.fa{text-align:center;display:block;padding:5px}.editormd-menu>li>a>.editormd-bold{padding:5px 2px;display:inline-block;font-weight:700}.editormd-menu>li:hover .editormd-dropdown-menu{display:block}.editormd-menu>li+li>a{margin-left:3px}.editormd-dropdown-menu{display:none;background:#fff;border:1px solid #ddd;width:148px;list-style:none;position:absolute;top:33px;left:0;z-index:100;-webkit-box-shadow:1px 2px 6px rgba(0,0,0,.15);-moz-box-shadow:1px 2px 6px rgba(0,0,0,.15);-ms-box-shadow:1px 2px 6px rgba(0,0,0,.15);-o-box-shadow:1px 2px 6px rgba(0,0,0,.15);box-shadow:1px 2px 6px rgba(0,0,0,.15)}.editormd-dropdown-menu:after,.editormd-dropdown-menu:before{width:0;height:0;display:block;content:"";position:absolute;top:-11px;left:8px;border:5px solid transparent}.editormd-dropdown-menu:before{border-bottom-color:#ccc}.editormd-dropdown-menu:after{border-bottom-color:#fff;top:-10px}.editormd-dropdown-menu>li>a{color:#666;display:block;text-decoration:none;padding:8px 10px}.editormd-dropdown-menu>li>a:hover{background:#f6f6f6;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;transition:all .3s ease-out}.editormd-dropdown-menu>li+li{border-top:1px solid #ddd}.editormd-container{margin:0;width:100%;height:100%;overflow:hidden;padding:35px 0 0;position:relative;background:#fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.editormd-dialog{color:#666;position:fixed;z-index:99999;display:none;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 0 10px rgba(0,0,0,.3);-moz-box-shadow:0 0 10px rgba(0,0,0,.3);-ms-box-shadow:0 0 10px rgba(0,0,0,.3);-o-box-shadow:0 0 10px rgba(0,0,0,.3);box-shadow:0 0 10px rgba(0,0,0,.3);background:#fff;font-size:14px}.editormd-dialog-container{position:relative;padding:20px;line-height:1.4}.editormd-dialog-container h1{font-size:24px;margin-bottom:10px}.editormd-dialog-container h1 .fa{color:#2C7EEA;padding-right:5px}.editormd-dialog-container h1 small{padding-left:5px;font-weight:400;font-size:12px;color:#999}.editormd-dialog-container select{color:#999;padding:3px 8px;border:1px solid #ddd}.editormd-dialog-close{position:absolute;top:12px;right:15px;font-size:18px;color:#ccc;-webkit-transition:color .3s ease-out;-moz-transition:color .3s ease-out;transition:color .3s ease-out}.editormd-dialog-close:hover{color:#999}.editormd-dialog-header{padding:11px 20px;border-bottom:1px solid #eee;-webkit-transition:background .3s ease-out;-moz-transition:background .3s ease-out;transition:background .3s ease-out}.editormd-dialog-header:hover{background:#f6f6f6}.editormd-dialog-title{font-size:14px}.editormd-dialog-footer{padding:10px 0 0;text-align:right}.editormd-dialog-info{width:420px}.editormd-dialog-info h1{font-weight:400}.editormd-dialog-info .editormd-dialog-container{padding:20px 25px 25px}.editormd-dialog-info .editormd-dialog-close{top:10px;right:10px}.editormd-dialog-info .hover-link:hover,.editormd-dialog-info p>a{color:#2196F3}.editormd-dialog-info .hover-link{color:#666}.editormd-dialog-info a .fa-external-link{display:none}.editormd-dialog-info a:hover{color:#2196F3}.editormd-dialog-info a:hover .fa-external-link{display:inline-block}.editormd-container-mask,.editormd-dialog-mask,.editormd-mask{display:none;width:100%;height:100%;position:absolute;top:0;left:0}.editormd-dialog-mask-bg,.editormd-mask{background:#fff;opacity:.5;filter:alpha(opacity=50)}.editormd-mask{position:fixed;background:#000;opacity:.2;filter:alpha(opacity=20);z-index:99998}.editormd-container-mask,.editormd-dialog-mask-con{background:url(../images/loading.gif) center center no-repeat;-webkit-background-size:32px 32px;-moz-background-size:32px 32px;-o-background-size:32px 32px;background-size:32px 32px}.editormd-container-mask{z-index:20;display:block;background-color:#fff}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.editormd-container-mask,.editormd-dialog-mask-con{background-image:url(../images/loading@2x.gif)}}@media only screen and (-webkit-min-device-pixel-ratio:3),only screen and (min-device-pixel-ratio:3){.editormd-container-mask,.editormd-dialog-mask-con{background-image:url(../images/loading@3x.gif)}}.editormd-code-block-dialog textarea,.editormd-preformatted-text-dialog textarea{width:100%;height:400px;margin-bottom:6px;overflow:auto;border:1px solid #eee;background:#fff;padding:15px;resize:none}.editormd-code-toolbar{color:#999;font-size:14px;margin:-5px 0 10px}.editormd-grid-table{width:99%;display:table;border:1px solid #ddd;border-collapse:collapse}.editormd-grid-table-row{width:100%;display:table-row}.editormd-grid-table-row a{font-size:1.4em;width:5%;height:36px;color:#999;text-align:center;display:table-cell;vertical-align:middle;border:1px solid #ddd;text-decoration:none;-webkit-transition:background-color .3s ease-out,color .1s ease-in;-moz-transition:background-color .3s ease-out,color .1s ease-in;transition:background-color .3s ease-out,color .1s ease-in}.editormd-grid-table-row a.selected{color:#666;background-color:#eee}.editormd-grid-table-row a:hover{color:#777;background-color:#f6f6f6}.editormd-tab-head{list-style:none;border-bottom:1px solid #ddd}.editormd-tab-head li{display:inline-block}.editormd-tab-head li a{color:#999;display:block;padding:6px 12px 5px;text-align:center;text-decoration:none;margin-bottom:-1px;border:1px solid #ddd;-webkit-border-top-left-radius:3px;-moz-border-top-left-radius:3px;-ms-border-top-left-radius:3px;-o-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-top-right-radius:3px;-moz-border-top-right-radius:3px;-ms-border-top-right-radius:3px;-o-border-top-right-radius:3px;border-top-right-radius:3px;background:#f6f6f6;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;transition:all .3s ease-out}.editormd-tab-head li a:hover{color:#666;background:#eee}.editormd-tab-head li.active a{color:#666;background:#fff;border-bottom-color:#fff}.editormd-tab-head li+li{margin-left:3px}.editormd-tab-box{padding:20px 0}.editormd-form{color:#666}.editormd-form label{float:left;display:block;width:75px;text-align:left;padding:7px 0 15px 5px;margin:0 0 2px;font-weight:400}.editormd-form iframe{display:none}.editormd-form input:focus{outline:0}.editormd-form input[type=text],.editormd-form input[type=number]{color:#999;padding:8px;border:1px solid #ddd}.editormd-form input[type=number]{width:40px;display:inline-block;padding:6px 8px}.editormd-form input[type=text]{display:inline-block;width:264px}.editormd-form .fa-btns{display:inline-block}.editormd-form .fa-btns a{color:#999;padding:7px 10px 0 0;display:inline-block;text-decoration:none;text-align:center}.editormd-form .fa-btns .fa{font-size:1.3em}.editormd-form .fa-btns label{float:none;display:inline-block;width:auto;text-align:left;padding:0 0 0 5px;cursor:pointer}.fa-fw,.fa-li{text-align:center}.editormd-dialog-container .editormd-btn,.editormd-dialog-container button,.editormd-dialog-container input[type=submit],.editormd-dialog-footer .editormd-btn,.editormd-dialog-footer button,.editormd-dialog-footer input[type=submit],.editormd-form .editormd-btn,.editormd-form button,.editormd-form input[type=submit]{color:#666;min-width:75px;cursor:pointer;background:#fff;padding:7px 10px;border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;-webkit-transition:background .3s ease-out;-moz-transition:background .3s ease-out;transition:background .3s ease-out}.editormd-dialog-container .editormd-btn:hover,.editormd-dialog-container button:hover,.editormd-dialog-container input[type=submit]:hover,.editormd-dialog-footer .editormd-btn:hover,.editormd-dialog-footer button:hover,.editormd-dialog-footer input[type=submit]:hover,.editormd-form .editormd-btn:hover,.editormd-form button:hover,.editormd-form input[type=submit]:hover{background:#eee}.editormd-dialog-container .editormd-btn,.editormd-dialog-footer .editormd-btn,.editormd-form .editormd-btn{padding:5px 8px 4px\9}.editormd-dialog-container .editormd-btn+.editormd-btn,.editormd-dialog-footer .editormd-btn+.editormd-btn,.editormd-form .editormd-btn+.editormd-btn{margin-left:8px}.editormd-file-input{width:75px;height:32px;margin-left:8px;position:relative;display:inline-block}.editormd-file-input input[type=file]{width:75px;height:32px;opacity:0;cursor:pointer;background:#000;display:inline-block;position:absolute;top:0;right:0}.editormd-file-input input[type=file]::-webkit-file-upload-button{visibility:hidden}.editormd-file-input:hover input[type=submit]{background:#eee}.editormd .CodeMirror,.editormd-preview{display:inline-block;width:50%;height:100%;vertical-align:top;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0}.editormd-preview{position:absolute;top:35px;right:0;right:-1px\9;overflow:auto;line-height:1.6;display:none;background:#fff;z-index:10}.fa,.fa-stack{display:inline-block}.editormd .CodeMirror{z-index:10;float:left;border-right:1px solid #ddd;font-size:14px;font-family:"YaHei Consolas Hybrid",Consolas,"微软雅黑","Meiryo UI","Malgun Gothic","Segoe UI","Trebuchet MS",Helvetica,Monaco,courier,monospace;line-height:1.6;margin-top:35px}.editormd .CodeMirror pre{font-size:14px;padding:0 12px}.editormd .CodeMirror-linenumbers{padding:0 5px}.editormd .CodeMirror-focused .CodeMirror-selected,.editormd .CodeMirror-selected{background:#70B7FF}.editormd .CodeMirror,.editormd .CodeMirror-scroll,.editormd .editormd-preview{-webkit-overflow-scrolling:touch}.editormd .styled-background{background-color:#ff7}.editormd .CodeMirror-focused .cm-matchhighlight{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAFklEQVQI12NgYGBgkKzc8x9CMDAwAAAmhwSbidEoSQAAAABJRU5ErkJggg==);background-position:bottom;background-repeat:repeat-x}.editormd .CodeMirror-empty.CodeMirror-focused{outline:0}.editormd .CodeMirror pre.CodeMirror-placeholder{color:#999}.editormd .cm-trailingspace{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAACCAYAAAB/qH1jAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QUXCToH00Y1UgAAACFJREFUCNdjPMDBUc/AwNDAAAFMTAwMDA0OP34wQgX/AQBYgwYEx4f9lQAAAABJRU5ErkJggg==);background-position:bottom left;background-repeat:repeat-x}.editormd .cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=) right no-repeat}/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 *//*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.3.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0) format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2?v=4.3.0) format("woff2"),url(../fonts/fontawesome-webfont.woff?v=4.3.0) format("woff"),url(../fonts/fontawesome-webfont.ttf?v=4.3.0) format("truetype"),url(../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;transform:translate(0,0)}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.markdown-body ol,.markdown-body td,.markdown-body th,.markdown-body ul{padding:0}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before,.fa-genderless:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */@font-face{font-family:editormd-logo;src:url(../fonts/editormd-logo.eot?-5y8q6h);src:url(.../fonts/editormd-logo.eot?#iefix-5y8q6h) format("embedded-opentype"),url(../fonts/editormd-logo.woff?-5y8q6h) format("woff"),url(../fonts/editormd-logo.ttf?-5y8q6h) format("truetype"),url(../fonts/editormd-logo.svg?-5y8q6h#icomoon) format("svg");font-weight:400;font-style:normal}.editormd-logo,.editormd-logo-1x,.editormd-logo-2x,.editormd-logo-3x,.editormd-logo-4x,.editormd-logo-5x,.editormd-logo-6x,.editormd-logo-7x,.editormd-logo-8x{font-family:editormd-logo;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;font-size:inherit;line-height:1;display:inline-block;text-rendering:auto;vertical-align:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.editormd-logo-1x:before,.editormd-logo-2x:before,.editormd-logo-3x:before,.editormd-logo-4x:before,.editormd-logo-5x:before,.editormd-logo-6x:before,.editormd-logo-7x:before,.editormd-logo-8x:before,.editormd-logo:before{content:"\e1987"}.markdown-body hr:after,.markdown-body hr:before{display:table;content:""}.editormd-logo-1x{font-size:1em}.editormd-logo-lg{font-size:1.2em}.editormd-logo-2x{font-size:2em}.editormd-logo-3x{font-size:3em}.editormd-logo-4x{font-size:4em}.editormd-logo-5x{font-size:5em}.editormd-logo-6x{font-size:6em}.editormd-logo-7x{font-size:7em}.editormd-logo-8x{font-size:8em}.editormd-logo-color{color:#2196F3}/*! github-markdown-css | The MIT License (MIT) | Copyright (c) Sindre Sorhus (sindresorhus.com) | https://github.com/sindresorhus/github-markdown-css */@font-face{font-family:octicons-anchor;src:url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAYcAA0AAAAACjQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABwAAAAca8vGTk9TLzIAAAFMAAAARAAAAFZG1VHVY21hcAAAAZAAAAA+AAABQgAP9AdjdnQgAAAB0AAAAAQAAAAEACICiGdhc3AAAAHUAAAACAAAAAj//wADZ2x5ZgAAAdwAAADRAAABEKyikaNoZWFkAAACsAAAAC0AAAA2AtXoA2hoZWEAAALgAAAAHAAAACQHngNFaG10eAAAAvwAAAAQAAAAEAwAACJsb2NhAAADDAAAAAoAAAAKALIAVG1heHAAAAMYAAAAHwAAACABEAB2bmFtZQAAAzgAAALBAAAFu3I9x/Nwb3N0AAAF/AAAAB0AAAAvaoFvbwAAAAEAAAAAzBdyYwAAAADP2IQvAAAAAM/bz7t4nGNgZGFgnMDAysDB1Ml0hoGBoR9CM75mMGLkYGBgYmBlZsAKAtJcUxgcPsR8iGF2+O/AEMPsznAYKMwIkgMA5REMOXicY2BgYGaAYBkGRgYQsAHyGMF8FgYFIM0ChED+h5j//yEk/3KoSgZGNgYYk4GRCUgwMaACRoZhDwCs7QgGAAAAIgKIAAAAAf//AAJ4nHWMMQrCQBBF/0zWrCCIKUQsTDCL2EXMohYGSSmorScInsRGL2DOYJe0Ntp7BK+gJ1BxF1stZvjz/v8DRghQzEc4kIgKwiAppcA9LtzKLSkdNhKFY3HF4lK69ExKslx7Xa+vPRVS43G98vG1DnkDMIBUgFN0MDXflU8tbaZOUkXUH0+U27RoRpOIyCKjbMCVejwypzJJG4jIwb43rfl6wbwanocrJm9XFYfskuVC5K/TPyczNU7b84CXcbxks1Un6H6tLH9vf2LRnn8Ax7A5WQAAAHicY2BkYGAA4teL1+yI57f5ysDNwgAC529f0kOmWRiYVgEpDgYmEA8AUzEKsQAAAHicY2BkYGB2+O/AEMPCAAJAkpEBFbAAADgKAe0EAAAiAAAAAAQAAAAEAAAAAAAAKgAqACoAiAAAeJxjYGRgYGBhsGFgYgABEMkFhAwM/xn0QAIAD6YBhwB4nI1Ty07cMBS9QwKlQapQW3VXySvEqDCZGbGaHULiIQ1FKgjWMxknMfLEke2A+IJu+wntrt/QbVf9gG75jK577Lg8K1qQPCfnnnt8fX1NRC/pmjrk/zprC+8D7tBy9DHgBXoWfQ44Av8t4Bj4Z8CLtBL9CniJluPXASf0Lm4CXqFX8Q84dOLnMB17N4c7tBo1AS/Qi+hTwBH4rwHHwN8DXqQ30XXAS7QaLwSc0Gn8NuAVWou/gFmnjLrEaEh9GmDdDGgL3B4JsrRPDU2hTOiMSuJUIdKQQayiAth69r6akSSFqIJuA19TrzCIaY8sIoxyrNIrL//pw7A2iMygkX5vDj+G+kuoLdX4GlGK/8Lnlz6/h9MpmoO9rafrz7ILXEHHaAx95s9lsI7AHNMBWEZHULnfAXwG9/ZqdzLI08iuwRloXE8kfhXYAvE23+23DU3t626rbs8/8adv+9DWknsHp3E17oCf+Z48rvEQNZ78paYM38qfk3v/u3l3u3GXN2Dmvmvpf1Srwk3pB/VSsp512bA/GG5i2WJ7wu430yQ5K3nFGiOqgtmSB5pJVSizwaacmUZzZhXLlZTq8qGGFY2YcSkqbth6aW1tRmlaCFs2016m5qn36SbJrqosG4uMV4aP2PHBmB3tjtmgN2izkGQyLWprekbIntJFing32a5rKWCN/SdSoga45EJykyQ7asZvHQ8PTm6cslIpwyeyjbVltNikc2HTR7YKh9LBl9DADC0U/jLcBZDKrMhUBfQBvXRzLtFtjU9eNHKin0x5InTqb8lNpfKv1s1xHzTXRqgKzek/mb7nB8RZTCDhGEX3kK/8Q75AmUM/eLkfA+0Hi908Kx4eNsMgudg5GLdRD7a84npi+YxNr5i5KIbW5izXas7cHXIMAau1OueZhfj+cOcP3P8MNIWLyYOBuxL6DRylJ4cAAAB4nGNgYoAALjDJyIAOWMCiTIxMLDmZedkABtIBygAAAA==) format("woff")}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#333;overflow:hidden;font-family:"Microsoft YaHei",Helvetica,"Meiryo UI","Malgun Gothic","Segoe UI","Trebuchet MS",Monaco,monospace,Tahoma,STXihei,"华文细黑",STHeiti,"Helvetica Neue","Droid Sans","wenquanyi micro hei",FreeSans,Arimo,Arial,SimSun,"宋体",Heiti,"黑体",sans-serif;font-size:16px;line-height:1.6;word-wrap:break-word}.markdown-body strong{font-weight:700}.markdown-body h1{margin:.67em 0}.markdown-body img{border:0}.markdown-body hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}.markdown-body input{color:inherit;margin:0;line-height:normal;font:13px/1.4 Helvetica,arial,freesans,clean,sans-serif,"Segoe UI Emoji","Segoe UI Symbol"}.markdown-body html input[disabled]{cursor:default}.markdown-body input[type=checkbox]{-moz-box-sizing:border-box;box-sizing:border-box;padding:0}.markdown-body *{-moz-box-sizing:border-box;box-sizing:border-box}.markdown-body a{background:0 0;color:#4183c4;text-decoration:none}.markdown-body a:active,.markdown-body a:hover{outline:0;text-decoration:underline}.markdown-body hr{margin:15px 0;overflow:hidden;background:0 0;border:0;border-bottom:1px solid #ddd}.markdown-body blockquote{margin:0}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body .task-list-item,li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}.markdown-body dd{margin-left:0}.markdown-body code{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace}.markdown-body pre{font:12px Consolas,"Liberation Mono",Menlo,Courier,monospace;word-wrap:normal}.markdown-body .octicon{font:normal normal 16px octicons-anchor;line-height:1;display:inline-block;text-decoration:none;-webkit-font-smoothing:antialiased;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-body .octicon-link:before{content:'\f05c'}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body .anchor{position:absolute;top:0;left:0;display:block;padding-right:6px;padding-left:30px;margin-left:-30px}.markdown-body .anchor:focus{outline:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{position:relative;margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{display:none;color:#000;vertical-align:middle}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{padding-left:8px;margin-left:-30px;text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{display:inline-block}.markdown-body h1{font-size:2.25em;line-height:1.2}.markdown-body h1 .anchor{line-height:1}.markdown-body h2{font-size:1.75em;line-height:1.225}.markdown-body h2 .anchor{line-height:1}.markdown-body h3{font-size:1.5em;line-height:1.43}.markdown-body h3 .anchor,.markdown-body h4 .anchor{line-height:1.2}.markdown-body h4{font-size:1.25em}.markdown-body h5 .anchor,.markdown-body h6 .anchor{line-height:1.1}.markdown-body h5{font-size:1em}.markdown-body h6{font-size:1em;color:#777}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body blockquote{padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body table{border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box}.markdown-body code{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before{letter-spacing:-.2em;content:"\00a0"}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;background-color:#f7f7f7;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre code{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code:after,.markdown-body pre code:before{content:normal}.markdown-body .pl-c{color:#969896}.markdown-body .pl-c1,.markdown-body .pl-mdh,.markdown-body .pl-mm,.markdown-body .pl-mp,.markdown-body .pl-mr,.markdown-body .pl-s1 .pl-v,.markdown-body .pl-s3,.markdown-body .pl-sc,.markdown-body .pl-sv{color:#0086b3}.markdown-body .pl-e,.markdown-body .pl-en{color:#795da3}.markdown-body .pl-s1 .pl-s2,.markdown-body .pl-smi,.markdown-body .pl-smp,.markdown-body .pl-stj,.markdown-body .pl-vo,.markdown-body .pl-vpf{color:#333}.markdown-body .pl-ent{color:#63a35c}.markdown-body .pl-k,.markdown-body .pl-s,.markdown-body .pl-st{color:#a71d5d}.markdown-body .pl-pds,.markdown-body .pl-s1,.markdown-body .pl-s1 .pl-pse .pl-s2,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre,.markdown-body .pl-src{color:#df5000}.markdown-body .pl-mo,.markdown-body .pl-v{color:#1d3e81}.markdown-body .pl-id{color:#b52a1d}.markdown-body .pl-ii{background-color:#b52a1d;color:#f8f8f8}.markdown-body .pl-sr .pl-cce{color:#63a35c;font-weight:700}.markdown-body .pl-ml{color:#693a17}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{color:#1d3e81;font-weight:700}.markdown-body .pl-mq{color:teal}.markdown-body .pl-mi{color:#333;font-style:italic}.markdown-body .pl-mb{color:#333;font-weight:700}.markdown-body .pl-md,.markdown-body .pl-mdhf{background-color:#ffecec;color:#bd2c00}.markdown-body .pl-mdht,.markdown-body .pl-mi1{background-color:#eaffea;color:#55a532}.markdown-body .pl-mdr{color:#795da3;font-weight:700}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{float:left;margin:.3em 0 .25em -1.6em;vertical-align:middle}.markdown-body :checked+.radio-label{z-index:1;position:relative;border-color:#4183c4}.editormd-html-preview,.editormd-preview-container{text-align:left;font-size:14px;line-height:1.6;padding:20px;overflow:auto;width:100%;background-color:#fff}.editormd-html-preview blockquote,.editormd-preview-container blockquote{color:#666;border-left:4px solid #ddd;padding-left:20px;margin-left:0;font-size:14px;font-style:italic}.editormd-html-preview p code,.editormd-preview-container p code{margin-left:5px;margin-right:4px}.editormd-html-preview abbr,.editormd-preview-container abbr{background:#ffd}.editormd-html-preview hr,.editormd-preview-container hr{height:1px;border:none;border-top:1px solid #ddd;background:0 0}.editormd-html-preview code,.editormd-preview-container code{border:1px solid #ddd;background:#f6f6f6;padding:3px;border-radius:3px;font-size:14px}.editormd-html-preview pre,.editormd-preview-container pre{border:1px solid #ddd;background:#f6f6f6;padding:10px;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px}.editormd-html-preview pre code,.editormd-preview-container pre code{padding:0}.editormd-html-preview code,.editormd-html-preview kbd,.editormd-html-preview pre,.editormd-preview-container code,.editormd-preview-container kbd,.editormd-preview-container pre{font-family:"YaHei Consolas Hybrid",Consolas,"Meiryo UI","Malgun Gothic","Segoe UI","Trebuchet MS",Helvetica,monospace,monospace}.editormd-html-preview table thead tr,.editormd-preview-container table thead tr{background-color:#F8F8F8}.editormd-html-preview p.editormd-tex,.editormd-preview-container p.editormd-tex{text-align:center}.editormd-html-preview span.editormd-tex,.editormd-preview-container span.editormd-tex{margin:0 5px}.editormd-html-preview .emoji,.editormd-preview-container .emoji{width:24px;height:24px}.editormd-html-preview .katex,.editormd-preview-container .katex{font-size:1.4em}.editormd-html-preview .flowchart,.editormd-html-preview .sequence-diagram,.editormd-preview-container .flowchart,.editormd-preview-container .sequence-diagram{margin:0 auto;text-align:center}.editormd-html-preview .flowchart svg,.editormd-html-preview .sequence-diagram svg,.editormd-preview-container .flowchart svg,.editormd-preview-container .sequence-diagram svg{margin:0 auto}.editormd-html-preview .flowchart text,.editormd-html-preview .sequence-diagram text,.editormd-preview-container .flowchart text,.editormd-preview-container .sequence-diagram text{font-size:15px!important;font-family:"YaHei Consolas Hybrid",Consolas,"Microsoft YaHei","Malgun Gothic","Segoe UI",Helvetica,Arial!important}/*! Pretty printing styles. Used with prettify.js. */.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.clo,.opn,.pun{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.kwd,.tag,.typ{font-weight:700}.str{color:#060}.kwd{color:#006}.com{color:#600;font-style:italic}.typ{color:#404}.lit{color:#044}.clo,.opn,.pun{color:#440}.tag{color:#006}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}.editormd-html-preview pre.prettyprint,.editormd-preview-container pre.prettyprint{padding:10px;border:1px solid #ddd;white-space:pre-wrap;word-wrap:break-word}.editormd-html-preview ol.linenums,.editormd-preview-container ol.linenums{color:#999;padding-left:2.5em}.editormd-html-preview ol.linenums li,.editormd-preview-container ol.linenums li{list-style-type:decimal}.editormd-html-preview ol.linenums li code,.editormd-preview-container ol.linenums li code{border:none;background:0 0;padding:0}.editormd-html-preview .editormd-toc-menu,.editormd-preview-container .editormd-toc-menu{margin:8px 0 12px;display:inline-block}.editormd-html-preview .editormd-toc-menu>.markdown-toc,.editormd-preview-container .editormd-toc-menu>.markdown-toc{position:relative;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;border:1px solid #ddd;display:inline-block;font-size:1em}.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul,.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul{width:160%;min-width:180px;position:absolute;left:-1px;top:-2px;z-index:100;padding:0 10px 10px;display:none;background:#fff;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);-moz-box-shadow:0 3px 5px rgba(0,0,0,.2);-ms-box-shadow:0 3px 5px rgba(0,0,0,.2);-o-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul>li ul,.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul>li ul{width:100%;min-width:180px;border:1px solid #ddd;display:none;background:#fff;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.editormd-html-preview .editormd-toc-menu .toc-menu-btn:hover,.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul>li a:hover,.editormd-preview-container .editormd-toc-menu .toc-menu-btn:hover,.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul>li a:hover{background-color:#f6f6f6}.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul>li a,.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul>li a{color:#666;padding:6px 10px;display:block;-webkit-transition:background-color .5s ease-out;-moz-transition:background-color .5s ease-out;transition:background-color .5s ease-out}.editormd-html-preview .editormd-toc-menu>.markdown-toc li,.editormd-preview-container .editormd-toc-menu>.markdown-toc li{position:relative}.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul{position:absolute;top:32px;left:10%;display:none;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);-moz-box-shadow:0 3px 5px rgba(0,0,0,.2);-ms-box-shadow:0 3px 5px rgba(0,0,0,.2);-o-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:after,.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:before,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:after,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:before{pointer-events:pointer-events;position:absolute;left:15px;top:-6px;display:block;content:"";width:0;height:0;border:6px solid transparent;border-width:0 6px 6px;z-index:10}.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:before,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:before{border-bottom-color:#ccc}.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:after,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:after{border-bottom-color:#fff;top:-5px}.editormd-html-preview .editormd-toc-menu ul,.editormd-preview-container .editormd-toc-menu ul{list-style:none}.editormd-html-preview .editormd-toc-menu a,.editormd-preview-container .editormd-toc-menu a{text-decoration:none}.editormd-html-preview .editormd-toc-menu h1,.editormd-preview-container .editormd-toc-menu h1{font-size:16px;padding:5px 0 10px 10px;line-height:1;border-bottom:1px solid #eee}.editormd-html-preview .editormd-toc-menu h1 .fa,.editormd-preview-container .editormd-toc-menu h1 .fa{padding-left:10px}.editormd-html-preview .editormd-toc-menu .toc-menu-btn,.editormd-preview-container .editormd-toc-menu .toc-menu-btn{color:#666;min-width:180px;padding:5px 10px;border-radius:4px;display:inline-block;-webkit-transition:background-color .5s ease-out;-moz-transition:background-color .5s ease-out;transition:background-color .5s ease-out}.editormd-html-preview textarea,.editormd-onlyread .editormd-toolbar{display:none}.editormd-html-preview .editormd-toc-menu .toc-menu-btn .fa,.editormd-preview-container .editormd-toc-menu .toc-menu-btn .fa{float:right;padding:3px 0 0 10px;font-size:1.3em}.markdown-body .editormd-toc-menu ul{padding-left:0}.markdown-body .highlight pre,.markdown-body pre{line-height:1.6}hr.editormd-page-break{border:1px dotted #ccc;font-size:0;height:2px}@media only print{hr.editormd-page-break{background:0 0;border:none;height:0}}.editormd-html-preview hr.editormd-page-break{background:0 0;border:none;height:0}.editormd-preview-close-btn{color:#fff;padding:4px 6px;font-size:18px;-webkit-border-radius:500px;-moz-border-radius:500px;-ms-border-radius:500px;-o-border-radius:500px;border-radius:500px;display:none;background-color:#ccc;position:absolute;top:25px;right:35px;z-index:19;-webkit-transition:background-color .3s ease-out;-moz-transition:background-color .3s ease-out;transition:background-color .3s ease-out}.editormd-preview-close-btn:hover{background-color:#999}.editormd-preview-active{width:100%;padding:40px}.editormd-preview-theme-dark{color:#777;background:#2C2827}.editormd-preview-theme-dark .editormd-preview-container{color:#888;background-color:#2C2827}.editormd-preview-theme-dark .editormd-preview-container pre.prettyprint{border:none}.editormd-preview-theme-dark .editormd-preview-container blockquote{color:#555;padding:.5em;background:#222;border-color:#333}.editormd-preview-theme-dark .editormd-preview-container abbr{color:#fff;padding:1px 3px;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;background:#f90}.editormd-preview-theme-dark .editormd-preview-container code{color:#fff;border:none;padding:1px 3px;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;background:#5A9600}.editormd-preview-theme-dark .editormd-preview-container table{border:none}.editormd-preview-theme-dark .editormd-preview-container .fa-emoji{color:#B4BF42}.editormd-preview-theme-dark .editormd-preview-container .katex{color:#FEC93F}.editormd-preview-theme-dark .editormd-toc-menu>.markdown-toc{background:#fff;border:none}.editormd-preview-theme-dark .editormd-toc-menu>.markdown-toc h1{border-color:#ddd}.editormd-preview-theme-dark .markdown-body h1,.editormd-preview-theme-dark .markdown-body h2,.editormd-preview-theme-dark .markdown-body hr{border-color:#222}.editormd-preview-theme-dark pre{color:#999;background-color:#111;background-color:rgba(0,0,0,.4)}.editormd-preview-theme-dark pre .pln{color:#999}.editormd-preview-theme-dark li.L1,.editormd-preview-theme-dark li.L3,.editormd-preview-theme-dark li.L5,.editormd-preview-theme-dark li.L7,.editormd-preview-theme-dark li.L9{background:0 0}.editormd-preview-theme-dark [class*=editormd-logo]{color:#2196F3}.editormd-preview-theme-dark .sequence-diagram text{fill:#fff}.editormd-preview-theme-dark .sequence-diagram path,.editormd-preview-theme-dark .sequence-diagram rect{color:#fff;fill:#64D1CB;stroke:#64D1CB}.editormd-preview-theme-dark .flowchart path,.editormd-preview-theme-dark .flowchart rect{stroke:#A6C6FF}.editormd-preview-theme-dark .flowchart rect{fill:#A6C6FF}.editormd-preview-theme-dark .flowchart text{fill:#5879B4}@media screen{.editormd-preview-theme-dark .str{color:#080}.editormd-preview-theme-dark .kwd{color:#f90}.editormd-preview-theme-dark .com{color:#444}.editormd-preview-theme-dark .typ{color:#606}.editormd-preview-theme-dark .lit{color:#066}.editormd-preview-theme-dark .clo,.editormd-preview-theme-dark .opn,.editormd-preview-theme-dark .pun{color:#660}.editormd-preview-theme-dark .tag{color:#f90}.editormd-preview-theme-dark .atn{color:#6C95F5}.editormd-preview-theme-dark .atv{color:#080}.editormd-preview-theme-dark .dec,.editormd-preview-theme-dark .var{color:#008BA7}.editormd-preview-theme-dark .fun{color:red}}.editormd-onlyread .CodeMirror{margin-top:0}.editormd-onlyread .editormd-preview{top:0}.editormd-fullscreen{position:fixed;top:0;left:0;border:none;margin:0 auto}.editormd-theme-dark{border-color:#1a1a17}.editormd-theme-dark .editormd-toolbar{background:#1A1A17;border-color:#1a1a17}.editormd-theme-dark .editormd-menu>li>a{color:#777;border-color:#1a1a17}.editormd-theme-dark .editormd-menu>li>a.active,.editormd-theme-dark .editormd-menu>li>a:hover{border-color:#333;background:#333}.editormd-theme-dark .editormd-menu>li.divider{border-right:1px solid #111}.editormd-theme-dark .CodeMirror{border-right:1px solid rgba(0,0,0,.1)} \ No newline at end of file diff --git a/src/main/resources/static/plugins/editor.md/css/editormd.preview.css b/src/main/resources/static/plugins/editor.md/css/editormd.preview.css deleted file mode 100755 index 98e2f280b..000000000 --- a/src/main/resources/static/plugins/editor.md/css/editormd.preview.css +++ /dev/null @@ -1,3554 +0,0 @@ -/* - * Editor.md - * - * @file editormd.preview.css - * @version v2.0.1 - * @description Open source online markdown editor. - * @license MIT License - * @author Pandao - * {@link https://github.com/pandao/editor.md} - * @updateTime 2018-03-29 - */ - -@charset "UTF-8"; -/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */ -/*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ -/* FONT PATH - * -------------------------- */ -@font-face { - font-family: 'FontAwesome'; - src: url("../fonts/fontawesome-webfont.eot?v=4.3.0"); - src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.3.0") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.3.0") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.3.0") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular") format("svg"); - font-weight: normal; - font-style: normal; -} -.fa { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); -} - -/* makes the font 33% larger relative to the icon container */ -.fa-lg { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; -} - -.fa-2x { - font-size: 2em; -} - -.fa-3x { - font-size: 3em; -} - -.fa-4x { - font-size: 4em; -} - -.fa-5x { - font-size: 5em; -} - -.fa-fw { - width: 1.28571429em; - text-align: center; -} - -.fa-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; -} - -.fa-ul > li { - position: relative; -} - -.fa-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; -} - -.fa-li.fa-lg { - left: -1.85714286em; -} - -.fa-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; -} - -.pull-right { - float: right; -} - -.pull-left { - float: left; -} - -.fa.pull-left { - margin-right: .3em; -} - -.fa.pull-right { - margin-left: .3em; -} - -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; -} - -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); -} - -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -.fa-rotate-90 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); -} - -.fa-rotate-180 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} - -.fa-rotate-270 { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); -} - -.fa-flip-horizontal { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); -} - -.fa-flip-vertical { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); -} - -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - filter: none; -} - -.fa-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} - -.fa-stack-1x, -.fa-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} - -.fa-stack-1x { - line-height: inherit; -} - -.fa-stack-2x { - font-size: 2em; -} - -.fa-inverse { - color: #ffffff; -} - -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.fa-glass:before { - content: "\f000"; -} - -.fa-music:before { - content: "\f001"; -} - -.fa-search:before { - content: "\f002"; -} - -.fa-envelope-o:before { - content: "\f003"; -} - -.fa-heart:before { - content: "\f004"; -} - -.fa-star:before { - content: "\f005"; -} - -.fa-star-o:before { - content: "\f006"; -} - -.fa-user:before { - content: "\f007"; -} - -.fa-film:before { - content: "\f008"; -} - -.fa-th-large:before { - content: "\f009"; -} - -.fa-th:before { - content: "\f00a"; -} - -.fa-th-list:before { - content: "\f00b"; -} - -.fa-check:before { - content: "\f00c"; -} - -.fa-remove:before, -.fa-close:before, -.fa-times:before { - content: "\f00d"; -} - -.fa-search-plus:before { - content: "\f00e"; -} - -.fa-search-minus:before { - content: "\f010"; -} - -.fa-power-off:before { - content: "\f011"; -} - -.fa-signal:before { - content: "\f012"; -} - -.fa-gear:before, -.fa-cog:before { - content: "\f013"; -} - -.fa-trash-o:before { - content: "\f014"; -} - -.fa-home:before { - content: "\f015"; -} - -.fa-file-o:before { - content: "\f016"; -} - -.fa-clock-o:before { - content: "\f017"; -} - -.fa-road:before { - content: "\f018"; -} - -.fa-download:before { - content: "\f019"; -} - -.fa-arrow-circle-o-down:before { - content: "\f01a"; -} - -.fa-arrow-circle-o-up:before { - content: "\f01b"; -} - -.fa-inbox:before { - content: "\f01c"; -} - -.fa-play-circle-o:before { - content: "\f01d"; -} - -.fa-rotate-right:before, -.fa-repeat:before { - content: "\f01e"; -} - -.fa-refresh:before { - content: "\f021"; -} - -.fa-list-alt:before { - content: "\f022"; -} - -.fa-lock:before { - content: "\f023"; -} - -.fa-flag:before { - content: "\f024"; -} - -.fa-headphones:before { - content: "\f025"; -} - -.fa-volume-off:before { - content: "\f026"; -} - -.fa-volume-down:before { - content: "\f027"; -} - -.fa-volume-up:before { - content: "\f028"; -} - -.fa-qrcode:before { - content: "\f029"; -} - -.fa-barcode:before { - content: "\f02a"; -} - -.fa-tag:before { - content: "\f02b"; -} - -.fa-tags:before { - content: "\f02c"; -} - -.fa-book:before { - content: "\f02d"; -} - -.fa-bookmark:before { - content: "\f02e"; -} - -.fa-print:before { - content: "\f02f"; -} - -.fa-camera:before { - content: "\f030"; -} - -.fa-font:before { - content: "\f031"; -} - -.fa-bold:before { - content: "\f032"; -} - -.fa-italic:before { - content: "\f033"; -} - -.fa-text-height:before { - content: "\f034"; -} - -.fa-text-width:before { - content: "\f035"; -} - -.fa-align-left:before { - content: "\f036"; -} - -.fa-align-center:before { - content: "\f037"; -} - -.fa-align-right:before { - content: "\f038"; -} - -.fa-align-justify:before { - content: "\f039"; -} - -.fa-list:before { - content: "\f03a"; -} - -.fa-dedent:before, -.fa-outdent:before { - content: "\f03b"; -} - -.fa-indent:before { - content: "\f03c"; -} - -.fa-video-camera:before { - content: "\f03d"; -} - -.fa-photo:before, -.fa-image:before, -.fa-picture-o:before { - content: "\f03e"; -} - -.fa-pencil:before { - content: "\f040"; -} - -.fa-map-marker:before { - content: "\f041"; -} - -.fa-adjust:before { - content: "\f042"; -} - -.fa-tint:before { - content: "\f043"; -} - -.fa-edit:before, -.fa-pencil-square-o:before { - content: "\f044"; -} - -.fa-share-square-o:before { - content: "\f045"; -} - -.fa-check-square-o:before { - content: "\f046"; -} - -.fa-arrows:before { - content: "\f047"; -} - -.fa-step-backward:before { - content: "\f048"; -} - -.fa-fast-backward:before { - content: "\f049"; -} - -.fa-backward:before { - content: "\f04a"; -} - -.fa-play:before { - content: "\f04b"; -} - -.fa-pause:before { - content: "\f04c"; -} - -.fa-stop:before { - content: "\f04d"; -} - -.fa-forward:before { - content: "\f04e"; -} - -.fa-fast-forward:before { - content: "\f050"; -} - -.fa-step-forward:before { - content: "\f051"; -} - -.fa-eject:before { - content: "\f052"; -} - -.fa-chevron-left:before { - content: "\f053"; -} - -.fa-chevron-right:before { - content: "\f054"; -} - -.fa-plus-circle:before { - content: "\f055"; -} - -.fa-minus-circle:before { - content: "\f056"; -} - -.fa-times-circle:before { - content: "\f057"; -} - -.fa-check-circle:before { - content: "\f058"; -} - -.fa-question-circle:before { - content: "\f059"; -} - -.fa-info-circle:before { - content: "\f05a"; -} - -.fa-crosshairs:before { - content: "\f05b"; -} - -.fa-times-circle-o:before { - content: "\f05c"; -} - -.fa-check-circle-o:before { - content: "\f05d"; -} - -.fa-ban:before { - content: "\f05e"; -} - -.fa-arrow-left:before { - content: "\f060"; -} - -.fa-arrow-right:before { - content: "\f061"; -} - -.fa-arrow-up:before { - content: "\f062"; -} - -.fa-arrow-down:before { - content: "\f063"; -} - -.fa-mail-forward:before, -.fa-share:before { - content: "\f064"; -} - -.fa-expand:before { - content: "\f065"; -} - -.fa-compress:before { - content: "\f066"; -} - -.fa-plus:before { - content: "\f067"; -} - -.fa-minus:before { - content: "\f068"; -} - -.fa-asterisk:before { - content: "\f069"; -} - -.fa-exclamation-circle:before { - content: "\f06a"; -} - -.fa-gift:before { - content: "\f06b"; -} - -.fa-leaf:before { - content: "\f06c"; -} - -.fa-fire:before { - content: "\f06d"; -} - -.fa-eye:before { - content: "\f06e"; -} - -.fa-eye-slash:before { - content: "\f070"; -} - -.fa-warning:before, -.fa-exclamation-triangle:before { - content: "\f071"; -} - -.fa-plane:before { - content: "\f072"; -} - -.fa-calendar:before { - content: "\f073"; -} - -.fa-random:before { - content: "\f074"; -} - -.fa-comment:before { - content: "\f075"; -} - -.fa-magnet:before { - content: "\f076"; -} - -.fa-chevron-up:before { - content: "\f077"; -} - -.fa-chevron-down:before { - content: "\f078"; -} - -.fa-retweet:before { - content: "\f079"; -} - -.fa-shopping-cart:before { - content: "\f07a"; -} - -.fa-folder:before { - content: "\f07b"; -} - -.fa-folder-open:before { - content: "\f07c"; -} - -.fa-arrows-v:before { - content: "\f07d"; -} - -.fa-arrows-h:before { - content: "\f07e"; -} - -.fa-bar-chart-o:before, -.fa-bar-chart:before { - content: "\f080"; -} - -.fa-twitter-square:before { - content: "\f081"; -} - -.fa-facebook-square:before { - content: "\f082"; -} - -.fa-camera-retro:before { - content: "\f083"; -} - -.fa-key:before { - content: "\f084"; -} - -.fa-gears:before, -.fa-cogs:before { - content: "\f085"; -} - -.fa-comments:before { - content: "\f086"; -} - -.fa-thumbs-o-up:before { - content: "\f087"; -} - -.fa-thumbs-o-down:before { - content: "\f088"; -} - -.fa-star-half:before { - content: "\f089"; -} - -.fa-heart-o:before { - content: "\f08a"; -} - -.fa-sign-out:before { - content: "\f08b"; -} - -.fa-linkedin-square:before { - content: "\f08c"; -} - -.fa-thumb-tack:before { - content: "\f08d"; -} - -.fa-external-link:before { - content: "\f08e"; -} - -.fa-sign-in:before { - content: "\f090"; -} - -.fa-trophy:before { - content: "\f091"; -} - -.fa-github-square:before { - content: "\f092"; -} - -.fa-upload:before { - content: "\f093"; -} - -.fa-lemon-o:before { - content: "\f094"; -} - -.fa-phone:before { - content: "\f095"; -} - -.fa-square-o:before { - content: "\f096"; -} - -.fa-bookmark-o:before { - content: "\f097"; -} - -.fa-phone-square:before { - content: "\f098"; -} - -.fa-twitter:before { - content: "\f099"; -} - -.fa-facebook-f:before, -.fa-facebook:before { - content: "\f09a"; -} - -.fa-github:before { - content: "\f09b"; -} - -.fa-unlock:before { - content: "\f09c"; -} - -.fa-credit-card:before { - content: "\f09d"; -} - -.fa-rss:before { - content: "\f09e"; -} - -.fa-hdd-o:before { - content: "\f0a0"; -} - -.fa-bullhorn:before { - content: "\f0a1"; -} - -.fa-bell:before { - content: "\f0f3"; -} - -.fa-certificate:before { - content: "\f0a3"; -} - -.fa-hand-o-right:before { - content: "\f0a4"; -} - -.fa-hand-o-left:before { - content: "\f0a5"; -} - -.fa-hand-o-up:before { - content: "\f0a6"; -} - -.fa-hand-o-down:before { - content: "\f0a7"; -} - -.fa-arrow-circle-left:before { - content: "\f0a8"; -} - -.fa-arrow-circle-right:before { - content: "\f0a9"; -} - -.fa-arrow-circle-up:before { - content: "\f0aa"; -} - -.fa-arrow-circle-down:before { - content: "\f0ab"; -} - -.fa-globe:before { - content: "\f0ac"; -} - -.fa-wrench:before { - content: "\f0ad"; -} - -.fa-tasks:before { - content: "\f0ae"; -} - -.fa-filter:before { - content: "\f0b0"; -} - -.fa-briefcase:before { - content: "\f0b1"; -} - -.fa-arrows-alt:before { - content: "\f0b2"; -} - -.fa-group:before, -.fa-users:before { - content: "\f0c0"; -} - -.fa-chain:before, -.fa-link:before { - content: "\f0c1"; -} - -.fa-cloud:before { - content: "\f0c2"; -} - -.fa-flask:before { - content: "\f0c3"; -} - -.fa-cut:before, -.fa-scissors:before { - content: "\f0c4"; -} - -.fa-copy:before, -.fa-files-o:before { - content: "\f0c5"; -} - -.fa-paperclip:before { - content: "\f0c6"; -} - -.fa-save:before, -.fa-floppy-o:before { - content: "\f0c7"; -} - -.fa-square:before { - content: "\f0c8"; -} - -.fa-navicon:before, -.fa-reorder:before, -.fa-bars:before { - content: "\f0c9"; -} - -.fa-list-ul:before { - content: "\f0ca"; -} - -.fa-list-ol:before { - content: "\f0cb"; -} - -.fa-strikethrough:before { - content: "\f0cc"; -} - -.fa-underline:before { - content: "\f0cd"; -} - -.fa-table:before { - content: "\f0ce"; -} - -.fa-magic:before { - content: "\f0d0"; -} - -.fa-truck:before { - content: "\f0d1"; -} - -.fa-pinterest:before { - content: "\f0d2"; -} - -.fa-pinterest-square:before { - content: "\f0d3"; -} - -.fa-google-plus-square:before { - content: "\f0d4"; -} - -.fa-google-plus:before { - content: "\f0d5"; -} - -.fa-money:before { - content: "\f0d6"; -} - -.fa-caret-down:before { - content: "\f0d7"; -} - -.fa-caret-up:before { - content: "\f0d8"; -} - -.fa-caret-left:before { - content: "\f0d9"; -} - -.fa-caret-right:before { - content: "\f0da"; -} - -.fa-columns:before { - content: "\f0db"; -} - -.fa-unsorted:before, -.fa-sort:before { - content: "\f0dc"; -} - -.fa-sort-down:before, -.fa-sort-desc:before { - content: "\f0dd"; -} - -.fa-sort-up:before, -.fa-sort-asc:before { - content: "\f0de"; -} - -.fa-envelope:before { - content: "\f0e0"; -} - -.fa-linkedin:before { - content: "\f0e1"; -} - -.fa-rotate-left:before, -.fa-undo:before { - content: "\f0e2"; -} - -.fa-legal:before, -.fa-gavel:before { - content: "\f0e3"; -} - -.fa-dashboard:before, -.fa-tachometer:before { - content: "\f0e4"; -} - -.fa-comment-o:before { - content: "\f0e5"; -} - -.fa-comments-o:before { - content: "\f0e6"; -} - -.fa-flash:before, -.fa-bolt:before { - content: "\f0e7"; -} - -.fa-sitemap:before { - content: "\f0e8"; -} - -.fa-umbrella:before { - content: "\f0e9"; -} - -.fa-paste:before, -.fa-clipboard:before { - content: "\f0ea"; -} - -.fa-lightbulb-o:before { - content: "\f0eb"; -} - -.fa-exchange:before { - content: "\f0ec"; -} - -.fa-cloud-download:before { - content: "\f0ed"; -} - -.fa-cloud-upload:before { - content: "\f0ee"; -} - -.fa-user-md:before { - content: "\f0f0"; -} - -.fa-stethoscope:before { - content: "\f0f1"; -} - -.fa-suitcase:before { - content: "\f0f2"; -} - -.fa-bell-o:before { - content: "\f0a2"; -} - -.fa-coffee:before { - content: "\f0f4"; -} - -.fa-cutlery:before { - content: "\f0f5"; -} - -.fa-file-text-o:before { - content: "\f0f6"; -} - -.fa-building-o:before { - content: "\f0f7"; -} - -.fa-hospital-o:before { - content: "\f0f8"; -} - -.fa-ambulance:before { - content: "\f0f9"; -} - -.fa-medkit:before { - content: "\f0fa"; -} - -.fa-fighter-jet:before { - content: "\f0fb"; -} - -.fa-beer:before { - content: "\f0fc"; -} - -.fa-h-square:before { - content: "\f0fd"; -} - -.fa-plus-square:before { - content: "\f0fe"; -} - -.fa-angle-double-left:before { - content: "\f100"; -} - -.fa-angle-double-right:before { - content: "\f101"; -} - -.fa-angle-double-up:before { - content: "\f102"; -} - -.fa-angle-double-down:before { - content: "\f103"; -} - -.fa-angle-left:before { - content: "\f104"; -} - -.fa-angle-right:before { - content: "\f105"; -} - -.fa-angle-up:before { - content: "\f106"; -} - -.fa-angle-down:before { - content: "\f107"; -} - -.fa-desktop:before { - content: "\f108"; -} - -.fa-laptop:before { - content: "\f109"; -} - -.fa-tablet:before { - content: "\f10a"; -} - -.fa-mobile-phone:before, -.fa-mobile:before { - content: "\f10b"; -} - -.fa-circle-o:before { - content: "\f10c"; -} - -.fa-quote-left:before { - content: "\f10d"; -} - -.fa-quote-right:before { - content: "\f10e"; -} - -.fa-spinner:before { - content: "\f110"; -} - -.fa-circle:before { - content: "\f111"; -} - -.fa-mail-reply:before, -.fa-reply:before { - content: "\f112"; -} - -.fa-github-alt:before { - content: "\f113"; -} - -.fa-folder-o:before { - content: "\f114"; -} - -.fa-folder-open-o:before { - content: "\f115"; -} - -.fa-smile-o:before { - content: "\f118"; -} - -.fa-frown-o:before { - content: "\f119"; -} - -.fa-meh-o:before { - content: "\f11a"; -} - -.fa-gamepad:before { - content: "\f11b"; -} - -.fa-keyboard-o:before { - content: "\f11c"; -} - -.fa-flag-o:before { - content: "\f11d"; -} - -.fa-flag-checkered:before { - content: "\f11e"; -} - -.fa-terminal:before { - content: "\f120"; -} - -.fa-code:before { - content: "\f121"; -} - -.fa-mail-reply-all:before, -.fa-reply-all:before { - content: "\f122"; -} - -.fa-star-half-empty:before, -.fa-star-half-full:before, -.fa-star-half-o:before { - content: "\f123"; -} - -.fa-location-arrow:before { - content: "\f124"; -} - -.fa-crop:before { - content: "\f125"; -} - -.fa-code-fork:before { - content: "\f126"; -} - -.fa-unlink:before, -.fa-chain-broken:before { - content: "\f127"; -} - -.fa-question:before { - content: "\f128"; -} - -.fa-info:before { - content: "\f129"; -} - -.fa-exclamation:before { - content: "\f12a"; -} - -.fa-superscript:before { - content: "\f12b"; -} - -.fa-subscript:before { - content: "\f12c"; -} - -.fa-eraser:before { - content: "\f12d"; -} - -.fa-puzzle-piece:before { - content: "\f12e"; -} - -.fa-microphone:before { - content: "\f130"; -} - -.fa-microphone-slash:before { - content: "\f131"; -} - -.fa-shield:before { - content: "\f132"; -} - -.fa-calendar-o:before { - content: "\f133"; -} - -.fa-fire-extinguisher:before { - content: "\f134"; -} - -.fa-rocket:before { - content: "\f135"; -} - -.fa-maxcdn:before { - content: "\f136"; -} - -.fa-chevron-circle-left:before { - content: "\f137"; -} - -.fa-chevron-circle-right:before { - content: "\f138"; -} - -.fa-chevron-circle-up:before { - content: "\f139"; -} - -.fa-chevron-circle-down:before { - content: "\f13a"; -} - -.fa-html5:before { - content: "\f13b"; -} - -.fa-css3:before { - content: "\f13c"; -} - -.fa-anchor:before { - content: "\f13d"; -} - -.fa-unlock-alt:before { - content: "\f13e"; -} - -.fa-bullseye:before { - content: "\f140"; -} - -.fa-ellipsis-h:before { - content: "\f141"; -} - -.fa-ellipsis-v:before { - content: "\f142"; -} - -.fa-rss-square:before { - content: "\f143"; -} - -.fa-play-circle:before { - content: "\f144"; -} - -.fa-ticket:before { - content: "\f145"; -} - -.fa-minus-square:before { - content: "\f146"; -} - -.fa-minus-square-o:before { - content: "\f147"; -} - -.fa-level-up:before { - content: "\f148"; -} - -.fa-level-down:before { - content: "\f149"; -} - -.fa-check-square:before { - content: "\f14a"; -} - -.fa-pencil-square:before { - content: "\f14b"; -} - -.fa-external-link-square:before { - content: "\f14c"; -} - -.fa-share-square:before { - content: "\f14d"; -} - -.fa-compass:before { - content: "\f14e"; -} - -.fa-toggle-down:before, -.fa-caret-square-o-down:before { - content: "\f150"; -} - -.fa-toggle-up:before, -.fa-caret-square-o-up:before { - content: "\f151"; -} - -.fa-toggle-right:before, -.fa-caret-square-o-right:before { - content: "\f152"; -} - -.fa-euro:before, -.fa-eur:before { - content: "\f153"; -} - -.fa-gbp:before { - content: "\f154"; -} - -.fa-dollar:before, -.fa-usd:before { - content: "\f155"; -} - -.fa-rupee:before, -.fa-inr:before { - content: "\f156"; -} - -.fa-cny:before, -.fa-rmb:before, -.fa-yen:before, -.fa-jpy:before { - content: "\f157"; -} - -.fa-ruble:before, -.fa-rouble:before, -.fa-rub:before { - content: "\f158"; -} - -.fa-won:before, -.fa-krw:before { - content: "\f159"; -} - -.fa-bitcoin:before, -.fa-btc:before { - content: "\f15a"; -} - -.fa-file:before { - content: "\f15b"; -} - -.fa-file-text:before { - content: "\f15c"; -} - -.fa-sort-alpha-asc:before { - content: "\f15d"; -} - -.fa-sort-alpha-desc:before { - content: "\f15e"; -} - -.fa-sort-amount-asc:before { - content: "\f160"; -} - -.fa-sort-amount-desc:before { - content: "\f161"; -} - -.fa-sort-numeric-asc:before { - content: "\f162"; -} - -.fa-sort-numeric-desc:before { - content: "\f163"; -} - -.fa-thumbs-up:before { - content: "\f164"; -} - -.fa-thumbs-down:before { - content: "\f165"; -} - -.fa-youtube-square:before { - content: "\f166"; -} - -.fa-youtube:before { - content: "\f167"; -} - -.fa-xing:before { - content: "\f168"; -} - -.fa-xing-square:before { - content: "\f169"; -} - -.fa-youtube-play:before { - content: "\f16a"; -} - -.fa-dropbox:before { - content: "\f16b"; -} - -.fa-stack-overflow:before { - content: "\f16c"; -} - -.fa-instagram:before { - content: "\f16d"; -} - -.fa-flickr:before { - content: "\f16e"; -} - -.fa-adn:before { - content: "\f170"; -} - -.fa-bitbucket:before { - content: "\f171"; -} - -.fa-bitbucket-square:before { - content: "\f172"; -} - -.fa-tumblr:before { - content: "\f173"; -} - -.fa-tumblr-square:before { - content: "\f174"; -} - -.fa-long-arrow-down:before { - content: "\f175"; -} - -.fa-long-arrow-up:before { - content: "\f176"; -} - -.fa-long-arrow-left:before { - content: "\f177"; -} - -.fa-long-arrow-right:before { - content: "\f178"; -} - -.fa-apple:before { - content: "\f179"; -} - -.fa-windows:before { - content: "\f17a"; -} - -.fa-android:before { - content: "\f17b"; -} - -.fa-linux:before { - content: "\f17c"; -} - -.fa-dribbble:before { - content: "\f17d"; -} - -.fa-skype:before { - content: "\f17e"; -} - -.fa-foursquare:before { - content: "\f180"; -} - -.fa-trello:before { - content: "\f181"; -} - -.fa-female:before { - content: "\f182"; -} - -.fa-male:before { - content: "\f183"; -} - -.fa-gittip:before, -.fa-gratipay:before { - content: "\f184"; -} - -.fa-sun-o:before { - content: "\f185"; -} - -.fa-moon-o:before { - content: "\f186"; -} - -.fa-archive:before { - content: "\f187"; -} - -.fa-bug:before { - content: "\f188"; -} - -.fa-vk:before { - content: "\f189"; -} - -.fa-weibo:before { - content: "\f18a"; -} - -.fa-renren:before { - content: "\f18b"; -} - -.fa-pagelines:before { - content: "\f18c"; -} - -.fa-stack-exchange:before { - content: "\f18d"; -} - -.fa-arrow-circle-o-right:before { - content: "\f18e"; -} - -.fa-arrow-circle-o-left:before { - content: "\f190"; -} - -.fa-toggle-left:before, -.fa-caret-square-o-left:before { - content: "\f191"; -} - -.fa-dot-circle-o:before { - content: "\f192"; -} - -.fa-wheelchair:before { - content: "\f193"; -} - -.fa-vimeo-square:before { - content: "\f194"; -} - -.fa-turkish-lira:before, -.fa-try:before { - content: "\f195"; -} - -.fa-plus-square-o:before { - content: "\f196"; -} - -.fa-space-shuttle:before { - content: "\f197"; -} - -.fa-slack:before { - content: "\f198"; -} - -.fa-envelope-square:before { - content: "\f199"; -} - -.fa-wordpress:before { - content: "\f19a"; -} - -.fa-openid:before { - content: "\f19b"; -} - -.fa-institution:before, -.fa-bank:before, -.fa-university:before { - content: "\f19c"; -} - -.fa-mortar-board:before, -.fa-graduation-cap:before { - content: "\f19d"; -} - -.fa-yahoo:before { - content: "\f19e"; -} - -.fa-google:before { - content: "\f1a0"; -} - -.fa-reddit:before { - content: "\f1a1"; -} - -.fa-reddit-square:before { - content: "\f1a2"; -} - -.fa-stumbleupon-circle:before { - content: "\f1a3"; -} - -.fa-stumbleupon:before { - content: "\f1a4"; -} - -.fa-delicious:before { - content: "\f1a5"; -} - -.fa-digg:before { - content: "\f1a6"; -} - -.fa-pied-piper:before { - content: "\f1a7"; -} - -.fa-pied-piper-alt:before { - content: "\f1a8"; -} - -.fa-drupal:before { - content: "\f1a9"; -} - -.fa-joomla:before { - content: "\f1aa"; -} - -.fa-language:before { - content: "\f1ab"; -} - -.fa-fax:before { - content: "\f1ac"; -} - -.fa-building:before { - content: "\f1ad"; -} - -.fa-child:before { - content: "\f1ae"; -} - -.fa-paw:before { - content: "\f1b0"; -} - -.fa-spoon:before { - content: "\f1b1"; -} - -.fa-cube:before { - content: "\f1b2"; -} - -.fa-cubes:before { - content: "\f1b3"; -} - -.fa-behance:before { - content: "\f1b4"; -} - -.fa-behance-square:before { - content: "\f1b5"; -} - -.fa-steam:before { - content: "\f1b6"; -} - -.fa-steam-square:before { - content: "\f1b7"; -} - -.fa-recycle:before { - content: "\f1b8"; -} - -.fa-automobile:before, -.fa-car:before { - content: "\f1b9"; -} - -.fa-cab:before, -.fa-taxi:before { - content: "\f1ba"; -} - -.fa-tree:before { - content: "\f1bb"; -} - -.fa-spotify:before { - content: "\f1bc"; -} - -.fa-deviantart:before { - content: "\f1bd"; -} - -.fa-soundcloud:before { - content: "\f1be"; -} - -.fa-database:before { - content: "\f1c0"; -} - -.fa-file-pdf-o:before { - content: "\f1c1"; -} - -.fa-file-word-o:before { - content: "\f1c2"; -} - -.fa-file-excel-o:before { - content: "\f1c3"; -} - -.fa-file-powerpoint-o:before { - content: "\f1c4"; -} - -.fa-file-photo-o:before, -.fa-file-picture-o:before, -.fa-file-image-o:before { - content: "\f1c5"; -} - -.fa-file-zip-o:before, -.fa-file-archive-o:before { - content: "\f1c6"; -} - -.fa-file-sound-o:before, -.fa-file-audio-o:before { - content: "\f1c7"; -} - -.fa-file-movie-o:before, -.fa-file-video-o:before { - content: "\f1c8"; -} - -.fa-file-code-o:before { - content: "\f1c9"; -} - -.fa-vine:before { - content: "\f1ca"; -} - -.fa-codepen:before { - content: "\f1cb"; -} - -.fa-jsfiddle:before { - content: "\f1cc"; -} - -.fa-life-bouy:before, -.fa-life-buoy:before, -.fa-life-saver:before, -.fa-support:before, -.fa-life-ring:before { - content: "\f1cd"; -} - -.fa-circle-o-notch:before { - content: "\f1ce"; -} - -.fa-ra:before, -.fa-rebel:before { - content: "\f1d0"; -} - -.fa-ge:before, -.fa-empire:before { - content: "\f1d1"; -} - -.fa-git-square:before { - content: "\f1d2"; -} - -.fa-git:before { - content: "\f1d3"; -} - -.fa-hacker-news:before { - content: "\f1d4"; -} - -.fa-tencent-weibo:before { - content: "\f1d5"; -} - -.fa-qq:before { - content: "\f1d6"; -} - -.fa-wechat:before, -.fa-weixin:before { - content: "\f1d7"; -} - -.fa-send:before, -.fa-paper-plane:before { - content: "\f1d8"; -} - -.fa-send-o:before, -.fa-paper-plane-o:before { - content: "\f1d9"; -} - -.fa-history:before { - content: "\f1da"; -} - -.fa-genderless:before, -.fa-circle-thin:before { - content: "\f1db"; -} - -.fa-header:before { - content: "\f1dc"; -} - -.fa-paragraph:before { - content: "\f1dd"; -} - -.fa-sliders:before { - content: "\f1de"; -} - -.fa-share-alt:before { - content: "\f1e0"; -} - -.fa-share-alt-square:before { - content: "\f1e1"; -} - -.fa-bomb:before { - content: "\f1e2"; -} - -.fa-soccer-ball-o:before, -.fa-futbol-o:before { - content: "\f1e3"; -} - -.fa-tty:before { - content: "\f1e4"; -} - -.fa-binoculars:before { - content: "\f1e5"; -} - -.fa-plug:before { - content: "\f1e6"; -} - -.fa-slideshare:before { - content: "\f1e7"; -} - -.fa-twitch:before { - content: "\f1e8"; -} - -.fa-yelp:before { - content: "\f1e9"; -} - -.fa-newspaper-o:before { - content: "\f1ea"; -} - -.fa-wifi:before { - content: "\f1eb"; -} - -.fa-calculator:before { - content: "\f1ec"; -} - -.fa-paypal:before { - content: "\f1ed"; -} - -.fa-google-wallet:before { - content: "\f1ee"; -} - -.fa-cc-visa:before { - content: "\f1f0"; -} - -.fa-cc-mastercard:before { - content: "\f1f1"; -} - -.fa-cc-discover:before { - content: "\f1f2"; -} - -.fa-cc-amex:before { - content: "\f1f3"; -} - -.fa-cc-paypal:before { - content: "\f1f4"; -} - -.fa-cc-stripe:before { - content: "\f1f5"; -} - -.fa-bell-slash:before { - content: "\f1f6"; -} - -.fa-bell-slash-o:before { - content: "\f1f7"; -} - -.fa-trash:before { - content: "\f1f8"; -} - -.fa-copyright:before { - content: "\f1f9"; -} - -.fa-at:before { - content: "\f1fa"; -} - -.fa-eyedropper:before { - content: "\f1fb"; -} - -.fa-paint-brush:before { - content: "\f1fc"; -} - -.fa-birthday-cake:before { - content: "\f1fd"; -} - -.fa-area-chart:before { - content: "\f1fe"; -} - -.fa-pie-chart:before { - content: "\f200"; -} - -.fa-line-chart:before { - content: "\f201"; -} - -.fa-lastfm:before { - content: "\f202"; -} - -.fa-lastfm-square:before { - content: "\f203"; -} - -.fa-toggle-off:before { - content: "\f204"; -} - -.fa-toggle-on:before { - content: "\f205"; -} - -.fa-bicycle:before { - content: "\f206"; -} - -.fa-bus:before { - content: "\f207"; -} - -.fa-ioxhost:before { - content: "\f208"; -} - -.fa-angellist:before { - content: "\f209"; -} - -.fa-cc:before { - content: "\f20a"; -} - -.fa-shekel:before, -.fa-sheqel:before, -.fa-ils:before { - content: "\f20b"; -} - -.fa-meanpath:before { - content: "\f20c"; -} - -.fa-buysellads:before { - content: "\f20d"; -} - -.fa-connectdevelop:before { - content: "\f20e"; -} - -.fa-dashcube:before { - content: "\f210"; -} - -.fa-forumbee:before { - content: "\f211"; -} - -.fa-leanpub:before { - content: "\f212"; -} - -.fa-sellsy:before { - content: "\f213"; -} - -.fa-shirtsinbulk:before { - content: "\f214"; -} - -.fa-simplybuilt:before { - content: "\f215"; -} - -.fa-skyatlas:before { - content: "\f216"; -} - -.fa-cart-plus:before { - content: "\f217"; -} - -.fa-cart-arrow-down:before { - content: "\f218"; -} - -.fa-diamond:before { - content: "\f219"; -} - -.fa-ship:before { - content: "\f21a"; -} - -.fa-user-secret:before { - content: "\f21b"; -} - -.fa-motorcycle:before { - content: "\f21c"; -} - -.fa-street-view:before { - content: "\f21d"; -} - -.fa-heartbeat:before { - content: "\f21e"; -} - -.fa-venus:before { - content: "\f221"; -} - -.fa-mars:before { - content: "\f222"; -} - -.fa-mercury:before { - content: "\f223"; -} - -.fa-transgender:before { - content: "\f224"; -} - -.fa-transgender-alt:before { - content: "\f225"; -} - -.fa-venus-double:before { - content: "\f226"; -} - -.fa-mars-double:before { - content: "\f227"; -} - -.fa-venus-mars:before { - content: "\f228"; -} - -.fa-mars-stroke:before { - content: "\f229"; -} - -.fa-mars-stroke-v:before { - content: "\f22a"; -} - -.fa-mars-stroke-h:before { - content: "\f22b"; -} - -.fa-neuter:before { - content: "\f22c"; -} - -.fa-facebook-official:before { - content: "\f230"; -} - -.fa-pinterest-p:before { - content: "\f231"; -} - -.fa-whatsapp:before { - content: "\f232"; -} - -.fa-server:before { - content: "\f233"; -} - -.fa-user-plus:before { - content: "\f234"; -} - -.fa-user-times:before { - content: "\f235"; -} - -.fa-hotel:before, -.fa-bed:before { - content: "\f236"; -} - -.fa-viacoin:before { - content: "\f237"; -} - -.fa-train:before { - content: "\f238"; -} - -.fa-subway:before { - content: "\f239"; -} - -.fa-medium:before { - content: "\f23a"; -} - -/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */ -@font-face { - font-family: 'editormd-logo'; - src: url("../fonts/editormd-logo.eot?-5y8q6h"); - src: url(".../fonts/editormd-logo.eot?#iefix-5y8q6h") format("embedded-opentype"), url("../fonts/editormd-logo.woff?-5y8q6h") format("woff"), url("../fonts/editormd-logo.ttf?-5y8q6h") format("truetype"), url("../fonts/editormd-logo.svg?-5y8q6h#icomoon") format("svg"); - font-weight: normal; - font-style: normal; -} -.editormd-logo, -.editormd-logo-1x, -.editormd-logo-2x, -.editormd-logo-3x, -.editormd-logo-4x, -.editormd-logo-5x, -.editormd-logo-6x, -.editormd-logo-7x, -.editormd-logo-8x { - font-family: 'editormd-logo'; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - font-size: inherit; - line-height: 1; - display: inline-block; - text-rendering: auto; - vertical-align: inherit; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.editormd-logo:before, -.editormd-logo-1x:before, -.editormd-logo-2x:before, -.editormd-logo-3x:before, -.editormd-logo-4x:before, -.editormd-logo-5x:before, -.editormd-logo-6x:before, -.editormd-logo-7x:before, -.editormd-logo-8x:before { - content: "\e1987"; - /* - HTML Entity 󡦇 - example: - */ -} - -.editormd-logo-1x { - font-size: 1em; -} - -.editormd-logo-lg { - font-size: 1.2em; -} - -.editormd-logo-2x { - font-size: 2em; -} - -.editormd-logo-3x { - font-size: 3em; -} - -.editormd-logo-4x { - font-size: 4em; -} - -.editormd-logo-5x { - font-size: 5em; -} - -.editormd-logo-6x { - font-size: 6em; -} - -.editormd-logo-7x { - font-size: 7em; -} - -.editormd-logo-8x { - font-size: 8em; -} - -.editormd-logo-color { - color: #2196F3; -} - -/*! github-markdown-css | The MIT License (MIT) | Copyright (c) Sindre Sorhus (sindresorhus.com) | https://github.com/sindresorhus/github-markdown-css */ -@font-face { - font-family: octicons-anchor; - src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAYcAA0AAAAACjQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABwAAAAca8vGTk9TLzIAAAFMAAAARAAAAFZG1VHVY21hcAAAAZAAAAA+AAABQgAP9AdjdnQgAAAB0AAAAAQAAAAEACICiGdhc3AAAAHUAAAACAAAAAj//wADZ2x5ZgAAAdwAAADRAAABEKyikaNoZWFkAAACsAAAAC0AAAA2AtXoA2hoZWEAAALgAAAAHAAAACQHngNFaG10eAAAAvwAAAAQAAAAEAwAACJsb2NhAAADDAAAAAoAAAAKALIAVG1heHAAAAMYAAAAHwAAACABEAB2bmFtZQAAAzgAAALBAAAFu3I9x/Nwb3N0AAAF/AAAAB0AAAAvaoFvbwAAAAEAAAAAzBdyYwAAAADP2IQvAAAAAM/bz7t4nGNgZGFgnMDAysDB1Ml0hoGBoR9CM75mMGLkYGBgYmBlZsAKAtJcUxgcPsR8iGF2+O/AEMPsznAYKMwIkgMA5REMOXicY2BgYGaAYBkGRgYQsAHyGMF8FgYFIM0ChED+h5j//yEk/3KoSgZGNgYYk4GRCUgwMaACRoZhDwCs7QgGAAAAIgKIAAAAAf//AAJ4nHWMMQrCQBBF/0zWrCCIKUQsTDCL2EXMohYGSSmorScInsRGL2DOYJe0Ntp7BK+gJ1BxF1stZvjz/v8DRghQzEc4kIgKwiAppcA9LtzKLSkdNhKFY3HF4lK69ExKslx7Xa+vPRVS43G98vG1DnkDMIBUgFN0MDXflU8tbaZOUkXUH0+U27RoRpOIyCKjbMCVejwypzJJG4jIwb43rfl6wbwanocrJm9XFYfskuVC5K/TPyczNU7b84CXcbxks1Un6H6tLH9vf2LRnn8Ax7A5WQAAAHicY2BkYGAA4teL1+yI57f5ysDNwgAC529f0kOmWRiYVgEpDgYmEA8AUzEKsQAAAHicY2BkYGB2+O/AEMPCAAJAkpEBFbAAADgKAe0EAAAiAAAAAAQAAAAEAAAAAAAAKgAqACoAiAAAeJxjYGRgYGBhsGFgYgABEMkFhAwM/xn0QAIAD6YBhwB4nI1Ty07cMBS9QwKlQapQW3VXySvEqDCZGbGaHULiIQ1FKgjWMxknMfLEke2A+IJu+wntrt/QbVf9gG75jK577Lg8K1qQPCfnnnt8fX1NRC/pmjrk/zprC+8D7tBy9DHgBXoWfQ44Av8t4Bj4Z8CLtBL9CniJluPXASf0Lm4CXqFX8Q84dOLnMB17N4c7tBo1AS/Qi+hTwBH4rwHHwN8DXqQ30XXAS7QaLwSc0Gn8NuAVWou/gFmnjLrEaEh9GmDdDGgL3B4JsrRPDU2hTOiMSuJUIdKQQayiAth69r6akSSFqIJuA19TrzCIaY8sIoxyrNIrL//pw7A2iMygkX5vDj+G+kuoLdX4GlGK/8Lnlz6/h9MpmoO9rafrz7ILXEHHaAx95s9lsI7AHNMBWEZHULnfAXwG9/ZqdzLI08iuwRloXE8kfhXYAvE23+23DU3t626rbs8/8adv+9DWknsHp3E17oCf+Z48rvEQNZ78paYM38qfk3v/u3l3u3GXN2Dmvmvpf1Srwk3pB/VSsp512bA/GG5i2WJ7wu430yQ5K3nFGiOqgtmSB5pJVSizwaacmUZzZhXLlZTq8qGGFY2YcSkqbth6aW1tRmlaCFs2016m5qn36SbJrqosG4uMV4aP2PHBmB3tjtmgN2izkGQyLWprekbIntJFing32a5rKWCN/SdSoga45EJykyQ7asZvHQ8PTm6cslIpwyeyjbVltNikc2HTR7YKh9LBl9DADC0U/jLcBZDKrMhUBfQBvXRzLtFtjU9eNHKin0x5InTqb8lNpfKv1s1xHzTXRqgKzek/mb7nB8RZTCDhGEX3kK/8Q75AmUM/eLkfA+0Hi908Kx4eNsMgudg5GLdRD7a84npi+YxNr5i5KIbW5izXas7cHXIMAau1OueZhfj+cOcP3P8MNIWLyYOBuxL6DRylJ4cAAAB4nGNgYoAALjDJyIAOWMCiTIxMLDmZedkABtIBygAAAA==) format("woff"); -} -.markdown-body { - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - color: #333; - overflow: hidden; - font-family: "Microsoft YaHei", Helvetica, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", "Monaco", monospace, Tahoma, STXihei, "华文细黑", STHeiti, "Helvetica Neue", "Droid Sans", "wenquanyi micro hei", FreeSans, Arimo, Arial, SimSun, "宋体", Heiti, "黑体", sans-serif; - font-size: 16px; - line-height: 1.6; - word-wrap: break-word; -} - -.markdown-body a { - background: transparent; -} - -.markdown-body a:active, -.markdown-body a:hover { - outline: 0; -} - -.markdown-body strong { - font-weight: bold; -} - -.markdown-body h1 { - font-size: 2em; - margin: 0.67em 0; -} - -.markdown-body img { - border: 0; -} - -.markdown-body hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -.markdown-body pre { - overflow: auto; -} - -.markdown-body code, -.markdown-body kbd, -.markdown-body pre { - font-family: "Meiryo UI", "YaHei Consolas Hybrid", Consolas, "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; - font-size: 1em; -} - -.markdown-body input { - color: inherit; - font: inherit; - margin: 0; -} - -.markdown-body html input[disabled] { - cursor: default; -} - -.markdown-body input { - line-height: normal; -} - -.markdown-body input[type="checkbox"] { - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; -} - -.markdown-body table { - border-collapse: collapse; - border-spacing: 0; -} - -.markdown-body td, -.markdown-body th { - padding: 0; -} - -.markdown-body * { - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.markdown-body input { - font: 13px/1.4 Helvetica, arial, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; -} - -.markdown-body a { - color: #4183c4; - text-decoration: none; -} - -.markdown-body a:hover, -.markdown-body a:active { - text-decoration: underline; -} - -.markdown-body hr { - height: 0; - margin: 15px 0; - overflow: hidden; - background: transparent; - border: 0; - border-bottom: 1px solid #ddd; -} - -.markdown-body hr:before { - display: table; - content: ""; -} - -.markdown-body hr:after { - display: table; - clear: both; - content: ""; -} - -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h5, -.markdown-body h6 { - margin-top: 15px; - margin-bottom: 15px; - line-height: 1.1; -} - -.markdown-body h1 { - font-size: 30px; -} - -.markdown-body h2 { - font-size: 21px; -} - -.markdown-body h3 { - font-size: 16px; -} - -.markdown-body h4 { - font-size: 14px; -} - -.markdown-body h5 { - font-size: 12px; -} - -.markdown-body h6 { - font-size: 11px; -} - -.markdown-body blockquote { - margin: 0; -} - -.markdown-body ul, -.markdown-body ol { - padding: 0; - margin-top: 0; - margin-bottom: 0; -} - -.markdown-body ol ol, -.markdown-body ul ol { - list-style-type: lower-roman; -} - -.markdown-body ul ul ol, -.markdown-body ul ol ol, -.markdown-body ol ul ol, -.markdown-body ol ol ol { - list-style-type: lower-alpha; -} - -.markdown-body dd { - margin-left: 0; -} - -.markdown-body code { - font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 12px; -} - -.markdown-body pre { - margin-top: 0; - margin-bottom: 0; - font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; -} - -.markdown-body .octicon { - font: normal normal 16px octicons-anchor; - line-height: 1; - display: inline-block; - text-decoration: none; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.markdown-body .octicon-link:before { - content: '\f05c'; -} - -.markdown-body > *:first-child { - margin-top: 0 !important; -} - -.markdown-body > *:last-child { - margin-bottom: 0 !important; -} - -.markdown-body .anchor { - position: absolute; - top: 0; - left: 0; - display: block; - padding-right: 6px; - padding-left: 30px; - margin-left: -30px; -} - -.markdown-body .anchor:focus { - outline: none; -} - -.markdown-body h1, -.markdown-body h2, -.markdown-body h3, -.markdown-body h4, -.markdown-body h5, -.markdown-body h6 { - position: relative; - margin-top: 1em; - margin-bottom: 16px; - font-weight: bold; - line-height: 1.4; -} - -.markdown-body h1 .octicon-link, -.markdown-body h2 .octicon-link, -.markdown-body h3 .octicon-link, -.markdown-body h4 .octicon-link, -.markdown-body h5 .octicon-link, -.markdown-body h6 .octicon-link { - display: none; - color: #000; - vertical-align: middle; -} - -.markdown-body h1:hover .anchor, -.markdown-body h2:hover .anchor, -.markdown-body h3:hover .anchor, -.markdown-body h4:hover .anchor, -.markdown-body h5:hover .anchor, -.markdown-body h6:hover .anchor { - padding-left: 8px; - margin-left: -30px; - text-decoration: none; -} - -.markdown-body h1:hover .anchor .octicon-link, -.markdown-body h2:hover .anchor .octicon-link, -.markdown-body h3:hover .anchor .octicon-link, -.markdown-body h4:hover .anchor .octicon-link, -.markdown-body h5:hover .anchor .octicon-link, -.markdown-body h6:hover .anchor .octicon-link { - display: inline-block; -} - -.markdown-body h1 { - padding-bottom: 0.3em; - font-size: 2.25em; - line-height: 1.2; - border-bottom: 1px solid #eee; -} - -.markdown-body h1 .anchor { - line-height: 1; -} - -.markdown-body h2 { - padding-bottom: 0.3em; - font-size: 1.75em; - line-height: 1.225; - border-bottom: 1px solid #eee; -} - -.markdown-body h2 .anchor { - line-height: 1; -} - -.markdown-body h3 { - font-size: 1.5em; - line-height: 1.43; -} - -.markdown-body h3 .anchor { - line-height: 1.2; -} - -.markdown-body h4 { - font-size: 1.25em; -} - -.markdown-body h4 .anchor { - line-height: 1.2; -} - -.markdown-body h5 { - font-size: 1em; -} - -.markdown-body h5 .anchor { - line-height: 1.1; -} - -.markdown-body h6 { - font-size: 1em; - color: #777; -} - -.markdown-body h6 .anchor { - line-height: 1.1; -} - -.markdown-body p, -.markdown-body blockquote, -.markdown-body ul, -.markdown-body ol, -.markdown-body dl, -.markdown-body table, -.markdown-body pre { - margin-top: 0; - margin-bottom: 16px; -} - -/* -.markdown-body hr { - height: 4px; - padding: 0; - margin: 16px 0; - background-color: #e7e7e7; - border: 0 none; -}*/ -.markdown-body ul, -.markdown-body ol { - padding-left: 2em; -} - -.markdown-body ul ul, -.markdown-body ul ol, -.markdown-body ol ol, -.markdown-body ol ul { - margin-top: 0; - margin-bottom: 0; -} - -.markdown-body li > p { - margin-top: 16px; -} - -.markdown-body dl { - padding: 0; -} - -.markdown-body dl dt { - padding: 0; - margin-top: 16px; - font-size: 1em; - font-style: italic; - font-weight: bold; -} - -.markdown-body dl dd { - padding: 0 16px; - margin-bottom: 16px; -} - -.markdown-body blockquote { - padding: 0 15px; - color: #777; - border-left: 4px solid #ddd; -} - -.markdown-body blockquote > :first-child { - margin-top: 0; -} - -.markdown-body blockquote > :last-child { - margin-bottom: 0; -} - -.markdown-body table { - display: block; - width: 100%; - overflow: auto; - word-break: normal; - word-break: keep-all; -} - -.markdown-body table th { - font-weight: bold; -} - -.markdown-body table th, -.markdown-body table td { - padding: 6px 13px; - border: 1px solid #ddd; -} - -.markdown-body table tr { - background-color: #fff; - border-top: 1px solid #ccc; -} - -.markdown-body table tr:nth-child(2n) { - background-color: #f8f8f8; -} - -.markdown-body img { - max-width: 100%; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.markdown-body code { - padding: 0; - padding-top: 0.2em; - padding-bottom: 0.2em; - margin: 0; - font-size: 85%; - background-color: rgba(0, 0, 0, 0.04); - border-radius: 3px; -} - -.markdown-body code:before, -.markdown-body code:after { - letter-spacing: -0.2em; - content: "\00a0"; -} - -.markdown-body pre > code { - padding: 0; - margin: 0; - font-size: 100%; - word-break: normal; - white-space: pre; - background: transparent; - border: 0; -} - -.markdown-body .highlight { - margin-bottom: 16px; -} - -.markdown-body .highlight pre, -.markdown-body pre { - padding: 16px; - overflow: auto; - font-size: 85%; - line-height: 1.45; - background-color: #f7f7f7; - border-radius: 3px; -} - -.markdown-body .highlight pre { - margin-bottom: 0; - word-break: normal; -} - -.markdown-body pre { - word-wrap: normal; -} - -.markdown-body pre code { - display: inline; - max-width: initial; - padding: 0; - margin: 0; - overflow: initial; - line-height: inherit; - word-wrap: normal; - background-color: transparent; - border: 0; -} - -.markdown-body pre code:before, -.markdown-body pre code:after { - content: normal; -} - -.markdown-body kbd { - display: inline-block; - padding: 3px 5px; - font-size: 11px; - line-height: 10px; - color: #555; - vertical-align: middle; - background-color: #fcfcfc; - border: solid 1px #ccc; - border-bottom-color: #bbb; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #bbb; -} - -.markdown-body .pl-c { - color: #969896; -} - -.markdown-body .pl-c1, -.markdown-body .pl-mdh, -.markdown-body .pl-mm, -.markdown-body .pl-mp, -.markdown-body .pl-mr, -.markdown-body .pl-s1 .pl-v, -.markdown-body .pl-s3, -.markdown-body .pl-sc, -.markdown-body .pl-sv { - color: #0086b3; -} - -.markdown-body .pl-e, -.markdown-body .pl-en { - color: #795da3; -} - -.markdown-body .pl-s1 .pl-s2, -.markdown-body .pl-smi, -.markdown-body .pl-smp, -.markdown-body .pl-stj, -.markdown-body .pl-vo, -.markdown-body .pl-vpf { - color: #333; -} - -.markdown-body .pl-ent { - color: #63a35c; -} - -.markdown-body .pl-k, -.markdown-body .pl-s, -.markdown-body .pl-st { - color: #a71d5d; -} - -.markdown-body .pl-pds, -.markdown-body .pl-s1, -.markdown-body .pl-s1 .pl-pse .pl-s2, -.markdown-body .pl-sr, -.markdown-body .pl-sr .pl-cce, -.markdown-body .pl-sr .pl-sra, -.markdown-body .pl-sr .pl-sre, -.markdown-body .pl-src { - color: #df5000; -} - -.markdown-body .pl-mo, -.markdown-body .pl-v { - color: #1d3e81; -} - -.markdown-body .pl-id { - color: #b52a1d; -} - -.markdown-body .pl-ii { - background-color: #b52a1d; - color: #f8f8f8; -} - -.markdown-body .pl-sr .pl-cce { - color: #63a35c; - font-weight: bold; -} - -.markdown-body .pl-ml { - color: #693a17; -} - -.markdown-body .pl-mh, -.markdown-body .pl-mh .pl-en, -.markdown-body .pl-ms { - color: #1d3e81; - font-weight: bold; -} - -.markdown-body .pl-mq { - color: #008080; -} - -.markdown-body .pl-mi { - color: #333; - font-style: italic; -} - -.markdown-body .pl-mb { - color: #333; - font-weight: bold; -} - -.markdown-body .pl-md, -.markdown-body .pl-mdhf { - background-color: #ffecec; - color: #bd2c00; -} - -.markdown-body .pl-mdht, -.markdown-body .pl-mi1 { - background-color: #eaffea; - color: #55a532; -} - -.markdown-body .pl-mdr { - color: #795da3; - font-weight: bold; -} - -.markdown-body kbd { - display: inline-block; - padding: 3px 5px; - font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; - line-height: 10px; - color: #555; - vertical-align: middle; - background-color: #fcfcfc; - border: solid 1px #ccc; - border-bottom-color: #bbb; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #bbb; -} - -.markdown-body .task-list-item { - list-style-type: none; -} - -.markdown-body .task-list-item + .task-list-item { - margin-top: 3px; -} - -.markdown-body .task-list-item input { - float: left; - margin: 0.3em 0 0.25em -1.6em; - vertical-align: middle; -} - -.markdown-body :checked + .radio-label { - z-index: 1; - position: relative; - border-color: #4183c4; -} - -.editormd-preview-container, .editormd-html-preview { - text-align: left; - font-size: 14px; - line-height: 1.6; - padding: 20px; - overflow: auto; - width: 100%; - background-color: #fff; -} -.editormd-preview-container blockquote, .editormd-html-preview blockquote { - color: #666; - border-left: 4px solid #ddd; - padding-left: 20px; - margin-left: 0; - font-size: 14px; - font-style: italic; -} -.editormd-preview-container p code, .editormd-html-preview p code { - margin-left: 5px; - margin-right: 4px; -} -.editormd-preview-container abbr, .editormd-html-preview abbr { - background: #ffffdd; -} -.editormd-preview-container hr, .editormd-html-preview hr { - height: 1px; - border: none; - border-top: 1px solid #ddd; - background: none; -} -.editormd-preview-container code, .editormd-html-preview code { - border: 1px solid #ddd; - background: #f6f6f6; - padding: 3px; - border-radius: 3px; - font-size: 14px; -} -.editormd-preview-container pre, .editormd-html-preview pre { - border: 1px solid #ddd; - background: #f6f6f6; - padding: 10px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; -} -.editormd-preview-container pre code, .editormd-html-preview pre code { - padding: 0; -} -.editormd-preview-container pre, .editormd-preview-container code, .editormd-preview-container kbd, .editormd-html-preview pre, .editormd-html-preview code, .editormd-html-preview kbd { - font-family: "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; -} -.editormd-preview-container table thead tr, .editormd-html-preview table thead tr { - background-color: #F8F8F8; -} -.editormd-preview-container p.editormd-tex, .editormd-html-preview p.editormd-tex { - text-align: center; -} -.editormd-preview-container span.editormd-tex, .editormd-html-preview span.editormd-tex { - margin: 0 5px; -} -.editormd-preview-container .emoji, .editormd-html-preview .emoji { - width: 24px; - height: 24px; -} -.editormd-preview-container .katex, .editormd-html-preview .katex { - font-size: 1.4em; -} -.editormd-preview-container .sequence-diagram, .editormd-preview-container .flowchart, .editormd-html-preview .sequence-diagram, .editormd-html-preview .flowchart { - margin: 0 auto; - text-align: center; -} -.editormd-preview-container .sequence-diagram svg, .editormd-preview-container .flowchart svg, .editormd-html-preview .sequence-diagram svg, .editormd-html-preview .flowchart svg { - margin: 0 auto; -} -.editormd-preview-container .sequence-diagram text, .editormd-preview-container .flowchart text, .editormd-html-preview .sequence-diagram text, .editormd-html-preview .flowchart text { - font-size: 15px !important; - font-family: "YaHei Consolas Hybrid", Consolas, "Microsoft YaHei", "Malgun Gothic", "Segoe UI", Helvetica, Arial !important; -} - -/*! Pretty printing styles. Used with prettify.js. */ -/* SPAN elements with the classes below are added by prettyprint. */ -.pln { - color: #000; -} - -/* plain text */ -@media screen { - .str { - color: #080; - } - - /* string content */ - .kwd { - color: #008; - } - - /* a keyword */ - .com { - color: #800; - } - - /* a comment */ - .typ { - color: #606; - } - - /* a type name */ - .lit { - color: #066; - } - - /* a literal value */ - /* punctuation, lisp open bracket, lisp close bracket */ - .pun, .opn, .clo { - color: #660; - } - - .tag { - color: #008; - } - - /* a markup tag name */ - .atn { - color: #606; - } - - /* a markup attribute name */ - .atv { - color: #080; - } - - /* a markup attribute value */ - .dec, .var { - color: #606; - } - - /* a declaration; a variable name */ - .fun { - color: red; - } - - /* a function name */ -} -/* Use higher contrast and text-weight for printable form. */ -@media print, projection { - .str { - color: #060; - } - - .kwd { - color: #006; - font-weight: bold; - } - - .com { - color: #600; - font-style: italic; - } - - .typ { - color: #404; - font-weight: bold; - } - - .lit { - color: #044; - } - - .pun, .opn, .clo { - color: #440; - } - - .tag { - color: #006; - font-weight: bold; - } - - .atn { - color: #404; - } - - .atv { - color: #060; - } -} -/* Put a border around prettyprinted code snippets. */ -pre.prettyprint { - padding: 2px; - border: 1px solid #888; -} - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin-top: 0; - margin-bottom: 0; -} - -/* IE indents via margin-left */ -li.L0, -li.L1, -li.L2, -li.L3, -li.L5, -li.L6, -li.L7, -li.L8 { - list-style-type: none; -} - -/* Alternate shading for lines */ -li.L1, -li.L3, -li.L5, -li.L7, -li.L9 { - background: #eee; -} - -.editormd-preview-container pre.prettyprint, .editormd-html-preview pre.prettyprint { - padding: 10px; - border: 1px solid #ddd; - white-space: pre-wrap; - word-wrap: break-word; -} -.editormd-preview-container ol.linenums, .editormd-html-preview ol.linenums { - color: #999; - padding-left: 2.5em; -} -.editormd-preview-container ol.linenums li, .editormd-html-preview ol.linenums li { - list-style-type: decimal; -} -.editormd-preview-container ol.linenums li code, .editormd-html-preview ol.linenums li code { - border: none; - background: none; - padding: 0; -} - -.editormd-preview-container .editormd-toc-menu, .editormd-html-preview .editormd-toc-menu { - margin: 8px 0 12px 0; - display: inline-block; -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc, .editormd-html-preview .editormd-toc-menu > .markdown-toc { - position: relative; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; - border: 1px solid #ddd; - display: inline-block; - font-size: 1em; -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc > ul, .editormd-html-preview .editormd-toc-menu > .markdown-toc > ul { - width: 160%; - min-width: 180px; - position: absolute; - left: -1px; - top: -2px; - z-index: 100; - padding: 0 10px 10px; - display: none; - background: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* Webkit browsers */ - -moz-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* Firefox */ - -ms-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* IE9 */ - -o-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* Opera(Old) */ - box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* IE9+, News */ -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc > ul > li ul, .editormd-html-preview .editormd-toc-menu > .markdown-toc > ul > li ul { - width: 100%; - min-width: 180px; - border: 1px solid #ddd; - display: none; - background: #fff; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc > ul > li a, .editormd-html-preview .editormd-toc-menu > .markdown-toc > ul > li a { - color: #666; - padding: 6px 10px; - display: block; - -webkit-transition: background-color 500ms ease-out; - /* Safari, Chrome */ - -moz-transition: background-color 500ms ease-out; - /* Firefox 4.0~16.0 */ - transition: background-color 500ms ease-out; - /* IE >9, FF >15, Opera >12.0 */ -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc > ul > li a:hover, .editormd-html-preview .editormd-toc-menu > .markdown-toc > ul > li a:hover { - background-color: #f6f6f6; -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc li, .editormd-html-preview .editormd-toc-menu > .markdown-toc li { - position: relative; -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc li > ul, .editormd-html-preview .editormd-toc-menu > .markdown-toc li > ul { - position: absolute; - top: 32px; - left: 10%; - display: none; - -webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* Webkit browsers */ - -moz-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* Firefox */ - -ms-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* IE9 */ - -o-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* Opera(Old) */ - box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2); - /* IE9+, News */ -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc li > ul:before, .editormd-preview-container .editormd-toc-menu > .markdown-toc li > ul:after, .editormd-html-preview .editormd-toc-menu > .markdown-toc li > ul:before, .editormd-html-preview .editormd-toc-menu > .markdown-toc li > ul:after { - pointer-events: pointer-events; - position: absolute; - left: 15px; - top: -6px; - display: block; - content: ""; - width: 0; - height: 0; - border: 6px solid transparent; - border-width: 0 6px 6px; - z-index: 10; -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc li > ul:before, .editormd-html-preview .editormd-toc-menu > .markdown-toc li > ul:before { - border-bottom-color: #ccc; -} -.editormd-preview-container .editormd-toc-menu > .markdown-toc li > ul:after, .editormd-html-preview .editormd-toc-menu > .markdown-toc li > ul:after { - border-bottom-color: #ffffff; - top: -5px; -} -.editormd-preview-container .editormd-toc-menu ul, .editormd-html-preview .editormd-toc-menu ul { - list-style: none; -} -.editormd-preview-container .editormd-toc-menu a, .editormd-html-preview .editormd-toc-menu a { - text-decoration: none; -} -.editormd-preview-container .editormd-toc-menu h1, .editormd-html-preview .editormd-toc-menu h1 { - font-size: 16px; - padding: 5px 0 10px 10px; - line-height: 1; - border-bottom: 1px solid #eee; -} -.editormd-preview-container .editormd-toc-menu h1 .fa, .editormd-html-preview .editormd-toc-menu h1 .fa { - padding-left: 10px; -} -.editormd-preview-container .editormd-toc-menu .toc-menu-btn, .editormd-html-preview .editormd-toc-menu .toc-menu-btn { - color: #666; - min-width: 180px; - padding: 5px 10px; - border-radius: 4px; - display: inline-block; - -webkit-transition: background-color 500ms ease-out; - /* Safari, Chrome */ - -moz-transition: background-color 500ms ease-out; - /* Firefox 4.0~16.0 */ - transition: background-color 500ms ease-out; - /* IE >9, FF >15, Opera >12.0 */ -} -.editormd-preview-container .editormd-toc-menu .toc-menu-btn:hover, .editormd-html-preview .editormd-toc-menu .toc-menu-btn:hover { - background-color: #f6f6f6; -} -.editormd-preview-container .editormd-toc-menu .toc-menu-btn .fa, .editormd-html-preview .editormd-toc-menu .toc-menu-btn .fa { - float: right; - padding: 3px 0 0 10px; - font-size: 1.3em; -} - -.markdown-body .editormd-toc-menu ul { - padding-left: 0; -} -.markdown-body .highlight pre, .markdown-body pre { - line-height: 1.6; -} - -hr.editormd-page-break { - border: 1px dotted #ccc; - font-size: 0; - height: 2px; -} - -@media only print { - hr.editormd-page-break { - background: none; - border: none; - height: 0; - } -} -.editormd-html-preview textarea { - display: none; -} -.editormd-html-preview hr.editormd-page-break { - background: none; - border: none; - height: 0; -} - -.editormd-preview-close-btn { - color: #fff; - padding: 4px 6px; - font-size: 18px; - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - -ms-border-radius: 500px; - -o-border-radius: 500px; - border-radius: 500px; - display: none; - background-color: #ccc; - position: absolute; - top: 25px; - right: 35px; - z-index: 19; - -webkit-transition: background-color 300ms ease-out; - /* Safari, Chrome */ - -moz-transition: background-color 300ms ease-out; - /* Firefox 4.0~16.0 */ - transition: background-color 300ms ease-out; - /* IE >9, FF >15, Opera >12.0 */ -} -.editormd-preview-close-btn:hover { - background-color: #999; -} - -.editormd-preview-active { - width: 100%; - padding: 40px; -} diff --git a/src/main/resources/static/plugins/editor.md/css/editormd.preview.min.css b/src/main/resources/static/plugins/editor.md/css/editormd.preview.min.css deleted file mode 100755 index 92271dbfc..000000000 --- a/src/main/resources/static/plugins/editor.md/css/editormd.preview.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! Editor.md v2.0.1 | editormd.preview.min.css | Open source online markdown editor. | MIT License | By: Pandao | https://github.com/pandao/editor.md | 2018-03-29 */ -@charset "UTF-8";/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 *//*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */.fa-fw,.fa-li{text-align:center}.fa,.fa-stack{display:inline-block}.fa,.markdown-body .octicon{-moz-osx-font-smoothing:grayscale}@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.3.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0) format("embedded-opentype"),url(../fonts/fontawesome-webfont.woff2?v=4.3.0) format("woff2"),url(../fonts/fontawesome-webfont.woff?v=4.3.0) format("woff"),url(../fonts/fontawesome-webfont.ttf?v=4.3.0) format("truetype"),url(../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;transform:translate(0,0)}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.markdown-body ol,.markdown-body td,.markdown-body th,.markdown-body ul{padding:0}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before,.fa-genderless:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}/*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */@font-face{font-family:editormd-logo;src:url(../fonts/editormd-logo.eot?-5y8q6h);src:url(.../fonts/editormd-logo.eot?#iefix-5y8q6h) format("embedded-opentype"),url(../fonts/editormd-logo.woff?-5y8q6h) format("woff"),url(../fonts/editormd-logo.ttf?-5y8q6h) format("truetype"),url(../fonts/editormd-logo.svg?-5y8q6h#icomoon) format("svg");font-weight:400;font-style:normal}.editormd-logo,.editormd-logo-1x,.editormd-logo-2x,.editormd-logo-3x,.editormd-logo-4x,.editormd-logo-5x,.editormd-logo-6x,.editormd-logo-7x,.editormd-logo-8x{font-family:editormd-logo;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;font-size:inherit;line-height:1;display:inline-block;text-rendering:auto;vertical-align:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.editormd-logo-1x:before,.editormd-logo-2x:before,.editormd-logo-3x:before,.editormd-logo-4x:before,.editormd-logo-5x:before,.editormd-logo-6x:before,.editormd-logo-7x:before,.editormd-logo-8x:before,.editormd-logo:before{content:"\e1987"}.markdown-body hr:after,.markdown-body hr:before{display:table;content:""}.editormd-logo-1x{font-size:1em}.editormd-logo-lg{font-size:1.2em}.editormd-logo-2x{font-size:2em}.editormd-logo-3x{font-size:3em}.editormd-logo-4x{font-size:4em}.editormd-logo-5x{font-size:5em}.editormd-logo-6x{font-size:6em}.editormd-logo-7x{font-size:7em}.editormd-logo-8x{font-size:8em}.editormd-logo-color{color:#2196F3}/*! github-markdown-css | The MIT License (MIT) | Copyright (c) Sindre Sorhus (sindresorhus.com) | https://github.com/sindresorhus/github-markdown-css */@font-face{font-family:octicons-anchor;src:url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAYcAA0AAAAACjQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABwAAAAca8vGTk9TLzIAAAFMAAAARAAAAFZG1VHVY21hcAAAAZAAAAA+AAABQgAP9AdjdnQgAAAB0AAAAAQAAAAEACICiGdhc3AAAAHUAAAACAAAAAj//wADZ2x5ZgAAAdwAAADRAAABEKyikaNoZWFkAAACsAAAAC0AAAA2AtXoA2hoZWEAAALgAAAAHAAAACQHngNFaG10eAAAAvwAAAAQAAAAEAwAACJsb2NhAAADDAAAAAoAAAAKALIAVG1heHAAAAMYAAAAHwAAACABEAB2bmFtZQAAAzgAAALBAAAFu3I9x/Nwb3N0AAAF/AAAAB0AAAAvaoFvbwAAAAEAAAAAzBdyYwAAAADP2IQvAAAAAM/bz7t4nGNgZGFgnMDAysDB1Ml0hoGBoR9CM75mMGLkYGBgYmBlZsAKAtJcUxgcPsR8iGF2+O/AEMPsznAYKMwIkgMA5REMOXicY2BgYGaAYBkGRgYQsAHyGMF8FgYFIM0ChED+h5j//yEk/3KoSgZGNgYYk4GRCUgwMaACRoZhDwCs7QgGAAAAIgKIAAAAAf//AAJ4nHWMMQrCQBBF/0zWrCCIKUQsTDCL2EXMohYGSSmorScInsRGL2DOYJe0Ntp7BK+gJ1BxF1stZvjz/v8DRghQzEc4kIgKwiAppcA9LtzKLSkdNhKFY3HF4lK69ExKslx7Xa+vPRVS43G98vG1DnkDMIBUgFN0MDXflU8tbaZOUkXUH0+U27RoRpOIyCKjbMCVejwypzJJG4jIwb43rfl6wbwanocrJm9XFYfskuVC5K/TPyczNU7b84CXcbxks1Un6H6tLH9vf2LRnn8Ax7A5WQAAAHicY2BkYGAA4teL1+yI57f5ysDNwgAC529f0kOmWRiYVgEpDgYmEA8AUzEKsQAAAHicY2BkYGB2+O/AEMPCAAJAkpEBFbAAADgKAe0EAAAiAAAAAAQAAAAEAAAAAAAAKgAqACoAiAAAeJxjYGRgYGBhsGFgYgABEMkFhAwM/xn0QAIAD6YBhwB4nI1Ty07cMBS9QwKlQapQW3VXySvEqDCZGbGaHULiIQ1FKgjWMxknMfLEke2A+IJu+wntrt/QbVf9gG75jK577Lg8K1qQPCfnnnt8fX1NRC/pmjrk/zprC+8D7tBy9DHgBXoWfQ44Av8t4Bj4Z8CLtBL9CniJluPXASf0Lm4CXqFX8Q84dOLnMB17N4c7tBo1AS/Qi+hTwBH4rwHHwN8DXqQ30XXAS7QaLwSc0Gn8NuAVWou/gFmnjLrEaEh9GmDdDGgL3B4JsrRPDU2hTOiMSuJUIdKQQayiAth69r6akSSFqIJuA19TrzCIaY8sIoxyrNIrL//pw7A2iMygkX5vDj+G+kuoLdX4GlGK/8Lnlz6/h9MpmoO9rafrz7ILXEHHaAx95s9lsI7AHNMBWEZHULnfAXwG9/ZqdzLI08iuwRloXE8kfhXYAvE23+23DU3t626rbs8/8adv+9DWknsHp3E17oCf+Z48rvEQNZ78paYM38qfk3v/u3l3u3GXN2Dmvmvpf1Srwk3pB/VSsp512bA/GG5i2WJ7wu430yQ5K3nFGiOqgtmSB5pJVSizwaacmUZzZhXLlZTq8qGGFY2YcSkqbth6aW1tRmlaCFs2016m5qn36SbJrqosG4uMV4aP2PHBmB3tjtmgN2izkGQyLWprekbIntJFing32a5rKWCN/SdSoga45EJykyQ7asZvHQ8PTm6cslIpwyeyjbVltNikc2HTR7YKh9LBl9DADC0U/jLcBZDKrMhUBfQBvXRzLtFtjU9eNHKin0x5InTqb8lNpfKv1s1xHzTXRqgKzek/mb7nB8RZTCDhGEX3kK/8Q75AmUM/eLkfA+0Hi908Kx4eNsMgudg5GLdRD7a84npi+YxNr5i5KIbW5izXas7cHXIMAau1OueZhfj+cOcP3P8MNIWLyYOBuxL6DRylJ4cAAAB4nGNgYoAALjDJyIAOWMCiTIxMLDmZedkABtIBygAAAA==) format("woff")}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#333;overflow:hidden;font-family:"Microsoft YaHei",Helvetica,"Meiryo UI","Malgun Gothic","Segoe UI","Trebuchet MS",Monaco,monospace,Tahoma,STXihei,"华文细黑",STHeiti,"Helvetica Neue","Droid Sans","wenquanyi micro hei",FreeSans,Arimo,Arial,SimSun,"宋体",Heiti,"黑体",sans-serif;font-size:16px;line-height:1.6;word-wrap:break-word}.markdown-body strong{font-weight:700}.markdown-body h1{margin:.67em 0}.markdown-body img{border:0}.markdown-body hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}.markdown-body input{color:inherit;margin:0;line-height:normal;font:13px/1.4 Helvetica,arial,freesans,clean,sans-serif,"Segoe UI Emoji","Segoe UI Symbol"}.markdown-body html input[disabled]{cursor:default}.markdown-body input[type=checkbox]{-moz-box-sizing:border-box;box-sizing:border-box;padding:0}.markdown-body *{-moz-box-sizing:border-box;box-sizing:border-box}.markdown-body a{background:0 0;color:#4183c4;text-decoration:none}.markdown-body a:active,.markdown-body a:hover{outline:0;text-decoration:underline}.markdown-body hr{margin:15px 0;overflow:hidden;background:0 0;border:0;border-bottom:1px solid #ddd}.markdown-body hr:after{clear:both}.markdown-body blockquote{margin:0}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body .task-list-item,li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}.markdown-body dd{margin-left:0}.markdown-body code{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace}.markdown-body pre{font:12px Consolas,"Liberation Mono",Menlo,Courier,monospace;word-wrap:normal}.markdown-body .octicon{font:normal normal 16px octicons-anchor;line-height:1;display:inline-block;text-decoration:none;-webkit-font-smoothing:antialiased;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-body .octicon-link:before{content:'\f05c'}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body .anchor{position:absolute;top:0;left:0;display:block;padding-right:6px;padding-left:30px;margin-left:-30px}.markdown-body .anchor:focus{outline:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{position:relative;margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{display:none;color:#000;vertical-align:middle}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{padding-left:8px;margin-left:-30px;text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{display:inline-block}.markdown-body h1{font-size:2.25em;line-height:1.2}.markdown-body h1 .anchor{line-height:1}.markdown-body h2{font-size:1.75em;line-height:1.225}.markdown-body h2 .anchor{line-height:1}.markdown-body h3{font-size:1.5em;line-height:1.43}.markdown-body h3 .anchor,.markdown-body h4 .anchor{line-height:1.2}.markdown-body h4{font-size:1.25em}.markdown-body h5 .anchor,.markdown-body h6 .anchor{line-height:1.1}.markdown-body h5{font-size:1em}.markdown-body h6{font-size:1em;color:#777}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body blockquote{padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body table{border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box}.markdown-body code{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before{letter-spacing:-.2em;content:"\00a0"}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;background-color:#f7f7f7;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre code{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code:after,.markdown-body pre code:before{content:normal}.markdown-body .pl-c{color:#969896}.markdown-body .pl-c1,.markdown-body .pl-mdh,.markdown-body .pl-mm,.markdown-body .pl-mp,.markdown-body .pl-mr,.markdown-body .pl-s1 .pl-v,.markdown-body .pl-s3,.markdown-body .pl-sc,.markdown-body .pl-sv{color:#0086b3}.markdown-body .pl-e,.markdown-body .pl-en{color:#795da3}.markdown-body .pl-s1 .pl-s2,.markdown-body .pl-smi,.markdown-body .pl-smp,.markdown-body .pl-stj,.markdown-body .pl-vo,.markdown-body .pl-vpf{color:#333}.markdown-body .pl-ent{color:#63a35c}.markdown-body .pl-k,.markdown-body .pl-s,.markdown-body .pl-st{color:#a71d5d}.markdown-body .pl-pds,.markdown-body .pl-s1,.markdown-body .pl-s1 .pl-pse .pl-s2,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre,.markdown-body .pl-src{color:#df5000}.markdown-body .pl-mo,.markdown-body .pl-v{color:#1d3e81}.markdown-body .pl-id{color:#b52a1d}.markdown-body .pl-ii{background-color:#b52a1d;color:#f8f8f8}.markdown-body .pl-sr .pl-cce{color:#63a35c;font-weight:700}.markdown-body .pl-ml{color:#693a17}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{color:#1d3e81;font-weight:700}.markdown-body .pl-mq{color:teal}.markdown-body .pl-mi{color:#333;font-style:italic}.markdown-body .pl-mb{color:#333;font-weight:700}.markdown-body .pl-md,.markdown-body .pl-mdhf{background-color:#ffecec;color:#bd2c00}.markdown-body .pl-mdht,.markdown-body .pl-mi1{background-color:#eaffea;color:#55a532}.markdown-body .pl-mdr{color:#795da3;font-weight:700}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{float:left;margin:.3em 0 .25em -1.6em;vertical-align:middle}.markdown-body :checked+.radio-label{z-index:1;position:relative;border-color:#4183c4}.editormd-html-preview,.editormd-preview-container{text-align:left;font-size:14px;line-height:1.6;padding:20px;overflow:auto;width:100%;background-color:#fff}.editormd-html-preview blockquote,.editormd-preview-container blockquote{color:#666;border-left:4px solid #ddd;padding-left:20px;margin-left:0;font-size:14px;font-style:italic}.editormd-html-preview p code,.editormd-preview-container p code{margin-left:5px;margin-right:4px}.editormd-html-preview abbr,.editormd-preview-container abbr{background:#ffd}.editormd-html-preview hr,.editormd-preview-container hr{height:1px;border:none;border-top:1px solid #ddd;background:0 0}.editormd-html-preview code,.editormd-preview-container code{border:1px solid #ddd;background:#f6f6f6;padding:3px;border-radius:3px;font-size:14px}.editormd-html-preview pre,.editormd-preview-container pre{border:1px solid #ddd;background:#f6f6f6;padding:10px;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px}.editormd-html-preview pre code,.editormd-preview-container pre code{padding:0}.editormd-html-preview code,.editormd-html-preview kbd,.editormd-html-preview pre,.editormd-preview-container code,.editormd-preview-container kbd,.editormd-preview-container pre{font-family:"YaHei Consolas Hybrid",Consolas,"Meiryo UI","Malgun Gothic","Segoe UI","Trebuchet MS",Helvetica,monospace,monospace}.editormd-html-preview table thead tr,.editormd-preview-container table thead tr{background-color:#F8F8F8}.editormd-html-preview p.editormd-tex,.editormd-preview-container p.editormd-tex{text-align:center}.editormd-html-preview span.editormd-tex,.editormd-preview-container span.editormd-tex{margin:0 5px}.editormd-html-preview .emoji,.editormd-preview-container .emoji{width:24px;height:24px}.editormd-html-preview .katex,.editormd-preview-container .katex{font-size:1.4em}.editormd-html-preview .flowchart,.editormd-html-preview .sequence-diagram,.editormd-preview-container .flowchart,.editormd-preview-container .sequence-diagram{margin:0 auto;text-align:center}.editormd-html-preview .flowchart svg,.editormd-html-preview .sequence-diagram svg,.editormd-preview-container .flowchart svg,.editormd-preview-container .sequence-diagram svg{margin:0 auto}.editormd-html-preview .flowchart text,.editormd-html-preview .sequence-diagram text,.editormd-preview-container .flowchart text,.editormd-preview-container .sequence-diagram text{font-size:15px!important;font-family:"YaHei Consolas Hybrid",Consolas,"Microsoft YaHei","Malgun Gothic","Segoe UI",Helvetica,Arial!important}/*! Pretty printing styles. Used with prettify.js. */.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.clo,.opn,.pun{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.kwd,.tag,.typ{font-weight:700}.str{color:#060}.kwd{color:#006}.com{color:#600;font-style:italic}.typ{color:#404}.lit{color:#044}.clo,.opn,.pun{color:#440}.tag{color:#006}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}.editormd-html-preview pre.prettyprint,.editormd-preview-container pre.prettyprint{padding:10px;border:1px solid #ddd;white-space:pre-wrap;word-wrap:break-word}.editormd-html-preview ol.linenums,.editormd-preview-container ol.linenums{color:#999;padding-left:2.5em}.editormd-html-preview ol.linenums li,.editormd-preview-container ol.linenums li{list-style-type:decimal}.editormd-html-preview ol.linenums li code,.editormd-preview-container ol.linenums li code{border:none;background:0 0;padding:0}.editormd-html-preview .editormd-toc-menu,.editormd-preview-container .editormd-toc-menu{margin:8px 0 12px;display:inline-block}.editormd-html-preview .editormd-toc-menu>.markdown-toc,.editormd-preview-container .editormd-toc-menu>.markdown-toc{position:relative;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;border:1px solid #ddd;display:inline-block;font-size:1em}.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul,.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul{width:160%;min-width:180px;position:absolute;left:-1px;top:-2px;z-index:100;padding:0 10px 10px;display:none;background:#fff;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);-moz-box-shadow:0 3px 5px rgba(0,0,0,.2);-ms-box-shadow:0 3px 5px rgba(0,0,0,.2);-o-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul>li ul,.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul>li ul{width:100%;min-width:180px;border:1px solid #ddd;display:none;background:#fff;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.editormd-html-preview .editormd-toc-menu .toc-menu-btn:hover,.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul>li a:hover,.editormd-preview-container .editormd-toc-menu .toc-menu-btn:hover,.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul>li a:hover{background-color:#f6f6f6}.editormd-html-preview .editormd-toc-menu>.markdown-toc>ul>li a,.editormd-preview-container .editormd-toc-menu>.markdown-toc>ul>li a{color:#666;padding:6px 10px;display:block;-webkit-transition:background-color .5s ease-out;-moz-transition:background-color .5s ease-out;transition:background-color .5s ease-out}.editormd-html-preview .editormd-toc-menu>.markdown-toc li,.editormd-preview-container .editormd-toc-menu>.markdown-toc li{position:relative}.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul{position:absolute;top:32px;left:10%;display:none;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);-moz-box-shadow:0 3px 5px rgba(0,0,0,.2);-ms-box-shadow:0 3px 5px rgba(0,0,0,.2);-o-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:after,.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:before,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:after,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:before{pointer-events:pointer-events;position:absolute;left:15px;top:-6px;display:block;content:"";width:0;height:0;border:6px solid transparent;border-width:0 6px 6px;z-index:10}.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:before,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:before{border-bottom-color:#ccc}.editormd-html-preview .editormd-toc-menu>.markdown-toc li>ul:after,.editormd-preview-container .editormd-toc-menu>.markdown-toc li>ul:after{border-bottom-color:#fff;top:-5px}.editormd-html-preview .editormd-toc-menu ul,.editormd-preview-container .editormd-toc-menu ul{list-style:none}.editormd-html-preview .editormd-toc-menu a,.editormd-preview-container .editormd-toc-menu a{text-decoration:none}.editormd-html-preview .editormd-toc-menu h1,.editormd-preview-container .editormd-toc-menu h1{font-size:16px;padding:5px 0 10px 10px;line-height:1;border-bottom:1px solid #eee}.editormd-html-preview .editormd-toc-menu h1 .fa,.editormd-preview-container .editormd-toc-menu h1 .fa{padding-left:10px}.editormd-html-preview .editormd-toc-menu .toc-menu-btn,.editormd-preview-container .editormd-toc-menu .toc-menu-btn{color:#666;min-width:180px;padding:5px 10px;border-radius:4px;display:inline-block;-webkit-transition:background-color .5s ease-out;-moz-transition:background-color .5s ease-out;transition:background-color .5s ease-out}.editormd-html-preview .editormd-toc-menu .toc-menu-btn .fa,.editormd-preview-container .editormd-toc-menu .toc-menu-btn .fa{float:right;padding:3px 0 0 10px;font-size:1.3em}.markdown-body .editormd-toc-menu ul{padding-left:0}.markdown-body .highlight pre,.markdown-body pre{line-height:1.6}hr.editormd-page-break{border:1px dotted #ccc;font-size:0;height:2px}@media only print{hr.editormd-page-break{background:0 0;border:none;height:0}}.editormd-html-preview textarea{display:none}.editormd-html-preview hr.editormd-page-break{background:0 0;border:none;height:0}.editormd-preview-close-btn{color:#fff;padding:4px 6px;font-size:18px;-webkit-border-radius:500px;-moz-border-radius:500px;-ms-border-radius:500px;-o-border-radius:500px;border-radius:500px;display:none;background-color:#ccc;position:absolute;top:25px;right:35px;z-index:19;-webkit-transition:background-color .3s ease-out;-moz-transition:background-color .3s ease-out;transition:background-color .3s ease-out}.editormd-preview-close-btn:hover{background-color:#999}.editormd-preview-active{width:100%;padding:40px} \ No newline at end of file diff --git a/src/main/resources/static/plugins/editor.md/editormd.js b/src/main/resources/static/plugins/editor.md/editormd.js deleted file mode 100755 index 4c9b527a7..000000000 --- a/src/main/resources/static/plugins/editor.md/editormd.js +++ /dev/null @@ -1,4273 +0,0 @@ -/* - * Editor.md - * - * @file editormd.js - * @version v2.0.1 - * @description Open source online markdown editor. - * @license MIT License - * @author Pandao - * {@link https://github.com/pandao/editor.md} - * @updateTime 2018-03-29 - */ - -;(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, - minHeight: "150px", - maxHeight: "none", // default "none" - 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", - minHeight: settings.minHeight - }) - } - 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", - minHeight: settings.minHeight, - maxHeight: settings.maxHeight - }) - this.codeMirror.find(".CodeMirror-gutters").css({ - minHeight: settings.minHeight - }) - this.codeMirror.find(".CodeMirror-scroll").css({ - minHeight: settings.minHeight, - maxHeight: settings.maxHeight - }) - 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 (settings.syncScrolling) { - 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 - case 121: - $.proxy(toolbarHandlers.preview, _this)() - return false - case 122: - $.proxy(toolbarHandlers.fullscreen, _this)() - return false - 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", - minHeight: settings.minHeight - }) - codeMirror.css({ - height: "auto", - minHeight: settings.minHeight, - maxHeight: settings.maxHeight - }) - } 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) - newMarkdownDoc = editormd.filterHTMLTags( - newMarkdownDoc, - settings.htmlDecode - ) - 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() - } - } - - var isMac = navigator.platform.toUpperCase().indexOf("MAC") >= 0 - var key = isMac ? "Cmd" : "Ctrl" - editormd.keyMaps = { - [key + "-1"]: "h1", - [key + "-2"]: "h2", - [key + "-3"]: "h3", - [key + "-4"]: "h4", - [key + "-5"]: "h5", - [key + "-6"]: "h6", - [key + "-B"]: "bold", // if this is string == editormd.toolbarHandlers.xxxx - [key + "-D"]: "datetime", - [key + "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) - } - }, - [key + "-Alt-G"]: "goto-line", - [key + "-H"]: "hr", - [key + "-I"]: "italic", - [key + "-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) - } - }, - [key + "-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" + key + "-C"]: "code", - ["Shift" + key + "Q"]: "quote", - ["Shift" + key + "S"]: "del", - ["Shift" + key + "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-" + key + "-Alt-C"]: "code-block", - ["Shift-" + key + "-H"]: "html-entities", - "Shift-Alt-H": "help", - ["Shift-" + key + "-E"]: "emoji", - ["Shift-" + key + "-U"]: "uppercase", - "Shift-Alt-U": "ucwords", - ["Shift-" + key + "-Alt-U"]: "ucfirst", - "Shift-Alt-L": "lowercase", - ["Shift-" + key + "-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-" + key + "-Alt-I"]: "image", - ["Shift-" + key + "-L"]: "link", - ["Shift-" + key + "-O"]: "list-ol", - ["Shift-" + key + "-P"]: "preformatted-text", - ["Shift-" + key + "-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{1,2}:\d{1,2}:\d{1,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-' +
-                  twe +
-                  '' - ) - } - } else { - var src = name === "+1" ? "plus1" : name - src = src === "black_large_square" ? "black_square" : src - src = src === "moon" ? "waxing_gibbous_moon" : src - return ( - ':' +
-                name +
-                ':' - ) - } - } - }) - } - 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() - if (prot.indexOf("javascript:") === 0) { - return "" - } - } catch (e) { - 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 lastLevelArr = [0] - // 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 - var stageLen = lastLevelArr.length - var lastLevel = lastLevelArr[stageLen - 1] - var goBack = 0 - if (level < startLevel) { - continue - } - if (level > lastLevel) { - html += "" - lastLevelArr.push(level) - } else if (level < lastLevel) { - for (var j = stageLen - 1; j >= 0; j--) { - if (level <= lastLevelArr[j]) { - goBack ++ - lastLevelArr.pop() - } else { - lastLevelArr.push(level) - break - } - } - html += new Array(goBack + 1).join("") - } else { - html += "" - } - html += - '
  • ' + - text + - "
      " - } - - 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("]*)>([^>]*)", "igm"), - "" - ) - } - //return html; - if (typeof attrs !== "undefined") { - var htmlTagRegex = /<(\w+)\s*([^\>]*)\>([^\>]*)<\/(\w+)\>/gi - 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 - // fixed will cause xss problem - if (e.nodeName === "href" && e.nodeValue.toLowerCase().indexOf('javascript:') >= 0) { - $attrs[e.nodeName] = 'javascript:;'; - } - } - }) - $.each($attrs, function(i) { - if (i.indexOf("on") === 0) { - delete $attrs[i] - } - }) - el.attr($attrs) - var text = typeof el[1] !== "undefined" ? $(el[1]).text() : "" - // FIXED 使用 on* 过滤标签的属性,图片加链接的语法会出错的问题 - if ($2 && !isNaN($2) && $2 !== $5) { - text += "<" + $2 + ">" + $4 + "" - } else if ($2 && isNaN($2) && $2 !== $5) { - text += "" - return el[0].outerHTML + text - } else { - 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 += - '" - } - 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) - }) - } - 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" - } - 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 - }) - 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": - break - default: - datefmt = fymd + " " + hms - break - } - return datefmt - } - return editormd -}) diff --git a/src/main/resources/static/plugins/editor.md/editormd.min.js b/src/main/resources/static/plugins/editor.md/editormd.min.js deleted file mode 100755 index 95f8028de..000000000 --- a/src/main/resources/static/plugins/editor.md/editormd.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! Editor.md v2.0.1 | editormd.min.js | Open source online markdown editor. | MIT License | By: Pandao | https://github.com/pandao/editor.md | 2018-03-29 */ -"use strict";function _defineProperty(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(e){"function"==typeof require&&"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"object"===("undefined"==typeof module?"undefined":_typeof(module))?module.exports=e:"function"==typeof define?define.amd||define(["jquery"],e):window.editormd=e()}(function(){var e,t="undefined"!=typeof jQuery?jQuery:Zepto;if(void 0!==t){var i=function e(t,i){return new e.fn.init(t,i)};i.title=i.$name="Editor.md",i.version="1.5.0",i.homePage="https://pandao.github.io/editor.md/",i.classPrefix="editormd-",i.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"]},i.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,minHeight:"150px",maxHeight:"none",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 i.toolbarHandlers.ucwords},lowercase:function(){return i.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:i.classPrefix+"bold",h2:i.classPrefix+"bold",h3:i.classPrefix+"bold",h4:i.classPrefix+"bold",h5:i.classPrefix+"bold",h6:i.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:"关于"+i.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:"使用帮助"}}}},i.classNames={tex:i.classPrefix+"tex"},i.dialogZindex=99999,i.$katex=null,i.$marked=null,i.$CodeMirror=null,i.$prettyPrint=null;var o,r;i.prototype=i.fn={state:{watching:!1,loaded:!1,preview:!1,fullscreen:!1},init:function(e,o){o=o||{},"object"===_typeof(e)&&(o=e);var r=this.classPrefix=i.classPrefix,n=this.settings=t.extend(!0,i.defaults,o);e="object"===_typeof(e)?n.id:e;var a=this.editor=t("#"+e);this.id=e,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,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",minHeight:n.minHeight});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),void 0!==l.attr("name")&&""!==l.attr("name")||l.attr("name",""!==n.name?n.name:e+"-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&&(i.$katex=katex),n.searchReplace&&!n.readOnly&&(i.loadCSS(n.path+"codemirror/addon/dialog/dialog"),i.loadCSS(n.path+"codemirror/addon/search/matchesonscrollbar"))),"function"==typeof define&&define.amd||!n.autoLoadModules?("undefined"!=typeof CodeMirror&&(i.$CodeMirror=CodeMirror),"undefined"!=typeof marked&&(i.$marked=marked),this.setCodeMirror().setToolbar().loadedDisplay()):this.loadQueues(),this},loadQueues:function(){var e=this,t=this.settings,o=t.path,r=function(){if(i.isIE8)return void e.loadedDisplay();t.flowChart||t.sequenceDiagram?i.loadScript(o+"raphael.min",function(){i.loadScript(o+"underscore.min",function(){!t.flowChart&&t.sequenceDiagram?i.loadScript(o+"sequence-diagram.min",function(){e.loadedDisplay()}):t.flowChart&&!t.sequenceDiagram?i.loadScript(o+"flowchart.min",function(){i.loadScript(o+"jquery.flowchart.min",function(){e.loadedDisplay()})}):t.flowChart&&t.sequenceDiagram&&i.loadScript(o+"flowchart.min",function(){i.loadScript(o+"jquery.flowchart.min",function(){i.loadScript(o+"sequence-diagram.min",function(){e.loadedDisplay()})})})})}):e.loadedDisplay()};return i.loadCSS(o+"codemirror/codemirror.min"),t.searchReplace&&!t.readOnly&&(i.loadCSS(o+"codemirror/addon/dialog/dialog"),i.loadCSS(o+"codemirror/addon/search/matchesonscrollbar")),t.codeFold&&i.loadCSS(o+"codemirror/addon/fold/foldgutter"),i.loadScript(o+"codemirror/codemirror.min",function(){i.$CodeMirror=CodeMirror,i.loadScript(o+"codemirror/modes.min",function(){i.loadScript(o+"codemirror/addons.min",function(){if(e.setCodeMirror(),"gfm"!==t.mode&&"markdown"!==t.mode)return e.loadedDisplay(),!1;e.setToolbar(),i.loadScript(o+"marked.min",function(){i.$marked=marked,t.previewCodeHighlight?i.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 t=this.settings;return t.editorTheme=e,"default"!==e&&i.loadCSS(t.path+"codemirror/theme/"+t.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,t=this.editor;"default"!==e.editorTheme&&i.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",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&&/\w/}};return this.codeEditor=this.cm=i.$CodeMirror.fromTextArea(this.markdownTextarea[0],o),this.codeMirror=this.cmElement=t.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",minHeight:e.minHeight,maxHeight:e.maxHeight}),this.codeMirror.find(".CodeMirror-gutters").css({minHeight:e.minHeight}),this.codeMirror.find(".CodeMirror-scroll").css({minHeight:e.minHeight,maxHeight:e.maxHeight}),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(e){var i=this.settings;if(!i.gotoLine)return this;var o=this.cm,r=(this.editor,o.lineCount()),n=this.preview;if("string"==typeof e&&("last"===e&&(e=r),"first"===e&&(e=1)),"number"!=typeof e)return alert("Error: The line number must be an integer."),this;if((e=parseInt(e)-1)>r)return alert("Error: The line number range 1-"+r),this;o.setCursor({line:e,ch:0});var a=o.getScrollInfo(),s=a.clientHeight,l=o.charCoords({line:e,ch:0},"local");if(o.scrollTo(null,(l.top+l.bottom-s)/2),i.watch){var c=this.codeMirror.find(".CodeMirror-scroll")[0],h=t(c).height(),d=c.scrollTop,u=d/c.scrollHeight;0===d?n.scrollTop(0):d+h>=c.scrollHeight-16?n.scrollTop(n[0].scrollHeight):n.scrollTop(n[0].scrollHeight*u)}return o.focus(),this},extend:function(){return void 0!==arguments[1]&&("function"==typeof arguments[1]&&(arguments[1]=t.proxy(arguments[1],this)),this[arguments[0]]=arguments[1]),"object"===_typeof(arguments[0])&&void 0===arguments[0].length&&t.extend(!0,this,arguments[0]),this},set:function(e,i){return void 0!==i&&"function"==typeof i&&(i=t.proxy(i,this)),this[e]=i,this},config:function(e,i){var o=this.settings;return"object"===_typeof(e)&&(o=t.extend(!0,o,e)),"string"==typeof e&&(o[e]=i),this.settings=o,this.recreate(),this},on:function(e,i){var o=this.settings;return void 0!==o["on"+e]&&(o["on"+e]=t.proxy(i,this)),this},off:function(e){var t=this.settings;return void 0!==t["on"+e]&&(t["on"+e]=function(){}),this},showToolbar:function(e){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(),t.proxy(e||function(){},this)(),this)},hideToolbar:function(e){return this.settings.toolbar=!1,this.toolbar.hide(),this.resize(),t.proxy(e||function(){},this)(),this},setToolbarAutoFixed:function(e){var i=this.state,o=this.editor,r=this.toolbar,n=this.settings;void 0!==e&&(n.toolbarAutoFixed=e);var a=function(){var e=t(window),i=e.scrollTop();if(!n.toolbarAutoFixed)return!1;i-o.offset().top>10&&i
          ';t.append(n),r=this.toolbar=t.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?i.toolbarModes[e.toolbarIcons]:e.toolbarIcons,s=r.find("."+this.classPrefix+"menu"),l="",c=!1,h=0,d=a.length;h|';else{var f=/h(\d)/.test(u),p=u;"watch"!==u||e.watch||(p="unwatch");var g=e.lang.toolbar[p],m=e.toolbarIconTexts[p],w=e.toolbarIconsClass[p];g=void 0===g?"":g,m=void 0===m?"":m,w=void 0===w?"":w;var v=c?'
        • ':"
        • ";void 0!==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 t.proxy(i.dialogLockScreen,this)(),this},dialogShowMask:function(e){return t.proxy(i.dialogShowMask,this)(e),this},getToolbarHandles:function(e){var t=this.toolbarHandlers=i.toolbarHandlers;return e&&void 0!==toolbarIconHandlers[e]?t[e]:t},setToolbarHandler:function(){var e=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(i.mouseOrTouch("click","touchend"),function(i){var r=t(this).children(".fa"),a=r.attr("name"),s=n.getCursor(),c=n.getSelection();if(""!==a)return e.activeIcon=r,void 0!==l[a]?t.proxy(l[a],e)(n):void 0!==o.toolbarHandlers[a]&&t.proxy(o.toolbarHandlers[a],e)(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}),this},createDialog:function(e){return t.proxy(i.createDialog,this)(e)},createInfoDialog:function(){var e=this,t=this.editor,o=this.classPrefix,r=['
          ','
          ','

          '+i.title+"v"+i.version+"

          ","

          "+this.lang.description+"

          ",'

          '+i.homePage+'

          ','

          Copyright © 2015 Pandao, The MIT License.

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

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

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

          '+e+"

          ":a.Renderer.prototype.code.apply(this,arguments)},l.tablecell=function(e,t){var i=t.header?"th":"td";return(t.align?"<"+i+' style="text-align:'+t.align+'">':"<"+i+">")+this.atLink(this.emoji(e))+"\n"},l.listitem=function(e){return n.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},i.markdownToCRenderer=function(e,t,i,o){var r="",n=[0],a=this.classPrefix;o=o||1;for(var s=0,l=e.length;su)r+="",n.push(h);else if(h=0;p--){if(!(h<=n[p])){n.push(h);break}f++,n.pop()}r+=new Array(f+1).join("
      • ")}else r+="";r+='
      • '+c+"
          "}}var g=t.find(".markdown-toc");if(g.length<1&&"false"===t.attr("previewContainer")){var m='
          ';m=i?'
          '+m+"
          ":m,t.html(m),g=t.find(".markdown-toc")}return i&&g.wrap('

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

          • "),e.mouseover(function(){s.show(),l.each(function(){var e=t(this),i=e.children("ul");if(""===i.html()&&i.remove(),i.length>0&&""!==i.html()){var r=e.children("a").first();r.children(".fa").length<1&&r.append(t(n).css({float:"right",paddingTop:"4px"}))}e.mouseover(function(){i.css("z-index",o).show(),o+=1}).mouseleave(function(){i.hide()})})}).mouseleave(function(){s.hide()})}),r},i.filterHTMLTags=function(e,i){if("string"!=typeof e&&(e=new String(e)),"string"!=typeof i)return e;for(var o=i.split("|"),r=o[0].split(","),n=o[1],a=0,s=r.length;a]*)>([^>]*)","igm"),"")}if(void 0!==n){var c=/<(\w+)\s*([^\>]*)\>([^\>]*)<\/(\w+)\>/gi;e="*"===n?e.replace(c,function(e,t,i,o,r){return"<"+t+">"+o+""}):"on*"===n?e.replace(c,function(e,i,o,r,n){var a=t("<"+i+">"+r+""),s=t(e)[0].attributes,l={};t.each(s,function(e,t){'"'!==t.nodeName&&(l[t.nodeName]=t.nodeValue,"href"===t.nodeName&&t.nodeValue.toLowerCase().indexOf("javascript:")>=0&&(l[t.nodeName]="javascript:;"))}),t.each(l,function(e){0===e.indexOf("on")&&delete l[e]}),a.attr(l);var c=void 0!==a[1]?t(a[1]).text():"";if(!i||isNaN(i)||i===n)return i&&isNaN(i)&&i!==n?(c+="",a[0].outerHTML+c):a[0].outerHTML+c;c+="<"+i+">"+r+""}):e.replace(c,function(e,i,o,r){var a=n.split(","),s=t(e);return s.html(r),t.each(a,function(e){s.attr(a[e],null)}),s[0].outerHTML})}return e},i.markdownToHTML=function(e,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};i.$marked=marked;var n=t("#"+e),a=n.settings=t.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:i.markedRenderer(c,h),gfm:a.gfm,tables:!0,breaks:!0,pedantic:!1,sanitize:!a.htmlDecode,smartLists:!0,smartypants:!0};l=new String(l);var u=marked(l,d);u=i.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?t(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()),i.isIE8||(a.flowChart&&n.find(".flowchart").flowChart(),a.sequenceDiagram&&n.find(".sequence-diagram").sequenceDiagram({theme:"simple"})),a.tex){var p=function(){n.find("."+i.classNames.tex).each(function(){var e=t(this);katex.render(e.html().replace(/</g,"<").replace(/>/g,">"),e[0]),e.find(".katex").css("font-size","1.6em")})};!a.autoLoadKaTeX||i.$katex||i.kaTeXLoaded?p():this.loadKaTeX(function(){i.$katex=katex,i.kaTeXLoaded=!0,p()})}return n.getMarkdown=function(){return s.val()},n},i.themes=["default","dark"],i.previewThemes=["default","dark"],i.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"],i.loadPlugins={},i.loadFiles={js:[],css:[],plugin:[]},i.loadPlugin=function(e,t,o){t=t||function(){},this.loadScript(e,function(){i.loadFiles.plugin.push(e),t()},o)},i.loadCSS=function(e,t,o){o=o||"head",t=t||function(){};var r=document.createElement("link");r.type="text/css",r.rel="stylesheet",r.onload=r.onreadystatechange=function(){i.loadFiles.css.push(e),t()},r.href=e+".css","head"===o?document.getElementsByTagName("head")[0].appendChild(r):document.body.appendChild(r)},i.isIE="Microsoft Internet Explorer"===navigator.appName,i.isIE8=i.isIE&&"8."===navigator.appVersion.match(/8./i),i.loadScript=function(e,t,o){o=o||"head",t=t||function(){};var r=null;r=document.createElement("script"),r.id=e.replace(/[\.\/]+/g,"-"),r.type="text/javascript",r.src=e+".js",i.isIE8?r.onreadystatechange=function(){r.readyState&&("loaded"!==r.readyState&&"complete"!==r.readyState||(r.onreadystatechange=null,i.loadFiles.js.push(e),t()))}:r.onload=function(){i.loadFiles.js.push(e),t()},"head"===o?document.getElementsByTagName("head")[0].appendChild(r):document.body.appendChild(r)},i.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"},i.kaTeXLoaded=!1,i.loadKaTeX=function(e){i.loadCSS(i.katexURL.css,function(){i.loadScript(i.katexURL.js,e||function(){})})},i.lockScreen=function(e){t("html,body").css("overflow",e?"hidden":"")},i.createDialog=function(e){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};e=t.extend(!0,o,e);var r=this,n=this.editor,a=i.classPrefix,s=(new Date).getTime(),l=""===e.name?a+"dialog-"+s:e.name,c=i.mouseOrTouch,h='
            ';""!==e.title&&(h+='
            ",h+=''+e.title+"",h+="
            "),e.closed&&(h+=''),h+='
            '+e.content,(e.footer||"string"==typeof e.footer)&&(h+='"),h+="
            ",h+='
            ',h+='
            ',h+="
            ",n.append(h);var d=n.find("."+l);d.lockScreen=function(i){return e.lockScreen&&(t("html,body").css("overflow",i?"hidden":""),r.resize()),d},d.showMask=function(){return e.mask&&n.find("."+a+"mask").css(e.maskStyle).css("z-index",i.dialogZindex-1).show(),d},d.hideMask=function(){return e.mask&&n.find("."+a+"mask").hide(),d},d.loading=function(e){return d.find("."+a+"dialog-mask")[e?"show":"hide"](),d},d.lockScreen(!0).showMask(),d.show().css({zIndex:i.dialogZindex,border:i.isIE8?"1px solid #ddd":"",width:"number"==typeof e.width?e.width+"px":e.width,height:"number"==typeof e.height?e.height+"px":e.height});var u=function(){d.css({top:(t(window).height()-d.height())/2+"px",left:(t(window).width()-d.width())/2+"px"})};if(u(),t(window).resize(u),d.children("."+a+"dialog-close").bind(c("click","touchend"),function(){d.hide().lockScreen(!1).hideMask()}),"object"===_typeof(e.buttons)){var f=d.footer=d.find("."+a+"dialog-footer");for(var p in e.buttons){var g=e.buttons[p],m=a+p+"-btn";f.append('"),g[1]=t.proxy(g[1],d),f.children("."+m).bind(c("click","touchend"),g[1])}}if(""!==e.title&&e.drag){var w,v,k=d.children("."+a+"dialog-header");e.mask||k.bind(c("click","touchend"),function(){i.dialogZindex+=2,d.css("z-index",i.dialogZindex)});var y=function(e){e.removeClass(a+"user-unselect").off("selectstart")},b=function(e){e.addClass(a+"user-unselect").on("selectstart",function(e){return!1})},x=function(e){e=e||window.event;var i,o,r=parseInt(d[0].style.left),n=parseInt(d[0].style.top);r>=0?r+d.width()<=t(window).width()?i=e.clientX-w:(i=t(window).width()-d.width(),document.onmousemove=null):(i=0,document.onmousemove=null),n>=0?o=e.clientY-v:(o=0,document.onmousemove=null),document.onselectstart=function(){return!1},b(t("body")),b(d),d[0].style.left=i+"px",d[0].style.top=o+"px"};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=x}),document.onmouseup=function(){y(t("body")),y(d),document.onselectstart=null,document.onmousemove=null},k.touchDraggable=function(){var e=null,i=function(i){var o=i.originalEvent,r=t(this).parent().position();e={x:o.changedTouches[0].pageX-r.left,y:o.changedTouches[0].pageY-r.top}},o=function(i){i.preventDefault();var o=i.originalEvent;t(this).parent().css({top:o.changedTouches[0].pageY-e.y,left:o.changedTouches[0].pageX-e.x})};this.bind("touchstart",i).bind("touchmove",o)},k.touchDraggable()}return i.dialogZindex+=2,d},i.mouseOrTouch=function(e,t){e=e||"click",t=t||"touchend";var i=e;try{document.createEvent("TouchEvent"),i=t}catch(e){}return i},i.dateFormat=function(e){e=e||"";var t=function(e){return e<10?"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,p=o+"-"+n+"-"+a,g=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":u="星期"+["日","一","二","三","四","五","六"][s];break;case"week-day":case"wd":u=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][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=p;break;case"yyyy-mm-dd h:i:s ms":case"full + ms":u=p+" "+g+" "+d;break;case"full":case"yyyy-mm-dd h:i:s":break;default:u=p+" "+g}return u},i}}); \ No newline at end of file diff --git a/src/main/resources/static/plugins/editor.md/fonts/FontAwesome.otf b/src/main/resources/static/plugins/editor.md/fonts/FontAwesome.otf deleted file mode 100755 index f7936cc1e..000000000 Binary files a/src/main/resources/static/plugins/editor.md/fonts/FontAwesome.otf and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/fonts/editormd-logo.eot b/src/main/resources/static/plugins/editor.md/fonts/editormd-logo.eot deleted file mode 100755 index 6f378fd03..000000000 Binary files a/src/main/resources/static/plugins/editor.md/fonts/editormd-logo.eot and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/fonts/editormd-logo.svg b/src/main/resources/static/plugins/editor.md/fonts/editormd-logo.svg deleted file mode 100755 index cce729b44..000000000 --- a/src/main/resources/static/plugins/editor.md/fonts/editormd-logo.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - \ No newline at end of file diff --git a/src/main/resources/static/plugins/editor.md/fonts/editormd-logo.ttf b/src/main/resources/static/plugins/editor.md/fonts/editormd-logo.ttf deleted file mode 100755 index 659c1b37b..000000000 Binary files a/src/main/resources/static/plugins/editor.md/fonts/editormd-logo.ttf and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/fonts/editormd-logo.woff b/src/main/resources/static/plugins/editor.md/fonts/editormd-logo.woff deleted file mode 100755 index 384ee49c0..000000000 Binary files a/src/main/resources/static/plugins/editor.md/fonts/editormd-logo.woff and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.eot b/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.eot deleted file mode 100755 index 33b2bb800..000000000 Binary files a/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.svg b/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.svg deleted file mode 100755 index 1ee89d436..000000000 --- a/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,565 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.ttf b/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.ttf deleted file mode 100755 index ed9372f8e..000000000 Binary files a/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.woff b/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.woff deleted file mode 100755 index 8b280b98f..000000000 Binary files a/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.woff2 b/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.woff2 deleted file mode 100755 index 3311d5851..000000000 Binary files a/src/main/resources/static/plugins/editor.md/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/loading.gif b/src/main/resources/static/plugins/editor.md/images/loading.gif deleted file mode 100755 index 3aa9c85ae..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/loading.gif and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/loading@2x.gif b/src/main/resources/static/plugins/editor.md/images/loading@2x.gif deleted file mode 100755 index bcc021eb5..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/loading@2x.gif and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/loading@3x.gif b/src/main/resources/static/plugins/editor.md/images/loading@3x.gif deleted file mode 100755 index 216aa5a08..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/loading@3x.gif and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-16x16.ico b/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-16x16.ico deleted file mode 100755 index 1dfececd4..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-16x16.ico and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-24x24.ico b/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-24x24.ico deleted file mode 100755 index 2dc884d09..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-24x24.ico and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-32x32.ico b/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-32x32.ico deleted file mode 100755 index 986b10f90..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-32x32.ico and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-48x48.ico b/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-48x48.ico deleted file mode 100755 index 023cdefc9..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-48x48.ico and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-64x64.ico b/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-64x64.ico deleted file mode 100755 index b114b8235..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-favicon-64x64.ico and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-114x114.png b/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-114x114.png deleted file mode 100755 index 0e1a74583..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-114x114.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-120x120.png b/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-120x120.png deleted file mode 100755 index b8bfa394c..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-120x120.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-144x144.png b/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-144x144.png deleted file mode 100755 index d86bf64f1..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-144x144.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-16x16.png b/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-16x16.png deleted file mode 100755 index 867be67e1..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-16x16.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-180x180.png b/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-180x180.png deleted file mode 100755 index 207bd3e45..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-180x180.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-240x240.png b/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-240x240.png deleted file mode 100755 index 119d5b989..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-240x240.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-24x24.png b/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-24x24.png deleted file mode 100755 index 50141943f..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-24x24.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-320x320.png b/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-320x320.png deleted file mode 100755 index 00bc3cc92..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-320x320.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-32x32.png b/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-32x32.png deleted file mode 100755 index c1614f957..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-32x32.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-48x48.png b/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-48x48.png deleted file mode 100755 index 8c7f6c0fb..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-48x48.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-57x57.png b/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-57x57.png deleted file mode 100755 index cd43a0b7b..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-57x57.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-64x64.png b/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-64x64.png deleted file mode 100755 index 9445db34b..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-64x64.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-72x72.png b/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-72x72.png deleted file mode 100755 index d7e172a50..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-72x72.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-96x96.png b/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-96x96.png deleted file mode 100755 index 0bc7e4127..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/editormd-logo-96x96.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/images/logos/vi.png b/src/main/resources/static/plugins/editor.md/images/logos/vi.png deleted file mode 100755 index 796a522bc..000000000 Binary files a/src/main/resources/static/plugins/editor.md/images/logos/vi.png and /dev/null differ diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/AUTHORS b/src/main/resources/static/plugins/editor.md/lib/codemirror/AUTHORS deleted file mode 100755 index 9d62d48e6..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/AUTHORS +++ /dev/null @@ -1,436 +0,0 @@ -List of CodeMirror contributors. Updated before every release. - -4r2r -Aaron Brooks -Abdelouahab -Abe Fettig -Adam Ahmed -Adam King -adanlobato -Adán Lobato -Adrian Aichner -aeroson -Ahmad Amireh -Ahmad M. Zawawi -ahoward -Akeksandr Motsjonov -Alberto González Palomo -Alberto Pose -Albert Xing -Alexander Pavlov -Alexander Schepanovski -Alexander Shvets -Alexander Solovyov -Alexandre Bique -alexey-k -Alex Piggott -Aliaksei Chapyzhenka -Amsul -amuntean -Amy -Ananya Sen -anaran -AndersMad -Anders Nawroth -Anderson Mesquita -Andrea G -Andreas Reischuck -Andre von Houck -Andrey Fedorov -Andrey Klyuchnikov -Andrey Lushnikov -Andy Joslin -Andy Kimball -Andy Li -angelozerr -angelo.zerr@gmail.com -Ankit -Ankit Ahuja -Ansel Santosa -Anthony Grimes -Anton Kovalyov -areos -as3boyan -AtomicPages LLC -Atul Bhouraskar -Aurelian Oancea -Bastian Müller -Bem Jones-Bey -benbro -Beni Cherniavsky-Paskin -Benjamin DeCoste -Ben Keen -Bernhard Sirlinger -Bert Chang -Billy Moon -binny -B Krishna Chaitanya -Blaine G -blukat29 -boomyjee -borawjm -Brandon Frohs -Brandon Wamboldt -Brett Zamir -Brian Grinstead -Brian Sletten -Bruce Mitchener -Chandra Sekhar Pydi -Charles Skelton -Cheah Chu Yeow -Chris Coyier -Chris Granger -Chris Houseknecht -Chris Morgan -Christian Oyarzun -Christian Petrov -Christopher Brown -ciaranj -CodeAnimal -ComFreek -Curtis Gagliardi -dagsta -daines -Dale Jung -Dan Bentley -Dan Heberden -Daniel, Dao Quang Minh -Daniele Di Sarli -Daniel Faust -Daniel Huigens -Daniel KJ -Daniel Neel -Daniel Parnell -Danny Yoo -darealshinji -Darius Roberts -Dave Myers -David Mignot -David Pathakjee -David Vázquez -deebugger -Deep Thought -Devon Carew -dignifiedquire -Dimage Sapelkin -Dmitry Kiselyov -domagoj412 -Dominator008 -Domizio Demichelis -Doug Wikle -Drew Bratcher -Drew Hintz -Drew Khoury -Dror BG -duralog -eborden -edsharp -ekhaled -Enam Mijbah Noor -Eric Allam -eustas -Fabien O'Carroll -Fabio Zendhi Nagao -Faiza Alsaied -Fauntleroy -fbuchinger -feizhang365 -Felipe Lalanne -Felix Raab -Filip Noetzel -flack -ForbesLindesay -Forbes Lindesay -Ford_Lawnmower -Forrest Oliphant -Frank Wiegand -Gabriel Gheorghian -Gabriel Horner -Gabriel Nahmias -galambalazs -Gautam Mehta -gekkoe -Gerard Braad -Gergely Hegykozi -Giovanni Calò -Glenn Jorde -Glenn Ruehle -Golevka -Gordon Smith -Grant Skinner -greengiant -Gregory Koberger -Guillaume Massé -Guillaume Massé -Gustavo Rodrigues -Hakan Tunc -Hans Engel -Hardest -Hasan Karahan -Herculano Campos -Hiroyuki Makino -hitsthings -Hocdoc -Ian Beck -Ian Dickinson -Ian Wehrman -Ian Wetherbee -Ice White -ICHIKAWA, Yuji -ilvalle -Ingo Richter -Irakli Gozalishvili -Ivan Kurnosov -Jacob Lee -Jakob Miland -Jakub Vrana -Jakub Vrána -James Campos -James Thorne -Jamie Hill -Jan Jongboom -jankeromnes -Jan Keromnes -Jan Odvarko -Jan T. Sott -Jared Forsyth -Jason -Jason Barnabe -Jason Grout -Jason Johnston -Jason San Jose -Jason Siefken -Jaydeep Solanki -Jean Boussier -jeffkenton -Jeff Pickhardt -jem (graphite) -Jeremy Parmenter -Jochen Berger -Johan Ask -John Connor -John Lees-Miller -John Snelson -John Van Der Loo -Jonathan Malmaud -jongalloway -Jon Malmaud -Jon Sangster -Joost-Wim Boekesteijn -Joseph Pecoraro -Joshua Newman -Josh Watzman -jots -jsoojeon -Juan Benavides Romero -Jucovschi Constantin -Juho Vuori -Justin Hileman -jwallers@gmail.com -kaniga -Ken Newman -Ken Rockot -Kevin Sawicki -Kevin Ushey -Klaus Silveira -Koh Zi Han, Cliff -komakino -Konstantin Lopuhin -koops -ks-ifware -kubelsmieci -KwanEsq -Lanfei -Lanny -Laszlo Vidacs -leaf corcoran -Leonid Khachaturov -Leon Sorokin -Leonya Khachaturov -Liam Newman -LM -lochel -Lorenzo Stoakes -Luciano Longo -Luke Stagner -lynschinzer -Maksim Lin -Maksym Taran -Malay Majithia -Manuel Rego Casasnovas -Marat Dreizin -Marcel Gerber -Marco Aurélio -Marco Munizaga -Marcus Bointon -Marek Rudnicki -Marijn Haverbeke -Mário Gonçalves -Mario Pietsch -Mark Lentczner -Marko Bonaci -Martin Balek -Martín Gaitán -Martin Hasoň -Mason Malone -Mateusz Paprocki -Mathias Bynens -mats cronqvist -Matthew Beale -Matthias Bussonnier -Matthias BUSSONNIER -Matt McDonald -Matt Pass -Matt Sacks -mauricio -Maximilian Hils -Maxim Kraev -Max Kirsch -Max Xiantu -mbarkhau -Metatheos -Micah Dubinko -Michael Lehenbauer -Michael Zhou -Mighty Guava -Miguel Castillo -mihailik -Mike -Mike Brevoort -Mike Diaz -Mike Ivanov -Mike Kadin -MinRK -Miraculix87 -misfo -mloginov -Moritz Schwörer -mps -mtaran-google -Narciso Jaramillo -Nathan Williams -ndr -nerbert -nextrevision -ngn -nguillaumin -Ng Zhi An -Nicholas Bollweg -Nicholas Bollweg (Nick) -Nick Small -Niels van Groningen -nightwing -Nikita Beloglazov -Nikita Vasilyev -Nikolay Kostov -nilp0inter -Nisarg Jhaveri -nlwillia -Norman Rzepka -pablo -Page -Panupong Pasupat -paris -Patil Arpith -Patrick Stoica -Patrick Strawderman -Paul Garvin -Paul Ivanov -Pavel Feldman -Pavel Strashkin -Paweł Bartkiewicz -peteguhl -Peter Flynn -peterkroon -Peter Kroon -prasanthj -Prasanth J -Radek Piórkowski -Rahul -Randall Mason -Randy Burden -Randy Edmunds -Rasmus Erik Voel Jensen -Ray Ratchup -Richard van der Meer -Richard Z.H. Wang -Robert Crossfield -Roberto Abdelkader Martínez Pérez -robertop23 -Robert Plummer -Ruslan Osmanov -Ryan Prior -sabaca -Samuel Ainsworth -sandeepshetty -Sander AKA Redsandro -santec -Sascha Peilicke -satchmorun -sathyamoorthi -SCLINIC\jdecker -Scott Aikin -Scott Goodhew -Sebastian Zaha -shaund -shaun gilchrist -Shawn A -sheopory -Shiv Deepak -Shmuel Englard -Shubham Jain -silverwind -snasa -soliton4 -sonson -spastorelli -srajanpaliwal -Stanislav Oaserele -Stas Kobzar -Stefan Borsje -Steffen Beyer -Steve O'Hara -stoskov -Taha Jahangir -Takuji Shimokawa -Tarmil -tel -tfjgeorge -Thaddee Tyl -TheHowl -think -Thomas Dvornik -Thomas Schmid -Tim Alby -Tim Baumann -Timothy Farrell -Timothy Hatcher -TobiasBg -Tomas-A -Tomas Varaneckas -Tom Erik Støwer -Tom MacWright -Tony Jian -Travis Heppe -Triangle717 -twifkak -Vestimir Markov -vf -Vincent Woo -Volker Mische -wenli -Wesley Wiser -Will Binns-Smith -William Jamieson -William Stein -Willy -Wojtek Ptak -Xavier Mendez -Yassin N. Hassan -YNH Webdev -Yunchi Luo -Yuvi Panda -Zachary Dremann -Zhang Hao -zziuni -魏鹏刚 diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/LICENSE b/src/main/resources/static/plugins/editor.md/lib/codemirror/LICENSE deleted file mode 100755 index d21bbea5a..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2014 by Marijn Haverbeke and others - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/README.md b/src/main/resources/static/plugins/editor.md/lib/codemirror/README.md deleted file mode 100755 index bc6e7f5c7..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# CodeMirror -[![Build Status](https://travis-ci.org/codemirror/CodeMirror.svg)](https://travis-ci.org/codemirror/CodeMirror) -[![NPM version](https://img.shields.io/npm/v/codemirror.svg)](https://www.npmjs.org/package/codemirror) -[Funding status: ![maintainer happiness](https://marijnhaverbeke.nl/fund/status_s.png)](https://marijnhaverbeke.nl/fund/) - -CodeMirror is a JavaScript component that provides a code editor in -the browser. When a mode is available for the language you are coding -in, it will color your code, and optionally help with indentation. - -The project page is http://codemirror.net -The manual is at http://codemirror.net/doc/manual.html -The contributing guidelines are in [CONTRIBUTING.md](https://github.com/codemirror/CodeMirror/blob/master/CONTRIBUTING.md) diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/comment/comment.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/comment/comment.js deleted file mode 100755 index 2dd114d33..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/comment/comment.js +++ /dev/null @@ -1,183 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var noOptions = {}; - var nonWS = /[^\s\u00a0]/; - var Pos = CodeMirror.Pos; - - function firstNonWS(str) { - var found = str.search(nonWS); - return found == -1 ? 0 : found; - } - - CodeMirror.commands.toggleComment = function(cm) { - var minLine = Infinity, ranges = cm.listSelections(), mode = null; - for (var i = ranges.length - 1; i >= 0; i--) { - var from = ranges[i].from(), to = ranges[i].to(); - if (from.line >= minLine) continue; - if (to.line >= minLine) to = Pos(minLine, 0); - minLine = from.line; - if (mode == null) { - if (cm.uncomment(from, to)) mode = "un"; - else { cm.lineComment(from, to); mode = "line"; } - } else if (mode == "un") { - cm.uncomment(from, to); - } else { - cm.lineComment(from, to); - } - } - }; - - CodeMirror.defineExtension("lineComment", function(from, to, options) { - if (!options) options = noOptions; - var self = this, mode = self.getModeAt(from); - var commentString = options.lineComment || mode.lineComment; - if (!commentString) { - if (options.blockCommentStart || mode.blockCommentStart) { - options.fullLines = true; - self.blockComment(from, to, options); - } - return; - } - var firstLine = self.getLine(from.line); - if (firstLine == null) return; - var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1); - var pad = options.padding == null ? " " : options.padding; - var blankLines = options.commentBlankLines || from.line == to.line; - - self.operation(function() { - if (options.indent) { - var baseString = firstLine.slice(0, firstNonWS(firstLine)); - for (var i = from.line; i < end; ++i) { - var line = self.getLine(i), cut = baseString.length; - if (!blankLines && !nonWS.test(line)) continue; - if (line.slice(0, cut) != baseString) cut = firstNonWS(line); - self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut)); - } - } else { - for (var i = from.line; i < end; ++i) { - if (blankLines || nonWS.test(self.getLine(i))) - self.replaceRange(commentString + pad, Pos(i, 0)); - } - } - }); - }); - - CodeMirror.defineExtension("blockComment", function(from, to, options) { - if (!options) options = noOptions; - var self = this, mode = self.getModeAt(from); - var startString = options.blockCommentStart || mode.blockCommentStart; - var endString = options.blockCommentEnd || mode.blockCommentEnd; - if (!startString || !endString) { - if ((options.lineComment || mode.lineComment) && options.fullLines != false) - self.lineComment(from, to, options); - return; - } - - var end = Math.min(to.line, self.lastLine()); - if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end; - - var pad = options.padding == null ? " " : options.padding; - if (from.line > end) return; - - self.operation(function() { - if (options.fullLines != false) { - var lastLineHasText = nonWS.test(self.getLine(end)); - self.replaceRange(pad + endString, Pos(end)); - self.replaceRange(startString + pad, Pos(from.line, 0)); - var lead = options.blockCommentLead || mode.blockCommentLead; - if (lead != null) for (var i = from.line + 1; i <= end; ++i) - if (i != end || lastLineHasText) - self.replaceRange(lead + pad, Pos(i, 0)); - } else { - self.replaceRange(endString, to); - self.replaceRange(startString, from); - } - }); - }); - - CodeMirror.defineExtension("uncomment", function(from, to, options) { - if (!options) options = noOptions; - var self = this, mode = self.getModeAt(from); - var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), start = Math.min(from.line, end); - - // Try finding line comments - var lineString = options.lineComment || mode.lineComment, lines = []; - var pad = options.padding == null ? " " : options.padding, didSomething; - lineComment: { - if (!lineString) break lineComment; - for (var i = start; i <= end; ++i) { - var line = self.getLine(i); - var found = line.indexOf(lineString); - if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1; - if (found == -1 && (i != end || i == start) && nonWS.test(line)) break lineComment; - if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment; - lines.push(line); - } - self.operation(function() { - for (var i = start; i <= end; ++i) { - var line = lines[i - start]; - var pos = line.indexOf(lineString), endPos = pos + lineString.length; - if (pos < 0) continue; - if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length; - didSomething = true; - self.replaceRange("", Pos(i, pos), Pos(i, endPos)); - } - }); - if (didSomething) return true; - } - - // Try block comments - var startString = options.blockCommentStart || mode.blockCommentStart; - var endString = options.blockCommentEnd || mode.blockCommentEnd; - if (!startString || !endString) return false; - var lead = options.blockCommentLead || mode.blockCommentLead; - var startLine = self.getLine(start), endLine = end == start ? startLine : self.getLine(end); - var open = startLine.indexOf(startString), close = endLine.lastIndexOf(endString); - if (close == -1 && start != end) { - endLine = self.getLine(--end); - close = endLine.lastIndexOf(endString); - } - if (open == -1 || close == -1 || - !/comment/.test(self.getTokenTypeAt(Pos(start, open + 1))) || - !/comment/.test(self.getTokenTypeAt(Pos(end, close + 1)))) - return false; - - // Avoid killing block comments completely outside the selection. - // Positions of the last startString before the start of the selection, and the first endString after it. - var lastStart = startLine.lastIndexOf(startString, from.ch); - var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length); - if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false; - // Positions of the first endString after the end of the selection, and the last startString before it. - firstEnd = endLine.indexOf(endString, to.ch); - var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch); - lastStart = (firstEnd == -1 || almostLastStart == -1) ? -1 : to.ch + almostLastStart; - if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false; - - self.operation(function() { - self.replaceRange("", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)), - Pos(end, close + endString.length)); - var openEnd = open + startString.length; - if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length; - self.replaceRange("", Pos(start, open), Pos(start, openEnd)); - if (lead) for (var i = start + 1; i <= end; ++i) { - var line = self.getLine(i), found = line.indexOf(lead); - if (found == -1 || nonWS.test(line.slice(0, found))) continue; - var foundEnd = found + lead.length; - if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length; - self.replaceRange("", Pos(i, found), Pos(i, foundEnd)); - } - }); - return true; - }); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/comment/continuecomment.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/comment/continuecomment.js deleted file mode 100755 index b11d51e6c..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/comment/continuecomment.js +++ /dev/null @@ -1,85 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - var modes = ["clike", "css", "javascript"]; - - for (var i = 0; i < modes.length; ++i) - CodeMirror.extendMode(modes[i], {blockCommentContinue: " * "}); - - function continueComment(cm) { - if (cm.getOption("disableInput")) return CodeMirror.Pass; - var ranges = cm.listSelections(), mode, inserts = []; - for (var i = 0; i < ranges.length; i++) { - var pos = ranges[i].head, token = cm.getTokenAt(pos); - if (token.type != "comment") return CodeMirror.Pass; - var modeHere = CodeMirror.innerMode(cm.getMode(), token.state).mode; - if (!mode) mode = modeHere; - else if (mode != modeHere) return CodeMirror.Pass; - - var insert = null; - if (mode.blockCommentStart && mode.blockCommentContinue) { - var end = token.string.indexOf(mode.blockCommentEnd); - var full = cm.getRange(CodeMirror.Pos(pos.line, 0), CodeMirror.Pos(pos.line, token.end)), found; - if (end != -1 && end == token.string.length - mode.blockCommentEnd.length && pos.ch >= end) { - // Comment ended, don't continue it - } else if (token.string.indexOf(mode.blockCommentStart) == 0) { - insert = full.slice(0, token.start); - if (!/^\s*$/.test(insert)) { - insert = ""; - for (var j = 0; j < token.start; ++j) insert += " "; - } - } else if ((found = full.indexOf(mode.blockCommentContinue)) != -1 && - found + mode.blockCommentContinue.length > token.start && - /^\s*$/.test(full.slice(0, found))) { - insert = full.slice(0, found); - } - if (insert != null) insert += mode.blockCommentContinue; - } - if (insert == null && mode.lineComment && continueLineCommentEnabled(cm)) { - var line = cm.getLine(pos.line), found = line.indexOf(mode.lineComment); - if (found > -1) { - insert = line.slice(0, found); - if (/\S/.test(insert)) insert = null; - else insert += mode.lineComment + line.slice(found + mode.lineComment.length).match(/^\s*/)[0]; - } - } - if (insert == null) return CodeMirror.Pass; - inserts[i] = "\n" + insert; - } - - cm.operation(function() { - for (var i = ranges.length - 1; i >= 0; i--) - cm.replaceRange(inserts[i], ranges[i].from(), ranges[i].to(), "+insert"); - }); - } - - function continueLineCommentEnabled(cm) { - var opt = cm.getOption("continueComments"); - if (opt && typeof opt == "object") - return opt.continueLineComment !== false; - return true; - } - - CodeMirror.defineOption("continueComments", null, function(cm, val, prev) { - if (prev && prev != CodeMirror.Init) - cm.removeKeyMap("continueComment"); - if (val) { - var key = "Enter"; - if (typeof val == "string") - key = val; - else if (typeof val == "object" && val.key) - key = val.key; - var map = {name: "continueComment"}; - map[key] = continueComment; - cm.addKeyMap(map); - } - }); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/dialog/dialog.css b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/dialog/dialog.css deleted file mode 100755 index 2e7c0fc9b..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/dialog/dialog.css +++ /dev/null @@ -1,32 +0,0 @@ -.CodeMirror-dialog { - position: absolute; - left: 0; right: 0; - background: white; - z-index: 15; - padding: .1em .8em; - overflow: hidden; - color: #333; -} - -.CodeMirror-dialog-top { - border-bottom: 1px solid #eee; - top: 0; -} - -.CodeMirror-dialog-bottom { - border-top: 1px solid #eee; - bottom: 0; -} - -.CodeMirror-dialog input { - border: none; - outline: none; - background: transparent; - width: 20em; - color: inherit; - font-family: monospace; -} - -.CodeMirror-dialog button { - font-size: 70%; -} diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/dialog/dialog.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/dialog/dialog.js deleted file mode 100755 index e0e8ad4eb..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/dialog/dialog.js +++ /dev/null @@ -1,155 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// Open simple dialogs on top of an editor. Relies on dialog.css. - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - function dialogDiv(cm, template, bottom) { - var wrap = cm.getWrapperElement(); - var dialog; - dialog = wrap.appendChild(document.createElement("div")); - if (bottom) - dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom"; - else - dialog.className = "CodeMirror-dialog CodeMirror-dialog-top"; - - if (typeof template == "string") { - dialog.innerHTML = template; - } else { // Assuming it's a detached DOM element. - dialog.appendChild(template); - } - return dialog; - } - - function closeNotification(cm, newVal) { - if (cm.state.currentNotificationClose) - cm.state.currentNotificationClose(); - cm.state.currentNotificationClose = newVal; - } - - CodeMirror.defineExtension("openDialog", function(template, callback, options) { - if (!options) options = {}; - - closeNotification(this, null); - - var dialog = dialogDiv(this, template, options.bottom); - var closed = false, me = this; - function close(newVal) { - if (typeof newVal == 'string') { - inp.value = newVal; - } else { - if (closed) return; - closed = true; - dialog.parentNode.removeChild(dialog); - me.focus(); - - if (options.onClose) options.onClose(dialog); - } - } - - var inp = dialog.getElementsByTagName("input")[0], button; - if (inp) { - if (options.value) { - inp.value = options.value; - inp.select(); - } - - if (options.onInput) - CodeMirror.on(inp, "input", function(e) { options.onInput(e, inp.value, close);}); - if (options.onKeyUp) - CodeMirror.on(inp, "keyup", function(e) {options.onKeyUp(e, inp.value, close);}); - - CodeMirror.on(inp, "keydown", function(e) { - if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; } - if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) { - inp.blur(); - CodeMirror.e_stop(e); - close(); - } - if (e.keyCode == 13) callback(inp.value, e); - }); - - if (options.closeOnBlur !== false) CodeMirror.on(inp, "blur", close); - - inp.focus(); - } else if (button = dialog.getElementsByTagName("button")[0]) { - CodeMirror.on(button, "click", function() { - close(); - me.focus(); - }); - - if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close); - - button.focus(); - } - return close; - }); - - CodeMirror.defineExtension("openConfirm", function(template, callbacks, options) { - closeNotification(this, null); - var dialog = dialogDiv(this, template, options && options.bottom); - var buttons = dialog.getElementsByTagName("button"); - var closed = false, me = this, blurring = 1; - function close() { - if (closed) return; - closed = true; - dialog.parentNode.removeChild(dialog); - me.focus(); - } - buttons[0].focus(); - for (var i = 0; i < buttons.length; ++i) { - var b = buttons[i]; - (function(callback) { - CodeMirror.on(b, "click", function(e) { - CodeMirror.e_preventDefault(e); - close(); - if (callback) callback(me); - }); - })(callbacks[i]); - CodeMirror.on(b, "blur", function() { - --blurring; - setTimeout(function() { if (blurring <= 0) close(); }, 200); - }); - CodeMirror.on(b, "focus", function() { ++blurring; }); - } - }); - - /* - * openNotification - * Opens a notification, that can be closed with an optional timer - * (default 5000ms timer) and always closes on click. - * - * If a notification is opened while another is opened, it will close the - * currently opened one and open the new one immediately. - */ - CodeMirror.defineExtension("openNotification", function(template, options) { - closeNotification(this, close); - var dialog = dialogDiv(this, template, options && options.bottom); - var closed = false, doneTimer; - var duration = options && typeof options.duration !== "undefined" ? options.duration : 5000; - - function close() { - if (closed) return; - closed = true; - clearTimeout(doneTimer); - dialog.parentNode.removeChild(dialog); - } - - CodeMirror.on(dialog, 'click', function(e) { - CodeMirror.e_preventDefault(e); - close(); - }); - - if (duration) - doneTimer = setTimeout(close, duration); - - return close; - }); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/fullscreen.css b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/fullscreen.css deleted file mode 100755 index 437acd89b..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/fullscreen.css +++ /dev/null @@ -1,6 +0,0 @@ -.CodeMirror-fullscreen { - position: fixed; - top: 0; left: 0; right: 0; bottom: 0; - height: auto; - z-index: 9; -} diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/fullscreen.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/fullscreen.js deleted file mode 100755 index cd3673b96..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/fullscreen.js +++ /dev/null @@ -1,41 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineOption("fullScreen", false, function(cm, val, old) { - if (old == CodeMirror.Init) old = false; - if (!old == !val) return; - if (val) setFullscreen(cm); - else setNormal(cm); - }); - - function setFullscreen(cm) { - var wrap = cm.getWrapperElement(); - cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset, - width: wrap.style.width, height: wrap.style.height}; - wrap.style.width = ""; - wrap.style.height = "auto"; - wrap.className += " CodeMirror-fullscreen"; - document.documentElement.style.overflow = "hidden"; - cm.refresh(); - } - - function setNormal(cm) { - var wrap = cm.getWrapperElement(); - wrap.className = wrap.className.replace(/\s*CodeMirror-fullscreen\b/, ""); - document.documentElement.style.overflow = ""; - var info = cm.state.fullScreenRestore; - wrap.style.width = info.width; wrap.style.height = info.height; - window.scrollTo(info.scrollLeft, info.scrollTop); - cm.refresh(); - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/panel.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/panel.js deleted file mode 100755 index 22c0453e8..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/panel.js +++ /dev/null @@ -1,94 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - CodeMirror.defineExtension("addPanel", function(node, options) { - if (!this.state.panels) initPanels(this); - - var info = this.state.panels; - if (options && options.position == "bottom") - info.wrapper.appendChild(node); - else - info.wrapper.insertBefore(node, info.wrapper.firstChild); - var height = (options && options.height) || node.offsetHeight; - this._setSize(null, info.heightLeft -= height); - info.panels++; - return new Panel(this, node, options, height); - }); - - function Panel(cm, node, options, height) { - this.cm = cm; - this.node = node; - this.options = options; - this.height = height; - this.cleared = false; - } - - Panel.prototype.clear = function() { - if (this.cleared) return; - this.cleared = true; - var info = this.cm.state.panels; - this.cm._setSize(null, info.heightLeft += this.height); - info.wrapper.removeChild(this.node); - if (--info.panels == 0) removePanels(this.cm); - }; - - Panel.prototype.changed = function(height) { - var newHeight = height == null ? this.node.offsetHeight : height; - var info = this.cm.state.panels; - this.cm._setSize(null, info.height += (newHeight - this.height)); - this.height = newHeight; - }; - - function initPanels(cm) { - var wrap = cm.getWrapperElement(); - var style = window.getComputedStyle ? window.getComputedStyle(wrap) : wrap.currentStyle; - var height = parseInt(style.height); - var info = cm.state.panels = { - setHeight: wrap.style.height, - heightLeft: height, - panels: 0, - wrapper: document.createElement("div") - }; - wrap.parentNode.insertBefore(info.wrapper, wrap); - var hasFocus = cm.hasFocus(); - info.wrapper.appendChild(wrap); - if (hasFocus) cm.focus(); - - cm._setSize = cm.setSize; - if (height != null) cm.setSize = function(width, newHeight) { - if (newHeight == null) return this._setSize(width, newHeight); - info.setHeight = newHeight; - if (typeof newHeight != "number") { - var px = /^(\d+\.?\d*)px$/.exec(newHeight); - if (px) { - newHeight = Number(px[1]); - } else { - info.wrapper.style.height = newHeight; - newHeight = info.wrapper.offsetHeight; - info.wrapper.style.height = ""; - } - } - cm._setSize(width, info.heightLeft += (newHeight - height)); - height = newHeight; - }; - } - - function removePanels(cm) { - var info = cm.state.panels; - cm.state.panels = null; - - var wrap = cm.getWrapperElement(); - info.wrapper.parentNode.replaceChild(wrap, info.wrapper); - wrap.style.height = info.setHeight; - cm.setSize = cm._setSize; - cm.setSize(); - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/placeholder.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/placeholder.js deleted file mode 100755 index bb0c3931e..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/placeholder.js +++ /dev/null @@ -1,58 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - CodeMirror.defineOption("placeholder", "", function(cm, val, old) { - var prev = old && old != CodeMirror.Init; - if (val && !prev) { - cm.on("blur", onBlur); - cm.on("change", onChange); - onChange(cm); - } else if (!val && prev) { - cm.off("blur", onBlur); - cm.off("change", onChange); - clearPlaceholder(cm); - var wrapper = cm.getWrapperElement(); - wrapper.className = wrapper.className.replace(" CodeMirror-empty", ""); - } - - if (val && !cm.hasFocus()) onBlur(cm); - }); - - function clearPlaceholder(cm) { - if (cm.state.placeholder) { - cm.state.placeholder.parentNode.removeChild(cm.state.placeholder); - cm.state.placeholder = null; - } - } - function setPlaceholder(cm) { - clearPlaceholder(cm); - var elt = cm.state.placeholder = document.createElement("pre"); - elt.style.cssText = "height: 0; overflow: visible"; - elt.className = "CodeMirror-placeholder"; - elt.appendChild(document.createTextNode(cm.getOption("placeholder"))); - cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild); - } - - function onBlur(cm) { - if (isEmpty(cm)) setPlaceholder(cm); - } - function onChange(cm) { - var wrapper = cm.getWrapperElement(), empty = isEmpty(cm); - wrapper.className = wrapper.className.replace(" CodeMirror-empty", "") + (empty ? " CodeMirror-empty" : ""); - - if (empty) setPlaceholder(cm); - else clearPlaceholder(cm); - } - - function isEmpty(cm) { - return (cm.lineCount() === 1) && (cm.getLine(0) === ""); - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/rulers.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/rulers.js deleted file mode 100755 index 13185d30b..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/display/rulers.js +++ /dev/null @@ -1,64 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineOption("rulers", false, function(cm, val, old) { - if (old && old != CodeMirror.Init) { - clearRulers(cm); - cm.off("refresh", refreshRulers); - } - if (val && val.length) { - setRulers(cm); - cm.on("refresh", refreshRulers); - } - }); - - function clearRulers(cm) { - for (var i = cm.display.lineSpace.childNodes.length - 1; i >= 0; i--) { - var node = cm.display.lineSpace.childNodes[i]; - if (/(^|\s)CodeMirror-ruler($|\s)/.test(node.className)) - node.parentNode.removeChild(node); - } - } - - function setRulers(cm) { - var val = cm.getOption("rulers"); - var cw = cm.defaultCharWidth(); - var left = cm.charCoords(CodeMirror.Pos(cm.firstLine(), 0), "div").left; - var minH = cm.display.scroller.offsetHeight + 30; - for (var i = 0; i < val.length; i++) { - var elt = document.createElement("div"); - elt.className = "CodeMirror-ruler"; - var col, cls = null, conf = val[i]; - if (typeof conf == "number") { - col = conf; - } else { - col = conf.column; - if (conf.className) elt.className += " " + conf.className; - if (conf.color) elt.style.borderColor = conf.color; - if (conf.lineStyle) elt.style.borderLeftStyle = conf.lineStyle; - if (conf.width) elt.style.borderLeftWidth = conf.width; - cls = val[i].className; - } - elt.style.left = (left + col * cw) + "px"; - elt.style.top = "-50px"; - elt.style.bottom = "-20px"; - elt.style.minHeight = minH + "px"; - cm.display.lineSpace.insertBefore(elt, cm.display.cursorDiv); - } - } - - function refreshRulers(cm) { - clearRulers(cm); - setRulers(cm); - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/closebrackets.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/closebrackets.js deleted file mode 100755 index ff4bb3f73..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/closebrackets.js +++ /dev/null @@ -1,161 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - var DEFAULT_BRACKETS = "()[]{}''\"\""; - var DEFAULT_TRIPLES = "'\""; - var DEFAULT_EXPLODE_ON_ENTER = "[]{}"; - var SPACE_CHAR_REGEX = /\s/; - - var Pos = CodeMirror.Pos; - - CodeMirror.defineOption("autoCloseBrackets", false, function(cm, val, old) { - if (old != CodeMirror.Init && old) - cm.removeKeyMap("autoCloseBrackets"); - if (!val) return; - var pairs = DEFAULT_BRACKETS, triples = DEFAULT_TRIPLES, explode = DEFAULT_EXPLODE_ON_ENTER; - if (typeof val == "string") pairs = val; - else if (typeof val == "object") { - if (val.pairs != null) pairs = val.pairs; - if (val.triples != null) triples = val.triples; - if (val.explode != null) explode = val.explode; - } - var map = buildKeymap(pairs, triples); - if (explode) map.Enter = buildExplodeHandler(explode); - cm.addKeyMap(map); - }); - - function charsAround(cm, pos) { - var str = cm.getRange(Pos(pos.line, pos.ch - 1), - Pos(pos.line, pos.ch + 1)); - return str.length == 2 ? str : null; - } - - // Project the token type that will exists after the given char is - // typed, and use it to determine whether it would cause the start - // of a string token. - function enteringString(cm, pos, ch) { - var line = cm.getLine(pos.line); - var token = cm.getTokenAt(pos); - if (/\bstring2?\b/.test(token.type)) return false; - var stream = new CodeMirror.StringStream(line.slice(0, pos.ch) + ch + line.slice(pos.ch), 4); - stream.pos = stream.start = token.start; - for (;;) { - var type1 = cm.getMode().token(stream, token.state); - if (stream.pos >= pos.ch + 1) return /\bstring2?\b/.test(type1); - stream.start = stream.pos; - } - } - - function buildKeymap(pairs, triples) { - var map = { - name : "autoCloseBrackets", - Backspace: function(cm) { - if (cm.getOption("disableInput")) return CodeMirror.Pass; - var ranges = cm.listSelections(); - for (var i = 0; i < ranges.length; i++) { - if (!ranges[i].empty()) return CodeMirror.Pass; - var around = charsAround(cm, ranges[i].head); - if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass; - } - for (var i = ranges.length - 1; i >= 0; i--) { - var cur = ranges[i].head; - cm.replaceRange("", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1)); - } - } - }; - var closingBrackets = ""; - for (var i = 0; i < pairs.length; i += 2) (function(left, right) { - closingBrackets += right; - map["'" + left + "'"] = function(cm) { - if (cm.getOption("disableInput")) return CodeMirror.Pass; - var ranges = cm.listSelections(), type, next; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i], cur = range.head, curType; - var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1)); - if (!range.empty()) { - curType = "surround"; - } else if (left == right && next == right) { - if (cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == left + left + left) - curType = "skipThree"; - else - curType = "skip"; - } else if (left == right && cur.ch > 1 && triples.indexOf(left) >= 0 && - cm.getRange(Pos(cur.line, cur.ch - 2), cur) == left + left && - (cur.ch <= 2 || cm.getRange(Pos(cur.line, cur.ch - 3), Pos(cur.line, cur.ch - 2)) != left)) { - curType = "addFour"; - } else if (left == '"' || left == "'") { - if (!CodeMirror.isWordChar(next) && enteringString(cm, cur, left)) curType = "both"; - else return CodeMirror.Pass; - } else if (cm.getLine(cur.line).length == cur.ch || closingBrackets.indexOf(next) >= 0 || SPACE_CHAR_REGEX.test(next)) { - curType = "both"; - } else { - return CodeMirror.Pass; - } - if (!type) type = curType; - else if (type != curType) return CodeMirror.Pass; - } - - cm.operation(function() { - if (type == "skip") { - cm.execCommand("goCharRight"); - } else if (type == "skipThree") { - for (var i = 0; i < 3; i++) - cm.execCommand("goCharRight"); - } else if (type == "surround") { - var sels = cm.getSelections(); - for (var i = 0; i < sels.length; i++) - sels[i] = left + sels[i] + right; - cm.replaceSelections(sels, "around"); - } else if (type == "both") { - cm.replaceSelection(left + right, null); - cm.execCommand("goCharLeft"); - } else if (type == "addFour") { - cm.replaceSelection(left + left + left + left, "before"); - cm.execCommand("goCharRight"); - } - }); - }; - if (left != right) map["'" + right + "'"] = function(cm) { - var ranges = cm.listSelections(); - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (!range.empty() || - cm.getRange(range.head, Pos(range.head.line, range.head.ch + 1)) != right) - return CodeMirror.Pass; - } - cm.execCommand("goCharRight"); - }; - })(pairs.charAt(i), pairs.charAt(i + 1)); - return map; - } - - function buildExplodeHandler(pairs) { - return function(cm) { - if (cm.getOption("disableInput")) return CodeMirror.Pass; - var ranges = cm.listSelections(); - for (var i = 0; i < ranges.length; i++) { - if (!ranges[i].empty()) return CodeMirror.Pass; - var around = charsAround(cm, ranges[i].head); - if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass; - } - cm.operation(function() { - cm.replaceSelection("\n\n", null); - cm.execCommand("goCharLeft"); - ranges = cm.listSelections(); - for (var i = 0; i < ranges.length; i++) { - var line = ranges[i].head.line; - cm.indentLine(line, null, true); - cm.indentLine(line + 1, null, true); - } - }); - }; - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/closetag.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/closetag.js deleted file mode 100755 index e68d52d9d..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/closetag.js +++ /dev/null @@ -1,166 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -/** - * Tag-closer extension for CodeMirror. - * - * This extension adds an "autoCloseTags" option that can be set to - * either true to get the default behavior, or an object to further - * configure its behavior. - * - * These are supported options: - * - * `whenClosing` (default true) - * Whether to autoclose when the '/' of a closing tag is typed. - * `whenOpening` (default true) - * Whether to autoclose the tag when the final '>' of an opening - * tag is typed. - * `dontCloseTags` (default is empty tags for HTML, none for XML) - * An array of tag names that should not be autoclosed. - * `indentTags` (default is block tags for HTML, none for XML) - * An array of tag names that should, when opened, cause a - * blank line to be added inside the tag, and the blank line and - * closing line to be indented. - * - * See demos/closetag.html for a usage example. - */ - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("../fold/xml-fold")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "../fold/xml-fold"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - CodeMirror.defineOption("autoCloseTags", false, function(cm, val, old) { - if (old != CodeMirror.Init && old) - cm.removeKeyMap("autoCloseTags"); - if (!val) return; - var map = {name: "autoCloseTags"}; - if (typeof val != "object" || val.whenClosing) - map["'/'"] = function(cm) { return autoCloseSlash(cm); }; - if (typeof val != "object" || val.whenOpening) - map["'>'"] = function(cm) { return autoCloseGT(cm); }; - cm.addKeyMap(map); - }); - - var htmlDontClose = ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", - "source", "track", "wbr"]; - var htmlIndent = ["applet", "blockquote", "body", "button", "div", "dl", "fieldset", "form", "frameset", "h1", "h2", "h3", "h4", - "h5", "h6", "head", "html", "iframe", "layer", "legend", "object", "ol", "p", "select", "table", "ul"]; - - function autoCloseGT(cm) { - if (cm.getOption("disableInput")) return CodeMirror.Pass; - var ranges = cm.listSelections(), replacements = []; - for (var i = 0; i < ranges.length; i++) { - if (!ranges[i].empty()) return CodeMirror.Pass; - var pos = ranges[i].head, tok = cm.getTokenAt(pos); - var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state; - if (inner.mode.name != "xml" || !state.tagName) return CodeMirror.Pass; - - var opt = cm.getOption("autoCloseTags"), html = inner.mode.configuration == "html"; - var dontCloseTags = (typeof opt == "object" && opt.dontCloseTags) || (html && htmlDontClose); - var indentTags = (typeof opt == "object" && opt.indentTags) || (html && htmlIndent); - - var tagName = state.tagName; - if (tok.end > pos.ch) tagName = tagName.slice(0, tagName.length - tok.end + pos.ch); - var lowerTagName = tagName.toLowerCase(); - // Don't process the '>' at the end of an end-tag or self-closing tag - if (!tagName || - tok.type == "string" && (tok.end != pos.ch || !/[\"\']/.test(tok.string.charAt(tok.string.length - 1)) || tok.string.length == 1) || - tok.type == "tag" && state.type == "closeTag" || - tok.string.indexOf("/") == (tok.string.length - 1) || // match something like - dontCloseTags && indexOf(dontCloseTags, lowerTagName) > -1 || - closingTagExists(cm, tagName, pos, state, true)) - return CodeMirror.Pass; - - var indent = indentTags && indexOf(indentTags, lowerTagName) > -1; - replacements[i] = {indent: indent, - text: ">" + (indent ? "\n\n" : "") + "", - newPos: indent ? CodeMirror.Pos(pos.line + 1, 0) : CodeMirror.Pos(pos.line, pos.ch + 1)}; - } - - for (var i = ranges.length - 1; i >= 0; i--) { - var info = replacements[i]; - cm.replaceRange(info.text, ranges[i].head, ranges[i].anchor, "+insert"); - var sel = cm.listSelections().slice(0); - sel[i] = {head: info.newPos, anchor: info.newPos}; - cm.setSelections(sel); - if (info.indent) { - cm.indentLine(info.newPos.line, null, true); - cm.indentLine(info.newPos.line + 1, null, true); - } - } - } - - function autoCloseCurrent(cm, typingSlash) { - var ranges = cm.listSelections(), replacements = []; - var head = typingSlash ? "/" : ""; - else if (cm.getMode().name == "htmlmixed" && inner.mode.name == "css") - replacements[i] = head + "style>"; - else - return CodeMirror.Pass; - } else { - if (!state.context || !state.context.tagName || - closingTagExists(cm, state.context.tagName, pos, state)) - return CodeMirror.Pass; - replacements[i] = head + state.context.tagName + ">"; - } - } - cm.replaceSelections(replacements); - ranges = cm.listSelections(); - for (var i = 0; i < ranges.length; i++) - if (i == ranges.length - 1 || ranges[i].head.line < ranges[i + 1].head.line) - cm.indentLine(ranges[i].head.line); - } - - function autoCloseSlash(cm) { - if (cm.getOption("disableInput")) return CodeMirror.Pass; - return autoCloseCurrent(cm, true); - } - - CodeMirror.commands.closeTag = function(cm) { return autoCloseCurrent(cm); }; - - function indexOf(collection, elt) { - if (collection.indexOf) return collection.indexOf(elt); - for (var i = 0, e = collection.length; i < e; ++i) - if (collection[i] == elt) return i; - return -1; - } - - // If xml-fold is loaded, we use its functionality to try and verify - // whether a given tag is actually unclosed. - function closingTagExists(cm, tagName, pos, state, newTag) { - if (!CodeMirror.scanForClosingTag) return false; - var end = Math.min(cm.lastLine() + 1, pos.line + 500); - var nextClose = CodeMirror.scanForClosingTag(cm, pos, null, end); - if (!nextClose || nextClose.tag != tagName) return false; - var cx = state.context; - // If the immediate wrapping context contains onCx instances of - // the same tag, a closing tag only exists if there are at least - // that many closing tags of that type following. - for (var onCx = newTag ? 1 : 0; cx && cx.tagName == tagName; cx = cx.prev) ++onCx; - pos = nextClose.to; - for (var i = 1; i < onCx; i++) { - var next = CodeMirror.scanForClosingTag(cm, pos, null, end); - if (!next || next.tag != tagName) return false; - pos = next.to; - } - return true; - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/continuelist.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/continuelist.js deleted file mode 100755 index ca8d26751..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/continuelist.js +++ /dev/null @@ -1,51 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var listRE = /^(\s*)(>[> ]*|[*+-]\s|(\d+)\.)(\s*)/, - emptyListRE = /^(\s*)(>[> ]*|[*+-]|(\d+)\.)(\s*)$/, - unorderedListRE = /[*+-]\s/; - - CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) { - if (cm.getOption("disableInput")) return CodeMirror.Pass; - var ranges = cm.listSelections(), replacements = []; - for (var i = 0; i < ranges.length; i++) { - var pos = ranges[i].head, match; - var eolState = cm.getStateAfter(pos.line); - var inList = eolState.list !== false; - var inQuote = eolState.quote !== false; - - if (!ranges[i].empty() || (!inList && !inQuote) || !(match = cm.getLine(pos.line).match(listRE))) { - cm.execCommand("newlineAndIndent"); - return; - } - if (cm.getLine(pos.line).match(emptyListRE)) { - cm.replaceRange("", { - line: pos.line, ch: 0 - }, { - line: pos.line, ch: pos.ch + 1 - }); - replacements[i] = "\n"; - - } else { - var indent = match[1], after = match[4]; - var bullet = unorderedListRE.test(match[2]) || match[2].indexOf(">") >= 0 - ? match[2] - : (parseInt(match[3], 10) + 1) + "."; - - replacements[i] = "\n" + indent + bullet + after; - } - } - - cm.replaceSelections(replacements); - }; -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/matchbrackets.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/matchbrackets.js deleted file mode 100755 index 70e1ae18c..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/matchbrackets.js +++ /dev/null @@ -1,120 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - var ie_lt8 = /MSIE \d/.test(navigator.userAgent) && - (document.documentMode == null || document.documentMode < 8); - - var Pos = CodeMirror.Pos; - - var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"}; - - function findMatchingBracket(cm, where, strict, config) { - var line = cm.getLineHandle(where.line), pos = where.ch - 1; - var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)]; - if (!match) return null; - var dir = match.charAt(1) == ">" ? 1 : -1; - if (strict && (dir > 0) != (pos == where.ch)) return null; - var style = cm.getTokenTypeAt(Pos(where.line, pos + 1)); - - var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config); - if (found == null) return null; - return {from: Pos(where.line, pos), to: found && found.pos, - match: found && found.ch == match.charAt(0), forward: dir > 0}; - } - - // bracketRegex is used to specify which type of bracket to scan - // should be a regexp, e.g. /[[\]]/ - // - // Note: If "where" is on an open bracket, then this bracket is ignored. - // - // Returns false when no bracket was found, null when it reached - // maxScanLines and gave up - function scanForBracket(cm, where, dir, style, config) { - var maxScanLen = (config && config.maxScanLineLength) || 10000; - var maxScanLines = (config && config.maxScanLines) || 1000; - - var stack = []; - var re = config && config.bracketRegex ? config.bracketRegex : /[(){}[\]]/; - var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1) - : Math.max(cm.firstLine() - 1, where.line - maxScanLines); - for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) { - var line = cm.getLine(lineNo); - if (!line) continue; - var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1; - if (line.length > maxScanLen) continue; - if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0); - for (; pos != end; pos += dir) { - var ch = line.charAt(pos); - if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) { - var match = matching[ch]; - if ((match.charAt(1) == ">") == (dir > 0)) stack.push(ch); - else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch}; - else stack.pop(); - } - } - } - return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null; - } - - function matchBrackets(cm, autoclear, config) { - // Disable brace matching in long lines, since it'll cause hugely slow updates - var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000; - var marks = [], ranges = cm.listSelections(); - for (var i = 0; i < ranges.length; i++) { - var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, false, config); - if (match && cm.getLine(match.from.line).length <= maxHighlightLen) { - var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; - marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style})); - if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen) - marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style})); - } - } - - if (marks.length) { - // Kludge to work around the IE bug from issue #1193, where text - // input stops going to the textare whever this fires. - if (ie_lt8 && cm.state.focused) cm.focus(); - - var clear = function() { - cm.operation(function() { - for (var i = 0; i < marks.length; i++) marks[i].clear(); - }); - }; - if (autoclear) setTimeout(clear, 800); - else return clear; - } - } - - var currentlyHighlighted = null; - function doMatchBrackets(cm) { - cm.operation(function() { - if (currentlyHighlighted) {currentlyHighlighted(); currentlyHighlighted = null;} - currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets); - }); - } - - CodeMirror.defineOption("matchBrackets", false, function(cm, val, old) { - if (old && old != CodeMirror.Init) - cm.off("cursorActivity", doMatchBrackets); - if (val) { - cm.state.matchBrackets = typeof val == "object" ? val : {}; - cm.on("cursorActivity", doMatchBrackets); - } - }); - - CodeMirror.defineExtension("matchBrackets", function() {matchBrackets(this, true);}); - CodeMirror.defineExtension("findMatchingBracket", function(pos, strict, config){ - return findMatchingBracket(this, pos, strict, config); - }); - CodeMirror.defineExtension("scanForBracket", function(pos, dir, style, config){ - return scanForBracket(this, pos, dir, style, config); - }); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/matchtags.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/matchtags.js deleted file mode 100755 index fb1911a8d..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/matchtags.js +++ /dev/null @@ -1,66 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("../fold/xml-fold")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "../fold/xml-fold"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineOption("matchTags", false, function(cm, val, old) { - if (old && old != CodeMirror.Init) { - cm.off("cursorActivity", doMatchTags); - cm.off("viewportChange", maybeUpdateMatch); - clear(cm); - } - if (val) { - cm.state.matchBothTags = typeof val == "object" && val.bothTags; - cm.on("cursorActivity", doMatchTags); - cm.on("viewportChange", maybeUpdateMatch); - doMatchTags(cm); - } - }); - - function clear(cm) { - if (cm.state.tagHit) cm.state.tagHit.clear(); - if (cm.state.tagOther) cm.state.tagOther.clear(); - cm.state.tagHit = cm.state.tagOther = null; - } - - function doMatchTags(cm) { - cm.state.failedTagMatch = false; - cm.operation(function() { - clear(cm); - if (cm.somethingSelected()) return; - var cur = cm.getCursor(), range = cm.getViewport(); - range.from = Math.min(range.from, cur.line); range.to = Math.max(cur.line + 1, range.to); - var match = CodeMirror.findMatchingTag(cm, cur, range); - if (!match) return; - if (cm.state.matchBothTags) { - var hit = match.at == "open" ? match.open : match.close; - if (hit) cm.state.tagHit = cm.markText(hit.from, hit.to, {className: "CodeMirror-matchingtag"}); - } - var other = match.at == "close" ? match.open : match.close; - if (other) - cm.state.tagOther = cm.markText(other.from, other.to, {className: "CodeMirror-matchingtag"}); - else - cm.state.failedTagMatch = true; - }); - } - - function maybeUpdateMatch(cm) { - if (cm.state.failedTagMatch) doMatchTags(cm); - } - - CodeMirror.commands.toMatchingTag = function(cm) { - var found = CodeMirror.findMatchingTag(cm, cm.getCursor()); - if (found) { - var other = found.at == "close" ? found.open : found.close; - if (other) cm.extendSelection(other.to, other.from); - } - }; -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/trailingspace.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/trailingspace.js deleted file mode 100755 index fa7b56be5..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/edit/trailingspace.js +++ /dev/null @@ -1,27 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - CodeMirror.defineOption("showTrailingSpace", false, function(cm, val, prev) { - if (prev == CodeMirror.Init) prev = false; - if (prev && !val) - cm.removeOverlay("trailingspace"); - else if (!prev && val) - cm.addOverlay({ - token: function(stream) { - for (var l = stream.string.length, i = l; i && /\s/.test(stream.string.charAt(i - 1)); --i) {} - if (i > stream.pos) { stream.pos = i; return null; } - stream.pos = l; - return "trailingspace"; - }, - name: "trailingspace" - }); - }); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/brace-fold.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/brace-fold.js deleted file mode 100755 index 1605f6c2a..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/brace-fold.js +++ /dev/null @@ -1,105 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.registerHelper("fold", "brace", function(cm, start) { - var line = start.line, lineText = cm.getLine(line); - var startCh, tokenType; - - function findOpening(openCh) { - for (var at = start.ch, pass = 0;;) { - var found = at <= 0 ? -1 : lineText.lastIndexOf(openCh, at - 1); - if (found == -1) { - if (pass == 1) break; - pass = 1; - at = lineText.length; - continue; - } - if (pass == 1 && found < start.ch) break; - tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)); - if (!/^(comment|string)/.test(tokenType)) return found + 1; - at = found - 1; - } - } - - var startToken = "{", endToken = "}", startCh = findOpening("{"); - if (startCh == null) { - startToken = "[", endToken = "]"; - startCh = findOpening("["); - } - - if (startCh == null) return; - var count = 1, lastLine = cm.lastLine(), end, endCh; - outer: for (var i = line; i <= lastLine; ++i) { - var text = cm.getLine(i), pos = i == line ? startCh : 0; - for (;;) { - var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos); - if (nextOpen < 0) nextOpen = text.length; - if (nextClose < 0) nextClose = text.length; - pos = Math.min(nextOpen, nextClose); - if (pos == text.length) break; - if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == tokenType) { - if (pos == nextOpen) ++count; - else if (!--count) { end = i; endCh = pos; break outer; } - } - ++pos; - } - } - if (end == null || line == end && endCh == startCh) return; - return {from: CodeMirror.Pos(line, startCh), - to: CodeMirror.Pos(end, endCh)}; -}); - -CodeMirror.registerHelper("fold", "import", function(cm, start) { - function hasImport(line) { - if (line < cm.firstLine() || line > cm.lastLine()) return null; - var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); - if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); - if (start.type != "keyword" || start.string != "import") return null; - // Now find closing semicolon, return its position - for (var i = line, e = Math.min(cm.lastLine(), line + 10); i <= e; ++i) { - var text = cm.getLine(i), semi = text.indexOf(";"); - if (semi != -1) return {startCh: start.end, end: CodeMirror.Pos(i, semi)}; - } - } - - var start = start.line, has = hasImport(start), prev; - if (!has || hasImport(start - 1) || ((prev = hasImport(start - 2)) && prev.end.line == start - 1)) - return null; - for (var end = has.end;;) { - var next = hasImport(end.line + 1); - if (next == null) break; - end = next.end; - } - return {from: cm.clipPos(CodeMirror.Pos(start, has.startCh + 1)), to: end}; -}); - -CodeMirror.registerHelper("fold", "include", function(cm, start) { - function hasInclude(line) { - if (line < cm.firstLine() || line > cm.lastLine()) return null; - var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); - if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); - if (start.type == "meta" && start.string.slice(0, 8) == "#include") return start.start + 8; - } - - var start = start.line, has = hasInclude(start); - if (has == null || hasInclude(start - 1) != null) return null; - for (var end = start;;) { - var next = hasInclude(end + 1); - if (next == null) break; - ++end; - } - return {from: CodeMirror.Pos(start, has + 1), - to: cm.clipPos(CodeMirror.Pos(end))}; -}); - -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/comment-fold.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/comment-fold.js deleted file mode 100755 index b75db7ea2..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/comment-fold.js +++ /dev/null @@ -1,57 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.registerGlobalHelper("fold", "comment", function(mode) { - return mode.blockCommentStart && mode.blockCommentEnd; -}, function(cm, start) { - var mode = cm.getModeAt(start), startToken = mode.blockCommentStart, endToken = mode.blockCommentEnd; - if (!startToken || !endToken) return; - var line = start.line, lineText = cm.getLine(line); - - var startCh; - for (var at = start.ch, pass = 0;;) { - var found = at <= 0 ? -1 : lineText.lastIndexOf(startToken, at - 1); - if (found == -1) { - if (pass == 1) return; - pass = 1; - at = lineText.length; - continue; - } - if (pass == 1 && found < start.ch) return; - if (/comment/.test(cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)))) { - startCh = found + startToken.length; - break; - } - at = found - 1; - } - - var depth = 1, lastLine = cm.lastLine(), end, endCh; - outer: for (var i = line; i <= lastLine; ++i) { - var text = cm.getLine(i), pos = i == line ? startCh : 0; - for (;;) { - var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos); - if (nextOpen < 0) nextOpen = text.length; - if (nextClose < 0) nextClose = text.length; - pos = Math.min(nextOpen, nextClose); - if (pos == text.length) break; - if (pos == nextOpen) ++depth; - else if (!--depth) { end = i; endCh = pos; break outer; } - ++pos; - } - } - if (end == null || line == end && endCh == startCh) return; - return {from: CodeMirror.Pos(line, startCh), - to: CodeMirror.Pos(end, endCh)}; -}); - -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/foldcode.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/foldcode.js deleted file mode 100755 index 62911f935..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/foldcode.js +++ /dev/null @@ -1,149 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - function doFold(cm, pos, options, force) { - if (options && options.call) { - var finder = options; - options = null; - } else { - var finder = getOption(cm, options, "rangeFinder"); - } - if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0); - var minSize = getOption(cm, options, "minFoldSize"); - - function getRange(allowFolded) { - var range = finder(cm, pos); - if (!range || range.to.line - range.from.line < minSize) return null; - var marks = cm.findMarksAt(range.from); - for (var i = 0; i < marks.length; ++i) { - if (marks[i].__isFold && force !== "fold") { - if (!allowFolded) return null; - range.cleared = true; - marks[i].clear(); - } - } - return range; - } - - var range = getRange(true); - if (getOption(cm, options, "scanUp")) while (!range && pos.line > cm.firstLine()) { - pos = CodeMirror.Pos(pos.line - 1, 0); - range = getRange(false); - } - if (!range || range.cleared || force === "unfold") return; - - var myWidget = makeWidget(cm, options); - CodeMirror.on(myWidget, "mousedown", function(e) { - myRange.clear(); - CodeMirror.e_preventDefault(e); - }); - var myRange = cm.markText(range.from, range.to, { - replacedWith: myWidget, - clearOnEnter: true, - __isFold: true - }); - myRange.on("clear", function(from, to) { - CodeMirror.signal(cm, "unfold", cm, from, to); - }); - CodeMirror.signal(cm, "fold", cm, range.from, range.to); - } - - function makeWidget(cm, options) { - var widget = getOption(cm, options, "widget"); - if (typeof widget == "string") { - var text = document.createTextNode(widget); - widget = document.createElement("span"); - widget.appendChild(text); - widget.className = "CodeMirror-foldmarker"; - } - return widget; - } - - // Clumsy backwards-compatible interface - CodeMirror.newFoldFunction = function(rangeFinder, widget) { - return function(cm, pos) { doFold(cm, pos, {rangeFinder: rangeFinder, widget: widget}); }; - }; - - // New-style interface - CodeMirror.defineExtension("foldCode", function(pos, options, force) { - doFold(this, pos, options, force); - }); - - CodeMirror.defineExtension("isFolded", function(pos) { - var marks = this.findMarksAt(pos); - for (var i = 0; i < marks.length; ++i) - if (marks[i].__isFold) return true; - }); - - CodeMirror.commands.toggleFold = function(cm) { - cm.foldCode(cm.getCursor()); - }; - CodeMirror.commands.fold = function(cm) { - cm.foldCode(cm.getCursor(), null, "fold"); - }; - CodeMirror.commands.unfold = function(cm) { - cm.foldCode(cm.getCursor(), null, "unfold"); - }; - CodeMirror.commands.foldAll = function(cm) { - cm.operation(function() { - for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) - cm.foldCode(CodeMirror.Pos(i, 0), null, "fold"); - }); - }; - CodeMirror.commands.unfoldAll = function(cm) { - cm.operation(function() { - for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) - cm.foldCode(CodeMirror.Pos(i, 0), null, "unfold"); - }); - }; - - CodeMirror.registerHelper("fold", "combine", function() { - var funcs = Array.prototype.slice.call(arguments, 0); - return function(cm, start) { - for (var i = 0; i < funcs.length; ++i) { - var found = funcs[i](cm, start); - if (found) return found; - } - }; - }); - - CodeMirror.registerHelper("fold", "auto", function(cm, start) { - var helpers = cm.getHelpers(start, "fold"); - for (var i = 0; i < helpers.length; i++) { - var cur = helpers[i](cm, start); - if (cur) return cur; - } - }); - - var defaultOptions = { - rangeFinder: CodeMirror.fold.auto, - widget: "\u2194", - minFoldSize: 0, - scanUp: false - }; - - CodeMirror.defineOption("foldOptions", null); - - function getOption(cm, options, name) { - if (options && options[name] !== undefined) - return options[name]; - var editorOptions = cm.options.foldOptions; - if (editorOptions && editorOptions[name] !== undefined) - return editorOptions[name]; - return defaultOptions[name]; - } - - CodeMirror.defineExtension("foldOption", function(options, name) { - return getOption(this, options, name); - }); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/foldgutter.css b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/foldgutter.css deleted file mode 100755 index ad19ae2d3..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/foldgutter.css +++ /dev/null @@ -1,20 +0,0 @@ -.CodeMirror-foldmarker { - color: blue; - text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px; - font-family: arial; - line-height: .3; - cursor: pointer; -} -.CodeMirror-foldgutter { - width: .7em; -} -.CodeMirror-foldgutter-open, -.CodeMirror-foldgutter-folded { - cursor: pointer; -} -.CodeMirror-foldgutter-open:after { - content: "\25BE"; -} -.CodeMirror-foldgutter-folded:after { - content: "\25B8"; -} diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/foldgutter.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/foldgutter.js deleted file mode 100755 index 199120c72..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/foldgutter.js +++ /dev/null @@ -1,144 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("./foldcode")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "./foldcode"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineOption("foldGutter", false, function(cm, val, old) { - if (old && old != CodeMirror.Init) { - cm.clearGutter(cm.state.foldGutter.options.gutter); - cm.state.foldGutter = null; - cm.off("gutterClick", onGutterClick); - cm.off("change", onChange); - cm.off("viewportChange", onViewportChange); - cm.off("fold", onFold); - cm.off("unfold", onFold); - cm.off("swapDoc", updateInViewport); - } - if (val) { - cm.state.foldGutter = new State(parseOptions(val)); - updateInViewport(cm); - cm.on("gutterClick", onGutterClick); - cm.on("change", onChange); - cm.on("viewportChange", onViewportChange); - cm.on("fold", onFold); - cm.on("unfold", onFold); - cm.on("swapDoc", updateInViewport); - } - }); - - var Pos = CodeMirror.Pos; - - function State(options) { - this.options = options; - this.from = this.to = 0; - } - - function parseOptions(opts) { - if (opts === true) opts = {}; - if (opts.gutter == null) opts.gutter = "CodeMirror-foldgutter"; - if (opts.indicatorOpen == null) opts.indicatorOpen = "CodeMirror-foldgutter-open"; - if (opts.indicatorFolded == null) opts.indicatorFolded = "CodeMirror-foldgutter-folded"; - return opts; - } - - function isFolded(cm, line) { - var marks = cm.findMarksAt(Pos(line)); - for (var i = 0; i < marks.length; ++i) - if (marks[i].__isFold && marks[i].find().from.line == line) return true; - } - - function marker(spec) { - if (typeof spec == "string") { - var elt = document.createElement("div"); - elt.className = spec + " CodeMirror-guttermarker-subtle"; - return elt; - } else { - return spec.cloneNode(true); - } - } - - function updateFoldInfo(cm, from, to) { - var opts = cm.state.foldGutter.options, cur = from; - var minSize = cm.foldOption(opts, "minFoldSize"); - var func = cm.foldOption(opts, "rangeFinder"); - cm.eachLine(from, to, function(line) { - var mark = null; - if (isFolded(cm, cur)) { - mark = marker(opts.indicatorFolded); - } else { - var pos = Pos(cur, 0); - var range = func && func(cm, pos); - if (range && range.to.line - range.from.line >= minSize) - mark = marker(opts.indicatorOpen); - } - cm.setGutterMarker(line, opts.gutter, mark); - ++cur; - }); - } - - function updateInViewport(cm) { - var vp = cm.getViewport(), state = cm.state.foldGutter; - if (!state) return; - cm.operation(function() { - updateFoldInfo(cm, vp.from, vp.to); - }); - state.from = vp.from; state.to = vp.to; - } - - function onGutterClick(cm, line, gutter) { - var state = cm.state.foldGutter; - if (!state) return; - var opts = state.options; - if (gutter != opts.gutter) return; - cm.foldCode(Pos(line, 0), opts.rangeFinder); - } - - function onChange(cm) { - var state = cm.state.foldGutter; - if (!state) return; - var opts = state.options; - state.from = state.to = 0; - clearTimeout(state.changeUpdate); - state.changeUpdate = setTimeout(function() { updateInViewport(cm); }, opts.foldOnChangeTimeSpan || 600); - } - - function onViewportChange(cm) { - var state = cm.state.foldGutter; - if (!state) return; - var opts = state.options; - clearTimeout(state.changeUpdate); - state.changeUpdate = setTimeout(function() { - var vp = cm.getViewport(); - if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { - updateInViewport(cm); - } else { - cm.operation(function() { - if (vp.from < state.from) { - updateFoldInfo(cm, vp.from, state.from); - state.from = vp.from; - } - if (vp.to > state.to) { - updateFoldInfo(cm, state.to, vp.to); - state.to = vp.to; - } - }); - } - }, opts.updateViewportTimeSpan || 400); - } - - function onFold(cm, from) { - var state = cm.state.foldGutter; - if (!state) return; - var line = from.line; - if (line >= state.from && line < state.to) - updateFoldInfo(cm, line, line + 1); - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/indent-fold.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/indent-fold.js deleted file mode 100755 index e29f15e9d..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/indent-fold.js +++ /dev/null @@ -1,44 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.registerHelper("fold", "indent", function(cm, start) { - var tabSize = cm.getOption("tabSize"), firstLine = cm.getLine(start.line); - if (!/\S/.test(firstLine)) return; - var getIndent = function(line) { - return CodeMirror.countColumn(line, null, tabSize); - }; - var myIndent = getIndent(firstLine); - var lastLineInFold = null; - // Go through lines until we find a line that definitely doesn't belong in - // the block we're folding, or to the end. - for (var i = start.line + 1, end = cm.lastLine(); i <= end; ++i) { - var curLine = cm.getLine(i); - var curIndent = getIndent(curLine); - if (curIndent > myIndent) { - // Lines with a greater indent are considered part of the block. - lastLineInFold = i; - } else if (!/\S/.test(curLine)) { - // Empty lines might be breaks within the block we're trying to fold. - } else { - // A non-empty line at an indent equal to or less than ours marks the - // start of another block. - break; - } - } - if (lastLineInFold) return { - from: CodeMirror.Pos(start.line, firstLine.length), - to: CodeMirror.Pos(lastLineInFold, cm.getLine(lastLineInFold).length) - }; -}); - -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/markdown-fold.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/markdown-fold.js deleted file mode 100755 index ce84c946c..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/markdown-fold.js +++ /dev/null @@ -1,49 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.registerHelper("fold", "markdown", function(cm, start) { - var maxDepth = 100; - - function isHeader(lineNo) { - var tokentype = cm.getTokenTypeAt(CodeMirror.Pos(lineNo, 0)); - return tokentype && /\bheader\b/.test(tokentype); - } - - function headerLevel(lineNo, line, nextLine) { - var match = line && line.match(/^#+/); - if (match && isHeader(lineNo)) return match[0].length; - match = nextLine && nextLine.match(/^[=\-]+\s*$/); - if (match && isHeader(lineNo + 1)) return nextLine[0] == "=" ? 1 : 2; - return maxDepth; - } - - var firstLine = cm.getLine(start.line), nextLine = cm.getLine(start.line + 1); - var level = headerLevel(start.line, firstLine, nextLine); - if (level === maxDepth) return undefined; - - var lastLineNo = cm.lastLine(); - var end = start.line, nextNextLine = cm.getLine(end + 2); - while (end < lastLineNo) { - if (headerLevel(end + 1, nextLine, nextNextLine) <= level) break; - ++end; - nextLine = nextNextLine; - nextNextLine = cm.getLine(end + 2); - } - - return { - from: CodeMirror.Pos(start.line, firstLine.length), - to: CodeMirror.Pos(end, cm.getLine(end).length) - }; -}); - -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/xml-fold.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/xml-fold.js deleted file mode 100755 index 504727f38..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/fold/xml-fold.js +++ /dev/null @@ -1,182 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var Pos = CodeMirror.Pos; - function cmp(a, b) { return a.line - b.line || a.ch - b.ch; } - - var nameStartChar = "A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD"; - var nameChar = nameStartChar + "\-\:\.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040"; - var xmlTagStart = new RegExp("<(/?)([" + nameStartChar + "][" + nameChar + "]*)", "g"); - - function Iter(cm, line, ch, range) { - this.line = line; this.ch = ch; - this.cm = cm; this.text = cm.getLine(line); - this.min = range ? range.from : cm.firstLine(); - this.max = range ? range.to - 1 : cm.lastLine(); - } - - function tagAt(iter, ch) { - var type = iter.cm.getTokenTypeAt(Pos(iter.line, ch)); - return type && /\btag\b/.test(type); - } - - function nextLine(iter) { - if (iter.line >= iter.max) return; - iter.ch = 0; - iter.text = iter.cm.getLine(++iter.line); - return true; - } - function prevLine(iter) { - if (iter.line <= iter.min) return; - iter.text = iter.cm.getLine(--iter.line); - iter.ch = iter.text.length; - return true; - } - - function toTagEnd(iter) { - for (;;) { - var gt = iter.text.indexOf(">", iter.ch); - if (gt == -1) { if (nextLine(iter)) continue; else return; } - if (!tagAt(iter, gt + 1)) { iter.ch = gt + 1; continue; } - var lastSlash = iter.text.lastIndexOf("/", gt); - var selfClose = lastSlash > -1 && !/\S/.test(iter.text.slice(lastSlash + 1, gt)); - iter.ch = gt + 1; - return selfClose ? "selfClose" : "regular"; - } - } - function toTagStart(iter) { - for (;;) { - var lt = iter.ch ? iter.text.lastIndexOf("<", iter.ch - 1) : -1; - if (lt == -1) { if (prevLine(iter)) continue; else return; } - if (!tagAt(iter, lt + 1)) { iter.ch = lt; continue; } - xmlTagStart.lastIndex = lt; - iter.ch = lt; - var match = xmlTagStart.exec(iter.text); - if (match && match.index == lt) return match; - } - } - - function toNextTag(iter) { - for (;;) { - xmlTagStart.lastIndex = iter.ch; - var found = xmlTagStart.exec(iter.text); - if (!found) { if (nextLine(iter)) continue; else return; } - if (!tagAt(iter, found.index + 1)) { iter.ch = found.index + 1; continue; } - iter.ch = found.index + found[0].length; - return found; - } - } - function toPrevTag(iter) { - for (;;) { - var gt = iter.ch ? iter.text.lastIndexOf(">", iter.ch - 1) : -1; - if (gt == -1) { if (prevLine(iter)) continue; else return; } - if (!tagAt(iter, gt + 1)) { iter.ch = gt; continue; } - var lastSlash = iter.text.lastIndexOf("/", gt); - var selfClose = lastSlash > -1 && !/\S/.test(iter.text.slice(lastSlash + 1, gt)); - iter.ch = gt + 1; - return selfClose ? "selfClose" : "regular"; - } - } - - function findMatchingClose(iter, tag) { - var stack = []; - for (;;) { - var next = toNextTag(iter), end, startLine = iter.line, startCh = iter.ch - (next ? next[0].length : 0); - if (!next || !(end = toTagEnd(iter))) return; - if (end == "selfClose") continue; - if (next[1]) { // closing tag - for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == next[2]) { - stack.length = i; - break; - } - if (i < 0 && (!tag || tag == next[2])) return { - tag: next[2], - from: Pos(startLine, startCh), - to: Pos(iter.line, iter.ch) - }; - } else { // opening tag - stack.push(next[2]); - } - } - } - function findMatchingOpen(iter, tag) { - var stack = []; - for (;;) { - var prev = toPrevTag(iter); - if (!prev) return; - if (prev == "selfClose") { toTagStart(iter); continue; } - var endLine = iter.line, endCh = iter.ch; - var start = toTagStart(iter); - if (!start) return; - if (start[1]) { // closing tag - stack.push(start[2]); - } else { // opening tag - for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == start[2]) { - stack.length = i; - break; - } - if (i < 0 && (!tag || tag == start[2])) return { - tag: start[2], - from: Pos(iter.line, iter.ch), - to: Pos(endLine, endCh) - }; - } - } - } - - CodeMirror.registerHelper("fold", "xml", function(cm, start) { - var iter = new Iter(cm, start.line, 0); - for (;;) { - var openTag = toNextTag(iter), end; - if (!openTag || iter.line != start.line || !(end = toTagEnd(iter))) return; - if (!openTag[1] && end != "selfClose") { - var start = Pos(iter.line, iter.ch); - var close = findMatchingClose(iter, openTag[2]); - return close && {from: start, to: close.from}; - } - } - }); - CodeMirror.findMatchingTag = function(cm, pos, range) { - var iter = new Iter(cm, pos.line, pos.ch, range); - if (iter.text.indexOf(">") == -1 && iter.text.indexOf("<") == -1) return; - var end = toTagEnd(iter), to = end && Pos(iter.line, iter.ch); - var start = end && toTagStart(iter); - if (!end || !start || cmp(iter, pos) > 0) return; - var here = {from: Pos(iter.line, iter.ch), to: to, tag: start[2]}; - if (end == "selfClose") return {open: here, close: null, at: "open"}; - - if (start[1]) { // closing tag - return {open: findMatchingOpen(iter, start[2]), close: here, at: "close"}; - } else { // opening tag - iter = new Iter(cm, to.line, to.ch, range); - return {open: here, close: findMatchingClose(iter, start[2]), at: "open"}; - } - }; - - CodeMirror.findEnclosingTag = function(cm, pos, range) { - var iter = new Iter(cm, pos.line, pos.ch, range); - for (;;) { - var open = findMatchingOpen(iter); - if (!open) break; - var forward = new Iter(cm, pos.line, pos.ch, range); - var close = findMatchingClose(forward, open.tag); - if (close) return {open: open, close: close}; - } - }; - - // Used by addon/edit/closetag.js - CodeMirror.scanForClosingTag = function(cm, pos, name, end) { - var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null); - return findMatchingClose(iter, name); - }; -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/anyword-hint.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/anyword-hint.js deleted file mode 100755 index 8e74a9208..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/anyword-hint.js +++ /dev/null @@ -1,41 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var WORD = /[\w$]+/, RANGE = 500; - - CodeMirror.registerHelper("hint", "anyword", function(editor, options) { - var word = options && options.word || WORD; - var range = options && options.range || RANGE; - var cur = editor.getCursor(), curLine = editor.getLine(cur.line); - var end = cur.ch, start = end; - while (start && word.test(curLine.charAt(start - 1))) --start; - var curWord = start != end && curLine.slice(start, end); - - var list = [], seen = {}; - var re = new RegExp(word.source, "g"); - for (var dir = -1; dir <= 1; dir += 2) { - var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; - for (; line != endLine; line += dir) { - var text = editor.getLine(line), m; - while (m = re.exec(text)) { - if (line == cur.line && m[0] === curWord) continue; - if ((!curWord || m[0].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[0])) { - seen[m[0]] = true; - list.push(m[0]); - } - } - } - } - return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)}; - }); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/css-hint.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/css-hint.js deleted file mode 100755 index 488da3449..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/css-hint.js +++ /dev/null @@ -1,56 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("../../mode/css/css")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "../../mode/css/css"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var pseudoClasses = {link: 1, visited: 1, active: 1, hover: 1, focus: 1, - "first-letter": 1, "first-line": 1, "first-child": 1, - before: 1, after: 1, lang: 1}; - - CodeMirror.registerHelper("hint", "css", function(cm) { - var cur = cm.getCursor(), token = cm.getTokenAt(cur); - var inner = CodeMirror.innerMode(cm.getMode(), token.state); - if (inner.mode.name != "css") return; - - var start = token.start, end = cur.ch, word = token.string.slice(0, end - start); - if (/[^\w$_-]/.test(word)) { - word = ""; start = end = cur.ch; - } - - var spec = CodeMirror.resolveMode("text/css"); - - var result = []; - function add(keywords) { - for (var name in keywords) - if (!word || name.lastIndexOf(word, 0) == 0) - result.push(name); - } - - var st = inner.state.state; - if (st == "pseudo" || token.type == "variable-3") { - add(pseudoClasses); - } else if (st == "block" || st == "maybeprop") { - add(spec.propertyKeywords); - } else if (st == "prop" || st == "parens" || st == "at" || st == "params") { - add(spec.valueKeywords); - add(spec.colorKeywords); - } else if (st == "media" || st == "media_parens") { - add(spec.mediaTypes); - add(spec.mediaFeatures); - } - - if (result.length) return { - list: result, - from: CodeMirror.Pos(cur.line, start), - to: CodeMirror.Pos(cur.line, end) - }; - }); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/html-hint.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/html-hint.js deleted file mode 100755 index c6769bcae..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/html-hint.js +++ /dev/null @@ -1,348 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("./xml-hint")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "./xml-hint"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var langs = "ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu".split(" "); - var targets = ["_blank", "_self", "_top", "_parent"]; - var charsets = ["ascii", "utf-8", "utf-16", "latin1", "latin1"]; - var methods = ["get", "post", "put", "delete"]; - var encs = ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"]; - var media = ["all", "screen", "print", "embossed", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "speech", - "3d-glasses", "resolution [>][<][=] [X]", "device-aspect-ratio: X/Y", "orientation:portrait", - "orientation:landscape", "device-height: [X]", "device-width: [X]"]; - var s = { attrs: {} }; // Simple tag, reused for a whole lot of tags - - var data = { - a: { - attrs: { - href: null, ping: null, type: null, - media: media, - target: targets, - hreflang: langs - } - }, - abbr: s, - acronym: s, - address: s, - applet: s, - area: { - attrs: { - alt: null, coords: null, href: null, target: null, ping: null, - media: media, hreflang: langs, type: null, - shape: ["default", "rect", "circle", "poly"] - } - }, - article: s, - aside: s, - audio: { - attrs: { - src: null, mediagroup: null, - crossorigin: ["anonymous", "use-credentials"], - preload: ["none", "metadata", "auto"], - autoplay: ["", "autoplay"], - loop: ["", "loop"], - controls: ["", "controls"] - } - }, - b: s, - base: { attrs: { href: null, target: targets } }, - basefont: s, - bdi: s, - bdo: s, - big: s, - blockquote: { attrs: { cite: null } }, - body: s, - br: s, - button: { - attrs: { - form: null, formaction: null, name: null, value: null, - autofocus: ["", "autofocus"], - disabled: ["", "autofocus"], - formenctype: encs, - formmethod: methods, - formnovalidate: ["", "novalidate"], - formtarget: targets, - type: ["submit", "reset", "button"] - } - }, - canvas: { attrs: { width: null, height: null } }, - caption: s, - center: s, - cite: s, - code: s, - col: { attrs: { span: null } }, - colgroup: { attrs: { span: null } }, - command: { - attrs: { - type: ["command", "checkbox", "radio"], - label: null, icon: null, radiogroup: null, command: null, title: null, - disabled: ["", "disabled"], - checked: ["", "checked"] - } - }, - data: { attrs: { value: null } }, - datagrid: { attrs: { disabled: ["", "disabled"], multiple: ["", "multiple"] } }, - datalist: { attrs: { data: null } }, - dd: s, - del: { attrs: { cite: null, datetime: null } }, - details: { attrs: { open: ["", "open"] } }, - dfn: s, - dir: s, - div: s, - dl: s, - dt: s, - em: s, - embed: { attrs: { src: null, type: null, width: null, height: null } }, - eventsource: { attrs: { src: null } }, - fieldset: { attrs: { disabled: ["", "disabled"], form: null, name: null } }, - figcaption: s, - figure: s, - font: s, - footer: s, - form: { - attrs: { - action: null, name: null, - "accept-charset": charsets, - autocomplete: ["on", "off"], - enctype: encs, - method: methods, - novalidate: ["", "novalidate"], - target: targets - } - }, - frame: s, - frameset: s, - h1: s, h2: s, h3: s, h4: s, h5: s, h6: s, - head: { - attrs: {}, - children: ["title", "base", "link", "style", "meta", "script", "noscript", "command"] - }, - header: s, - hgroup: s, - hr: s, - html: { - attrs: { manifest: null }, - children: ["head", "body"] - }, - i: s, - iframe: { - attrs: { - src: null, srcdoc: null, name: null, width: null, height: null, - sandbox: ["allow-top-navigation", "allow-same-origin", "allow-forms", "allow-scripts"], - seamless: ["", "seamless"] - } - }, - img: { - attrs: { - alt: null, src: null, ismap: null, usemap: null, width: null, height: null, - crossorigin: ["anonymous", "use-credentials"] - } - }, - input: { - attrs: { - alt: null, dirname: null, form: null, formaction: null, - height: null, list: null, max: null, maxlength: null, min: null, - name: null, pattern: null, placeholder: null, size: null, src: null, - step: null, value: null, width: null, - accept: ["audio/*", "video/*", "image/*"], - autocomplete: ["on", "off"], - autofocus: ["", "autofocus"], - checked: ["", "checked"], - disabled: ["", "disabled"], - formenctype: encs, - formmethod: methods, - formnovalidate: ["", "novalidate"], - formtarget: targets, - multiple: ["", "multiple"], - readonly: ["", "readonly"], - required: ["", "required"], - type: ["hidden", "text", "search", "tel", "url", "email", "password", "datetime", "date", "month", - "week", "time", "datetime-local", "number", "range", "color", "checkbox", "radio", - "file", "submit", "image", "reset", "button"] - } - }, - ins: { attrs: { cite: null, datetime: null } }, - kbd: s, - keygen: { - attrs: { - challenge: null, form: null, name: null, - autofocus: ["", "autofocus"], - disabled: ["", "disabled"], - keytype: ["RSA"] - } - }, - label: { attrs: { "for": null, form: null } }, - legend: s, - li: { attrs: { value: null } }, - link: { - attrs: { - href: null, type: null, - hreflang: langs, - media: media, - sizes: ["all", "16x16", "16x16 32x32", "16x16 32x32 64x64"] - } - }, - map: { attrs: { name: null } }, - mark: s, - menu: { attrs: { label: null, type: ["list", "context", "toolbar"] } }, - meta: { - attrs: { - content: null, - charset: charsets, - name: ["viewport", "application-name", "author", "description", "generator", "keywords"], - "http-equiv": ["content-language", "content-type", "default-style", "refresh"] - } - }, - meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } }, - nav: s, - noframes: s, - noscript: s, - object: { - attrs: { - data: null, type: null, name: null, usemap: null, form: null, width: null, height: null, - typemustmatch: ["", "typemustmatch"] - } - }, - ol: { attrs: { reversed: ["", "reversed"], start: null, type: ["1", "a", "A", "i", "I"] } }, - optgroup: { attrs: { disabled: ["", "disabled"], label: null } }, - option: { attrs: { disabled: ["", "disabled"], label: null, selected: ["", "selected"], value: null } }, - output: { attrs: { "for": null, form: null, name: null } }, - p: s, - param: { attrs: { name: null, value: null } }, - pre: s, - progress: { attrs: { value: null, max: null } }, - q: { attrs: { cite: null } }, - rp: s, - rt: s, - ruby: s, - s: s, - samp: s, - script: { - attrs: { - type: ["text/javascript"], - src: null, - async: ["", "async"], - defer: ["", "defer"], - charset: charsets - } - }, - section: s, - select: { - attrs: { - form: null, name: null, size: null, - autofocus: ["", "autofocus"], - disabled: ["", "disabled"], - multiple: ["", "multiple"] - } - }, - small: s, - source: { attrs: { src: null, type: null, media: null } }, - span: s, - strike: s, - strong: s, - style: { - attrs: { - type: ["text/css"], - media: media, - scoped: null - } - }, - sub: s, - summary: s, - sup: s, - table: s, - tbody: s, - td: { attrs: { colspan: null, rowspan: null, headers: null } }, - textarea: { - attrs: { - dirname: null, form: null, maxlength: null, name: null, placeholder: null, - rows: null, cols: null, - autofocus: ["", "autofocus"], - disabled: ["", "disabled"], - readonly: ["", "readonly"], - required: ["", "required"], - wrap: ["soft", "hard"] - } - }, - tfoot: s, - th: { attrs: { colspan: null, rowspan: null, headers: null, scope: ["row", "col", "rowgroup", "colgroup"] } }, - thead: s, - time: { attrs: { datetime: null } }, - title: s, - tr: s, - track: { - attrs: { - src: null, label: null, "default": null, - kind: ["subtitles", "captions", "descriptions", "chapters", "metadata"], - srclang: langs - } - }, - tt: s, - u: s, - ul: s, - "var": s, - video: { - attrs: { - src: null, poster: null, width: null, height: null, - crossorigin: ["anonymous", "use-credentials"], - preload: ["auto", "metadata", "none"], - autoplay: ["", "autoplay"], - mediagroup: ["movie"], - muted: ["", "muted"], - controls: ["", "controls"] - } - }, - wbr: s - }; - - var globalAttrs = { - accesskey: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], - "class": null, - contenteditable: ["true", "false"], - contextmenu: null, - dir: ["ltr", "rtl", "auto"], - draggable: ["true", "false", "auto"], - dropzone: ["copy", "move", "link", "string:", "file:"], - hidden: ["hidden"], - id: null, - inert: ["inert"], - itemid: null, - itemprop: null, - itemref: null, - itemscope: ["itemscope"], - itemtype: null, - lang: ["en", "es"], - spellcheck: ["true", "false"], - style: null, - tabindex: ["1", "2", "3", "4", "5", "6", "7", "8", "9"], - title: null, - translate: ["yes", "no"], - onclick: null, - rel: ["stylesheet", "alternate", "author", "bookmark", "help", "license", "next", "nofollow", "noreferrer", "prefetch", "prev", "search", "tag"] - }; - function populate(obj) { - for (var attr in globalAttrs) if (globalAttrs.hasOwnProperty(attr)) - obj.attrs[attr] = globalAttrs[attr]; - } - - populate(s); - for (var tag in data) if (data.hasOwnProperty(tag) && data[tag] != s) - populate(data[tag]); - - CodeMirror.htmlSchema = data; - function htmlHint(cm, options) { - var local = {schemaInfo: data}; - if (options) for (var opt in options) local[opt] = options[opt]; - return CodeMirror.hint.xml(cm, local); - } - CodeMirror.registerHelper("hint", "html", htmlHint); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/javascript-hint.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/javascript-hint.js deleted file mode 100755 index 7bcbf4a05..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/javascript-hint.js +++ /dev/null @@ -1,146 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - var Pos = CodeMirror.Pos; - - function forEach(arr, f) { - for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]); - } - - function arrayContains(arr, item) { - if (!Array.prototype.indexOf) { - var i = arr.length; - while (i--) { - if (arr[i] === item) { - return true; - } - } - return false; - } - return arr.indexOf(item) != -1; - } - - function scriptHint(editor, keywords, getToken, options) { - // Find the token at the cursor - var cur = editor.getCursor(), token = getToken(editor, cur); - if (/\b(?:string|comment)\b/.test(token.type)) return; - token.state = CodeMirror.innerMode(editor.getMode(), token.state).state; - - // If it's not a 'word-style' token, ignore the token. - if (!/^[\w$_]*$/.test(token.string)) { - token = {start: cur.ch, end: cur.ch, string: "", state: token.state, - type: token.string == "." ? "property" : null}; - } else if (token.end > cur.ch) { - token.end = cur.ch; - token.string = token.string.slice(0, cur.ch - token.start); - } - - var tprop = token; - // If it is a property, find out what it is a property of. - while (tprop.type == "property") { - tprop = getToken(editor, Pos(cur.line, tprop.start)); - if (tprop.string != ".") return; - tprop = getToken(editor, Pos(cur.line, tprop.start)); - if (!context) var context = []; - context.push(tprop); - } - return {list: getCompletions(token, context, keywords, options), - from: Pos(cur.line, token.start), - to: Pos(cur.line, token.end)}; - } - - function javascriptHint(editor, options) { - return scriptHint(editor, javascriptKeywords, - function (e, cur) {return e.getTokenAt(cur);}, - options); - }; - CodeMirror.registerHelper("hint", "javascript", javascriptHint); - - function getCoffeeScriptToken(editor, cur) { - // This getToken, it is for coffeescript, imitates the behavior of - // getTokenAt method in javascript.js, that is, returning "property" - // type and treat "." as indepenent token. - var token = editor.getTokenAt(cur); - if (cur.ch == token.start + 1 && token.string.charAt(0) == '.') { - token.end = token.start; - token.string = '.'; - token.type = "property"; - } - else if (/^\.[\w$_]*$/.test(token.string)) { - token.type = "property"; - token.start++; - token.string = token.string.replace(/\./, ''); - } - return token; - } - - function coffeescriptHint(editor, options) { - return scriptHint(editor, coffeescriptKeywords, getCoffeeScriptToken, options); - } - CodeMirror.registerHelper("hint", "coffeescript", coffeescriptHint); - - var stringProps = ("charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight " + - "toUpperCase toLowerCase split concat match replace search").split(" "); - var arrayProps = ("length concat join splice push pop shift unshift slice reverse sort indexOf " + - "lastIndexOf every some filter forEach map reduce reduceRight ").split(" "); - var funcProps = "prototype apply call bind".split(" "); - var javascriptKeywords = ("break case catch continue debugger default delete do else false finally for function " + - "if in instanceof new null return switch throw true try typeof var void while with").split(" "); - var coffeescriptKeywords = ("and break catch class continue delete do else extends false finally for " + - "if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes").split(" "); - - function getCompletions(token, context, keywords, options) { - var found = [], start = token.string, global = options && options.globalScope || window; - function maybeAdd(str) { - if (str.lastIndexOf(start, 0) == 0 && !arrayContains(found, str)) found.push(str); - } - function gatherCompletions(obj) { - if (typeof obj == "string") forEach(stringProps, maybeAdd); - else if (obj instanceof Array) forEach(arrayProps, maybeAdd); - else if (obj instanceof Function) forEach(funcProps, maybeAdd); - for (var name in obj) maybeAdd(name); - } - - if (context && context.length) { - // If this is a property, see if it belongs to some object we can - // find in the current environment. - var obj = context.pop(), base; - if (obj.type && obj.type.indexOf("variable") === 0) { - if (options && options.additionalContext) - base = options.additionalContext[obj.string]; - if (!options || options.useGlobalScope !== false) - base = base || global[obj.string]; - } else if (obj.type == "string") { - base = ""; - } else if (obj.type == "atom") { - base = 1; - } else if (obj.type == "function") { - if (global.jQuery != null && (obj.string == '$' || obj.string == 'jQuery') && - (typeof global.jQuery == 'function')) - base = global.jQuery(); - else if (global._ != null && (obj.string == '_') && (typeof global._ == 'function')) - base = global._(); - } - while (base != null && context.length) - base = base[context.pop().string]; - if (base != null) gatherCompletions(base); - } else { - // If not, just look in the global object and any local scope - // (reading into JS mode internals to get at the local and global variables) - for (var v = token.state.localVars; v; v = v.next) maybeAdd(v.name); - for (var v = token.state.globalVars; v; v = v.next) maybeAdd(v.name); - if (!options || options.useGlobalScope !== false) - gatherCompletions(global); - forEach(keywords, maybeAdd); - } - return found; - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/show-hint.css b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/show-hint.css deleted file mode 100755 index 924e638f7..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/show-hint.css +++ /dev/null @@ -1,38 +0,0 @@ -.CodeMirror-hints { - position: absolute; - z-index: 10; - overflow: hidden; - list-style: none; - - margin: 0; - padding: 2px; - - -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); - -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); - box-shadow: 2px 3px 5px rgba(0,0,0,.2); - border-radius: 3px; - border: 1px solid silver; - - background: white; - font-size: 90%; - font-family: monospace; - - max-height: 20em; - overflow-y: auto; -} - -.CodeMirror-hint { - margin: 0; - padding: 0 4px; - border-radius: 2px; - max-width: 19em; - overflow: hidden; - white-space: pre; - color: black; - cursor: pointer; -} - -li.CodeMirror-hint-active { - background: #08f; - color: white; -} diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/show-hint.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/show-hint.js deleted file mode 100755 index f54461942..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/show-hint.js +++ /dev/null @@ -1,394 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var HINT_ELEMENT_CLASS = "CodeMirror-hint"; - var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active"; - - // This is the old interface, kept around for now to stay - // backwards-compatible. - CodeMirror.showHint = function(cm, getHints, options) { - if (!getHints) return cm.showHint(options); - if (options && options.async) getHints.async = true; - var newOpts = {hint: getHints}; - if (options) for (var prop in options) newOpts[prop] = options[prop]; - return cm.showHint(newOpts); - }; - - var asyncRunID = 0; - function retrieveHints(getter, cm, options, then) { - if (getter.async) { - var id = ++asyncRunID; - getter(cm, function(hints) { - if (asyncRunID == id) then(hints); - }, options); - } else { - then(getter(cm, options)); - } - } - - CodeMirror.defineExtension("showHint", function(options) { - // We want a single cursor position. - if (this.listSelections().length > 1 || this.somethingSelected()) return; - - if (this.state.completionActive) this.state.completionActive.close(); - var completion = this.state.completionActive = new Completion(this, options); - var getHints = completion.options.hint; - if (!getHints) return; - - CodeMirror.signal(this, "startCompletion", this); - return retrieveHints(getHints, this, completion.options, function(hints) { completion.showHints(hints); }); - }); - - function Completion(cm, options) { - this.cm = cm; - this.options = this.buildOptions(options); - this.widget = this.onClose = null; - } - - Completion.prototype = { - close: function() { - if (!this.active()) return; - this.cm.state.completionActive = null; - - if (this.widget) this.widget.close(); - if (this.onClose) this.onClose(); - CodeMirror.signal(this.cm, "endCompletion", this.cm); - }, - - active: function() { - return this.cm.state.completionActive == this; - }, - - pick: function(data, i) { - var completion = data.list[i]; - if (completion.hint) completion.hint(this.cm, data, completion); - else this.cm.replaceRange(getText(completion), completion.from || data.from, - completion.to || data.to, "complete"); - CodeMirror.signal(data, "pick", completion); - this.close(); - }, - - showHints: function(data) { - if (!data || !data.list.length || !this.active()) return this.close(); - - if (this.options.completeSingle && data.list.length == 1) - this.pick(data, 0); - else - this.showWidget(data); - }, - - showWidget: function(data) { - this.widget = new Widget(this, data); - CodeMirror.signal(data, "shown"); - - var debounce = 0, completion = this, finished; - var closeOn = this.options.closeCharacters; - var startPos = this.cm.getCursor(), startLen = this.cm.getLine(startPos.line).length; - - var requestAnimationFrame = window.requestAnimationFrame || function(fn) { - return setTimeout(fn, 1000/60); - }; - var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout; - - function done() { - if (finished) return; - finished = true; - completion.close(); - completion.cm.off("cursorActivity", activity); - if (data) CodeMirror.signal(data, "close"); - } - - function update() { - if (finished) return; - CodeMirror.signal(data, "update"); - retrieveHints(completion.options.hint, completion.cm, completion.options, finishUpdate); - } - function finishUpdate(data_) { - data = data_; - if (finished) return; - if (!data || !data.list.length) return done(); - if (completion.widget) completion.widget.close(); - completion.widget = new Widget(completion, data); - } - - function clearDebounce() { - if (debounce) { - cancelAnimationFrame(debounce); - debounce = 0; - } - } - - function activity() { - clearDebounce(); - var pos = completion.cm.getCursor(), line = completion.cm.getLine(pos.line); - if (pos.line != startPos.line || line.length - pos.ch != startLen - startPos.ch || - pos.ch < startPos.ch || completion.cm.somethingSelected() || - (pos.ch && closeOn.test(line.charAt(pos.ch - 1)))) { - completion.close(); - } else { - debounce = requestAnimationFrame(update); - if (completion.widget) completion.widget.close(); - } - } - this.cm.on("cursorActivity", activity); - this.onClose = done; - }, - - buildOptions: function(options) { - var editor = this.cm.options.hintOptions; - var out = {}; - for (var prop in defaultOptions) out[prop] = defaultOptions[prop]; - if (editor) for (var prop in editor) - if (editor[prop] !== undefined) out[prop] = editor[prop]; - if (options) for (var prop in options) - if (options[prop] !== undefined) out[prop] = options[prop]; - return out; - } - }; - - function getText(completion) { - if (typeof completion == "string") return completion; - else return completion.text; - } - - function buildKeyMap(completion, handle) { - var baseMap = { - Up: function() {handle.moveFocus(-1);}, - Down: function() {handle.moveFocus(1);}, - PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);}, - PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);}, - Home: function() {handle.setFocus(0);}, - End: function() {handle.setFocus(handle.length - 1);}, - Enter: handle.pick, - Tab: handle.pick, - Esc: handle.close - }; - var custom = completion.options.customKeys; - var ourMap = custom ? {} : baseMap; - function addBinding(key, val) { - var bound; - if (typeof val != "string") - bound = function(cm) { return val(cm, handle); }; - // This mechanism is deprecated - else if (baseMap.hasOwnProperty(val)) - bound = baseMap[val]; - else - bound = val; - ourMap[key] = bound; - } - if (custom) - for (var key in custom) if (custom.hasOwnProperty(key)) - addBinding(key, custom[key]); - var extra = completion.options.extraKeys; - if (extra) - for (var key in extra) if (extra.hasOwnProperty(key)) - addBinding(key, extra[key]); - return ourMap; - } - - function getHintElement(hintsElement, el) { - while (el && el != hintsElement) { - if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el; - el = el.parentNode; - } - } - - function Widget(completion, data) { - this.completion = completion; - this.data = data; - var widget = this, cm = completion.cm; - - var hints = this.hints = document.createElement("ul"); - hints.className = "CodeMirror-hints"; - this.selectedHint = data.selectedHint || 0; - - var completions = data.list; - for (var i = 0; i < completions.length; ++i) { - var elt = hints.appendChild(document.createElement("li")), cur = completions[i]; - var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS); - if (cur.className != null) className = cur.className + " " + className; - elt.className = className; - if (cur.render) cur.render(elt, data, cur); - else elt.appendChild(document.createTextNode(cur.displayText || getText(cur))); - elt.hintId = i; - } - - var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null); - var left = pos.left, top = pos.bottom, below = true; - hints.style.left = left + "px"; - hints.style.top = top + "px"; - // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor. - var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth); - var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight); - (completion.options.container || document.body).appendChild(hints); - var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH; - if (overlapY > 0) { - var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top); - if (curTop - height > 0) { // Fits above cursor - hints.style.top = (top = pos.top - height) + "px"; - below = false; - } else if (height > winH) { - hints.style.height = (winH - 5) + "px"; - hints.style.top = (top = pos.bottom - box.top) + "px"; - var cursor = cm.getCursor(); - if (data.from.ch != cursor.ch) { - pos = cm.cursorCoords(cursor); - hints.style.left = (left = pos.left) + "px"; - box = hints.getBoundingClientRect(); - } - } - } - var overlapX = box.right - winW; - if (overlapX > 0) { - if (box.right - box.left > winW) { - hints.style.width = (winW - 5) + "px"; - overlapX -= (box.right - box.left) - winW; - } - hints.style.left = (left = pos.left - overlapX) + "px"; - } - - cm.addKeyMap(this.keyMap = buildKeyMap(completion, { - moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); }, - setFocus: function(n) { widget.changeActive(n); }, - menuSize: function() { return widget.screenAmount(); }, - length: completions.length, - close: function() { completion.close(); }, - pick: function() { widget.pick(); }, - data: data - })); - - if (completion.options.closeOnUnfocus) { - var closingOnBlur; - cm.on("blur", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); }); - cm.on("focus", this.onFocus = function() { clearTimeout(closingOnBlur); }); - } - - var startScroll = cm.getScrollInfo(); - cm.on("scroll", this.onScroll = function() { - var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect(); - var newTop = top + startScroll.top - curScroll.top; - var point = newTop - (window.pageYOffset || (document.documentElement || document.body).scrollTop); - if (!below) point += hints.offsetHeight; - if (point <= editor.top || point >= editor.bottom) return completion.close(); - hints.style.top = newTop + "px"; - hints.style.left = (left + startScroll.left - curScroll.left) + "px"; - }); - - CodeMirror.on(hints, "dblclick", function(e) { - var t = getHintElement(hints, e.target || e.srcElement); - if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();} - }); - - CodeMirror.on(hints, "click", function(e) { - var t = getHintElement(hints, e.target || e.srcElement); - if (t && t.hintId != null) { - widget.changeActive(t.hintId); - if (completion.options.completeOnSingleClick) widget.pick(); - } - }); - - CodeMirror.on(hints, "mousedown", function() { - setTimeout(function(){cm.focus();}, 20); - }); - - CodeMirror.signal(data, "select", completions[0], hints.firstChild); - return true; - } - - Widget.prototype = { - close: function() { - if (this.completion.widget != this) return; - this.completion.widget = null; - this.hints.parentNode.removeChild(this.hints); - this.completion.cm.removeKeyMap(this.keyMap); - - var cm = this.completion.cm; - if (this.completion.options.closeOnUnfocus) { - cm.off("blur", this.onBlur); - cm.off("focus", this.onFocus); - } - cm.off("scroll", this.onScroll); - }, - - pick: function() { - this.completion.pick(this.data, this.selectedHint); - }, - - changeActive: function(i, avoidWrap) { - if (i >= this.data.list.length) - i = avoidWrap ? this.data.list.length - 1 : 0; - else if (i < 0) - i = avoidWrap ? 0 : this.data.list.length - 1; - if (this.selectedHint == i) return; - var node = this.hints.childNodes[this.selectedHint]; - node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, ""); - node = this.hints.childNodes[this.selectedHint = i]; - node.className += " " + ACTIVE_HINT_ELEMENT_CLASS; - if (node.offsetTop < this.hints.scrollTop) - this.hints.scrollTop = node.offsetTop - 3; - else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight) - this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3; - CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node); - }, - - screenAmount: function() { - return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1; - } - }; - - CodeMirror.registerHelper("hint", "auto", function(cm, options) { - var helpers = cm.getHelpers(cm.getCursor(), "hint"), words; - if (helpers.length) { - for (var i = 0; i < helpers.length; i++) { - var cur = helpers[i](cm, options); - if (cur && cur.list.length) return cur; - } - } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) { - if (words) return CodeMirror.hint.fromList(cm, {words: words}); - } else if (CodeMirror.hint.anyword) { - return CodeMirror.hint.anyword(cm, options); - } - }); - - CodeMirror.registerHelper("hint", "fromList", function(cm, options) { - var cur = cm.getCursor(), token = cm.getTokenAt(cur); - var found = []; - for (var i = 0; i < options.words.length; i++) { - var word = options.words[i]; - if (word.slice(0, token.string.length) == token.string) - found.push(word); - } - - if (found.length) return { - list: found, - from: CodeMirror.Pos(cur.line, token.start), - to: CodeMirror.Pos(cur.line, token.end) - }; - }); - - CodeMirror.commands.autocomplete = CodeMirror.showHint; - - var defaultOptions = { - hint: CodeMirror.hint.auto, - completeSingle: true, - alignWithWord: true, - closeCharacters: /[\s()\[\]{};:>,]/, - closeOnUnfocus: true, - completeOnSingleClick: false, - container: null, - customKeys: null, - extraKeys: null - }; - - CodeMirror.defineOption("hintOptions", null); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/sql-hint.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/sql-hint.js deleted file mode 100755 index 5b0cc7696..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/sql-hint.js +++ /dev/null @@ -1,240 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("../../mode/sql/sql")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "../../mode/sql/sql"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var tables; - var defaultTable; - var keywords; - var CONS = { - QUERY_DIV: ";", - ALIAS_KEYWORD: "AS" - }; - var Pos = CodeMirror.Pos; - - function getKeywords(editor) { - var mode = editor.doc.modeOption; - if (mode === "sql") mode = "text/x-sql"; - return CodeMirror.resolveMode(mode).keywords; - } - - function getText(item) { - return typeof item == "string" ? item : item.text; - } - - function getItem(list, item) { - if (!list.slice) return list[item]; - for (var i = list.length - 1; i >= 0; i--) if (getText(list[i]) == item) - return list[i]; - } - - function shallowClone(object) { - var result = {}; - for (var key in object) if (object.hasOwnProperty(key)) - result[key] = object[key]; - return result; - } - - function match(string, word) { - var len = string.length; - var sub = getText(word).substr(0, len); - return string.toUpperCase() === sub.toUpperCase(); - } - - function addMatches(result, search, wordlist, formatter) { - for (var word in wordlist) { - if (!wordlist.hasOwnProperty(word)) continue; - if (Array.isArray(wordlist)) { - word = wordlist[word]; - } - if (match(search, word)) { - result.push(formatter(word)); - } - } - } - - function cleanName(name) { - // Get rid name from backticks(`) and preceding dot(.) - if (name.charAt(0) == ".") { - name = name.substr(1); - } - return name.replace(/`/g, ""); - } - - function insertBackticks(name) { - var nameParts = getText(name).split("."); - for (var i = 0; i < nameParts.length; i++) - nameParts[i] = "`" + nameParts[i] + "`"; - var escaped = nameParts.join("."); - if (typeof name == "string") return escaped; - name = shallowClone(name); - name.text = escaped; - return name; - } - - function nameCompletion(cur, token, result, editor) { - // Try to complete table, colunm names and return start position of completion - var useBacktick = false; - var nameParts = []; - var start = token.start; - var cont = true; - while (cont) { - cont = (token.string.charAt(0) == "."); - useBacktick = useBacktick || (token.string.charAt(0) == "`"); - - start = token.start; - nameParts.unshift(cleanName(token.string)); - - token = editor.getTokenAt(Pos(cur.line, token.start)); - if (token.string == ".") { - cont = true; - token = editor.getTokenAt(Pos(cur.line, token.start)); - } - } - - // Try to complete table names - var string = nameParts.join("."); - addMatches(result, string, tables, function(w) { - return useBacktick ? insertBackticks(w) : w; - }); - - // Try to complete columns from defaultTable - addMatches(result, string, defaultTable, function(w) { - return useBacktick ? insertBackticks(w) : w; - }); - - // Try to complete columns - string = nameParts.pop(); - var table = nameParts.join("."); - - // Check if table is available. If not, find table by Alias - if (!getItem(tables, table)) - table = findTableByAlias(table, editor); - - var columns = getItem(tables, table); - if (columns && Array.isArray(tables) && columns.columns) - columns = columns.columns; - - if (columns) { - addMatches(result, string, columns, function(w) { - if (typeof w == "string") { - w = table + "." + w; - } else { - w = shallowClone(w); - w.text = table + "." + w.text; - } - return useBacktick ? insertBackticks(w) : w; - }); - } - - return start; - } - - function eachWord(lineText, f) { - if (!lineText) return; - var excepted = /[,;]/g; - var words = lineText.split(" "); - for (var i = 0; i < words.length; i++) { - f(words[i]?words[i].replace(excepted, '') : ''); - } - } - - function convertCurToNumber(cur) { - // max characters of a line is 999,999. - return cur.line + cur.ch / Math.pow(10, 6); - } - - function convertNumberToCur(num) { - return Pos(Math.floor(num), +num.toString().split('.').pop()); - } - - function findTableByAlias(alias, editor) { - var doc = editor.doc; - var fullQuery = doc.getValue(); - var aliasUpperCase = alias.toUpperCase(); - var previousWord = ""; - var table = ""; - var separator = []; - var validRange = { - start: Pos(0, 0), - end: Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).length) - }; - - //add separator - var indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV); - while(indexOfSeparator != -1) { - separator.push(doc.posFromIndex(indexOfSeparator)); - indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV, indexOfSeparator+1); - } - separator.unshift(Pos(0, 0)); - separator.push(Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).text.length)); - - //find valid range - var prevItem = 0; - var current = convertCurToNumber(editor.getCursor()); - for (var i=0; i< separator.length; i++) { - var _v = convertCurToNumber(separator[i]); - if (current > prevItem && current <= _v) { - validRange = { start: convertNumberToCur(prevItem), end: convertNumberToCur(_v) }; - break; - } - prevItem = _v; - } - - var query = doc.getRange(validRange.start, validRange.end, false); - - for (var i = 0; i < query.length; i++) { - var lineText = query[i]; - eachWord(lineText, function(word) { - var wordUpperCase = word.toUpperCase(); - if (wordUpperCase === aliasUpperCase && getItem(tables, previousWord)) - table = previousWord; - if (wordUpperCase !== CONS.ALIAS_KEYWORD) - previousWord = word; - }); - if (table) break; - } - return table; - } - - CodeMirror.registerHelper("hint", "sql", function(editor, options) { - tables = (options && options.tables) || {}; - var defaultTableName = options && options.defaultTable; - defaultTable = (defaultTableName && getItem(tables, defaultTableName)) || []; - keywords = keywords || getKeywords(editor); - - var cur = editor.getCursor(); - var result = []; - var token = editor.getTokenAt(cur), start, end, search; - if (token.end > cur.ch) { - token.end = cur.ch; - token.string = token.string.slice(0, cur.ch - token.start); - } - - if (token.string.match(/^[.`\w@]\w*$/)) { - search = token.string; - start = token.start; - end = token.end; - } else { - start = end = cur.ch; - search = ""; - } - if (search.charAt(0) == "." || search.charAt(0) == "`") { - start = nameCompletion(cur, token, result, editor); - } else { - addMatches(result, search, tables, function(w) {return w;}); - addMatches(result, search, defaultTable, function(w) {return w;}); - addMatches(result, search, keywords, function(w) {return w.toUpperCase();}); - } - - return {list: result, from: Pos(cur.line, start), to: Pos(cur.line, end)}; - }); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/xml-hint.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/xml-hint.js deleted file mode 100755 index 9b9baa0c6..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/hint/xml-hint.js +++ /dev/null @@ -1,110 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var Pos = CodeMirror.Pos; - - function getHints(cm, options) { - var tags = options && options.schemaInfo; - var quote = (options && options.quoteChar) || '"'; - if (!tags) return; - var cur = cm.getCursor(), token = cm.getTokenAt(cur); - if (token.end > cur.ch) { - token.end = cur.ch; - token.string = token.string.slice(0, cur.ch - token.start); - } - var inner = CodeMirror.innerMode(cm.getMode(), token.state); - if (inner.mode.name != "xml") return; - var result = [], replaceToken = false, prefix; - var tag = /\btag\b/.test(token.type) && !/>$/.test(token.string); - var tagName = tag && /^\w/.test(token.string), tagStart; - - if (tagName) { - var before = cm.getLine(cur.line).slice(Math.max(0, token.start - 2), token.start); - var tagType = /<\/$/.test(before) ? "close" : /<$/.test(before) ? "open" : null; - if (tagType) tagStart = token.start - (tagType == "close" ? 2 : 1); - } else if (tag && token.string == "<") { - tagType = "open"; - } else if (tag && token.string == ""); - } else { - // Attribute completion - var curTag = tags[inner.state.tagName], attrs = curTag && curTag.attrs; - var globalAttrs = tags["!attrs"]; - if (!attrs && !globalAttrs) return; - if (!attrs) { - attrs = globalAttrs; - } else if (globalAttrs) { // Combine tag-local and global attributes - var set = {}; - for (var nm in globalAttrs) if (globalAttrs.hasOwnProperty(nm)) set[nm] = globalAttrs[nm]; - for (var nm in attrs) if (attrs.hasOwnProperty(nm)) set[nm] = attrs[nm]; - attrs = set; - } - if (token.type == "string" || token.string == "=") { // A value - var before = cm.getRange(Pos(cur.line, Math.max(0, cur.ch - 60)), - Pos(cur.line, token.type == "string" ? token.start : token.end)); - var atName = before.match(/([^\s\u00a0=<>\"\']+)=$/), atValues; - if (!atName || !attrs.hasOwnProperty(atName[1]) || !(atValues = attrs[atName[1]])) return; - if (typeof atValues == 'function') atValues = atValues.call(this, cm); // Functions can be used to supply values for autocomplete widget - if (token.type == "string") { - prefix = token.string; - var n = 0; - if (/['"]/.test(token.string.charAt(0))) { - quote = token.string.charAt(0); - prefix = token.string.slice(1); - n++; - } - var len = token.string.length; - if (/['"]/.test(token.string.charAt(len - 1))) { - quote = token.string.charAt(len - 1); - prefix = token.string.substr(n, len - 2); - } - replaceToken = true; - } - for (var i = 0; i < atValues.length; ++i) if (!prefix || atValues[i].lastIndexOf(prefix, 0) == 0) - result.push(quote + atValues[i] + quote); - } else { // An attribute name - if (token.type == "attribute") { - prefix = token.string; - replaceToken = true; - } - for (var attr in attrs) if (attrs.hasOwnProperty(attr) && (!prefix || attr.lastIndexOf(prefix, 0) == 0)) - result.push(attr); - } - } - return { - list: result, - from: replaceToken ? Pos(cur.line, tagStart == null ? token.start : tagStart) : cur, - to: replaceToken ? Pos(cur.line, token.end) : cur - }; - } - - CodeMirror.registerHelper("hint", "xml", getHints); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/coffeescript-lint.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/coffeescript-lint.js deleted file mode 100755 index 7e39428f7..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/coffeescript-lint.js +++ /dev/null @@ -1,41 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js - -// declare global: coffeelint - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.registerHelper("lint", "coffeescript", function(text) { - var found = []; - var parseError = function(err) { - var loc = err.lineNumber; - found.push({from: CodeMirror.Pos(loc-1, 0), - to: CodeMirror.Pos(loc, 0), - severity: err.level, - message: err.message}); - }; - try { - var res = coffeelint.lint(text); - for(var i = 0; i < res.length; i++) { - parseError(res[i]); - } - } catch(e) { - found.push({from: CodeMirror.Pos(e.location.first_line, 0), - to: CodeMirror.Pos(e.location.last_line, e.location.last_column), - severity: 'error', - message: e.message}); - } - return found; -}); - -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/css-lint.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/css-lint.js deleted file mode 100755 index 1f61b479b..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/css-lint.js +++ /dev/null @@ -1,35 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// Depends on csslint.js from https://github.com/stubbornella/csslint - -// declare global: CSSLint - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.registerHelper("lint", "css", function(text) { - var found = []; - if (!window.CSSLint) return found; - var results = CSSLint.verify(text), messages = results.messages, message = null; - for ( var i = 0; i < messages.length; i++) { - message = messages[i]; - var startLine = message.line -1, endLine = message.line -1, startCol = message.col -1, endCol = message.col; - found.push({ - from: CodeMirror.Pos(startLine, startCol), - to: CodeMirror.Pos(endLine, endCol), - message: message.message, - severity : message.type - }); - } - return found; -}); - -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/javascript-lint.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/javascript-lint.js deleted file mode 100755 index 3d65ba695..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/javascript-lint.js +++ /dev/null @@ -1,136 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - // declare global: JSHINT - - var bogus = [ "Dangerous comment" ]; - - var warnings = [ [ "Expected '{'", - "Statement body should be inside '{ }' braces." ] ]; - - var errors = [ "Missing semicolon", "Extra comma", "Missing property name", - "Unmatched ", " and instead saw", " is not defined", - "Unclosed string", "Stopping, unable to continue" ]; - - function validator(text, options) { - if (!window.JSHINT) return []; - JSHINT(text, options); - var errors = JSHINT.data().errors, result = []; - if (errors) parseErrors(errors, result); - return result; - } - - CodeMirror.registerHelper("lint", "javascript", validator); - - function cleanup(error) { - // All problems are warnings by default - fixWith(error, warnings, "warning", true); - fixWith(error, errors, "error"); - - return isBogus(error) ? null : error; - } - - function fixWith(error, fixes, severity, force) { - var description, fix, find, replace, found; - - description = error.description; - - for ( var i = 0; i < fixes.length; i++) { - fix = fixes[i]; - find = (typeof fix === "string" ? fix : fix[0]); - replace = (typeof fix === "string" ? null : fix[1]); - found = description.indexOf(find) !== -1; - - if (force || found) { - error.severity = severity; - } - if (found && replace) { - error.description = replace; - } - } - } - - function isBogus(error) { - var description = error.description; - for ( var i = 0; i < bogus.length; i++) { - if (description.indexOf(bogus[i]) !== -1) { - return true; - } - } - return false; - } - - function parseErrors(errors, output) { - for ( var i = 0; i < errors.length; i++) { - var error = errors[i]; - if (error) { - var linetabpositions, index; - - linetabpositions = []; - - // This next block is to fix a problem in jshint. Jshint - // replaces - // all tabs with spaces then performs some checks. The error - // positions (character/space) are then reported incorrectly, - // not taking the replacement step into account. Here we look - // at the evidence line and try to adjust the character position - // to the correct value. - if (error.evidence) { - // Tab positions are computed once per line and cached - var tabpositions = linetabpositions[error.line]; - if (!tabpositions) { - var evidence = error.evidence; - tabpositions = []; - // ugggh phantomjs does not like this - // forEachChar(evidence, function(item, index) { - Array.prototype.forEach.call(evidence, function(item, - index) { - if (item === '\t') { - // First col is 1 (not 0) to match error - // positions - tabpositions.push(index + 1); - } - }); - linetabpositions[error.line] = tabpositions; - } - if (tabpositions.length > 0) { - var pos = error.character; - tabpositions.forEach(function(tabposition) { - if (pos > tabposition) pos -= 1; - }); - error.character = pos; - } - } - - var start = error.character - 1, end = start + 1; - if (error.evidence) { - index = error.evidence.substring(start).search(/.\b/); - if (index > -1) { - end += index; - } - } - - // Convert to format expected by validation service - error.description = error.reason;// + "(jshint)"; - error.start = error.character; - error.end = end; - error = cleanup(error); - - if (error) - output.push({message: error.description, - severity: error.severity, - from: CodeMirror.Pos(error.line - 1, start), - to: CodeMirror.Pos(error.line - 1, end)}); - } - } - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/json-lint.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/json-lint.js deleted file mode 100755 index 9dbb616b3..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/json-lint.js +++ /dev/null @@ -1,31 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// Depends on jsonlint.js from https://github.com/zaach/jsonlint - -// declare global: jsonlint - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.registerHelper("lint", "json", function(text) { - var found = []; - jsonlint.parseError = function(str, hash) { - var loc = hash.loc; - found.push({from: CodeMirror.Pos(loc.first_line - 1, loc.first_column), - to: CodeMirror.Pos(loc.last_line - 1, loc.last_column), - message: str}); - }; - try { jsonlint.parse(text); } - catch(e) {} - return found; -}); - -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/lint.css b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/lint.css deleted file mode 100755 index 414a9a0e0..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/lint.css +++ /dev/null @@ -1,73 +0,0 @@ -/* The lint marker gutter */ -.CodeMirror-lint-markers { - width: 16px; -} - -.CodeMirror-lint-tooltip { - background-color: infobackground; - border: 1px solid black; - border-radius: 4px 4px 4px 4px; - color: infotext; - font-family: monospace; - font-size: 10pt; - overflow: hidden; - padding: 2px 5px; - position: fixed; - white-space: pre; - white-space: pre-wrap; - z-index: 100; - max-width: 600px; - opacity: 0; - transition: opacity .4s; - -moz-transition: opacity .4s; - -webkit-transition: opacity .4s; - -o-transition: opacity .4s; - -ms-transition: opacity .4s; -} - -.CodeMirror-lint-mark-error, .CodeMirror-lint-mark-warning { - background-position: left bottom; - background-repeat: repeat-x; -} - -.CodeMirror-lint-mark-error { - background-image: - url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==") - ; -} - -.CodeMirror-lint-mark-warning { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII="); -} - -.CodeMirror-lint-marker-error, .CodeMirror-lint-marker-warning { - background-position: center center; - background-repeat: no-repeat; - cursor: pointer; - display: inline-block; - height: 16px; - width: 16px; - vertical-align: middle; - position: relative; -} - -.CodeMirror-lint-message-error, .CodeMirror-lint-message-warning { - padding-left: 18px; - background-position: top left; - background-repeat: no-repeat; -} - -.CodeMirror-lint-marker-error, .CodeMirror-lint-message-error { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII="); -} - -.CodeMirror-lint-marker-warning, .CodeMirror-lint-message-warning { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII="); -} - -.CodeMirror-lint-marker-multiple { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC"); - background-repeat: no-repeat; - background-position: right bottom; - width: 100%; height: 100%; -} diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/lint.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/lint.js deleted file mode 100755 index 18eb70901..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/lint.js +++ /dev/null @@ -1,205 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - var GUTTER_ID = "CodeMirror-lint-markers"; - - function showTooltip(e, content) { - var tt = document.createElement("div"); - tt.className = "CodeMirror-lint-tooltip"; - tt.appendChild(content.cloneNode(true)); - document.body.appendChild(tt); - - function position(e) { - if (!tt.parentNode) return CodeMirror.off(document, "mousemove", position); - tt.style.top = Math.max(0, e.clientY - tt.offsetHeight - 5) + "px"; - tt.style.left = (e.clientX + 5) + "px"; - } - CodeMirror.on(document, "mousemove", position); - position(e); - if (tt.style.opacity != null) tt.style.opacity = 1; - return tt; - } - function rm(elt) { - if (elt.parentNode) elt.parentNode.removeChild(elt); - } - function hideTooltip(tt) { - if (!tt.parentNode) return; - if (tt.style.opacity == null) rm(tt); - tt.style.opacity = 0; - setTimeout(function() { rm(tt); }, 600); - } - - function showTooltipFor(e, content, node) { - var tooltip = showTooltip(e, content); - function hide() { - CodeMirror.off(node, "mouseout", hide); - if (tooltip) { hideTooltip(tooltip); tooltip = null; } - } - var poll = setInterval(function() { - if (tooltip) for (var n = node;; n = n.parentNode) { - if (n && n.nodeType == 11) n = n.host; - if (n == document.body) return; - if (!n) { hide(); break; } - } - if (!tooltip) return clearInterval(poll); - }, 400); - CodeMirror.on(node, "mouseout", hide); - } - - function LintState(cm, options, hasGutter) { - this.marked = []; - this.options = options; - this.timeout = null; - this.hasGutter = hasGutter; - this.onMouseOver = function(e) { onMouseOver(cm, e); }; - } - - function parseOptions(cm, options) { - if (options instanceof Function) return {getAnnotations: options}; - if (!options || options === true) options = {}; - if (!options.getAnnotations) options.getAnnotations = cm.getHelper(CodeMirror.Pos(0, 0), "lint"); - if (!options.getAnnotations) throw new Error("Required option 'getAnnotations' missing (lint addon)"); - return options; - } - - function clearMarks(cm) { - var state = cm.state.lint; - if (state.hasGutter) cm.clearGutter(GUTTER_ID); - for (var i = 0; i < state.marked.length; ++i) - state.marked[i].clear(); - state.marked.length = 0; - } - - function makeMarker(labels, severity, multiple, tooltips) { - var marker = document.createElement("div"), inner = marker; - marker.className = "CodeMirror-lint-marker-" + severity; - if (multiple) { - inner = marker.appendChild(document.createElement("div")); - inner.className = "CodeMirror-lint-marker-multiple"; - } - - if (tooltips != false) CodeMirror.on(inner, "mouseover", function(e) { - showTooltipFor(e, labels, inner); - }); - - return marker; - } - - function getMaxSeverity(a, b) { - if (a == "error") return a; - else return b; - } - - function groupByLine(annotations) { - var lines = []; - for (var i = 0; i < annotations.length; ++i) { - var ann = annotations[i], line = ann.from.line; - (lines[line] || (lines[line] = [])).push(ann); - } - return lines; - } - - function annotationTooltip(ann) { - var severity = ann.severity; - if (!severity) severity = "error"; - var tip = document.createElement("div"); - tip.className = "CodeMirror-lint-message-" + severity; - tip.appendChild(document.createTextNode(ann.message)); - return tip; - } - - function startLinting(cm) { - var state = cm.state.lint, options = state.options; - var passOptions = options.options || options; // Support deprecated passing of `options` property in options - if (options.async || options.getAnnotations.async) - options.getAnnotations(cm.getValue(), updateLinting, passOptions, cm); - else - updateLinting(cm, options.getAnnotations(cm.getValue(), passOptions, cm)); - } - - function updateLinting(cm, annotationsNotSorted) { - clearMarks(cm); - var state = cm.state.lint, options = state.options; - - var annotations = groupByLine(annotationsNotSorted); - - for (var line = 0; line < annotations.length; ++line) { - var anns = annotations[line]; - if (!anns) continue; - - var maxSeverity = null; - var tipLabel = state.hasGutter && document.createDocumentFragment(); - - for (var i = 0; i < anns.length; ++i) { - var ann = anns[i]; - var severity = ann.severity; - if (!severity) severity = "error"; - maxSeverity = getMaxSeverity(maxSeverity, severity); - - if (options.formatAnnotation) ann = options.formatAnnotation(ann); - if (state.hasGutter) tipLabel.appendChild(annotationTooltip(ann)); - - if (ann.to) state.marked.push(cm.markText(ann.from, ann.to, { - className: "CodeMirror-lint-mark-" + severity, - __annotation: ann - })); - } - - if (state.hasGutter) - cm.setGutterMarker(line, GUTTER_ID, makeMarker(tipLabel, maxSeverity, anns.length > 1, - state.options.tooltips)); - } - if (options.onUpdateLinting) options.onUpdateLinting(annotationsNotSorted, annotations, cm); - } - - function onChange(cm) { - var state = cm.state.lint; - clearTimeout(state.timeout); - state.timeout = setTimeout(function(){startLinting(cm);}, state.options.delay || 500); - } - - function popupSpanTooltip(ann, e) { - var target = e.target || e.srcElement; - showTooltipFor(e, annotationTooltip(ann), target); - } - - function onMouseOver(cm, e) { - var target = e.target || e.srcElement; - if (!/\bCodeMirror-lint-mark-/.test(target.className)) return; - var box = target.getBoundingClientRect(), x = (box.left + box.right) / 2, y = (box.top + box.bottom) / 2; - var spans = cm.findMarksAt(cm.coordsChar({left: x, top: y}, "client")); - for (var i = 0; i < spans.length; ++i) { - var ann = spans[i].__annotation; - if (ann) return popupSpanTooltip(ann, e); - } - } - - CodeMirror.defineOption("lint", false, function(cm, val, old) { - if (old && old != CodeMirror.Init) { - clearMarks(cm); - cm.off("change", onChange); - CodeMirror.off(cm.getWrapperElement(), "mouseover", cm.state.lint.onMouseOver); - delete cm.state.lint; - } - - if (val) { - var gutters = cm.getOption("gutters"), hasLintGutter = false; - for (var i = 0; i < gutters.length; ++i) if (gutters[i] == GUTTER_ID) hasLintGutter = true; - var state = cm.state.lint = new LintState(cm, parseOptions(cm, val), hasLintGutter); - cm.on("change", onChange); - if (state.options.tooltips != false) - CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver); - - startLinting(cm); - } - }); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/yaml-lint.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/yaml-lint.js deleted file mode 100755 index 3f77e525b..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/lint/yaml-lint.js +++ /dev/null @@ -1,28 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -// Depends on js-yaml.js from https://github.com/nodeca/js-yaml - -// declare global: jsyaml - -CodeMirror.registerHelper("lint", "yaml", function(text) { - var found = []; - try { jsyaml.load(text); } - catch(e) { - var loc = e.mark; - found.push({ from: CodeMirror.Pos(loc.line, loc.column), to: CodeMirror.Pos(loc.line, loc.column), message: e.message }); - } - return found; -}); - -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/merge/merge.css b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/merge/merge.css deleted file mode 100755 index a6a80e43e..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/merge/merge.css +++ /dev/null @@ -1,112 +0,0 @@ -.CodeMirror-merge { - position: relative; - border: 1px solid #ddd; - white-space: pre; -} - -.CodeMirror-merge, .CodeMirror-merge .CodeMirror { - height: 350px; -} - -.CodeMirror-merge-2pane .CodeMirror-merge-pane { width: 47%; } -.CodeMirror-merge-2pane .CodeMirror-merge-gap { width: 6%; } -.CodeMirror-merge-3pane .CodeMirror-merge-pane { width: 31%; } -.CodeMirror-merge-3pane .CodeMirror-merge-gap { width: 3.5%; } - -.CodeMirror-merge-pane { - display: inline-block; - white-space: normal; - vertical-align: top; -} -.CodeMirror-merge-pane-rightmost { - position: absolute; - right: 0px; - z-index: 1; -} - -.CodeMirror-merge-gap { - z-index: 2; - display: inline-block; - height: 100%; - -moz-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; - border-left: 1px solid #ddd; - border-right: 1px solid #ddd; - position: relative; - background: #f8f8f8; -} - -.CodeMirror-merge-scrolllock-wrap { - position: absolute; - bottom: 0; left: 50%; -} -.CodeMirror-merge-scrolllock { - position: relative; - left: -50%; - cursor: pointer; - color: #555; - line-height: 1; -} - -.CodeMirror-merge-copybuttons-left, .CodeMirror-merge-copybuttons-right { - position: absolute; - left: 0; top: 0; - right: 0; bottom: 0; - line-height: 1; -} - -.CodeMirror-merge-copy { - position: absolute; - cursor: pointer; - color: #44c; -} - -.CodeMirror-merge-copy-reverse { - position: absolute; - cursor: pointer; - color: #44c; -} - -.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy { left: 2px; } -.CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy { right: 2px; } - -.CodeMirror-merge-r-inserted, .CodeMirror-merge-l-inserted { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==); - background-position: bottom left; - background-repeat: repeat-x; -} - -.CodeMirror-merge-r-deleted, .CodeMirror-merge-l-deleted { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==); - background-position: bottom left; - background-repeat: repeat-x; -} - -.CodeMirror-merge-r-chunk { background: #ffffe0; } -.CodeMirror-merge-r-chunk-start { border-top: 1px solid #ee8; } -.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #ee8; } -.CodeMirror-merge-r-connect { fill: #ffffe0; stroke: #ee8; stroke-width: 1px; } - -.CodeMirror-merge-l-chunk { background: #eef; } -.CodeMirror-merge-l-chunk-start { border-top: 1px solid #88e; } -.CodeMirror-merge-l-chunk-end { border-bottom: 1px solid #88e; } -.CodeMirror-merge-l-connect { fill: #eef; stroke: #88e; stroke-width: 1px; } - -.CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk { background: #dfd; } -.CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start { border-top: 1px solid #4e4; } -.CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #4e4; } - -.CodeMirror-merge-collapsed-widget:before { - content: "(...)"; -} -.CodeMirror-merge-collapsed-widget { - cursor: pointer; - color: #88b; - background: #eef; - border: 1px solid #ddf; - font-size: 90%; - padding: 0 3px; - border-radius: 4px; -} -.CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt { display: none; } diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/merge/merge.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/merge/merge.js deleted file mode 100755 index f1f3aafc4..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/merge/merge.js +++ /dev/null @@ -1,735 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// declare global: diff_match_patch, DIFF_INSERT, DIFF_DELETE, DIFF_EQUAL - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("diff_match_patch")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "diff_match_patch"], mod); - else // Plain browser env - mod(CodeMirror, diff_match_patch); -})(function(CodeMirror, diff_match_patch) { - "use strict"; - var Pos = CodeMirror.Pos; - var svgNS = "http://www.w3.org/2000/svg"; - - function DiffView(mv, type) { - this.mv = mv; - this.type = type; - this.classes = type == "left" - ? {chunk: "CodeMirror-merge-l-chunk", - start: "CodeMirror-merge-l-chunk-start", - end: "CodeMirror-merge-l-chunk-end", - insert: "CodeMirror-merge-l-inserted", - del: "CodeMirror-merge-l-deleted", - connect: "CodeMirror-merge-l-connect"} - : {chunk: "CodeMirror-merge-r-chunk", - start: "CodeMirror-merge-r-chunk-start", - end: "CodeMirror-merge-r-chunk-end", - insert: "CodeMirror-merge-r-inserted", - del: "CodeMirror-merge-r-deleted", - connect: "CodeMirror-merge-r-connect"}; - } - - DiffView.prototype = { - constructor: DiffView, - init: function(pane, orig, options) { - this.edit = this.mv.edit; - this.orig = CodeMirror(pane, copyObj({value: orig, readOnly: !this.mv.options.allowEditingOriginals}, copyObj(options))); - - this.diff = getDiff(asString(orig), asString(options.value)); - this.chunks = getChunks(this.diff); - this.diffOutOfDate = this.dealigned = false; - - this.showDifferences = options.showDifferences !== false; - this.forceUpdate = registerUpdate(this); - setScrollLock(this, true, false); - registerScroll(this); - }, - setShowDifferences: function(val) { - val = val !== false; - if (val != this.showDifferences) { - this.showDifferences = val; - this.forceUpdate("full"); - } - } - }; - - function ensureDiff(dv) { - if (dv.diffOutOfDate) { - dv.diff = getDiff(dv.orig.getValue(), dv.edit.getValue()); - dv.chunks = getChunks(dv.diff); - dv.diffOutOfDate = false; - CodeMirror.signal(dv.edit, "updateDiff", dv.diff); - } - } - - var updating = false; - function registerUpdate(dv) { - var edit = {from: 0, to: 0, marked: []}; - var orig = {from: 0, to: 0, marked: []}; - var debounceChange, updatingFast = false; - function update(mode) { - updating = true; - updatingFast = false; - if (mode == "full") { - if (dv.svg) clear(dv.svg); - if (dv.copyButtons) clear(dv.copyButtons); - clearMarks(dv.edit, edit.marked, dv.classes); - clearMarks(dv.orig, orig.marked, dv.classes); - edit.from = edit.to = orig.from = orig.to = 0; - } - ensureDiff(dv); - if (dv.showDifferences) { - updateMarks(dv.edit, dv.diff, edit, DIFF_INSERT, dv.classes); - updateMarks(dv.orig, dv.diff, orig, DIFF_DELETE, dv.classes); - } - makeConnections(dv); - - if (dv.mv.options.connect == "align") - alignChunks(dv); - updating = false; - } - function setDealign(fast) { - if (updating) return; - dv.dealigned = true; - set(fast); - } - function set(fast) { - if (updating || updatingFast) return; - clearTimeout(debounceChange); - if (fast === true) updatingFast = true; - debounceChange = setTimeout(update, fast === true ? 20 : 250); - } - function change(_cm, change) { - if (!dv.diffOutOfDate) { - dv.diffOutOfDate = true; - edit.from = edit.to = orig.from = orig.to = 0; - } - // Update faster when a line was added/removed - setDealign(change.text.length - 1 != change.to.line - change.from.line); - } - dv.edit.on("change", change); - dv.orig.on("change", change); - dv.edit.on("markerAdded", setDealign); - dv.edit.on("markerCleared", setDealign); - dv.orig.on("markerAdded", setDealign); - dv.orig.on("markerCleared", setDealign); - dv.edit.on("viewportChange", function() { set(false); }); - dv.orig.on("viewportChange", function() { set(false); }); - update(); - return update; - } - - function registerScroll(dv) { - dv.edit.on("scroll", function() { - syncScroll(dv, DIFF_INSERT) && makeConnections(dv); - }); - dv.orig.on("scroll", function() { - syncScroll(dv, DIFF_DELETE) && makeConnections(dv); - }); - } - - function syncScroll(dv, type) { - // Change handler will do a refresh after a timeout when diff is out of date - if (dv.diffOutOfDate) return false; - if (!dv.lockScroll) return true; - var editor, other, now = +new Date; - if (type == DIFF_INSERT) { editor = dv.edit; other = dv.orig; } - else { editor = dv.orig; other = dv.edit; } - // Don't take action if the position of this editor was recently set - // (to prevent feedback loops) - if (editor.state.scrollSetBy == dv && (editor.state.scrollSetAt || 0) + 50 > now) return false; - - var sInfo = editor.getScrollInfo(); - if (dv.mv.options.connect == "align") { - targetPos = sInfo.top; - } else { - var halfScreen = .5 * sInfo.clientHeight, midY = sInfo.top + halfScreen; - var mid = editor.lineAtHeight(midY, "local"); - var around = chunkBoundariesAround(dv.chunks, mid, type == DIFF_INSERT); - var off = getOffsets(editor, type == DIFF_INSERT ? around.edit : around.orig); - var offOther = getOffsets(other, type == DIFF_INSERT ? around.orig : around.edit); - var ratio = (midY - off.top) / (off.bot - off.top); - var targetPos = (offOther.top - halfScreen) + ratio * (offOther.bot - offOther.top); - - var botDist, mix; - // Some careful tweaking to make sure no space is left out of view - // when scrolling to top or bottom. - if (targetPos > sInfo.top && (mix = sInfo.top / halfScreen) < 1) { - targetPos = targetPos * mix + sInfo.top * (1 - mix); - } else if ((botDist = sInfo.height - sInfo.clientHeight - sInfo.top) < halfScreen) { - var otherInfo = other.getScrollInfo(); - var botDistOther = otherInfo.height - otherInfo.clientHeight - targetPos; - if (botDistOther > botDist && (mix = botDist / halfScreen) < 1) - targetPos = targetPos * mix + (otherInfo.height - otherInfo.clientHeight - botDist) * (1 - mix); - } - } - - other.scrollTo(sInfo.left, targetPos); - other.state.scrollSetAt = now; - other.state.scrollSetBy = dv; - return true; - } - - function getOffsets(editor, around) { - var bot = around.after; - if (bot == null) bot = editor.lastLine() + 1; - return {top: editor.heightAtLine(around.before || 0, "local"), - bot: editor.heightAtLine(bot, "local")}; - } - - function setScrollLock(dv, val, action) { - dv.lockScroll = val; - if (val && action != false) syncScroll(dv, DIFF_INSERT) && makeConnections(dv); - dv.lockButton.innerHTML = val ? "\u21db\u21da" : "\u21db  \u21da"; - } - - // Updating the marks for editor content - - function clearMarks(editor, arr, classes) { - for (var i = 0; i < arr.length; ++i) { - var mark = arr[i]; - if (mark instanceof CodeMirror.TextMarker) { - mark.clear(); - } else if (mark.parent) { - editor.removeLineClass(mark, "background", classes.chunk); - editor.removeLineClass(mark, "background", classes.start); - editor.removeLineClass(mark, "background", classes.end); - } - } - arr.length = 0; - } - - // FIXME maybe add a margin around viewport to prevent too many updates - function updateMarks(editor, diff, state, type, classes) { - var vp = editor.getViewport(); - editor.operation(function() { - if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { - clearMarks(editor, state.marked, classes); - markChanges(editor, diff, type, state.marked, vp.from, vp.to, classes); - state.from = vp.from; state.to = vp.to; - } else { - if (vp.from < state.from) { - markChanges(editor, diff, type, state.marked, vp.from, state.from, classes); - state.from = vp.from; - } - if (vp.to > state.to) { - markChanges(editor, diff, type, state.marked, state.to, vp.to, classes); - state.to = vp.to; - } - } - }); - } - - function markChanges(editor, diff, type, marks, from, to, classes) { - var pos = Pos(0, 0); - var top = Pos(from, 0), bot = editor.clipPos(Pos(to - 1)); - var cls = type == DIFF_DELETE ? classes.del : classes.insert; - function markChunk(start, end) { - var bfrom = Math.max(from, start), bto = Math.min(to, end); - for (var i = bfrom; i < bto; ++i) { - var line = editor.addLineClass(i, "background", classes.chunk); - if (i == start) editor.addLineClass(line, "background", classes.start); - if (i == end - 1) editor.addLineClass(line, "background", classes.end); - marks.push(line); - } - // When the chunk is empty, make sure a horizontal line shows up - if (start == end && bfrom == end && bto == end) { - if (bfrom) - marks.push(editor.addLineClass(bfrom - 1, "background", classes.end)); - else - marks.push(editor.addLineClass(bfrom, "background", classes.start)); - } - } - - var chunkStart = 0; - for (var i = 0; i < diff.length; ++i) { - var part = diff[i], tp = part[0], str = part[1]; - if (tp == DIFF_EQUAL) { - var cleanFrom = pos.line + (startOfLineClean(diff, i) ? 0 : 1); - moveOver(pos, str); - var cleanTo = pos.line + (endOfLineClean(diff, i) ? 1 : 0); - if (cleanTo > cleanFrom) { - if (i) markChunk(chunkStart, cleanFrom); - chunkStart = cleanTo; - } - } else { - if (tp == type) { - var end = moveOver(pos, str, true); - var a = posMax(top, pos), b = posMin(bot, end); - if (!posEq(a, b)) - marks.push(editor.markText(a, b, {className: cls})); - pos = end; - } - } - } - if (chunkStart <= pos.line) markChunk(chunkStart, pos.line + 1); - } - - // Updating the gap between editor and original - - function makeConnections(dv) { - if (!dv.showDifferences) return; - - if (dv.svg) { - clear(dv.svg); - var w = dv.gap.offsetWidth; - attrs(dv.svg, "width", w, "height", dv.gap.offsetHeight); - } - if (dv.copyButtons) clear(dv.copyButtons); - - var vpEdit = dv.edit.getViewport(), vpOrig = dv.orig.getViewport(); - var sTopEdit = dv.edit.getScrollInfo().top, sTopOrig = dv.orig.getScrollInfo().top; - for (var i = 0; i < dv.chunks.length; i++) { - var ch = dv.chunks[i]; - if (ch.editFrom <= vpEdit.to && ch.editTo >= vpEdit.from && - ch.origFrom <= vpOrig.to && ch.origTo >= vpOrig.from) - drawConnectorsForChunk(dv, ch, sTopOrig, sTopEdit, w); - } - } - - function getMatchingOrigLine(editLine, chunks) { - var editStart = 0, origStart = 0; - for (var i = 0; i < chunks.length; i++) { - var chunk = chunks[i]; - if (chunk.editTo > editLine && chunk.editFrom <= editLine) return null; - if (chunk.editFrom > editLine) break; - editStart = chunk.editTo; - origStart = chunk.origTo; - } - return origStart + (editLine - editStart); - } - - function findAlignedLines(dv, other) { - var linesToAlign = []; - for (var i = 0; i < dv.chunks.length; i++) { - var chunk = dv.chunks[i]; - linesToAlign.push([chunk.origTo, chunk.editTo, other ? getMatchingOrigLine(chunk.editTo, other.chunks) : null]); - } - if (other) { - for (var i = 0; i < other.chunks.length; i++) { - var chunk = other.chunks[i]; - for (var j = 0; j < linesToAlign.length; j++) { - var align = linesToAlign[j]; - if (align[1] == chunk.editTo) { - j = -1; - break; - } else if (align[1] > chunk.editTo) { - break; - } - } - if (j > -1) - linesToAlign.splice(j - 1, 0, [getMatchingOrigLine(chunk.editTo, dv.chunks), chunk.editTo, chunk.origTo]); - } - } - return linesToAlign; - } - - function alignChunks(dv, force) { - if (!dv.dealigned && !force) return; - if (!dv.orig.curOp) return dv.orig.operation(function() { - alignChunks(dv, force); - }); - - dv.dealigned = false; - var other = dv.mv.left == dv ? dv.mv.right : dv.mv.left; - if (other) { - ensureDiff(other); - other.dealigned = false; - } - var linesToAlign = findAlignedLines(dv, other); - - // Clear old aligners - var aligners = dv.mv.aligners; - for (var i = 0; i < aligners.length; i++) - aligners[i].clear(); - aligners.length = 0; - - var cm = [dv.orig, dv.edit], scroll = []; - if (other) cm.push(other.orig); - for (var i = 0; i < cm.length; i++) - scroll.push(cm[i].getScrollInfo().top); - - for (var ln = 0; ln < linesToAlign.length; ln++) - alignLines(cm, linesToAlign[ln], aligners); - - for (var i = 0; i < cm.length; i++) - cm[i].scrollTo(null, scroll[i]); - } - - function alignLines(cm, lines, aligners) { - var maxOffset = 0, offset = []; - for (var i = 0; i < cm.length; i++) if (lines[i] != null) { - var off = cm[i].heightAtLine(lines[i], "local"); - offset[i] = off; - maxOffset = Math.max(maxOffset, off); - } - for (var i = 0; i < cm.length; i++) if (lines[i] != null) { - var diff = maxOffset - offset[i]; - if (diff > 1) - aligners.push(padAbove(cm[i], lines[i], diff)); - } - } - - function padAbove(cm, line, size) { - var above = true; - if (line > cm.lastLine()) { - line--; - above = false; - } - var elt = document.createElement("div"); - elt.className = "CodeMirror-merge-spacer"; - elt.style.height = size + "px"; elt.style.minWidth = "1px"; - return cm.addLineWidget(line, elt, {height: size, above: above}); - } - - function drawConnectorsForChunk(dv, chunk, sTopOrig, sTopEdit, w) { - var flip = dv.type == "left"; - var top = dv.orig.heightAtLine(chunk.origFrom, "local") - sTopOrig; - if (dv.svg) { - var topLpx = top; - var topRpx = dv.edit.heightAtLine(chunk.editFrom, "local") - sTopEdit; - if (flip) { var tmp = topLpx; topLpx = topRpx; topRpx = tmp; } - var botLpx = dv.orig.heightAtLine(chunk.origTo, "local") - sTopOrig; - var botRpx = dv.edit.heightAtLine(chunk.editTo, "local") - sTopEdit; - if (flip) { var tmp = botLpx; botLpx = botRpx; botRpx = tmp; } - var curveTop = " C " + w/2 + " " + topRpx + " " + w/2 + " " + topLpx + " " + (w + 2) + " " + topLpx; - var curveBot = " C " + w/2 + " " + botLpx + " " + w/2 + " " + botRpx + " -1 " + botRpx; - attrs(dv.svg.appendChild(document.createElementNS(svgNS, "path")), - "d", "M -1 " + topRpx + curveTop + " L " + (w + 2) + " " + botLpx + curveBot + " z", - "class", dv.classes.connect); - } - if (dv.copyButtons) { - var copy = dv.copyButtons.appendChild(elt("div", dv.type == "left" ? "\u21dd" : "\u21dc", - "CodeMirror-merge-copy")); - var editOriginals = dv.mv.options.allowEditingOriginals; - copy.title = editOriginals ? "Push to left" : "Revert chunk"; - copy.chunk = chunk; - copy.style.top = top + "px"; - - if (editOriginals) { - var topReverse = dv.orig.heightAtLine(chunk.editFrom, "local") - sTopEdit; - var copyReverse = dv.copyButtons.appendChild(elt("div", dv.type == "right" ? "\u21dd" : "\u21dc", - "CodeMirror-merge-copy-reverse")); - copyReverse.title = "Push to right"; - copyReverse.chunk = {editFrom: chunk.origFrom, editTo: chunk.origTo, - origFrom: chunk.editFrom, origTo: chunk.editTo}; - copyReverse.style.top = topReverse + "px"; - dv.type == "right" ? copyReverse.style.left = "2px" : copyReverse.style.right = "2px"; - } - } - } - - function copyChunk(dv, to, from, chunk) { - if (dv.diffOutOfDate) return; - to.replaceRange(from.getRange(Pos(chunk.origFrom, 0), Pos(chunk.origTo, 0)), - Pos(chunk.editFrom, 0), Pos(chunk.editTo, 0)); - } - - // Merge view, containing 0, 1, or 2 diff views. - - var MergeView = CodeMirror.MergeView = function(node, options) { - if (!(this instanceof MergeView)) return new MergeView(node, options); - - this.options = options; - var origLeft = options.origLeft, origRight = options.origRight == null ? options.orig : options.origRight; - - var hasLeft = origLeft != null, hasRight = origRight != null; - var panes = 1 + (hasLeft ? 1 : 0) + (hasRight ? 1 : 0); - var wrap = [], left = this.left = null, right = this.right = null; - var self = this; - - if (hasLeft) { - left = this.left = new DiffView(this, "left"); - var leftPane = elt("div", null, "CodeMirror-merge-pane"); - wrap.push(leftPane); - wrap.push(buildGap(left)); - } - - var editPane = elt("div", null, "CodeMirror-merge-pane"); - wrap.push(editPane); - - if (hasRight) { - right = this.right = new DiffView(this, "right"); - wrap.push(buildGap(right)); - var rightPane = elt("div", null, "CodeMirror-merge-pane"); - wrap.push(rightPane); - } - - (hasRight ? rightPane : editPane).className += " CodeMirror-merge-pane-rightmost"; - - wrap.push(elt("div", null, null, "height: 0; clear: both;")); - - var wrapElt = this.wrap = node.appendChild(elt("div", wrap, "CodeMirror-merge CodeMirror-merge-" + panes + "pane")); - this.edit = CodeMirror(editPane, copyObj(options)); - - if (left) left.init(leftPane, origLeft, options); - if (right) right.init(rightPane, origRight, options); - - if (options.collapseIdentical) { - updating = true; - this.editor().operation(function() { - collapseIdenticalStretches(self, options.collapseIdentical); - }); - updating = false; - } - if (options.connect == "align") { - this.aligners = []; - alignChunks(this.left || this.right, true); - } - - var onResize = function() { - if (left) makeConnections(left); - if (right) makeConnections(right); - }; - CodeMirror.on(window, "resize", onResize); - var resizeInterval = setInterval(function() { - for (var p = wrapElt.parentNode; p && p != document.body; p = p.parentNode) {} - if (!p) { clearInterval(resizeInterval); CodeMirror.off(window, "resize", onResize); } - }, 5000); - }; - - function buildGap(dv) { - var lock = dv.lockButton = elt("div", null, "CodeMirror-merge-scrolllock"); - lock.title = "Toggle locked scrolling"; - var lockWrap = elt("div", [lock], "CodeMirror-merge-scrolllock-wrap"); - CodeMirror.on(lock, "click", function() { setScrollLock(dv, !dv.lockScroll); }); - var gapElts = [lockWrap]; - if (dv.mv.options.revertButtons !== false) { - dv.copyButtons = elt("div", null, "CodeMirror-merge-copybuttons-" + dv.type); - CodeMirror.on(dv.copyButtons, "click", function(e) { - var node = e.target || e.srcElement; - if (!node.chunk) return; - if (node.className == "CodeMirror-merge-copy-reverse") { - copyChunk(dv, dv.orig, dv.edit, node.chunk); - return; - } - copyChunk(dv, dv.edit, dv.orig, node.chunk); - }); - gapElts.unshift(dv.copyButtons); - } - if (dv.mv.options.connect != "align") { - var svg = document.createElementNS && document.createElementNS(svgNS, "svg"); - if (svg && !svg.createSVGRect) svg = null; - dv.svg = svg; - if (svg) gapElts.push(svg); - } - - return dv.gap = elt("div", gapElts, "CodeMirror-merge-gap"); - } - - MergeView.prototype = { - constuctor: MergeView, - editor: function() { return this.edit; }, - rightOriginal: function() { return this.right && this.right.orig; }, - leftOriginal: function() { return this.left && this.left.orig; }, - setShowDifferences: function(val) { - if (this.right) this.right.setShowDifferences(val); - if (this.left) this.left.setShowDifferences(val); - }, - rightChunks: function() { - if (this.right) { ensureDiff(this.right); return this.right.chunks; } - }, - leftChunks: function() { - if (this.left) { ensureDiff(this.left); return this.left.chunks; } - } - }; - - function asString(obj) { - if (typeof obj == "string") return obj; - else return obj.getValue(); - } - - // Operations on diffs - - var dmp = new diff_match_patch(); - function getDiff(a, b) { - var diff = dmp.diff_main(a, b); - dmp.diff_cleanupSemantic(diff); - // The library sometimes leaves in empty parts, which confuse the algorithm - for (var i = 0; i < diff.length; ++i) { - var part = diff[i]; - if (!part[1]) { - diff.splice(i--, 1); - } else if (i && diff[i - 1][0] == part[0]) { - diff.splice(i--, 1); - diff[i][1] += part[1]; - } - } - return diff; - } - - function getChunks(diff) { - var chunks = []; - var startEdit = 0, startOrig = 0; - var edit = Pos(0, 0), orig = Pos(0, 0); - for (var i = 0; i < diff.length; ++i) { - var part = diff[i], tp = part[0]; - if (tp == DIFF_EQUAL) { - var startOff = startOfLineClean(diff, i) ? 0 : 1; - var cleanFromEdit = edit.line + startOff, cleanFromOrig = orig.line + startOff; - moveOver(edit, part[1], null, orig); - var endOff = endOfLineClean(diff, i) ? 1 : 0; - var cleanToEdit = edit.line + endOff, cleanToOrig = orig.line + endOff; - if (cleanToEdit > cleanFromEdit) { - if (i) chunks.push({origFrom: startOrig, origTo: cleanFromOrig, - editFrom: startEdit, editTo: cleanFromEdit}); - startEdit = cleanToEdit; startOrig = cleanToOrig; - } - } else { - moveOver(tp == DIFF_INSERT ? edit : orig, part[1]); - } - } - if (startEdit <= edit.line || startOrig <= orig.line) - chunks.push({origFrom: startOrig, origTo: orig.line + 1, - editFrom: startEdit, editTo: edit.line + 1}); - return chunks; - } - - function endOfLineClean(diff, i) { - if (i == diff.length - 1) return true; - var next = diff[i + 1][1]; - if (next.length == 1 || next.charCodeAt(0) != 10) return false; - if (i == diff.length - 2) return true; - next = diff[i + 2][1]; - return next.length > 1 && next.charCodeAt(0) == 10; - } - - function startOfLineClean(diff, i) { - if (i == 0) return true; - var last = diff[i - 1][1]; - if (last.charCodeAt(last.length - 1) != 10) return false; - if (i == 1) return true; - last = diff[i - 2][1]; - return last.charCodeAt(last.length - 1) == 10; - } - - function chunkBoundariesAround(chunks, n, nInEdit) { - var beforeE, afterE, beforeO, afterO; - for (var i = 0; i < chunks.length; i++) { - var chunk = chunks[i]; - var fromLocal = nInEdit ? chunk.editFrom : chunk.origFrom; - var toLocal = nInEdit ? chunk.editTo : chunk.origTo; - if (afterE == null) { - if (fromLocal > n) { afterE = chunk.editFrom; afterO = chunk.origFrom; } - else if (toLocal > n) { afterE = chunk.editTo; afterO = chunk.origTo; } - } - if (toLocal <= n) { beforeE = chunk.editTo; beforeO = chunk.origTo; } - else if (fromLocal <= n) { beforeE = chunk.editFrom; beforeO = chunk.origFrom; } - } - return {edit: {before: beforeE, after: afterE}, orig: {before: beforeO, after: afterO}}; - } - - function collapseSingle(cm, from, to) { - cm.addLineClass(from, "wrap", "CodeMirror-merge-collapsed-line"); - var widget = document.createElement("span"); - widget.className = "CodeMirror-merge-collapsed-widget"; - widget.title = "Identical text collapsed. Click to expand."; - var mark = cm.markText(Pos(from, 0), Pos(to - 1), { - inclusiveLeft: true, - inclusiveRight: true, - replacedWith: widget, - clearOnEnter: true - }); - function clear() { - mark.clear(); - cm.removeLineClass(from, "wrap", "CodeMirror-merge-collapsed-line"); - } - widget.addEventListener("click", clear); - return {mark: mark, clear: clear}; - } - - function collapseStretch(size, editors) { - var marks = []; - function clear() { - for (var i = 0; i < marks.length; i++) marks[i].clear(); - } - for (var i = 0; i < editors.length; i++) { - var editor = editors[i]; - var mark = collapseSingle(editor.cm, editor.line, editor.line + size); - marks.push(mark); - mark.mark.on("clear", clear); - } - return marks[0].mark; - } - - function unclearNearChunks(dv, margin, off, clear) { - for (var i = 0; i < dv.chunks.length; i++) { - var chunk = dv.chunks[i]; - for (var l = chunk.editFrom - margin; l < chunk.editTo + margin; l++) { - var pos = l + off; - if (pos >= 0 && pos < clear.length) clear[pos] = false; - } - } - } - - function collapseIdenticalStretches(mv, margin) { - if (typeof margin != "number") margin = 2; - var clear = [], edit = mv.editor(), off = edit.firstLine(); - for (var l = off, e = edit.lastLine(); l <= e; l++) clear.push(true); - if (mv.left) unclearNearChunks(mv.left, margin, off, clear); - if (mv.right) unclearNearChunks(mv.right, margin, off, clear); - - for (var i = 0; i < clear.length; i++) { - if (clear[i]) { - var line = i + off; - for (var size = 1; i < clear.length - 1 && clear[i + 1]; i++, size++) {} - if (size > margin) { - var editors = [{line: line, cm: edit}]; - if (mv.left) editors.push({line: getMatchingOrigLine(line, mv.left.chunks), cm: mv.left.orig}); - if (mv.right) editors.push({line: getMatchingOrigLine(line, mv.right.chunks), cm: mv.right.orig}); - var mark = collapseStretch(size, editors); - if (mv.options.onCollapse) mv.options.onCollapse(mv, line, size, mark); - } - } - } - } - - // General utilities - - function elt(tag, content, className, style) { - var e = document.createElement(tag); - if (className) e.className = className; - if (style) e.style.cssText = style; - if (typeof content == "string") e.appendChild(document.createTextNode(content)); - else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); - return e; - } - - function clear(node) { - for (var count = node.childNodes.length; count > 0; --count) - node.removeChild(node.firstChild); - } - - function attrs(elt) { - for (var i = 1; i < arguments.length; i += 2) - elt.setAttribute(arguments[i], arguments[i+1]); - } - - function copyObj(obj, target) { - if (!target) target = {}; - for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop]; - return target; - } - - function moveOver(pos, str, copy, other) { - var out = copy ? Pos(pos.line, pos.ch) : pos, at = 0; - for (;;) { - var nl = str.indexOf("\n", at); - if (nl == -1) break; - ++out.line; - if (other) ++other.line; - at = nl + 1; - } - out.ch = (at ? 0 : out.ch) + (str.length - at); - if (other) other.ch = (at ? 0 : other.ch) + (str.length - at); - return out; - } - - function posMin(a, b) { return (a.line - b.line || a.ch - b.ch) < 0 ? a : b; } - function posMax(a, b) { return (a.line - b.line || a.ch - b.ch) > 0 ? a : b; } - function posEq(a, b) { return a.line == b.line && a.ch == b.ch; } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/loadmode.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/loadmode.js deleted file mode 100755 index 10117ec22..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/loadmode.js +++ /dev/null @@ -1,64 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), "cjs"); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], function(CM) { mod(CM, "amd"); }); - else // Plain browser env - mod(CodeMirror, "plain"); -})(function(CodeMirror, env) { - if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js"; - - var loading = {}; - function splitCallback(cont, n) { - var countDown = n; - return function() { if (--countDown == 0) cont(); }; - } - function ensureDeps(mode, cont) { - var deps = CodeMirror.modes[mode].dependencies; - if (!deps) return cont(); - var missing = []; - for (var i = 0; i < deps.length; ++i) { - if (!CodeMirror.modes.hasOwnProperty(deps[i])) - missing.push(deps[i]); - } - if (!missing.length) return cont(); - var split = splitCallback(cont, missing.length); - for (var i = 0; i < missing.length; ++i) - CodeMirror.requireMode(missing[i], split); - } - - CodeMirror.requireMode = function(mode, cont) { - if (typeof mode != "string") mode = mode.name; - if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont); - if (loading.hasOwnProperty(mode)) return loading[mode].push(cont); - - var file = CodeMirror.modeURL.replace(/%N/g, mode); - if (env == "plain") { - var script = document.createElement("script"); - script.src = file; - var others = document.getElementsByTagName("script")[0]; - var list = loading[mode] = [cont]; - CodeMirror.on(script, "load", function() { - ensureDeps(mode, function() { - for (var i = 0; i < list.length; ++i) list[i](); - }); - }); - others.parentNode.insertBefore(script, others); - } else if (env == "cjs") { - require(file); - cont(); - } else if (env == "amd") { - requirejs([file], cont); - } - }; - - CodeMirror.autoLoadMode = function(instance, mode) { - if (!CodeMirror.modes.hasOwnProperty(mode)) - CodeMirror.requireMode(mode, function() { - instance.setOption("mode", instance.getOption("mode")); - }); - }; -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/multiplex.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/multiplex.js deleted file mode 100755 index 6a95b323c..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/multiplex.js +++ /dev/null @@ -1,118 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.multiplexingMode = function(outer /*, others */) { - // Others should be {open, close, mode [, delimStyle] [, innerStyle]} objects - var others = Array.prototype.slice.call(arguments, 1); - var n_others = others.length; - - function indexOf(string, pattern, from) { - if (typeof pattern == "string") return string.indexOf(pattern, from); - var m = pattern.exec(from ? string.slice(from) : string); - return m ? m.index + from : -1; - } - - return { - startState: function() { - return { - outer: CodeMirror.startState(outer), - innerActive: null, - inner: null - }; - }, - - copyState: function(state) { - return { - outer: CodeMirror.copyState(outer, state.outer), - innerActive: state.innerActive, - inner: state.innerActive && CodeMirror.copyState(state.innerActive.mode, state.inner) - }; - }, - - token: function(stream, state) { - if (!state.innerActive) { - var cutOff = Infinity, oldContent = stream.string; - for (var i = 0; i < n_others; ++i) { - var other = others[i]; - var found = indexOf(oldContent, other.open, stream.pos); - if (found == stream.pos) { - stream.match(other.open); - state.innerActive = other; - state.inner = CodeMirror.startState(other.mode, outer.indent ? outer.indent(state.outer, "") : 0); - return other.delimStyle; - } else if (found != -1 && found < cutOff) { - cutOff = found; - } - } - if (cutOff != Infinity) stream.string = oldContent.slice(0, cutOff); - var outerToken = outer.token(stream, state.outer); - if (cutOff != Infinity) stream.string = oldContent; - return outerToken; - } else { - var curInner = state.innerActive, oldContent = stream.string; - if (!curInner.close && stream.sol()) { - state.innerActive = state.inner = null; - return this.token(stream, state); - } - var found = curInner.close ? indexOf(oldContent, curInner.close, stream.pos) : -1; - if (found == stream.pos) { - stream.match(curInner.close); - state.innerActive = state.inner = null; - return curInner.delimStyle; - } - if (found > -1) stream.string = oldContent.slice(0, found); - var innerToken = curInner.mode.token(stream, state.inner); - if (found > -1) stream.string = oldContent; - - if (curInner.innerStyle) { - if (innerToken) innerToken = innerToken + ' ' + curInner.innerStyle; - else innerToken = curInner.innerStyle; - } - - return innerToken; - } - }, - - indent: function(state, textAfter) { - var mode = state.innerActive ? state.innerActive.mode : outer; - if (!mode.indent) return CodeMirror.Pass; - return mode.indent(state.innerActive ? state.inner : state.outer, textAfter); - }, - - blankLine: function(state) { - var mode = state.innerActive ? state.innerActive.mode : outer; - if (mode.blankLine) { - mode.blankLine(state.innerActive ? state.inner : state.outer); - } - if (!state.innerActive) { - for (var i = 0; i < n_others; ++i) { - var other = others[i]; - if (other.open === "\n") { - state.innerActive = other; - state.inner = CodeMirror.startState(other.mode, mode.indent ? mode.indent(state.outer, "") : 0); - } - } - } else if (state.innerActive.close === "\n") { - state.innerActive = state.inner = null; - } - }, - - electricChars: outer.electricChars, - - innerMode: function(state) { - return state.inner ? {state: state.inner, mode: state.innerActive.mode} : {state: state.outer, mode: outer}; - } - }; -}; - -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/multiplex_test.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/multiplex_test.js deleted file mode 100755 index d33943420..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/multiplex_test.js +++ /dev/null @@ -1,33 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function() { - CodeMirror.defineMode("markdown_with_stex", function(){ - var inner = CodeMirror.getMode({}, "stex"); - var outer = CodeMirror.getMode({}, "markdown"); - - var innerOptions = { - open: '$', - close: '$', - mode: inner, - delimStyle: 'delim', - innerStyle: 'inner' - }; - - return CodeMirror.multiplexingMode(outer, innerOptions); - }); - - var mode = CodeMirror.getMode({}, "markdown_with_stex"); - - function MT(name) { - test.mode( - name, - mode, - Array.prototype.slice.call(arguments, 1), - 'multiplexing'); - } - - MT( - "stexInsideMarkdown", - "[strong **Equation:**] [delim $][inner&tag \\pi][delim $]"); -})(); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/overlay.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/overlay.js deleted file mode 100755 index e1b9ed375..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/overlay.js +++ /dev/null @@ -1,85 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// Utility function that allows modes to be combined. The mode given -// as the base argument takes care of most of the normal mode -// functionality, but a second (typically simple) mode is used, which -// can override the style of text. Both modes get to parse all of the -// text, but when both assign a non-null style to a piece of code, the -// overlay wins, unless the combine argument was true and not overridden, -// or state.overlay.combineTokens was true, in which case the styles are -// combined. - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.overlayMode = function(base, overlay, combine) { - return { - startState: function() { - return { - base: CodeMirror.startState(base), - overlay: CodeMirror.startState(overlay), - basePos: 0, baseCur: null, - overlayPos: 0, overlayCur: null, - streamSeen: null - }; - }, - copyState: function(state) { - return { - base: CodeMirror.copyState(base, state.base), - overlay: CodeMirror.copyState(overlay, state.overlay), - basePos: state.basePos, baseCur: null, - overlayPos: state.overlayPos, overlayCur: null - }; - }, - - token: function(stream, state) { - if (stream != state.streamSeen || - Math.min(state.basePos, state.overlayPos) < stream.start) { - state.streamSeen = stream; - state.basePos = state.overlayPos = stream.start; - } - - if (stream.start == state.basePos) { - state.baseCur = base.token(stream, state.base); - state.basePos = stream.pos; - } - if (stream.start == state.overlayPos) { - stream.pos = stream.start; - state.overlayCur = overlay.token(stream, state.overlay); - state.overlayPos = stream.pos; - } - stream.pos = Math.min(state.basePos, state.overlayPos); - - // state.overlay.combineTokens always takes precedence over combine, - // unless set to null - if (state.overlayCur == null) return state.baseCur; - else if (state.baseCur != null && - state.overlay.combineTokens || - combine && state.overlay.combineTokens == null) - return state.baseCur + " " + state.overlayCur; - else return state.overlayCur; - }, - - indent: base.indent && function(state, textAfter) { - return base.indent(state.base, textAfter); - }, - electricChars: base.electricChars, - - innerMode: function(state) { return {state: state.base, mode: base}; }, - - blankLine: function(state) { - if (base.blankLine) base.blankLine(state.base); - if (overlay.blankLine) overlay.blankLine(state.overlay); - } - }; -}; - -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/simple.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/simple.js deleted file mode 100755 index 795328b83..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/mode/simple.js +++ /dev/null @@ -1,213 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineSimpleMode = function(name, states) { - CodeMirror.defineMode(name, function(config) { - return CodeMirror.simpleMode(config, states); - }); - }; - - CodeMirror.simpleMode = function(config, states) { - ensureState(states, "start"); - var states_ = {}, meta = states.meta || {}, hasIndentation = false; - for (var state in states) if (state != meta && states.hasOwnProperty(state)) { - var list = states_[state] = [], orig = states[state]; - for (var i = 0; i < orig.length; i++) { - var data = orig[i]; - list.push(new Rule(data, states)); - if (data.indent || data.dedent) hasIndentation = true; - } - } - var mode = { - startState: function() { - return {state: "start", pending: null, - local: null, localState: null, - indent: hasIndentation ? [] : null}; - }, - copyState: function(state) { - var s = {state: state.state, pending: state.pending, - local: state.local, localState: null, - indent: state.indent && state.indent.slice(0)}; - if (state.localState) - s.localState = CodeMirror.copyState(state.local.mode, state.localState); - if (state.stack) - s.stack = state.stack.slice(0); - for (var pers = state.persistentStates; pers; pers = pers.next) - s.persistentStates = {mode: pers.mode, - spec: pers.spec, - state: pers.state == state.localState ? s.localState : CodeMirror.copyState(pers.mode, pers.state), - next: s.persistentStates}; - return s; - }, - token: tokenFunction(states_, config), - innerMode: function(state) { return state.local && {mode: state.local.mode, state: state.localState}; }, - indent: indentFunction(states_, meta) - }; - if (meta) for (var prop in meta) if (meta.hasOwnProperty(prop)) - mode[prop] = meta[prop]; - return mode; - }; - - function ensureState(states, name) { - if (!states.hasOwnProperty(name)) - throw new Error("Undefined state " + name + "in simple mode"); - } - - function toRegex(val, caret) { - if (!val) return /(?:)/; - var flags = ""; - if (val instanceof RegExp) { - if (val.ignoreCase) flags = "i"; - val = val.source; - } else { - val = String(val); - } - return new RegExp((caret === false ? "" : "^") + "(?:" + val + ")", flags); - } - - function asToken(val) { - if (!val) return null; - if (typeof val == "string") return val.replace(/\./g, " "); - var result = []; - for (var i = 0; i < val.length; i++) - result.push(val[i] && val[i].replace(/\./g, " ")); - return result; - } - - function Rule(data, states) { - if (data.next || data.push) ensureState(states, data.next || data.push); - this.regex = toRegex(data.regex); - this.token = asToken(data.token); - this.data = data; - } - - function tokenFunction(states, config) { - return function(stream, state) { - if (state.pending) { - var pend = state.pending.shift(); - if (state.pending.length == 0) state.pending = null; - stream.pos += pend.text.length; - return pend.token; - } - - if (state.local) { - if (state.local.end && stream.match(state.local.end)) { - var tok = state.local.endToken || null; - state.local = state.localState = null; - return tok; - } else { - var tok = state.local.mode.token(stream, state.localState), m; - if (state.local.endScan && (m = state.local.endScan.exec(stream.current()))) - stream.pos = stream.start + m.index; - return tok; - } - } - - var curState = states[state.state]; - for (var i = 0; i < curState.length; i++) { - var rule = curState[i]; - var matches = (!rule.data.sol || stream.sol()) && stream.match(rule.regex); - if (matches) { - if (rule.data.next) { - state.state = rule.data.next; - } else if (rule.data.push) { - (state.stack || (state.stack = [])).push(state.state); - state.state = rule.data.push; - } else if (rule.data.pop && state.stack && state.stack.length) { - state.state = state.stack.pop(); - } - - if (rule.data.mode) - enterLocalMode(config, state, rule.data.mode, rule.token); - if (rule.data.indent) - state.indent.push(stream.indentation() + config.indentUnit); - if (rule.data.dedent) - state.indent.pop(); - if (matches.length > 2) { - state.pending = []; - for (var j = 2; j < matches.length; j++) - if (matches[j]) - state.pending.push({text: matches[j], token: rule.token[j - 1]}); - stream.backUp(matches[0].length - (matches[1] ? matches[1].length : 0)); - return rule.token[0]; - } else if (rule.token && rule.token.join) { - return rule.token[0]; - } else { - return rule.token; - } - } - } - stream.next(); - return null; - }; - } - - function cmp(a, b) { - if (a === b) return true; - if (!a || typeof a != "object" || !b || typeof b != "object") return false; - var props = 0; - for (var prop in a) if (a.hasOwnProperty(prop)) { - if (!b.hasOwnProperty(prop) || !cmp(a[prop], b[prop])) return false; - props++; - } - for (var prop in b) if (b.hasOwnProperty(prop)) props--; - return props == 0; - } - - function enterLocalMode(config, state, spec, token) { - var pers; - if (spec.persistent) for (var p = state.persistentStates; p && !pers; p = p.next) - if (spec.spec ? cmp(spec.spec, p.spec) : spec.mode == p.mode) pers = p; - var mode = pers ? pers.mode : spec.mode || CodeMirror.getMode(config, spec.spec); - var lState = pers ? pers.state : CodeMirror.startState(mode); - if (spec.persistent && !pers) - state.persistentStates = {mode: mode, spec: spec.spec, state: lState, next: state.persistentStates}; - - state.localState = lState; - state.local = {mode: mode, - end: spec.end && toRegex(spec.end), - endScan: spec.end && spec.forceEnd !== false && toRegex(spec.end, false), - endToken: token && token.join ? token[token.length - 1] : token}; - } - - function indexOf(val, arr) { - for (var i = 0; i < arr.length; i++) if (arr[i] === val) return true; - } - - function indentFunction(states, meta) { - return function(state, textAfter, line) { - if (state.local && state.local.mode.indent) - return state.local.mode.indent(state.localState, textAfter, line); - if (state.indent == null || state.local || meta.dontIndentStates && indexOf(state.state, meta.dontIndentStates) > -1) - return CodeMirror.Pass; - - var pos = state.indent.length - 1, rules = states[state.state]; - scan: for (;;) { - for (var i = 0; i < rules.length; i++) { - var rule = rules[i]; - if (rule.data.dedent && rule.data.dedentIfLineStart !== false) { - var m = rule.regex.exec(textAfter); - if (m && m[0]) { - pos--; - if (rule.next || rule.push) rules = states[rule.next || rule.push]; - textAfter = textAfter.slice(m[0].length); - continue scan; - } - } - } - break; - } - return pos < 0 ? 0 : state.indent[pos]; - }; - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/runmode/colorize.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/runmode/colorize.js deleted file mode 100755 index eb7060d0a..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/runmode/colorize.js +++ /dev/null @@ -1,40 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("./runmode")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "./runmode"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var isBlock = /^(p|li|div|h\\d|pre|blockquote|td)$/; - - function textContent(node, out) { - if (node.nodeType == 3) return out.push(node.nodeValue); - for (var ch = node.firstChild; ch; ch = ch.nextSibling) { - textContent(ch, out); - if (isBlock.test(node.nodeType)) out.push("\n"); - } - } - - CodeMirror.colorize = function(collection, defaultMode) { - if (!collection) collection = document.body.getElementsByTagName("pre"); - - for (var i = 0; i < collection.length; ++i) { - var node = collection[i]; - var mode = node.getAttribute("data-lang") || defaultMode; - if (!mode) continue; - - var text = []; - textContent(node, text); - node.innerHTML = ""; - CodeMirror.runMode(text.join(""), mode, node); - - node.className += " cm-s-default"; - } - }; -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/runmode/runmode-standalone.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/runmode/runmode-standalone.js deleted file mode 100755 index f4f352c80..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/runmode/runmode-standalone.js +++ /dev/null @@ -1,157 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -window.CodeMirror = {}; - -(function() { -"use strict"; - -function splitLines(string){ return string.split(/\r?\n|\r/); }; - -function StringStream(string) { - this.pos = this.start = 0; - this.string = string; - this.lineStart = 0; -} -StringStream.prototype = { - eol: function() {return this.pos >= this.string.length;}, - sol: function() {return this.pos == 0;}, - peek: function() {return this.string.charAt(this.pos) || null;}, - next: function() { - if (this.pos < this.string.length) - return this.string.charAt(this.pos++); - }, - eat: function(match) { - var ch = this.string.charAt(this.pos); - if (typeof match == "string") var ok = ch == match; - else var ok = ch && (match.test ? match.test(ch) : match(ch)); - if (ok) {++this.pos; return ch;} - }, - eatWhile: function(match) { - var start = this.pos; - while (this.eat(match)){} - return this.pos > start; - }, - eatSpace: function() { - var start = this.pos; - while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; - return this.pos > start; - }, - skipToEnd: function() {this.pos = this.string.length;}, - skipTo: function(ch) { - var found = this.string.indexOf(ch, this.pos); - if (found > -1) {this.pos = found; return true;} - }, - backUp: function(n) {this.pos -= n;}, - column: function() {return this.start - this.lineStart;}, - indentation: function() {return 0;}, - match: function(pattern, consume, caseInsensitive) { - if (typeof pattern == "string") { - var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; - var substr = this.string.substr(this.pos, pattern.length); - if (cased(substr) == cased(pattern)) { - if (consume !== false) this.pos += pattern.length; - return true; - } - } else { - var match = this.string.slice(this.pos).match(pattern); - if (match && match.index > 0) return null; - if (match && consume !== false) this.pos += match[0].length; - return match; - } - }, - current: function(){return this.string.slice(this.start, this.pos);}, - hideFirstChars: function(n, inner) { - this.lineStart += n; - try { return inner(); } - finally { this.lineStart -= n; } - } -}; -CodeMirror.StringStream = StringStream; - -CodeMirror.startState = function (mode, a1, a2) { - return mode.startState ? mode.startState(a1, a2) : true; -}; - -var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; -CodeMirror.defineMode = function (name, mode) { - if (arguments.length > 2) - mode.dependencies = Array.prototype.slice.call(arguments, 2); - modes[name] = mode; -}; -CodeMirror.defineMIME = function (mime, spec) { mimeModes[mime] = spec; }; -CodeMirror.resolveMode = function(spec) { - if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { - spec = mimeModes[spec]; - } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { - spec = mimeModes[spec.name]; - } - if (typeof spec == "string") return {name: spec}; - else return spec || {name: "null"}; -}; -CodeMirror.getMode = function (options, spec) { - spec = CodeMirror.resolveMode(spec); - var mfactory = modes[spec.name]; - if (!mfactory) throw new Error("Unknown mode: " + spec); - return mfactory(options, spec); -}; -CodeMirror.registerHelper = CodeMirror.registerGlobalHelper = Math.min; -CodeMirror.defineMode("null", function() { - return {token: function(stream) {stream.skipToEnd();}}; -}); -CodeMirror.defineMIME("text/plain", "null"); - -CodeMirror.runMode = function (string, modespec, callback, options) { - var mode = CodeMirror.getMode({ indentUnit: 2 }, modespec); - - if (callback.nodeType == 1) { - var tabSize = (options && options.tabSize) || 4; - var node = callback, col = 0; - node.innerHTML = ""; - callback = function (text, style) { - if (text == "\n") { - node.appendChild(document.createElement("br")); - col = 0; - return; - } - var content = ""; - // replace tabs - for (var pos = 0; ;) { - var idx = text.indexOf("\t", pos); - if (idx == -1) { - content += text.slice(pos); - col += text.length - pos; - break; - } else { - col += idx - pos; - content += text.slice(pos, idx); - var size = tabSize - col % tabSize; - col += size; - for (var i = 0; i < size; ++i) content += " "; - pos = idx + 1; - } - } - - if (style) { - var sp = node.appendChild(document.createElement("span")); - sp.className = "cm-" + style.replace(/ +/g, " cm-"); - sp.appendChild(document.createTextNode(content)); - } else { - node.appendChild(document.createTextNode(content)); - } - }; - } - - var lines = splitLines(string), state = (options && options.state) || CodeMirror.startState(mode); - for (var i = 0, e = lines.length; i < e; ++i) { - if (i) callback("\n"); - var stream = new CodeMirror.StringStream(lines[i]); - if (!stream.string && mode.blankLine) mode.blankLine(state); - while (!stream.eol()) { - var style = mode.token(stream, state); - callback(stream.current(), style, i, stream.start, state); - stream.start = stream.pos; - } - } -}; -})(); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/runmode/runmode.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/runmode/runmode.js deleted file mode 100755 index 07d2279f7..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/runmode/runmode.js +++ /dev/null @@ -1,72 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.runMode = function(string, modespec, callback, options) { - var mode = CodeMirror.getMode(CodeMirror.defaults, modespec); - var ie = /MSIE \d/.test(navigator.userAgent); - var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9); - - if (callback.nodeType == 1) { - var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize; - var node = callback, col = 0; - node.innerHTML = ""; - callback = function(text, style) { - if (text == "\n") { - // Emitting LF or CRLF on IE8 or earlier results in an incorrect display. - // Emitting a carriage return makes everything ok. - node.appendChild(document.createTextNode(ie_lt9 ? '\r' : text)); - col = 0; - return; - } - var content = ""; - // replace tabs - for (var pos = 0;;) { - var idx = text.indexOf("\t", pos); - if (idx == -1) { - content += text.slice(pos); - col += text.length - pos; - break; - } else { - col += idx - pos; - content += text.slice(pos, idx); - var size = tabSize - col % tabSize; - col += size; - for (var i = 0; i < size; ++i) content += " "; - pos = idx + 1; - } - } - - if (style) { - var sp = node.appendChild(document.createElement("span")); - sp.className = "cm-" + style.replace(/ +/g, " cm-"); - sp.appendChild(document.createTextNode(content)); - } else { - node.appendChild(document.createTextNode(content)); - } - }; - } - - var lines = CodeMirror.splitLines(string), state = (options && options.state) || CodeMirror.startState(mode); - for (var i = 0, e = lines.length; i < e; ++i) { - if (i) callback("\n"); - var stream = new CodeMirror.StringStream(lines[i]); - if (!stream.string && mode.blankLine) mode.blankLine(state); - while (!stream.eol()) { - var style = mode.token(stream, state); - callback(stream.current(), style, i, stream.start, state); - stream.start = stream.pos; - } - } -}; - -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/runmode/runmode.node.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/runmode/runmode.node.js deleted file mode 100755 index 8b8140b4c..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/runmode/runmode.node.js +++ /dev/null @@ -1,120 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -/* Just enough of CodeMirror to run runMode under node.js */ - -// declare global: StringStream - -function splitLines(string){ return string.split(/\r?\n|\r/); }; - -function StringStream(string) { - this.pos = this.start = 0; - this.string = string; - this.lineStart = 0; -} -StringStream.prototype = { - eol: function() {return this.pos >= this.string.length;}, - sol: function() {return this.pos == 0;}, - peek: function() {return this.string.charAt(this.pos) || null;}, - next: function() { - if (this.pos < this.string.length) - return this.string.charAt(this.pos++); - }, - eat: function(match) { - var ch = this.string.charAt(this.pos); - if (typeof match == "string") var ok = ch == match; - else var ok = ch && (match.test ? match.test(ch) : match(ch)); - if (ok) {++this.pos; return ch;} - }, - eatWhile: function(match) { - var start = this.pos; - while (this.eat(match)){} - return this.pos > start; - }, - eatSpace: function() { - var start = this.pos; - while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; - return this.pos > start; - }, - skipToEnd: function() {this.pos = this.string.length;}, - skipTo: function(ch) { - var found = this.string.indexOf(ch, this.pos); - if (found > -1) {this.pos = found; return true;} - }, - backUp: function(n) {this.pos -= n;}, - column: function() {return this.start - this.lineStart;}, - indentation: function() {return 0;}, - match: function(pattern, consume, caseInsensitive) { - if (typeof pattern == "string") { - var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; - var substr = this.string.substr(this.pos, pattern.length); - if (cased(substr) == cased(pattern)) { - if (consume !== false) this.pos += pattern.length; - return true; - } - } else { - var match = this.string.slice(this.pos).match(pattern); - if (match && match.index > 0) return null; - if (match && consume !== false) this.pos += match[0].length; - return match; - } - }, - current: function(){return this.string.slice(this.start, this.pos);}, - hideFirstChars: function(n, inner) { - this.lineStart += n; - try { return inner(); } - finally { this.lineStart -= n; } - } -}; -exports.StringStream = StringStream; - -exports.startState = function(mode, a1, a2) { - return mode.startState ? mode.startState(a1, a2) : true; -}; - -var modes = exports.modes = {}, mimeModes = exports.mimeModes = {}; -exports.defineMode = function(name, mode) { - if (arguments.length > 2) - mode.dependencies = Array.prototype.slice.call(arguments, 2); - modes[name] = mode; -}; -exports.defineMIME = function(mime, spec) { mimeModes[mime] = spec; }; - -exports.defineMode("null", function() { - return {token: function(stream) {stream.skipToEnd();}}; -}); -exports.defineMIME("text/plain", "null"); - -exports.resolveMode = function(spec) { - if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { - spec = mimeModes[spec]; - } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { - spec = mimeModes[spec.name]; - } - if (typeof spec == "string") return {name: spec}; - else return spec || {name: "null"}; -}; -exports.getMode = function(options, spec) { - spec = exports.resolveMode(spec); - var mfactory = modes[spec.name]; - if (!mfactory) throw new Error("Unknown mode: " + spec); - return mfactory(options, spec); -}; -exports.registerHelper = exports.registerGlobalHelper = Math.min; - -exports.runMode = function(string, modespec, callback, options) { - var mode = exports.getMode({indentUnit: 2}, modespec); - var lines = splitLines(string), state = (options && options.state) || exports.startState(mode); - for (var i = 0, e = lines.length; i < e; ++i) { - if (i) callback("\n"); - var stream = new exports.StringStream(lines[i]); - if (!stream.string && mode.blankLine) mode.blankLine(state); - while (!stream.eol()) { - var style = mode.token(stream, state); - callback(stream.current(), style, i, stream.start, state); - stream.start = stream.pos; - } - } -}; - -require.cache[require.resolve("../../lib/codemirror")] = require.cache[require.resolve("./runmode.node")]; diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/scroll/annotatescrollbar.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/scroll/annotatescrollbar.js deleted file mode 100755 index 54aeacf27..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/scroll/annotatescrollbar.js +++ /dev/null @@ -1,100 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineExtension("annotateScrollbar", function(options) { - if (typeof options == "string") options = {className: options}; - return new Annotation(this, options); - }); - - CodeMirror.defineOption("scrollButtonHeight", 0); - - function Annotation(cm, options) { - this.cm = cm; - this.options = options; - this.buttonHeight = options.scrollButtonHeight || cm.getOption("scrollButtonHeight"); - this.annotations = []; - this.doRedraw = this.doUpdate = null; - this.div = cm.getWrapperElement().appendChild(document.createElement("div")); - this.div.style.cssText = "position: absolute; right: 0; top: 0; z-index: 7; pointer-events: none"; - this.computeScale(); - - function scheduleRedraw(delay) { - clearTimeout(self.doRedraw); - self.doRedraw = setTimeout(function() { self.redraw(); }, delay); - } - - var self = this; - cm.on("refresh", this.resizeHandler = function() { - clearTimeout(self.doUpdate); - self.doUpdate = setTimeout(function() { - if (self.computeScale()) scheduleRedraw(20); - }, 100); - }); - cm.on("markerAdded", this.resizeHandler); - cm.on("markerCleared", this.resizeHandler); - if (options.listenForChanges !== false) - cm.on("change", this.changeHandler = function() { - scheduleRedraw(250); - }); - } - - Annotation.prototype.computeScale = function() { - var cm = this.cm; - var hScale = (cm.getWrapperElement().clientHeight - cm.display.barHeight - this.buttonHeight * 2) / - cm.heightAtLine(cm.lastLine() + 1, "local"); - if (hScale != this.hScale) { - this.hScale = hScale; - return true; - } - }; - - Annotation.prototype.update = function(annotations) { - this.annotations = annotations; - this.redraw(); - }; - - Annotation.prototype.redraw = function(compute) { - if (compute !== false) this.computeScale(); - var cm = this.cm, hScale = this.hScale; - - var frag = document.createDocumentFragment(), anns = this.annotations; - if (cm.display.barWidth) for (var i = 0, nextTop; i < anns.length; i++) { - var ann = anns[i]; - var top = nextTop || cm.charCoords(ann.from, "local").top * hScale; - var bottom = cm.charCoords(ann.to, "local").bottom * hScale; - while (i < anns.length - 1) { - nextTop = cm.charCoords(anns[i + 1].from, "local").top * hScale; - if (nextTop > bottom + .9) break; - ann = anns[++i]; - bottom = cm.charCoords(ann.to, "local").bottom * hScale; - } - if (bottom == top) continue; - var height = Math.max(bottom - top, 3); - - var elt = frag.appendChild(document.createElement("div")); - elt.style.cssText = "position: absolute; right: 0px; width: " + Math.max(cm.display.barWidth - 1, 2) + "px; top: " - + (top + this.buttonHeight) + "px; height: " + height + "px"; - elt.className = this.options.className; - } - this.div.textContent = ""; - this.div.appendChild(frag); - }; - - Annotation.prototype.clear = function() { - this.cm.off("refresh", this.resizeHandler); - this.cm.off("markerAdded", this.resizeHandler); - this.cm.off("markerCleared", this.resizeHandler); - if (this.changeHandler) this.cm.off("change", this.changeHandler); - this.div.parentNode.removeChild(this.div); - }; -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/scroll/scrollpastend.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/scroll/scrollpastend.js deleted file mode 100755 index 008ae4c7b..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/scroll/scrollpastend.js +++ /dev/null @@ -1,46 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineOption("scrollPastEnd", false, function(cm, val, old) { - if (old && old != CodeMirror.Init) { - cm.off("change", onChange); - cm.off("refresh", updateBottomMargin); - cm.display.lineSpace.parentNode.style.paddingBottom = ""; - cm.state.scrollPastEndPadding = null; - } - if (val) { - cm.on("change", onChange); - cm.on("refresh", updateBottomMargin); - updateBottomMargin(cm); - } - }); - - function onChange(cm, change) { - if (CodeMirror.changeEnd(change).line == cm.lastLine()) - updateBottomMargin(cm); - } - - function updateBottomMargin(cm) { - var padding = ""; - if (cm.lineCount() > 1) { - var totalH = cm.display.scroller.clientHeight - 30, - lastLineH = cm.getLineHandle(cm.lastLine()).height; - padding = (totalH - lastLineH) + "px"; - } - if (cm.state.scrollPastEndPadding != padding) { - cm.state.scrollPastEndPadding = padding; - cm.display.lineSpace.parentNode.style.paddingBottom = padding; - cm.setSize(); - } - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/scroll/simplescrollbars.css b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/scroll/simplescrollbars.css deleted file mode 100755 index 5eea7aa1b..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/scroll/simplescrollbars.css +++ /dev/null @@ -1,66 +0,0 @@ -.CodeMirror-simplescroll-horizontal div, .CodeMirror-simplescroll-vertical div { - position: absolute; - background: #ccc; - -moz-box-sizing: border-box; - box-sizing: border-box; - border: 1px solid #bbb; - border-radius: 2px; -} - -.CodeMirror-simplescroll-horizontal, .CodeMirror-simplescroll-vertical { - position: absolute; - z-index: 6; - background: #eee; -} - -.CodeMirror-simplescroll-horizontal { - bottom: 0; left: 0; - height: 8px; -} -.CodeMirror-simplescroll-horizontal div { - bottom: 0; - height: 100%; -} - -.CodeMirror-simplescroll-vertical { - right: 0; top: 0; - width: 8px; -} -.CodeMirror-simplescroll-vertical div { - right: 0; - width: 100%; -} - - -.CodeMirror-overlayscroll .CodeMirror-scrollbar-filler, .CodeMirror-overlayscroll .CodeMirror-gutter-filler { - display: none; -} - -.CodeMirror-overlayscroll-horizontal div, .CodeMirror-overlayscroll-vertical div { - position: absolute; - background: #bcd; - border-radius: 3px; -} - -.CodeMirror-overlayscroll-horizontal, .CodeMirror-overlayscroll-vertical { - position: absolute; - z-index: 6; -} - -.CodeMirror-overlayscroll-horizontal { - bottom: 0; left: 0; - height: 6px; -} -.CodeMirror-overlayscroll-horizontal div { - bottom: 0; - height: 100%; -} - -.CodeMirror-overlayscroll-vertical { - right: 0; top: 0; - width: 6px; -} -.CodeMirror-overlayscroll-vertical div { - right: 0; - width: 100%; -} diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/scroll/simplescrollbars.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/scroll/simplescrollbars.js deleted file mode 100755 index bb06adb86..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/scroll/simplescrollbars.js +++ /dev/null @@ -1,141 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - function Bar(cls, orientation, scroll) { - this.orientation = orientation; - this.scroll = scroll; - this.screen = this.total = this.size = 1; - this.pos = 0; - - this.node = document.createElement("div"); - this.node.className = cls + "-" + orientation; - this.inner = this.node.appendChild(document.createElement("div")); - - var self = this; - CodeMirror.on(this.inner, "mousedown", function(e) { - if (e.which != 1) return; - CodeMirror.e_preventDefault(e); - var axis = self.orientation == "horizontal" ? "pageX" : "pageY"; - var start = e[axis], startpos = self.pos; - function done() { - CodeMirror.off(document, "mousemove", move); - CodeMirror.off(document, "mouseup", done); - } - function move(e) { - if (e.which != 1) return done(); - self.moveTo(startpos + (e[axis] - start) * (self.total / self.size)); - } - CodeMirror.on(document, "mousemove", move); - CodeMirror.on(document, "mouseup", done); - }); - - CodeMirror.on(this.node, "click", function(e) { - CodeMirror.e_preventDefault(e); - var innerBox = self.inner.getBoundingClientRect(), where; - if (self.orientation == "horizontal") - where = e.clientX < innerBox.left ? -1 : e.clientX > innerBox.right ? 1 : 0; - else - where = e.clientY < innerBox.top ? -1 : e.clientY > innerBox.bottom ? 1 : 0; - self.moveTo(self.pos + where * self.screen); - }); - - function onWheel(e) { - var moved = CodeMirror.wheelEventPixels(e)[self.orientation == "horizontal" ? "x" : "y"]; - var oldPos = self.pos; - self.moveTo(self.pos + moved); - if (self.pos != oldPos) CodeMirror.e_preventDefault(e); - } - CodeMirror.on(this.node, "mousewheel", onWheel); - CodeMirror.on(this.node, "DOMMouseScroll", onWheel); - } - - Bar.prototype.moveTo = function(pos, update) { - if (pos < 0) pos = 0; - if (pos > this.total - this.screen) pos = this.total - this.screen; - if (pos == this.pos) return; - this.pos = pos; - this.inner.style[this.orientation == "horizontal" ? "left" : "top"] = - (pos * (this.size / this.total)) + "px"; - if (update !== false) this.scroll(pos, this.orientation); - }; - - Bar.prototype.update = function(scrollSize, clientSize, barSize) { - this.screen = clientSize; - this.total = scrollSize; - this.size = barSize; - - // FIXME clip to min size? - this.inner.style[this.orientation == "horizontal" ? "width" : "height"] = - this.screen * (this.size / this.total) + "px"; - this.inner.style[this.orientation == "horizontal" ? "left" : "top"] = - this.pos * (this.size / this.total) + "px"; - }; - - function SimpleScrollbars(cls, place, scroll) { - this.addClass = cls; - this.horiz = new Bar(cls, "horizontal", scroll); - place(this.horiz.node); - this.vert = new Bar(cls, "vertical", scroll); - place(this.vert.node); - this.width = null; - } - - SimpleScrollbars.prototype.update = function(measure) { - if (this.width == null) { - var style = window.getComputedStyle ? window.getComputedStyle(this.horiz.node) : this.horiz.node.currentStyle; - if (style) this.width = parseInt(style.height); - } - var width = this.width || 0; - - var needsH = measure.scrollWidth > measure.clientWidth + 1; - var needsV = measure.scrollHeight > measure.clientHeight + 1; - this.vert.node.style.display = needsV ? "block" : "none"; - this.horiz.node.style.display = needsH ? "block" : "none"; - - if (needsV) { - this.vert.update(measure.scrollHeight, measure.clientHeight, - measure.viewHeight - (needsH ? width : 0)); - this.vert.node.style.display = "block"; - this.vert.node.style.bottom = needsH ? width + "px" : "0"; - } - if (needsH) { - this.horiz.update(measure.scrollWidth, measure.clientWidth, - measure.viewWidth - (needsV ? width : 0) - measure.barLeft); - this.horiz.node.style.right = needsV ? width + "px" : "0"; - this.horiz.node.style.left = measure.barLeft + "px"; - } - - return {right: needsV ? width : 0, bottom: needsH ? width : 0}; - }; - - SimpleScrollbars.prototype.setScrollTop = function(pos) { - this.vert.moveTo(pos, false); - }; - - SimpleScrollbars.prototype.setScrollLeft = function(pos) { - this.horiz.moveTo(pos, false); - }; - - SimpleScrollbars.prototype.clear = function() { - var parent = this.horiz.node.parentNode; - parent.removeChild(this.horiz.node); - parent.removeChild(this.vert.node); - }; - - CodeMirror.scrollbarModel.simple = function(place, scroll) { - return new SimpleScrollbars("CodeMirror-simplescroll", place, scroll); - }; - CodeMirror.scrollbarModel.overlay = function(place, scroll) { - return new SimpleScrollbars("CodeMirror-overlayscroll", place, scroll); - }; -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/match-highlighter.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/match-highlighter.js deleted file mode 100755 index e9a22721f..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/match-highlighter.js +++ /dev/null @@ -1,128 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// Highlighting text that matches the selection -// -// Defines an option highlightSelectionMatches, which, when enabled, -// will style strings that match the selection throughout the -// document. -// -// The option can be set to true to simply enable it, or to a -// {minChars, style, wordsOnly, showToken, delay} object to explicitly -// configure it. minChars is the minimum amount of characters that should be -// selected for the behavior to occur, and style is the token style to -// apply to the matches. This will be prefixed by "cm-" to create an -// actual CSS class name. If wordsOnly is enabled, the matches will be -// highlighted only if the selected text is a word. showToken, when enabled, -// will cause the current token to be highlighted when nothing is selected. -// delay is used to specify how much time to wait, in milliseconds, before -// highlighting the matches. - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var DEFAULT_MIN_CHARS = 2; - var DEFAULT_TOKEN_STYLE = "matchhighlight"; - var DEFAULT_DELAY = 100; - var DEFAULT_WORDS_ONLY = false; - - function State(options) { - if (typeof options == "object") { - this.minChars = options.minChars; - this.style = options.style; - this.showToken = options.showToken; - this.delay = options.delay; - this.wordsOnly = options.wordsOnly; - } - if (this.style == null) this.style = DEFAULT_TOKEN_STYLE; - if (this.minChars == null) this.minChars = DEFAULT_MIN_CHARS; - if (this.delay == null) this.delay = DEFAULT_DELAY; - if (this.wordsOnly == null) this.wordsOnly = DEFAULT_WORDS_ONLY; - this.overlay = this.timeout = null; - } - - CodeMirror.defineOption("highlightSelectionMatches", false, function(cm, val, old) { - if (old && old != CodeMirror.Init) { - var over = cm.state.matchHighlighter.overlay; - if (over) cm.removeOverlay(over); - clearTimeout(cm.state.matchHighlighter.timeout); - cm.state.matchHighlighter = null; - cm.off("cursorActivity", cursorActivity); - } - if (val) { - cm.state.matchHighlighter = new State(val); - highlightMatches(cm); - cm.on("cursorActivity", cursorActivity); - } - }); - - function cursorActivity(cm) { - var state = cm.state.matchHighlighter; - clearTimeout(state.timeout); - state.timeout = setTimeout(function() {highlightMatches(cm);}, state.delay); - } - - function highlightMatches(cm) { - cm.operation(function() { - var state = cm.state.matchHighlighter; - if (state.overlay) { - cm.removeOverlay(state.overlay); - state.overlay = null; - } - if (!cm.somethingSelected() && state.showToken) { - var re = state.showToken === true ? /[\w$]/ : state.showToken; - var cur = cm.getCursor(), line = cm.getLine(cur.line), start = cur.ch, end = start; - while (start && re.test(line.charAt(start - 1))) --start; - while (end < line.length && re.test(line.charAt(end))) ++end; - if (start < end) - cm.addOverlay(state.overlay = makeOverlay(line.slice(start, end), re, state.style)); - return; - } - var from = cm.getCursor("from"), to = cm.getCursor("to"); - if (from.line != to.line) return; - if (state.wordsOnly && !isWord(cm, from, to)) return; - var selection = cm.getRange(from, to).replace(/^\s+|\s+$/g, ""); - if (selection.length >= state.minChars) - cm.addOverlay(state.overlay = makeOverlay(selection, false, state.style)); - }); - } - - function isWord(cm, from, to) { - var str = cm.getRange(from, to); - if (str.match(/^\w+$/) !== null) { - if (from.ch > 0) { - var pos = {line: from.line, ch: from.ch - 1}; - var chr = cm.getRange(pos, from); - if (chr.match(/\W/) === null) return false; - } - if (to.ch < cm.getLine(from.line).length) { - var pos = {line: to.line, ch: to.ch + 1}; - var chr = cm.getRange(to, pos); - if (chr.match(/\W/) === null) return false; - } - return true; - } else return false; - } - - function boundariesAround(stream, re) { - return (!stream.start || !re.test(stream.string.charAt(stream.start - 1))) && - (stream.pos == stream.string.length || !re.test(stream.string.charAt(stream.pos))); - } - - function makeOverlay(query, hasBoundary, style) { - return {token: function(stream) { - if (stream.match(query) && - (!hasBoundary || boundariesAround(stream, hasBoundary))) - return style; - stream.next(); - stream.skipTo(query.charAt(0)) || stream.skipToEnd(); - }}; - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/matchesonscrollbar.css b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/matchesonscrollbar.css deleted file mode 100755 index 77932cc90..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/matchesonscrollbar.css +++ /dev/null @@ -1,8 +0,0 @@ -.CodeMirror-search-match { - background: gold; - border-top: 1px solid orange; - border-bottom: 1px solid orange; - -moz-box-sizing: border-box; - box-sizing: border-box; - opacity: .5; -} diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/matchesonscrollbar.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/matchesonscrollbar.js deleted file mode 100755 index dbd67a4a5..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/matchesonscrollbar.js +++ /dev/null @@ -1,95 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("./searchcursor"), require("../scroll/annotatescrollbar")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "./searchcursor", "../scroll/annotatescrollbar"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineExtension("showMatchesOnScrollbar", function(query, caseFold, options) { - if (typeof options == "string") options = {className: options}; - if (!options) options = {}; - return new SearchAnnotation(this, query, caseFold, options); - }); - - function SearchAnnotation(cm, query, caseFold, options) { - this.cm = cm; - var annotateOptions = {listenForChanges: false}; - for (var prop in options) annotateOptions[prop] = options[prop]; - if (!annotateOptions.className) annotateOptions.className = "CodeMirror-search-match"; - this.annotation = cm.annotateScrollbar(annotateOptions); - this.query = query; - this.caseFold = caseFold; - this.gap = {from: cm.firstLine(), to: cm.lastLine() + 1}; - this.matches = []; - this.update = null; - - this.findMatches(); - this.annotation.update(this.matches); - - var self = this; - cm.on("change", this.changeHandler = function(_cm, change) { self.onChange(change); }); - } - - var MAX_MATCHES = 1000; - - SearchAnnotation.prototype.findMatches = function() { - if (!this.gap) return; - for (var i = 0; i < this.matches.length; i++) { - var match = this.matches[i]; - if (match.from.line >= this.gap.to) break; - if (match.to.line >= this.gap.from) this.matches.splice(i--, 1); - } - var cursor = this.cm.getSearchCursor(this.query, CodeMirror.Pos(this.gap.from, 0), this.caseFold); - while (cursor.findNext()) { - var match = {from: cursor.from(), to: cursor.to()}; - if (match.from.line >= this.gap.to) break; - this.matches.splice(i++, 0, match); - if (this.matches.length > MAX_MATCHES) break; - } - this.gap = null; - }; - - function offsetLine(line, changeStart, sizeChange) { - if (line <= changeStart) return line; - return Math.max(changeStart, line + sizeChange); - } - - SearchAnnotation.prototype.onChange = function(change) { - var startLine = change.from.line; - var endLine = CodeMirror.changeEnd(change).line; - var sizeChange = endLine - change.to.line; - if (this.gap) { - this.gap.from = Math.min(offsetLine(this.gap.from, startLine, sizeChange), change.from.line); - this.gap.to = Math.max(offsetLine(this.gap.to, startLine, sizeChange), change.from.line); - } else { - this.gap = {from: change.from.line, to: endLine + 1}; - } - - if (sizeChange) for (var i = 0; i < this.matches.length; i++) { - var match = this.matches[i]; - var newFrom = offsetLine(match.from.line, startLine, sizeChange); - if (newFrom != match.from.line) match.from = CodeMirror.Pos(newFrom, match.from.ch); - var newTo = offsetLine(match.to.line, startLine, sizeChange); - if (newTo != match.to.line) match.to = CodeMirror.Pos(newTo, match.to.ch); - } - clearTimeout(this.update); - var self = this; - this.update = setTimeout(function() { self.updateAfterChange(); }, 250); - }; - - SearchAnnotation.prototype.updateAfterChange = function() { - this.findMatches(); - this.annotation.update(this.matches); - }; - - SearchAnnotation.prototype.clear = function() { - this.cm.off("change", this.changeHandler); - this.annotation.clear(); - }; -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/search.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/search.js deleted file mode 100755 index 0251067a7..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/search.js +++ /dev/null @@ -1,164 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// Define search commands. Depends on dialog.js or another -// implementation of the openDialog method. - -// Replace works a little oddly -- it will do the replace on the next -// Ctrl-G (or whatever is bound to findNext) press. You prevent a -// replace by making sure the match is no longer selected when hitting -// Ctrl-G. - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror"), require("./searchcursor"), require("../dialog/dialog")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror", "./searchcursor", "../dialog/dialog"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - function searchOverlay(query, caseInsensitive) { - if (typeof query == "string") - query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g"); - else if (!query.global) - query = new RegExp(query.source, query.ignoreCase ? "gi" : "g"); - - return {token: function(stream) { - query.lastIndex = stream.pos; - var match = query.exec(stream.string); - if (match && match.index == stream.pos) { - stream.pos += match[0].length; - return "searching"; - } else if (match) { - stream.pos = match.index; - } else { - stream.skipToEnd(); - } - }}; - } - - function SearchState() { - this.posFrom = this.posTo = this.query = null; - this.overlay = null; - } - function getSearchState(cm) { - return cm.state.search || (cm.state.search = new SearchState()); - } - function queryCaseInsensitive(query) { - return typeof query == "string" && query == query.toLowerCase(); - } - function getSearchCursor(cm, query, pos) { - // Heuristic: if the query string is all lowercase, do a case insensitive search. - return cm.getSearchCursor(query, pos, queryCaseInsensitive(query)); - } - function dialog(cm, text, shortText, deflt, f) { - if (cm.openDialog) cm.openDialog(text, f, {value: deflt}); - else f(prompt(shortText, deflt)); - } - function confirmDialog(cm, text, shortText, fs) { - if (cm.openConfirm) cm.openConfirm(text, fs); - else if (confirm(shortText)) fs[0](); - } - function parseQuery(query) { - var isRE = query.match(/^\/(.*)\/([a-z]*)$/); - if (isRE) { - try { query = new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i"); } - catch(e) {} // Not a regular expression after all, do a string search - } - if (typeof query == "string" ? query == "" : query.test("")) - query = /x^/; - return query; - } - var queryDialog = - 'Search: (Use /re/ syntax for regexp search)'; - function doSearch(cm, rev) { - var state = getSearchState(cm); - if (state.query) return findNext(cm, rev); - dialog(cm, queryDialog, "Search for:", cm.getSelection(), function(query) { - cm.operation(function() { - if (!query || state.query) return; - state.query = parseQuery(query); - cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query)); - state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query)); - cm.addOverlay(state.overlay); - if (cm.showMatchesOnScrollbar) { - if (state.annotate) { state.annotate.clear(); state.annotate = null; } - state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query)); - } - state.posFrom = state.posTo = cm.getCursor(); - findNext(cm, rev); - }); - }); - } - function findNext(cm, rev) {cm.operation(function() { - var state = getSearchState(cm); - var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo); - if (!cursor.find(rev)) { - cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0)); - if (!cursor.find(rev)) return; - } - cm.setSelection(cursor.from(), cursor.to()); - cm.scrollIntoView({from: cursor.from(), to: cursor.to()}); - state.posFrom = cursor.from(); state.posTo = cursor.to(); - });} - function clearSearch(cm) {cm.operation(function() { - var state = getSearchState(cm); - if (!state.query) return; - state.query = null; - cm.removeOverlay(state.overlay); - if (state.annotate) { state.annotate.clear(); state.annotate = null; } - });} - - var replaceQueryDialog = - 'Replace: (Use /re/ syntax for regexp search)'; - var replacementQueryDialog = 'With: '; - var doReplaceConfirm = "Replace? "; - function replace(cm, all) { - if (cm.getOption("readOnly")) return; - dialog(cm, replaceQueryDialog, "Replace:", cm.getSelection(), function(query) { - if (!query) return; - query = parseQuery(query); - dialog(cm, replacementQueryDialog, "Replace with:", "", function(text) { - if (all) { - cm.operation(function() { - for (var cursor = getSearchCursor(cm, query); cursor.findNext();) { - if (typeof query != "string") { - var match = cm.getRange(cursor.from(), cursor.to()).match(query); - cursor.replace(text.replace(/\$(\d)/g, function(_, i) {return match[i];})); - } else cursor.replace(text); - } - }); - } else { - clearSearch(cm); - var cursor = getSearchCursor(cm, query, cm.getCursor()); - var advance = function() { - var start = cursor.from(), match; - if (!(match = cursor.findNext())) { - cursor = getSearchCursor(cm, query); - if (!(match = cursor.findNext()) || - (start && cursor.from().line == start.line && cursor.from().ch == start.ch)) return; - } - cm.setSelection(cursor.from(), cursor.to()); - cm.scrollIntoView({from: cursor.from(), to: cursor.to()}); - confirmDialog(cm, doReplaceConfirm, "Replace?", - [function() {doReplace(match);}, advance]); - }; - var doReplace = function(match) { - cursor.replace(typeof query == "string" ? text : - text.replace(/\$(\d)/g, function(_, i) {return match[i];})); - advance(); - }; - advance(); - } - }); - }); - } - - CodeMirror.commands.find = function(cm) {clearSearch(cm); doSearch(cm);}; - CodeMirror.commands.findNext = doSearch; - CodeMirror.commands.findPrev = function(cm) {doSearch(cm, true);}; - CodeMirror.commands.clearSearch = clearSearch; - CodeMirror.commands.replace = replace; - CodeMirror.commands.replaceAll = function(cm) {replace(cm, true);}; -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/searchcursor.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/searchcursor.js deleted file mode 100755 index 55c108b5a..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/search/searchcursor.js +++ /dev/null @@ -1,189 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - var Pos = CodeMirror.Pos; - - function SearchCursor(doc, query, pos, caseFold) { - this.atOccurrence = false; this.doc = doc; - if (caseFold == null && typeof query == "string") caseFold = false; - - pos = pos ? doc.clipPos(pos) : Pos(0, 0); - this.pos = {from: pos, to: pos}; - - // The matches method is filled in based on the type of query. - // It takes a position and a direction, and returns an object - // describing the next occurrence of the query, or null if no - // more matches were found. - if (typeof query != "string") { // Regexp match - if (!query.global) query = new RegExp(query.source, query.ignoreCase ? "ig" : "g"); - this.matches = function(reverse, pos) { - if (reverse) { - query.lastIndex = 0; - var line = doc.getLine(pos.line).slice(0, pos.ch), cutOff = 0, match, start; - for (;;) { - query.lastIndex = cutOff; - var newMatch = query.exec(line); - if (!newMatch) break; - match = newMatch; - start = match.index; - cutOff = match.index + (match[0].length || 1); - if (cutOff == line.length) break; - } - var matchLen = (match && match[0].length) || 0; - if (!matchLen) { - if (start == 0 && line.length == 0) {match = undefined;} - else if (start != doc.getLine(pos.line).length) { - matchLen++; - } - } - } else { - query.lastIndex = pos.ch; - var line = doc.getLine(pos.line), match = query.exec(line); - var matchLen = (match && match[0].length) || 0; - var start = match && match.index; - if (start + matchLen != line.length && !matchLen) matchLen = 1; - } - if (match && matchLen) - return {from: Pos(pos.line, start), - to: Pos(pos.line, start + matchLen), - match: match}; - }; - } else { // String query - var origQuery = query; - if (caseFold) query = query.toLowerCase(); - var fold = caseFold ? function(str){return str.toLowerCase();} : function(str){return str;}; - var target = query.split("\n"); - // Different methods for single-line and multi-line queries - if (target.length == 1) { - if (!query.length) { - // Empty string would match anything and never progress, so - // we define it to match nothing instead. - this.matches = function() {}; - } else { - this.matches = function(reverse, pos) { - if (reverse) { - var orig = doc.getLine(pos.line).slice(0, pos.ch), line = fold(orig); - var match = line.lastIndexOf(query); - if (match > -1) { - match = adjustPos(orig, line, match); - return {from: Pos(pos.line, match), to: Pos(pos.line, match + origQuery.length)}; - } - } else { - var orig = doc.getLine(pos.line).slice(pos.ch), line = fold(orig); - var match = line.indexOf(query); - if (match > -1) { - match = adjustPos(orig, line, match) + pos.ch; - return {from: Pos(pos.line, match), to: Pos(pos.line, match + origQuery.length)}; - } - } - }; - } - } else { - var origTarget = origQuery.split("\n"); - this.matches = function(reverse, pos) { - var last = target.length - 1; - if (reverse) { - if (pos.line - (target.length - 1) < doc.firstLine()) return; - if (fold(doc.getLine(pos.line).slice(0, origTarget[last].length)) != target[target.length - 1]) return; - var to = Pos(pos.line, origTarget[last].length); - for (var ln = pos.line - 1, i = last - 1; i >= 1; --i, --ln) - if (target[i] != fold(doc.getLine(ln))) return; - var line = doc.getLine(ln), cut = line.length - origTarget[0].length; - if (fold(line.slice(cut)) != target[0]) return; - return {from: Pos(ln, cut), to: to}; - } else { - if (pos.line + (target.length - 1) > doc.lastLine()) return; - var line = doc.getLine(pos.line), cut = line.length - origTarget[0].length; - if (fold(line.slice(cut)) != target[0]) return; - var from = Pos(pos.line, cut); - for (var ln = pos.line + 1, i = 1; i < last; ++i, ++ln) - if (target[i] != fold(doc.getLine(ln))) return; - if (fold(doc.getLine(ln).slice(0, origTarget[last].length)) != target[last]) return; - return {from: from, to: Pos(ln, origTarget[last].length)}; - } - }; - } - } - } - - SearchCursor.prototype = { - findNext: function() {return this.find(false);}, - findPrevious: function() {return this.find(true);}, - - find: function(reverse) { - var self = this, pos = this.doc.clipPos(reverse ? this.pos.from : this.pos.to); - function savePosAndFail(line) { - var pos = Pos(line, 0); - self.pos = {from: pos, to: pos}; - self.atOccurrence = false; - return false; - } - - for (;;) { - if (this.pos = this.matches(reverse, pos)) { - this.atOccurrence = true; - return this.pos.match || true; - } - if (reverse) { - if (!pos.line) return savePosAndFail(0); - pos = Pos(pos.line-1, this.doc.getLine(pos.line-1).length); - } - else { - var maxLine = this.doc.lineCount(); - if (pos.line == maxLine - 1) return savePosAndFail(maxLine); - pos = Pos(pos.line + 1, 0); - } - } - }, - - from: function() {if (this.atOccurrence) return this.pos.from;}, - to: function() {if (this.atOccurrence) return this.pos.to;}, - - replace: function(newText) { - if (!this.atOccurrence) return; - var lines = CodeMirror.splitLines(newText); - this.doc.replaceRange(lines, this.pos.from, this.pos.to); - this.pos.to = Pos(this.pos.from.line + lines.length - 1, - lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0)); - } - }; - - // Maps a position in a case-folded line back to a position in the original line - // (compensating for codepoints increasing in number during folding) - function adjustPos(orig, folded, pos) { - if (orig.length == folded.length) return pos; - for (var pos1 = Math.min(pos, orig.length);;) { - var len1 = orig.slice(0, pos1).toLowerCase().length; - if (len1 < pos) ++pos1; - else if (len1 > pos) --pos1; - else return pos1; - } - } - - CodeMirror.defineExtension("getSearchCursor", function(query, pos, caseFold) { - return new SearchCursor(this.doc, query, pos, caseFold); - }); - CodeMirror.defineDocExtension("getSearchCursor", function(query, pos, caseFold) { - return new SearchCursor(this, query, pos, caseFold); - }); - - CodeMirror.defineExtension("selectMatches", function(query, caseFold) { - var ranges = [], next; - var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold); - while (next = cur.findNext()) { - if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break; - ranges.push({anchor: cur.from(), head: cur.to()}); - } - if (ranges.length) - this.setSelections(ranges, 0); - }); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/selection/active-line.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/selection/active-line.js deleted file mode 100755 index 22da2e0aa..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/selection/active-line.js +++ /dev/null @@ -1,71 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// Because sometimes you need to style the cursor's line. -// -// Adds an option 'styleActiveLine' which, when enabled, gives the -// active line's wrapping
            the CSS class "CodeMirror-activeline", -// and gives its background
            the class "CodeMirror-activeline-background". - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - var WRAP_CLASS = "CodeMirror-activeline"; - var BACK_CLASS = "CodeMirror-activeline-background"; - - CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) { - var prev = old && old != CodeMirror.Init; - if (val && !prev) { - cm.state.activeLines = []; - updateActiveLines(cm, cm.listSelections()); - cm.on("beforeSelectionChange", selectionChange); - } else if (!val && prev) { - cm.off("beforeSelectionChange", selectionChange); - clearActiveLines(cm); - delete cm.state.activeLines; - } - }); - - function clearActiveLines(cm) { - for (var i = 0; i < cm.state.activeLines.length; i++) { - cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS); - cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS); - } - } - - function sameArray(a, b) { - if (a.length != b.length) return false; - for (var i = 0; i < a.length; i++) - if (a[i] != b[i]) return false; - return true; - } - - function updateActiveLines(cm, ranges) { - var active = []; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (!range.empty()) continue; - var line = cm.getLineHandleVisualStart(range.head.line); - if (active[active.length - 1] != line) active.push(line); - } - if (sameArray(cm.state.activeLines, active)) return; - cm.operation(function() { - clearActiveLines(cm); - for (var i = 0; i < active.length; i++) { - cm.addLineClass(active[i], "wrap", WRAP_CLASS); - cm.addLineClass(active[i], "background", BACK_CLASS); - } - cm.state.activeLines = active; - }); - } - - function selectionChange(cm, sel) { - updateActiveLines(cm, sel.ranges); - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/selection/mark-selection.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/selection/mark-selection.js deleted file mode 100755 index 5c42d21eb..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/selection/mark-selection.js +++ /dev/null @@ -1,118 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// Because sometimes you need to mark the selected *text*. -// -// Adds an option 'styleSelectedText' which, when enabled, gives -// selected text the CSS class given as option value, or -// "CodeMirror-selectedtext" when the value is not a string. - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineOption("styleSelectedText", false, function(cm, val, old) { - var prev = old && old != CodeMirror.Init; - if (val && !prev) { - cm.state.markedSelection = []; - cm.state.markedSelectionStyle = typeof val == "string" ? val : "CodeMirror-selectedtext"; - reset(cm); - cm.on("cursorActivity", onCursorActivity); - cm.on("change", onChange); - } else if (!val && prev) { - cm.off("cursorActivity", onCursorActivity); - cm.off("change", onChange); - clear(cm); - cm.state.markedSelection = cm.state.markedSelectionStyle = null; - } - }); - - function onCursorActivity(cm) { - cm.operation(function() { update(cm); }); - } - - function onChange(cm) { - if (cm.state.markedSelection.length) - cm.operation(function() { clear(cm); }); - } - - var CHUNK_SIZE = 8; - var Pos = CodeMirror.Pos; - var cmp = CodeMirror.cmpPos; - - function coverRange(cm, from, to, addAt) { - if (cmp(from, to) == 0) return; - var array = cm.state.markedSelection; - var cls = cm.state.markedSelectionStyle; - for (var line = from.line;;) { - var start = line == from.line ? from : Pos(line, 0); - var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line; - var end = atEnd ? to : Pos(endLine, 0); - var mark = cm.markText(start, end, {className: cls}); - if (addAt == null) array.push(mark); - else array.splice(addAt++, 0, mark); - if (atEnd) break; - line = endLine; - } - } - - function clear(cm) { - var array = cm.state.markedSelection; - for (var i = 0; i < array.length; ++i) array[i].clear(); - array.length = 0; - } - - function reset(cm) { - clear(cm); - var ranges = cm.listSelections(); - for (var i = 0; i < ranges.length; i++) - coverRange(cm, ranges[i].from(), ranges[i].to()); - } - - function update(cm) { - if (!cm.somethingSelected()) return clear(cm); - if (cm.listSelections().length > 1) return reset(cm); - - var from = cm.getCursor("start"), to = cm.getCursor("end"); - - var array = cm.state.markedSelection; - if (!array.length) return coverRange(cm, from, to); - - var coverStart = array[0].find(), coverEnd = array[array.length - 1].find(); - if (!coverStart || !coverEnd || to.line - from.line < CHUNK_SIZE || - cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0) - return reset(cm); - - while (cmp(from, coverStart.from) > 0) { - array.shift().clear(); - coverStart = array[0].find(); - } - if (cmp(from, coverStart.from) < 0) { - if (coverStart.to.line - from.line < CHUNK_SIZE) { - array.shift().clear(); - coverRange(cm, from, coverStart.to, 0); - } else { - coverRange(cm, from, coverStart.from, 0); - } - } - - while (cmp(to, coverEnd.to) < 0) { - array.pop().clear(); - coverEnd = array[array.length - 1].find(); - } - if (cmp(to, coverEnd.to) > 0) { - if (to.line - coverEnd.from.line < CHUNK_SIZE) { - array.pop().clear(); - coverRange(cm, coverEnd.from, to); - } else { - coverRange(cm, coverEnd.to, to); - } - } - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/selection/selection-pointer.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/selection/selection-pointer.js deleted file mode 100755 index ef5e404ad..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/selection/selection-pointer.js +++ /dev/null @@ -1,98 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - CodeMirror.defineOption("selectionPointer", false, function(cm, val) { - var data = cm.state.selectionPointer; - if (data) { - CodeMirror.off(cm.getWrapperElement(), "mousemove", data.mousemove); - CodeMirror.off(cm.getWrapperElement(), "mouseout", data.mouseout); - CodeMirror.off(window, "scroll", data.windowScroll); - cm.off("cursorActivity", reset); - cm.off("scroll", reset); - cm.state.selectionPointer = null; - cm.display.lineDiv.style.cursor = ""; - } - if (val) { - data = cm.state.selectionPointer = { - value: typeof val == "string" ? val : "default", - mousemove: function(event) { mousemove(cm, event); }, - mouseout: function(event) { mouseout(cm, event); }, - windowScroll: function() { reset(cm); }, - rects: null, - mouseX: null, mouseY: null, - willUpdate: false - }; - CodeMirror.on(cm.getWrapperElement(), "mousemove", data.mousemove); - CodeMirror.on(cm.getWrapperElement(), "mouseout", data.mouseout); - CodeMirror.on(window, "scroll", data.windowScroll); - cm.on("cursorActivity", reset); - cm.on("scroll", reset); - } - }); - - function mousemove(cm, event) { - var data = cm.state.selectionPointer; - if (event.buttons == null ? event.which : event.buttons) { - data.mouseX = data.mouseY = null; - } else { - data.mouseX = event.clientX; - data.mouseY = event.clientY; - } - scheduleUpdate(cm); - } - - function mouseout(cm, event) { - if (!cm.getWrapperElement().contains(event.relatedTarget)) { - var data = cm.state.selectionPointer; - data.mouseX = data.mouseY = null; - scheduleUpdate(cm); - } - } - - function reset(cm) { - cm.state.selectionPointer.rects = null; - scheduleUpdate(cm); - } - - function scheduleUpdate(cm) { - if (!cm.state.selectionPointer.willUpdate) { - cm.state.selectionPointer.willUpdate = true; - setTimeout(function() { - update(cm); - cm.state.selectionPointer.willUpdate = false; - }, 50); - } - } - - function update(cm) { - var data = cm.state.selectionPointer; - if (!data) return; - if (data.rects == null && data.mouseX != null) { - data.rects = []; - if (cm.somethingSelected()) { - for (var sel = cm.display.selectionDiv.firstChild; sel; sel = sel.nextSibling) - data.rects.push(sel.getBoundingClientRect()); - } - } - var inside = false; - if (data.mouseX != null) for (var i = 0; i < data.rects.length; i++) { - var rect = data.rects[i]; - if (rect.left <= data.mouseX && rect.right >= data.mouseX && - rect.top <= data.mouseY && rect.bottom >= data.mouseY) - inside = true; - } - var cursor = inside ? data.value : ""; - if (cm.display.lineDiv.style.cursor != cursor) - cm.display.lineDiv.style.cursor = cursor; - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/tern/tern.css b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/tern/tern.css deleted file mode 100755 index 76fba33d4..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/tern/tern.css +++ /dev/null @@ -1,86 +0,0 @@ -.CodeMirror-Tern-completion { - padding-left: 22px; - position: relative; -} -.CodeMirror-Tern-completion:before { - position: absolute; - left: 2px; - bottom: 2px; - border-radius: 50%; - font-size: 12px; - font-weight: bold; - height: 15px; - width: 15px; - line-height: 16px; - text-align: center; - color: white; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.CodeMirror-Tern-completion-unknown:before { - content: "?"; - background: #4bb; -} -.CodeMirror-Tern-completion-object:before { - content: "O"; - background: #77c; -} -.CodeMirror-Tern-completion-fn:before { - content: "F"; - background: #7c7; -} -.CodeMirror-Tern-completion-array:before { - content: "A"; - background: #c66; -} -.CodeMirror-Tern-completion-number:before { - content: "1"; - background: #999; -} -.CodeMirror-Tern-completion-string:before { - content: "S"; - background: #999; -} -.CodeMirror-Tern-completion-bool:before { - content: "B"; - background: #999; -} - -.CodeMirror-Tern-completion-guess { - color: #999; -} - -.CodeMirror-Tern-tooltip { - border: 1px solid silver; - border-radius: 3px; - color: #444; - padding: 2px 5px; - font-size: 90%; - font-family: monospace; - background-color: white; - white-space: pre-wrap; - - max-width: 40em; - position: absolute; - z-index: 10; - -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); - -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); - box-shadow: 2px 3px 5px rgba(0,0,0,.2); - - transition: opacity 1s; - -moz-transition: opacity 1s; - -webkit-transition: opacity 1s; - -o-transition: opacity 1s; - -ms-transition: opacity 1s; -} - -.CodeMirror-Tern-hint-doc { - max-width: 25em; - margin-top: -3px; -} - -.CodeMirror-Tern-fname { color: black; } -.CodeMirror-Tern-farg { color: #70a; } -.CodeMirror-Tern-farg-current { text-decoration: underline; } -.CodeMirror-Tern-type { color: #07c; } -.CodeMirror-Tern-fhint-guess { opacity: .7; } diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/tern/tern.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/tern/tern.js deleted file mode 100755 index b049549d3..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/tern/tern.js +++ /dev/null @@ -1,697 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// Glue code between CodeMirror and Tern. -// -// Create a CodeMirror.TernServer to wrap an actual Tern server, -// register open documents (CodeMirror.Doc instances) with it, and -// call its methods to activate the assisting functions that Tern -// provides. -// -// Options supported (all optional): -// * defs: An array of JSON definition data structures. -// * plugins: An object mapping plugin names to configuration -// options. -// * getFile: A function(name, c) that can be used to access files in -// the project that haven't been loaded yet. Simply do c(null) to -// indicate that a file is not available. -// * fileFilter: A function(value, docName, doc) that will be applied -// to documents before passing them on to Tern. -// * switchToDoc: A function(name, doc) that should, when providing a -// multi-file view, switch the view or focus to the named file. -// * showError: A function(editor, message) that can be used to -// override the way errors are displayed. -// * completionTip: Customize the content in tooltips for completions. -// Is passed a single argument—the completion's data as returned by -// Tern—and may return a string, DOM node, or null to indicate that -// no tip should be shown. By default the docstring is shown. -// * typeTip: Like completionTip, but for the tooltips shown for type -// queries. -// * responseFilter: A function(doc, query, request, error, data) that -// will be applied to the Tern responses before treating them -// -// -// It is possible to run the Tern server in a web worker by specifying -// these additional options: -// * useWorker: Set to true to enable web worker mode. You'll probably -// want to feature detect the actual value you use here, for example -// !!window.Worker. -// * workerScript: The main script of the worker. Point this to -// wherever you are hosting worker.js from this directory. -// * workerDeps: An array of paths pointing (relative to workerScript) -// to the Acorn and Tern libraries and any Tern plugins you want to -// load. Or, if you minified those into a single script and included -// them in the workerScript, simply leave this undefined. - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - // declare global: tern - - CodeMirror.TernServer = function(options) { - var self = this; - this.options = options || {}; - var plugins = this.options.plugins || (this.options.plugins = {}); - if (!plugins.doc_comment) plugins.doc_comment = true; - if (this.options.useWorker) { - this.server = new WorkerServer(this); - } else { - this.server = new tern.Server({ - getFile: function(name, c) { return getFile(self, name, c); }, - async: true, - defs: this.options.defs || [], - plugins: plugins - }); - } - this.docs = Object.create(null); - this.trackChange = function(doc, change) { trackChange(self, doc, change); }; - - this.cachedArgHints = null; - this.activeArgHints = null; - this.jumpStack = []; - - this.getHint = function(cm, c) { return hint(self, cm, c); }; - this.getHint.async = true; - }; - - CodeMirror.TernServer.prototype = { - addDoc: function(name, doc) { - var data = {doc: doc, name: name, changed: null}; - this.server.addFile(name, docValue(this, data)); - CodeMirror.on(doc, "change", this.trackChange); - return this.docs[name] = data; - }, - - delDoc: function(id) { - var found = resolveDoc(this, id); - if (!found) return; - CodeMirror.off(found.doc, "change", this.trackChange); - delete this.docs[found.name]; - this.server.delFile(found.name); - }, - - hideDoc: function(id) { - closeArgHints(this); - var found = resolveDoc(this, id); - if (found && found.changed) sendDoc(this, found); - }, - - complete: function(cm) { - cm.showHint({hint: this.getHint}); - }, - - showType: function(cm, pos, c) { showContextInfo(this, cm, pos, "type", c); }, - - showDocs: function(cm, pos, c) { showContextInfo(this, cm, pos, "documentation", c); }, - - updateArgHints: function(cm) { updateArgHints(this, cm); }, - - jumpToDef: function(cm) { jumpToDef(this, cm); }, - - jumpBack: function(cm) { jumpBack(this, cm); }, - - rename: function(cm) { rename(this, cm); }, - - selectName: function(cm) { selectName(this, cm); }, - - request: function (cm, query, c, pos) { - var self = this; - var doc = findDoc(this, cm.getDoc()); - var request = buildRequest(this, doc, query, pos); - - this.server.request(request, function (error, data) { - if (!error && self.options.responseFilter) - data = self.options.responseFilter(doc, query, request, error, data); - c(error, data); - }); - }, - - destroy: function () { - if (this.worker) { - this.worker.terminate(); - this.worker = null; - } - } - }; - - var Pos = CodeMirror.Pos; - var cls = "CodeMirror-Tern-"; - var bigDoc = 250; - - function getFile(ts, name, c) { - var buf = ts.docs[name]; - if (buf) - c(docValue(ts, buf)); - else if (ts.options.getFile) - ts.options.getFile(name, c); - else - c(null); - } - - function findDoc(ts, doc, name) { - for (var n in ts.docs) { - var cur = ts.docs[n]; - if (cur.doc == doc) return cur; - } - if (!name) for (var i = 0;; ++i) { - n = "[doc" + (i || "") + "]"; - if (!ts.docs[n]) { name = n; break; } - } - return ts.addDoc(name, doc); - } - - function resolveDoc(ts, id) { - if (typeof id == "string") return ts.docs[id]; - if (id instanceof CodeMirror) id = id.getDoc(); - if (id instanceof CodeMirror.Doc) return findDoc(ts, id); - } - - function trackChange(ts, doc, change) { - var data = findDoc(ts, doc); - - var argHints = ts.cachedArgHints; - if (argHints && argHints.doc == doc && cmpPos(argHints.start, change.to) <= 0) - ts.cachedArgHints = null; - - var changed = data.changed; - if (changed == null) - data.changed = changed = {from: change.from.line, to: change.from.line}; - var end = change.from.line + (change.text.length - 1); - if (change.from.line < changed.to) changed.to = changed.to - (change.to.line - end); - if (end >= changed.to) changed.to = end + 1; - if (changed.from > change.from.line) changed.from = change.from.line; - - if (doc.lineCount() > bigDoc && change.to - changed.from > 100) setTimeout(function() { - if (data.changed && data.changed.to - data.changed.from > 100) sendDoc(ts, data); - }, 200); - } - - function sendDoc(ts, doc) { - ts.server.request({files: [{type: "full", name: doc.name, text: docValue(ts, doc)}]}, function(error) { - if (error) window.console.error(error); - else doc.changed = null; - }); - } - - // Completion - - function hint(ts, cm, c) { - ts.request(cm, {type: "completions", types: true, docs: true, urls: true}, function(error, data) { - if (error) return showError(ts, cm, error); - var completions = [], after = ""; - var from = data.start, to = data.end; - if (cm.getRange(Pos(from.line, from.ch - 2), from) == "[\"" && - cm.getRange(to, Pos(to.line, to.ch + 2)) != "\"]") - after = "\"]"; - - for (var i = 0; i < data.completions.length; ++i) { - var completion = data.completions[i], className = typeToIcon(completion.type); - if (data.guess) className += " " + cls + "guess"; - completions.push({text: completion.name + after, - displayText: completion.name, - className: className, - data: completion}); - } - - var obj = {from: from, to: to, list: completions}; - var tooltip = null; - CodeMirror.on(obj, "close", function() { remove(tooltip); }); - CodeMirror.on(obj, "update", function() { remove(tooltip); }); - CodeMirror.on(obj, "select", function(cur, node) { - remove(tooltip); - var content = ts.options.completionTip ? ts.options.completionTip(cur.data) : cur.data.doc; - if (content) { - tooltip = makeTooltip(node.parentNode.getBoundingClientRect().right + window.pageXOffset, - node.getBoundingClientRect().top + window.pageYOffset, content); - tooltip.className += " " + cls + "hint-doc"; - } - }); - c(obj); - }); - } - - function typeToIcon(type) { - var suffix; - if (type == "?") suffix = "unknown"; - else if (type == "number" || type == "string" || type == "bool") suffix = type; - else if (/^fn\(/.test(type)) suffix = "fn"; - else if (/^\[/.test(type)) suffix = "array"; - else suffix = "object"; - return cls + "completion " + cls + "completion-" + suffix; - } - - // Type queries - - function showContextInfo(ts, cm, pos, queryName, c) { - ts.request(cm, queryName, function(error, data) { - if (error) return showError(ts, cm, error); - if (ts.options.typeTip) { - var tip = ts.options.typeTip(data); - } else { - var tip = elt("span", null, elt("strong", null, data.type || "not found")); - if (data.doc) - tip.appendChild(document.createTextNode(" — " + data.doc)); - if (data.url) { - tip.appendChild(document.createTextNode(" ")); - var child = tip.appendChild(elt("a", null, "[docs]")); - child.href = data.url; - child.target = "_blank"; - } - } - tempTooltip(cm, tip); - if (c) c(); - }, pos); - } - - // Maintaining argument hints - - function updateArgHints(ts, cm) { - closeArgHints(ts); - - if (cm.somethingSelected()) return; - var state = cm.getTokenAt(cm.getCursor()).state; - var inner = CodeMirror.innerMode(cm.getMode(), state); - if (inner.mode.name != "javascript") return; - var lex = inner.state.lexical; - if (lex.info != "call") return; - - var ch, argPos = lex.pos || 0, tabSize = cm.getOption("tabSize"); - for (var line = cm.getCursor().line, e = Math.max(0, line - 9), found = false; line >= e; --line) { - var str = cm.getLine(line), extra = 0; - for (var pos = 0;;) { - var tab = str.indexOf("\t", pos); - if (tab == -1) break; - extra += tabSize - (tab + extra) % tabSize - 1; - pos = tab + 1; - } - ch = lex.column - extra; - if (str.charAt(ch) == "(") {found = true; break;} - } - if (!found) return; - - var start = Pos(line, ch); - var cache = ts.cachedArgHints; - if (cache && cache.doc == cm.getDoc() && cmpPos(start, cache.start) == 0) - return showArgHints(ts, cm, argPos); - - ts.request(cm, {type: "type", preferFunction: true, end: start}, function(error, data) { - if (error || !data.type || !(/^fn\(/).test(data.type)) return; - ts.cachedArgHints = { - start: pos, - type: parseFnType(data.type), - name: data.exprName || data.name || "fn", - guess: data.guess, - doc: cm.getDoc() - }; - showArgHints(ts, cm, argPos); - }); - } - - function showArgHints(ts, cm, pos) { - closeArgHints(ts); - - var cache = ts.cachedArgHints, tp = cache.type; - var tip = elt("span", cache.guess ? cls + "fhint-guess" : null, - elt("span", cls + "fname", cache.name), "("); - for (var i = 0; i < tp.args.length; ++i) { - if (i) tip.appendChild(document.createTextNode(", ")); - var arg = tp.args[i]; - tip.appendChild(elt("span", cls + "farg" + (i == pos ? " " + cls + "farg-current" : ""), arg.name || "?")); - if (arg.type != "?") { - tip.appendChild(document.createTextNode(":\u00a0")); - tip.appendChild(elt("span", cls + "type", arg.type)); - } - } - tip.appendChild(document.createTextNode(tp.rettype ? ") ->\u00a0" : ")")); - if (tp.rettype) tip.appendChild(elt("span", cls + "type", tp.rettype)); - var place = cm.cursorCoords(null, "page"); - ts.activeArgHints = makeTooltip(place.right + 1, place.bottom, tip); - } - - function parseFnType(text) { - var args = [], pos = 3; - - function skipMatching(upto) { - var depth = 0, start = pos; - for (;;) { - var next = text.charAt(pos); - if (upto.test(next) && !depth) return text.slice(start, pos); - if (/[{\[\(]/.test(next)) ++depth; - else if (/[}\]\)]/.test(next)) --depth; - ++pos; - } - } - - // Parse arguments - if (text.charAt(pos) != ")") for (;;) { - var name = text.slice(pos).match(/^([^, \(\[\{]+): /); - if (name) { - pos += name[0].length; - name = name[1]; - } - args.push({name: name, type: skipMatching(/[\),]/)}); - if (text.charAt(pos) == ")") break; - pos += 2; - } - - var rettype = text.slice(pos).match(/^\) -> (.*)$/); - - return {args: args, rettype: rettype && rettype[1]}; - } - - // Moving to the definition of something - - function jumpToDef(ts, cm) { - function inner(varName) { - var req = {type: "definition", variable: varName || null}; - var doc = findDoc(ts, cm.getDoc()); - ts.server.request(buildRequest(ts, doc, req), function(error, data) { - if (error) return showError(ts, cm, error); - if (!data.file && data.url) { window.open(data.url); return; } - - if (data.file) { - var localDoc = ts.docs[data.file], found; - if (localDoc && (found = findContext(localDoc.doc, data))) { - ts.jumpStack.push({file: doc.name, - start: cm.getCursor("from"), - end: cm.getCursor("to")}); - moveTo(ts, doc, localDoc, found.start, found.end); - return; - } - } - showError(ts, cm, "Could not find a definition."); - }); - } - - if (!atInterestingExpression(cm)) - dialog(cm, "Jump to variable", function(name) { if (name) inner(name); }); - else - inner(); - } - - function jumpBack(ts, cm) { - var pos = ts.jumpStack.pop(), doc = pos && ts.docs[pos.file]; - if (!doc) return; - moveTo(ts, findDoc(ts, cm.getDoc()), doc, pos.start, pos.end); - } - - function moveTo(ts, curDoc, doc, start, end) { - doc.doc.setSelection(start, end); - if (curDoc != doc && ts.options.switchToDoc) { - closeArgHints(ts); - ts.options.switchToDoc(doc.name, doc.doc); - } - } - - // The {line,ch} representation of positions makes this rather awkward. - function findContext(doc, data) { - var before = data.context.slice(0, data.contextOffset).split("\n"); - var startLine = data.start.line - (before.length - 1); - var start = Pos(startLine, (before.length == 1 ? data.start.ch : doc.getLine(startLine).length) - before[0].length); - - var text = doc.getLine(startLine).slice(start.ch); - for (var cur = startLine + 1; cur < doc.lineCount() && text.length < data.context.length; ++cur) - text += "\n" + doc.getLine(cur); - if (text.slice(0, data.context.length) == data.context) return data; - - var cursor = doc.getSearchCursor(data.context, 0, false); - var nearest, nearestDist = Infinity; - while (cursor.findNext()) { - var from = cursor.from(), dist = Math.abs(from.line - start.line) * 10000; - if (!dist) dist = Math.abs(from.ch - start.ch); - if (dist < nearestDist) { nearest = from; nearestDist = dist; } - } - if (!nearest) return null; - - if (before.length == 1) - nearest.ch += before[0].length; - else - nearest = Pos(nearest.line + (before.length - 1), before[before.length - 1].length); - if (data.start.line == data.end.line) - var end = Pos(nearest.line, nearest.ch + (data.end.ch - data.start.ch)); - else - var end = Pos(nearest.line + (data.end.line - data.start.line), data.end.ch); - return {start: nearest, end: end}; - } - - function atInterestingExpression(cm) { - var pos = cm.getCursor("end"), tok = cm.getTokenAt(pos); - if (tok.start < pos.ch && (tok.type == "comment" || tok.type == "string")) return false; - return /\w/.test(cm.getLine(pos.line).slice(Math.max(pos.ch - 1, 0), pos.ch + 1)); - } - - // Variable renaming - - function rename(ts, cm) { - var token = cm.getTokenAt(cm.getCursor()); - if (!/\w/.test(token.string)) return showError(ts, cm, "Not at a variable"); - dialog(cm, "New name for " + token.string, function(newName) { - ts.request(cm, {type: "rename", newName: newName, fullDocs: true}, function(error, data) { - if (error) return showError(ts, cm, error); - applyChanges(ts, data.changes); - }); - }); - } - - function selectName(ts, cm) { - var name = findDoc(ts, cm.doc).name; - ts.request(cm, {type: "refs"}, function(error, data) { - if (error) return showError(ts, cm, error); - var ranges = [], cur = 0; - for (var i = 0; i < data.refs.length; i++) { - var ref = data.refs[i]; - if (ref.file == name) { - ranges.push({anchor: ref.start, head: ref.end}); - if (cmpPos(cur, ref.start) >= 0 && cmpPos(cur, ref.end) <= 0) - cur = ranges.length - 1; - } - } - cm.setSelections(ranges, cur); - }); - } - - var nextChangeOrig = 0; - function applyChanges(ts, changes) { - var perFile = Object.create(null); - for (var i = 0; i < changes.length; ++i) { - var ch = changes[i]; - (perFile[ch.file] || (perFile[ch.file] = [])).push(ch); - } - for (var file in perFile) { - var known = ts.docs[file], chs = perFile[file];; - if (!known) continue; - chs.sort(function(a, b) { return cmpPos(b.start, a.start); }); - var origin = "*rename" + (++nextChangeOrig); - for (var i = 0; i < chs.length; ++i) { - var ch = chs[i]; - known.doc.replaceRange(ch.text, ch.start, ch.end, origin); - } - } - } - - // Generic request-building helper - - function buildRequest(ts, doc, query, pos) { - var files = [], offsetLines = 0, allowFragments = !query.fullDocs; - if (!allowFragments) delete query.fullDocs; - if (typeof query == "string") query = {type: query}; - query.lineCharPositions = true; - if (query.end == null) { - query.end = pos || doc.doc.getCursor("end"); - if (doc.doc.somethingSelected()) - query.start = doc.doc.getCursor("start"); - } - var startPos = query.start || query.end; - - if (doc.changed) { - if (doc.doc.lineCount() > bigDoc && allowFragments !== false && - doc.changed.to - doc.changed.from < 100 && - doc.changed.from <= startPos.line && doc.changed.to > query.end.line) { - files.push(getFragmentAround(doc, startPos, query.end)); - query.file = "#0"; - var offsetLines = files[0].offsetLines; - if (query.start != null) query.start = Pos(query.start.line - -offsetLines, query.start.ch); - query.end = Pos(query.end.line - offsetLines, query.end.ch); - } else { - files.push({type: "full", - name: doc.name, - text: docValue(ts, doc)}); - query.file = doc.name; - doc.changed = null; - } - } else { - query.file = doc.name; - } - for (var name in ts.docs) { - var cur = ts.docs[name]; - if (cur.changed && cur != doc) { - files.push({type: "full", name: cur.name, text: docValue(ts, cur)}); - cur.changed = null; - } - } - - return {query: query, files: files}; - } - - function getFragmentAround(data, start, end) { - var doc = data.doc; - var minIndent = null, minLine = null, endLine, tabSize = 4; - for (var p = start.line - 1, min = Math.max(0, p - 50); p >= min; --p) { - var line = doc.getLine(p), fn = line.search(/\bfunction\b/); - if (fn < 0) continue; - var indent = CodeMirror.countColumn(line, null, tabSize); - if (minIndent != null && minIndent <= indent) continue; - minIndent = indent; - minLine = p; - } - if (minLine == null) minLine = min; - var max = Math.min(doc.lastLine(), end.line + 20); - if (minIndent == null || minIndent == CodeMirror.countColumn(doc.getLine(start.line), null, tabSize)) - endLine = max; - else for (endLine = end.line + 1; endLine < max; ++endLine) { - var indent = CodeMirror.countColumn(doc.getLine(endLine), null, tabSize); - if (indent <= minIndent) break; - } - var from = Pos(minLine, 0); - - return {type: "part", - name: data.name, - offsetLines: from.line, - text: doc.getRange(from, Pos(endLine, 0))}; - } - - // Generic utilities - - var cmpPos = CodeMirror.cmpPos; - - function elt(tagname, cls /*, ... elts*/) { - var e = document.createElement(tagname); - if (cls) e.className = cls; - for (var i = 2; i < arguments.length; ++i) { - var elt = arguments[i]; - if (typeof elt == "string") elt = document.createTextNode(elt); - e.appendChild(elt); - } - return e; - } - - function dialog(cm, text, f) { - if (cm.openDialog) - cm.openDialog(text + ": ", f); - else - f(prompt(text, "")); - } - - // Tooltips - - function tempTooltip(cm, content) { - if (cm.state.ternTooltip) remove(cm.state.ternTooltip); - var where = cm.cursorCoords(); - var tip = cm.state.ternTooltip = makeTooltip(where.right + 1, where.bottom, content); - function maybeClear() { - old = true; - if (!mouseOnTip) clear(); - } - function clear() { - cm.state.ternTooltip = null; - if (!tip.parentNode) return; - cm.off("cursorActivity", clear); - cm.off('blur', clear); - cm.off('scroll', clear); - fadeOut(tip); - } - var mouseOnTip = false, old = false; - CodeMirror.on(tip, "mousemove", function() { mouseOnTip = true; }); - CodeMirror.on(tip, "mouseout", function(e) { - if (!CodeMirror.contains(tip, e.relatedTarget || e.toElement)) { - if (old) clear(); - else mouseOnTip = false; - } - }); - setTimeout(maybeClear, 1700); - cm.on("cursorActivity", clear); - cm.on('blur', clear); - cm.on('scroll', clear); - } - - function makeTooltip(x, y, content) { - var node = elt("div", cls + "tooltip", content); - node.style.left = x + "px"; - node.style.top = y + "px"; - document.body.appendChild(node); - return node; - } - - function remove(node) { - var p = node && node.parentNode; - if (p) p.removeChild(node); - } - - function fadeOut(tooltip) { - tooltip.style.opacity = "0"; - setTimeout(function() { remove(tooltip); }, 1100); - } - - function showError(ts, cm, msg) { - if (ts.options.showError) - ts.options.showError(cm, msg); - else - tempTooltip(cm, String(msg)); - } - - function closeArgHints(ts) { - if (ts.activeArgHints) { remove(ts.activeArgHints); ts.activeArgHints = null; } - } - - function docValue(ts, doc) { - var val = doc.doc.getValue(); - if (ts.options.fileFilter) val = ts.options.fileFilter(val, doc.name, doc.doc); - return val; - } - - // Worker wrapper - - function WorkerServer(ts) { - var worker = ts.worker = new Worker(ts.options.workerScript); - worker.postMessage({type: "init", - defs: ts.options.defs, - plugins: ts.options.plugins, - scripts: ts.options.workerDeps}); - var msgId = 0, pending = {}; - - function send(data, c) { - if (c) { - data.id = ++msgId; - pending[msgId] = c; - } - worker.postMessage(data); - } - worker.onmessage = function(e) { - var data = e.data; - if (data.type == "getFile") { - getFile(ts, data.name, function(err, text) { - send({type: "getFile", err: String(err), text: text, id: data.id}); - }); - } else if (data.type == "debug") { - window.console.log(data.message); - } else if (data.id && pending[data.id]) { - pending[data.id](data.err, data.body); - delete pending[data.id]; - } - }; - worker.onerror = function(e) { - for (var id in pending) pending[id](e); - pending = {}; - }; - - this.addFile = function(name, text) { send({type: "add", name: name, text: text}); }; - this.delFile = function(name) { send({type: "del", name: name}); }; - this.request = function(body, c) { send({type: "req", body: body}, c); }; - } -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/tern/worker.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/tern/worker.js deleted file mode 100755 index 48277af8e..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/tern/worker.js +++ /dev/null @@ -1,44 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -// declare global: tern, server - -var server; - -this.onmessage = function(e) { - var data = e.data; - switch (data.type) { - case "init": return startServer(data.defs, data.plugins, data.scripts); - case "add": return server.addFile(data.name, data.text); - case "del": return server.delFile(data.name); - case "req": return server.request(data.body, function(err, reqData) { - postMessage({id: data.id, body: reqData, err: err && String(err)}); - }); - case "getFile": - var c = pending[data.id]; - delete pending[data.id]; - return c(data.err, data.text); - default: throw new Error("Unknown message type: " + data.type); - } -}; - -var nextId = 0, pending = {}; -function getFile(file, c) { - postMessage({type: "getFile", name: file, id: ++nextId}); - pending[nextId] = c; -} - -function startServer(defs, plugins, scripts) { - if (scripts) importScripts.apply(null, scripts); - - server = new tern.Server({ - getFile: getFile, - async: true, - defs: defs, - plugins: plugins - }); -} - -var console = { - log: function(v) { postMessage({type: "debug", message: v}); } -}; diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/wrap/hardwrap.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/wrap/hardwrap.js deleted file mode 100755 index fe9b4dd66..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addon/wrap/hardwrap.js +++ /dev/null @@ -1,139 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: http://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { - "use strict"; - - var Pos = CodeMirror.Pos; - - function findParagraph(cm, pos, options) { - var startRE = options.paragraphStart || cm.getHelper(pos, "paragraphStart"); - for (var start = pos.line, first = cm.firstLine(); start > first; --start) { - var line = cm.getLine(start); - if (startRE && startRE.test(line)) break; - if (!/\S/.test(line)) { ++start; break; } - } - var endRE = options.paragraphEnd || cm.getHelper(pos, "paragraphEnd"); - for (var end = pos.line + 1, last = cm.lastLine(); end <= last; ++end) { - var line = cm.getLine(end); - if (endRE && endRE.test(line)) { ++end; break; } - if (!/\S/.test(line)) break; - } - return {from: start, to: end}; - } - - function findBreakPoint(text, column, wrapOn, killTrailingSpace) { - for (var at = column; at > 0; --at) - if (wrapOn.test(text.slice(at - 1, at + 1))) break; - if (at == 0) at = column; - var endOfText = at; - if (killTrailingSpace) - while (text.charAt(endOfText - 1) == " ") --endOfText; - return {from: endOfText, to: at}; - } - - function wrapRange(cm, from, to, options) { - from = cm.clipPos(from); to = cm.clipPos(to); - var column = options.column || 80; - var wrapOn = options.wrapOn || /\s\S|-[^\.\d]/; - var killTrailing = options.killTrailingSpace !== false; - var changes = [], curLine = "", curNo = from.line; - var lines = cm.getRange(from, to, false); - if (!lines.length) return null; - var leadingSpace = lines[0].match(/^[ \t]*/)[0]; - - for (var i = 0; i < lines.length; ++i) { - var text = lines[i], oldLen = curLine.length, spaceInserted = 0; - if (curLine && text && !wrapOn.test(curLine.charAt(curLine.length - 1) + text.charAt(0))) { - curLine += " "; - spaceInserted = 1; - } - var spaceTrimmed = ""; - if (i) { - spaceTrimmed = text.match(/^\s*/)[0]; - text = text.slice(spaceTrimmed.length); - } - curLine += text; - if (i) { - var firstBreak = curLine.length > column && leadingSpace == spaceTrimmed && - findBreakPoint(curLine, column, wrapOn, killTrailing); - // If this isn't broken, or is broken at a different point, remove old break - if (!firstBreak || firstBreak.from != oldLen || firstBreak.to != oldLen + spaceInserted) { - changes.push({text: [spaceInserted ? " " : ""], - from: Pos(curNo, oldLen), - to: Pos(curNo + 1, spaceTrimmed.length)}); - } else { - curLine = leadingSpace + text; - ++curNo; - } - } - while (curLine.length > column) { - var bp = findBreakPoint(curLine, column, wrapOn, killTrailing); - changes.push({text: ["", leadingSpace], - from: Pos(curNo, bp.from), - to: Pos(curNo, bp.to)}); - curLine = leadingSpace + curLine.slice(bp.to); - ++curNo; - } - } - if (changes.length) cm.operation(function() { - for (var i = 0; i < changes.length; ++i) { - var change = changes[i]; - cm.replaceRange(change.text, change.from, change.to); - } - }); - return changes.length ? {from: changes[0].from, to: CodeMirror.changeEnd(changes[changes.length - 1])} : null; - } - - CodeMirror.defineExtension("wrapParagraph", function(pos, options) { - options = options || {}; - if (!pos) pos = this.getCursor(); - var para = findParagraph(this, pos, options); - return wrapRange(this, Pos(para.from, 0), Pos(para.to - 1), options); - }); - - CodeMirror.commands.wrapLines = function(cm) { - cm.operation(function() { - var ranges = cm.listSelections(), at = cm.lastLine() + 1; - for (var i = ranges.length - 1; i >= 0; i--) { - var range = ranges[i], span; - if (range.empty()) { - var para = findParagraph(cm, range.head, {}); - span = {from: Pos(para.from, 0), to: Pos(para.to - 1)}; - } else { - span = {from: range.from(), to: range.to()}; - } - if (span.to.line >= at) continue; - at = span.from.line; - wrapRange(cm, span.from, span.to, {}); - } - }); - }; - - CodeMirror.defineExtension("wrapRange", function(from, to, options) { - return wrapRange(this, from, to, options || {}); - }); - - CodeMirror.defineExtension("wrapParagraphsInRange", function(from, to, options) { - options = options || {}; - var cm = this, paras = []; - for (var line = from.line; line <= to.line;) { - var para = findParagraph(cm, Pos(line, 0), options); - paras.push(para); - line = para.to; - } - var madeChange = false; - if (paras.length) cm.operation(function() { - for (var i = paras.length - 1; i >= 0; --i) - madeChange = madeChange || wrapRange(cm, Pos(paras[i].from, 0), Pos(paras[i].to - 1), options); - }); - return madeChange; - }); -}); diff --git a/src/main/resources/static/plugins/editor.md/lib/codemirror/addons.min.js b/src/main/resources/static/plugins/editor.md/lib/codemirror/addons.min.js deleted file mode 100755 index 046258539..000000000 --- a/src/main/resources/static/plugins/editor.md/lib/codemirror/addons.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! Editor.md v2.0.1 | addons.min.js | Open source online markdown editor. | MIT License | By: Pandao | https://github.com/pandao/editor.md | 2018-03-29 */ -!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){e.defineOption("showTrailingSpace",!1,function(t,i,o){o==e.Init&&(o=!1),o&&!i?t.removeOverlay("trailingspace"):!o&&i&&t.addOverlay({token:function(e){for(var t=e.string.length,i=t;i&&/\s/.test(e.string.charAt(i-1));--i);return i>e.pos?(e.pos=i,null):(e.pos=t,"trailingspace")},name:"trailingspace"})})}),function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){function t(e,t,i){var o,r=e.getWrapperElement();return o=r.appendChild(document.createElement("div")),o.className=i?"CodeMirror-dialog CodeMirror-dialog-bottom":"CodeMirror-dialog CodeMirror-dialog-top","string"==typeof t?o.innerHTML=t:o.appendChild(t),o}function i(e,t){e.state.currentNotificationClose&&e.state.currentNotificationClose(),e.state.currentNotificationClose=t}e.defineExtension("openDialog",function(o,r,n){function a(e){if("string"==typeof e)h.value=e;else{if(c)return;c=!0,l.parentNode.removeChild(l),d.focus(),n.onClose&&n.onClose(l)}}n||(n={}),i(this,null);var s,l=t(this,o,n.bottom),c=!1,d=this,h=l.getElementsByTagName("input")[0];return h?(n.value&&(h.value=n.value,h.select()),n.onInput&&e.on(h,"input",function(e){n.onInput(e,h.value,a)}),n.onKeyUp&&e.on(h,"keyup",function(e){n.onKeyUp(e,h.value,a)}),e.on(h,"keydown",function(t){n&&n.onKeyDown&&n.onKeyDown(t,h.value,a)||((27==t.keyCode||!1!==n.closeOnEnter&&13==t.keyCode)&&(h.blur(),e.e_stop(t),a()),13==t.keyCode&&r(h.value,t))}),!1!==n.closeOnBlur&&e.on(h,"blur",a),h.focus()):(s=l.getElementsByTagName("button")[0])&&(e.on(s,"click",function(){a(),d.focus()}),!1!==n.closeOnBlur&&e.on(s,"blur",a),s.focus()),a}),e.defineExtension("openConfirm",function(o,r,n){function a(){c||(c=!0,s.parentNode.removeChild(s),d.focus())}i(this,null);var s=t(this,o,n&&n.bottom),l=s.getElementsByTagName("button"),c=!1,d=this,h=1;l[0].focus();for(var u=0;u-1)return d=i(l,c,d),{from:o(n.line,d),to:o(n.line,d+a.length)}}else{var l=e.getLine(n.line).slice(n.ch),c=s(l),d=c.indexOf(t);if(d>-1)return d=i(l,c,d)+n.ch,{from:o(n.line,d),to:o(n.line,d+a.length)}}}:this.matches=function(){};else{var c=a.split("\n");this.matches=function(t,i){var r=l.length-1;if(t){if(i.line-(l.length-1)=1;--d,--a)if(l[d]!=s(e.getLine(a)))return;var h=e.getLine(a),u=h.length-c[0].length;if(s(h.slice(u))!=l[0])return;return{from:o(a,u),to:n}}if(!(i.line+(l.length-1)>e.lastLine())){var h=e.getLine(i.line),u=h.length-c[0].length;if(s(h.slice(u))==l[0]){for(var f=o(i.line,u),a=i.line+1,d=1;di))return o;--o}}}var o=e.Pos;t.prototype={findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(e){function t(e){var t=o(e,0);return i.pos={from:t,to:t},i.atOccurrence=!1,!1}for(var i=this,r=this.doc.clipPos(e?this.pos.from:this.pos.to);;){if(this.pos=this.matches(e,r))return this.atOccurrence=!0,this.pos.match||!0;if(e){if(!r.line)return t(0);r=o(r.line-1,this.doc.getLine(r.line-1).length)}else{var n=this.doc.lineCount();if(r.line==n-1)return t(n);r=o(r.line+1,0)}}},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(t){if(this.atOccurrence){var i=e.splitLines(t);this.doc.replaceRange(i,this.pos.from,this.pos.to),this.pos.to=o(this.pos.from.line+i.length-1,i[i.length-1].length+(1==i.length?this.pos.from.ch:0))}}},e.defineExtension("getSearchCursor",function(e,i,o){return new t(this.doc,e,i,o)}),e.defineDocExtension("getSearchCursor",function(e,i,o){return new t(this,e,i,o)}),e.defineExtension("selectMatches",function(t,i){for(var o=[],r=this.getSearchCursor(t,this.getCursor("from"),i);r.findNext()&&!(e.cmpPos(r.to(),this.getCursor("to"))>0);)o.push({anchor:r.from(),head:r.to()});o.length&&this.setSelections(o,0)})}),function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror"),require("./searchcursor"),require("../dialog/dialog")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","./searchcursor","../dialog/dialog"],e):e(CodeMirror)}(function(e){"use strict";function t(e,t){return"string"==typeof e?e=new RegExp(e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),t?"gi":"g"):e.global||(e=new RegExp(e.source,e.ignoreCase?"gi":"g")),{token:function(t){e.lastIndex=t.pos;var i=e.exec(t.string);if(i&&i.index==t.pos)return t.pos+=i[0].length,"searching";i?t.pos=i.index:t.skipToEnd()}}}function i(){this.posFrom=this.posTo=this.query=null,this.overlay=null}function o(e){return e.state.search||(e.state.search=new i)}function r(e){return"string"==typeof e&&e==e.toLowerCase()}function n(e,t,i){return e.getSearchCursor(t,i,r(t))}function a(e,t,i,o,r){e.openDialog?e.openDialog(t,r,{value:o}):r(prompt(i,o))}function s(e,t,i,o){e.openConfirm?e.openConfirm(t,o):confirm(i)&&o[0]()}function l(e){var t=e.match(/^\/(.*)\/([a-z]*)$/);if(t)try{e=new RegExp(t[1],-1==t[2].indexOf("i")?"":"i")}catch(e){}return("string"==typeof e?""==e:e.test(""))&&(e=/x^/),e}function c(e,i){var n=o(e);if(n.query)return d(e,i);a(e,f,"Search for:",e.getSelection(),function(o){e.operation(function(){o&&!n.query&&(n.query=l(o),e.removeOverlay(n.overlay,r(n.query)),n.overlay=t(n.query,r(n.query)),e.addOverlay(n.overlay),e.showMatchesOnScrollbar&&(n.annotate&&(n.annotate.clear(),n.annotate=null),n.annotate=e.showMatchesOnScrollbar(n.query,r(n.query))),n.posFrom=n.posTo=e.getCursor(),d(e,i))})})}function d(t,i){t.operation(function(){var r=o(t),a=n(t,r.query,i?r.posFrom:r.posTo);(a.find(i)||(a=n(t,r.query,i?e.Pos(t.lastLine()):e.Pos(t.firstLine(),0)),a.find(i)))&&(t.setSelection(a.from(),a.to()),t.scrollIntoView({from:a.from(),to:a.to()}),r.posFrom=a.from(),r.posTo=a.to())})}function h(e){e.operation(function(){var t=o(e);t.query&&(t.query=null,e.removeOverlay(t.overlay),t.annotate&&(t.annotate.clear(),t.annotate=null))})}function u(e,t){e.getOption("readOnly")||a(e,p,"Replace:",e.getSelection(),function(i){i&&(i=l(i),a(e,g,"Replace with:","",function(o){if(t)e.operation(function(){for(var t=n(e,i);t.findNext();)if("string"!=typeof i){var r=e.getRange(t.from(),t.to()).match(i);t.replace(o.replace(/\$(\d)/g,function(e,t){return r[t]}))}else t.replace(o)});else{h(e);var r=n(e,i,e.getCursor()),a=function(){var t,o=r.from();!(t=r.findNext())&&(r=n(e,i),!(t=r.findNext())||o&&r.from().line==o.line&&r.from().ch==o.ch)||(e.setSelection(r.from(),r.to()),e.scrollIntoView({from:r.from(),to:r.to()}),s(e,m,"Replace?",[function(){l(t)},a]))},l=function(e){r.replace("string"==typeof i?o:o.replace(/\$(\d)/g,function(t,i){return e[i]})),a()};a()}}))})}var f='Search: (Use /re/ syntax for regexp search)',p='Replace: (Use /re/ syntax for regexp search)',g='With: ',m="Replace? ";e.commands.find=function(e){h(e),c(e)},e.commands.findNext=c,e.commands.findPrev=function(e){c(e,!0)},e.commands.clearSearch=h,e.commands.replace=u,e.commands.replaceAll=function(e){u(e,!0)}}),function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";function t(e,t){function i(e){clearTimeout(o.doRedraw),o.doRedraw=setTimeout(function(){o.redraw()},e)}this.cm=e,this.options=t,this.buttonHeight=t.scrollButtonHeight||e.getOption("scrollButtonHeight"),this.annotations=[],this.doRedraw=this.doUpdate=null,this.div=e.getWrapperElement().appendChild(document.createElement("div")),this.div.style.cssText="position: absolute; right: 0; top: 0; z-index: 7; pointer-events: none",this.computeScale();var o=this;e.on("refresh",this.resizeHandler=function(){clearTimeout(o.doUpdate),o.doUpdate=setTimeout(function(){o.computeScale()&&i(20)},100)}),e.on("markerAdded",this.resizeHandler),e.on("markerCleared",this.resizeHandler),!1!==t.listenForChanges&&e.on("change",this.changeHandler=function(){i(250)})}e.defineExtension("annotateScrollbar",function(e){return"string"==typeof e&&(e={className:e}),new t(this,e)}),e.defineOption("scrollButtonHeight",0),t.prototype.computeScale=function(){var e=this.cm,t=(e.getWrapperElement().clientHeight-e.display.barHeight-2*this.buttonHeight)/e.heightAtLine(e.lastLine()+1,"local");if(t!=this.hScale)return this.hScale=t,!0},t.prototype.update=function(e){this.annotations=e,this.redraw()},t.prototype.redraw=function(e){!1!==e&&this.computeScale();var t=this.cm,i=this.hScale,o=document.createDocumentFragment(),r=this.annotations;if(t.display.barWidth)for(var n,a=0;ac+.9);)s=r[++a],c=t.charCoords(s.to,"local").bottom*i;if(c!=l){var d=Math.max(c-l,3),h=o.appendChild(document.createElement("div"));h.style.cssText="position: absolute; right: 0px; width: "+Math.max(t.display.barWidth-1,2)+"px; top: "+(l+this.buttonHeight)+"px; height: "+d+"px",h.className=this.options.className}}this.div.textContent="",this.div.appendChild(o)},t.prototype.clear=function(){this.cm.off("refresh",this.resizeHandler),this.cm.off("markerAdded",this.resizeHandler),this.cm.off("markerCleared",this.resizeHandler),this.changeHandler&&this.cm.off("change",this.changeHandler),this.div.parentNode.removeChild(this.div)}}),function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror"),require("./searchcursor"),require("../scroll/annotatescrollbar")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","./searchcursor","../scroll/annotatescrollbar"],e):e(CodeMirror)}(function(e){"use strict";function t(e,t,i,o){this.cm=e;var r={listenForChanges:!1};for(var n in o)r[n]=o[n];r.className||(r.className="CodeMirror-search-match"),this.annotation=e.annotateScrollbar(r),this.query=t,this.caseFold=i,this.gap={from:e.firstLine(),to:e.lastLine()+1},this.matches=[],this.update=null,this.findMatches(),this.annotation.update(this.matches);var a=this;e.on("change",this.changeHandler=function(e,t){a.onChange(t)})}function i(e,t,i){return e<=t?e:Math.max(t,e+i)}e.defineExtension("showMatchesOnScrollbar",function(e,i,o){return"string"==typeof o&&(o={className:o}),o||(o={}),new t(this,e,i,o)}),t.prototype.findMatches=function(){if(this.gap){for(var t=0;t=this.gap.to)break;i.to.line>=this.gap.from&&this.matches.splice(t--,1)}for(var o=this.cm.getSearchCursor(this.query,e.Pos(this.gap.from,0),this.caseFold);o.findNext();){var i={from:o.from(),to:o.to()};if(i.from.line>=this.gap.to)break;if(this.matches.splice(t++,0,i),this.matches.length>1e3)break}this.gap=null}},t.prototype.onChange=function(t){var o=t.from.line,r=e.changeEnd(t).line,n=r-t.to.line;if(this.gap?(this.gap.from=Math.min(i(this.gap.from,o,n),t.from.line),this.gap.to=Math.max(i(this.gap.to,o,n),t.from.line)):this.gap={from:t.from.line,to:r+1},n)for(var a=0;ac.ch&&(v=v.slice(0,v.length-d.end+c.ch));var w=v.toLowerCase();if(!v||"string"==d.type&&(d.end!=c.ch||!/[\"\']/.test(d.string.charAt(d.string.length-1))||1==d.string.length)||"tag"==d.type&&"closeTag"==u.type||d.string.indexOf("/")==d.string.length-1||g&&r(g,w)>-1||n(t,v,c,u,!0))return e.Pass;var y=m&&r(m,w)>-1;o[l]={indent:y,text:">"+(y?"\n\n":"")+"",newPos:y?e.Pos(c.line+1,0):e.Pos(c.line,c.ch+1)}}for(var l=i.length-1;l>=0;l--){var b=o[l];t.replaceRange(b.text,i[l].head,i[l].anchor,"+insert");var k=t.listSelections().slice(0);k[l]={head:b.newPos,anchor:b.newPos},t.setSelections(k),b.indent&&(t.indentLine(b.newPos.line,null,!0),t.indentLine(b.newPos.line+1,null,!0))}}function i(t,i){for(var o=t.listSelections(),r=[],a=i?"/":"";else{if("htmlmixed"!=t.getMode().name||"css"!=d.mode.name)return e.Pass;r[s]=a+"style>"}else{if(!h.context||!h.context.tagName||n(t,h.context.tagName,l,h))return e.Pass;r[s]=a+h.context.tagName+">"}}t.replaceSelections(r),o=t.listSelections();for(var s=0;s'"]=function(e){return t(e)}),i.addKeyMap(a)}});var a=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],s=["applet","blockquote","body","button","div","dl","fieldset","form","frameset","h1","h2","h3","h4","h5","h6","head","html","iframe","layer","legend","object","ol","p","select","table","ul"];e.commands.closeTag=function(e){return i(e)}}),function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";function t(t,r,n,a){function s(e){var i=l(t,r);if(!i||i.to.line-i.from.linet.firstLine();)r=e.Pos(r.line-1,0),d=s(!1);if(d&&!d.cleared&&"unfold"!==a){var h=i(t,n);e.on(h,"mousedown",function(t){u.clear(),e.e_preventDefault(t)});var u=t.markText(d.from,d.to,{replacedWith:h,clearOnEnter:!0,__isFold:!0});u.on("clear",function(i,o){e.signal(t,"unfold",t,i,o)}),e.signal(t,"fold",t,d.from,d.to)}}function i(e,t){var i=o(e,t,"widget");if("string"==typeof i){var r=document.createTextNode(i);i=document.createElement("span"),i.appendChild(r),i.className="CodeMirror-foldmarker"}return i}function o(e,t,i){if(t&&void 0!==t[i])return t[i];var o=e.options.foldOptions;return o&&void 0!==o[i]?o[i]:r[i]}e.newFoldFunction=function(e,i){return function(o,r){t(o,r,{rangeFinder:e,widget:i})}},e.defineExtension("foldCode",function(e,i,o){t(this,e,i,o)}),e.defineExtension("isFolded",function(e){for(var t=this.findMarksAt(e),i=0;i=s&&(i=r(n.indicatorOpen))}e.setGutterMarker(t,n.gutter,i),++a})}function a(e){var t=e.getViewport(),i=e.state.foldGutter;i&&(e.operation(function(){n(e,t.from,t.to)}),i.from=t.from,i.to=t.to)}function s(e,t,i){var o=e.state.foldGutter;if(o){var r=o.options;i==r.gutter&&e.foldCode(h(t,0),r.rangeFinder)}}function l(e){var t=e.state.foldGutter;if(t){var i=t.options;t.from=t.to=0,clearTimeout(t.changeUpdate),t.changeUpdate=setTimeout(function(){a(e)},i.foldOnChangeTimeSpan||600)}}function c(e){var t=e.state.foldGutter;if(t){var i=t.options;clearTimeout(t.changeUpdate),t.changeUpdate=setTimeout(function(){var i=e.getViewport();t.from==t.to||i.from-t.to>20||t.from-i.to>20?a(e):e.operation(function(){i.fromt.to&&(n(e,t.to,i.to),t.to=i.to)})},i.updateViewportTimeSpan||400)}}function d(e,t){var i=e.state.foldGutter;if(i){var o=t.line;o>=i.from&&oa)s=l;else if(/\S/.test(d))break}return s?{from:e.Pos(i.line,r.length),to:e.Pos(s,t.getLine(s).length)}:void 0}})}),function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";e.registerHelper("fold","brace",function(t,i){function o(o){for(var r=i.ch,l=0;;){var c=r<=0?-1:s.lastIndexOf(o,r-1);if(-1!=c){if(1==l&&ct.lastLine())return null;var o=t.getTokenAt(e.Pos(i,1));if(/\S/.test(o.string)||(o=t.getTokenAt(e.Pos(i,o.end+1))),"keyword"!=o.type||"import"!=o.string)return null;for(var r=i,n=Math.min(t.lastLine(),i+10);r<=n;++r){var a=t.getLine(r),s=a.indexOf(";");if(-1!=s)return{startCh:o.end,end:e.Pos(r,s)}}}var r,i=i.line,n=o(i);if(!n||o(i-1)||(r=o(i-2))&&r.end.line==i-1)return null;for(var a=n.end;;){var s=o(a.line+1);if(null==s)break;a=s.end}return{from:t.clipPos(e.Pos(i,n.startCh+1)),to:a}}),e.registerHelper("fold","include",function(t,i){function o(i){if(it.lastLine())return null;var o=t.getTokenAt(e.Pos(i,1));return/\S/.test(o.string)||(o=t.getTokenAt(e.Pos(i,o.end+1))),"meta"==o.type&&"#include"==o.string.slice(0,8)?o.start+8:void 0}var i=i.line,r=o(i);if(null==r||null!=o(i-1))return null;for(var n=i;;){if(null==o(n+1))break;++n}return{from:e.Pos(i,r+1),to:t.clipPos(e.Pos(n))}})}),function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";function t(e,t){return e.line-t.line||e.ch-t.ch}function i(e,t,i,o){this.line=t,this.ch=i,this.cm=e,this.text=e.getLine(t),this.min=o?o.from:e.firstLine(),this.max=o?o.to-1:e.lastLine()}function o(e,t){var i=e.cm.getTokenTypeAt(u(e.line,t));return i&&/\btag\b/.test(i)}function r(e){if(!(e.line>=e.max))return e.ch=0,e.text=e.cm.getLine(++e.line),!0}function n(e){if(!(e.line<=e.min))return e.text=e.cm.getLine(--e.line),e.ch=e.text.length,!0}function a(e){for(;;){var t=e.text.indexOf(">",e.ch);if(-1==t){if(r(e))continue;return}{if(o(e,t+1)){var i=e.text.lastIndexOf("/",t),n=i>-1&&!/\S/.test(e.text.slice(i+1,t));return e.ch=t+1,n?"selfClose":"regular"}e.ch=t+1}}}function s(e){for(;;){var t=e.ch?e.text.lastIndexOf("<",e.ch-1):-1;if(-1==t){if(n(e))continue;return}if(o(e,t+1)){g.lastIndex=t,e.ch=t;var i=g.exec(e.text);if(i&&i.index==t)return i}else e.ch=t}}function l(e){for(;;){g.lastIndex=e.ch;var t=g.exec(e.text);if(!t){if(r(e))continue;return}{if(o(e,t.index+1))return e.ch=t.index+t[0].length,t;e.ch=t.index+1}}}function c(e){for(;;){var t=e.ch?e.text.lastIndexOf(">",e.ch-1):-1;if(-1==t){if(n(e))continue;return}{if(o(e,t+1)){var i=e.text.lastIndexOf("/",t),r=i>-1&&!/\S/.test(e.text.slice(i+1,t));return e.ch=t+1,r?"selfClose":"regular"}e.ch=t}}}function d(e,t){for(var i=[];;){var o,r=l(e),n=e.line,s=e.ch-(r?r[0].length:0);if(!r||!(o=a(e)))return;if("selfClose"!=o)if(r[1]){for(var c=i.length-1;c>=0;--c)if(i[c]==r[2]){i.length=c;break}if(c<0&&(!t||t==r[2]))return{tag:r[2],from:u(n,s),to:u(e.line,e.ch)}}else i.push(r[2])}}function h(e,t){for(var i=[];;){var o=c(e);if(!o)return;if("selfClose"!=o){var r=e.line,n=e.ch,a=s(e);if(!a)return;if(a[1])i.push(a[2]);else{for(var l=i.length-1;l>=0;--l)if(i[l]==a[2]){i.length=l;break}if(l<0&&(!t||t==a[2]))return{tag:a[2],from:u(e.line,e.ch),to:u(r,n)}}}else s(e)}}var u=e.Pos,f="A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",p=f+"-:.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040",g=new RegExp("<(/?)(["+f+"]["+p+"]*)","g");e.registerHelper("fold","xml",function(e,t){for(var o=new i(e,t.line,0);;){var r,n=l(o);if(!n||o.line!=t.line||!(r=a(o)))return;if(!n[1]&&"selfClose"!=r){var t=u(o.line,o.ch),s=d(o,n[2]);return s&&{from:t,to:s.from}}}}),e.findMatchingTag=function(e,o,r){var n=new i(e,o.line,o.ch,r);if(-1!=n.text.indexOf(">")||-1!=n.text.indexOf("<")){var l=a(n),c=l&&u(n.line,n.ch),f=l&&s(n);if(l&&f&&!(t(n,o)>0)){var p={from:u(n.line,n.ch),to:c,tag:f[2]};return"selfClose"==l?{open:p,close:null,at:"open"}:f[1]?{open:h(n,f[2]),close:p,at:"close"}:(n=new i(e,c.line,c.ch,r),{open:p,close:d(n,f[2]),at:"open"})}}},e.findEnclosingTag=function(e,t,o){for(var r=new i(e,t.line,t.ch,o);;){var n=h(r);if(!n)break;var a=new i(e,t.line,t.ch,o),s=d(a,n.tag);if(s)return{open:n,close:s}}},e.scanForClosingTag=function(e,t,o,r){return d(new i(e,t.line,t.ch,r?{from:0,to:r}:null),o)}}),function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";e.registerHelper("fold","markdown",function(t,i){function o(i){var o=t.getTokenTypeAt(e.Pos(i,0));return o&&/\bheader\b/.test(o)}function r(e,t,i){var r=t&&t.match(/^#+/);return r&&o(e)?r[0].length:(r=i&&i.match(/^[=\-]+\s*$/),r&&o(e+1)?"="==i[0]?1:2:n)}var n=100,a=t.getLine(i.line),s=t.getLine(i.line+1),l=r(i.line,a,s);if(l!==n){for(var c=t.lastLine(),d=i.line,h=t.getLine(d+2);d=i.ch+1)return/\bstring2?\b/.test(s);a.start=a.pos}}function o(o,r){for(var s={name:"autoCloseBrackets",Backspace:function(i){if(i.getOption("disableInput"))return e.Pass;for(var r=i.listSelections(),n=0;n=0;n--){var l=r[n].head;i.replaceRange("",a(l.line,l.ch-1),a(l.line,l.ch+1))}}},l="",c=0;c1&&r.indexOf(t)>=0&&s.getRange(a(g.line,g.ch-2),g)==t+t&&(g.ch<=2||s.getRange(a(g.line,g.ch-3),a(g.line,g.ch-2))!=t))f="addFour";else if('"'==t||"'"==t){if(e.isWordChar(d)||!i(s,g,t))return e.Pass;f="both"}else{if(!(s.getLine(g.line).length==g.ch||l.indexOf(d)>=0||n.test(d)))return e.Pass;f="both"}else f="surround";if(c){if(c!=f)return e.Pass}else c=f}s.operation(function(){if("skip"==c)s.execCommand("goCharRight");else if("skipThree"==c)for(var e=0;e<3;e++)s.execCommand("goCharRight");else if("surround"==c){for(var i=s.getSelections(),e=0;e=t.minChars&&e.addOverlay(t.overlay=a(h,!1,t.style))}})}function r(e,t,i){if(null!==e.getRange(t,i).match(/^\w+$/)){if(t.ch>0){var o={line:t.line,ch:t.ch-1},r=e.getRange(o,t);if(null===r.match(/\W/))return!1}if(i.ch=15){presto=false;webkit=true}var flipCtrlCmd=mac&&(qtwebkit||presto&&(presto_version==null||presto_version<12.11));var captureRightClick=gecko||(ie&&ie_version>=9);var sawReadOnlySpans=false,sawCollapsedSpans=false;function CodeMirror(place,options){if(!(this instanceof CodeMirror)){return new CodeMirror(place,options)}this.options=options=options?copyObj(options):{};copyObj(defaults,options,false);setGuttersForLineNumbers(options);var doc=options.value;if(typeof doc=="string"){doc=new Doc(doc,options.mode)}this.doc=doc;var input=new CodeMirror.inputStyles[options.inputStyle](this);var display=this.display=new Display(place,doc,input);display.wrapper.CodeMirror=this;updateGutters(this);themeChanged(this);if(options.lineWrapping){this.display.wrapper.className+=" CodeMirror-wrap"}if(options.autofocus&&!mobile){display.input.focus()}initScrollbars(this);this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:false,focused:false,suppressEdits:false,pasteIncoming:false,cutIncoming:false,draggingText:false,highlight:new Delayed(),keySeq:null};var cm=this;if(ie&&ie_version<11){setTimeout(function(){cm.display.input.reset(true)},20)}registerEventHandlers(this);ensureGlobalHandlers();startOperation(this);this.curOp.forceUpdate=true;attachDoc(this,doc);if((options.autofocus&&!mobile)||cm.hasFocus()){setTimeout(bind(onFocus,this),20)}else{onBlur(this)}for(var opt in optionHandlers){if(optionHandlers.hasOwnProperty(opt)){optionHandlers[opt](this,options[opt],Init)}}maybeUpdateLineNumberWidth(this);if(options.finishInit){options.finishInit(this)}for(var i=0;id.maxLineLength){d.maxLineLength=len;d.maxLine=line}})}function setGuttersForLineNumbers(options){var found=indexOf(options.gutters,"CodeMirror-linenumbers");if(found==-1&&options.lineNumbers){options.gutters=options.gutters.concat(["CodeMirror-linenumbers"])}else{if(found>-1&&!options.lineNumbers){options.gutters=options.gutters.slice(0);options.gutters.splice(found,1)}}}function measureForScrollbars(cm){var d=cm.display,gutterW=d.gutters.offsetWidth;var docH=Math.round(cm.doc.height+paddingVert(cm.display));return{clientHeight:d.scroller.clientHeight,viewHeight:d.wrapper.clientHeight,scrollWidth:d.scroller.scrollWidth,clientWidth:d.scroller.clientWidth,viewWidth:d.wrapper.clientWidth,barLeft:cm.options.fixedGutter?gutterW:0,docHeight:docH,scrollHeight:docH+scrollGap(cm)+d.barHeight,nativeBarWidth:d.nativeBarWidth,gutterWidth:gutterW}}function NativeScrollbars(place,scroll,cm){this.cm=cm;var vert=this.vert=elt("div",[elt("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar");var horiz=this.horiz=elt("div",[elt("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");place(vert);place(horiz);on(vert,"scroll",function(){if(vert.clientHeight){scroll(vert.scrollTop,"vertical")}});on(horiz,"scroll",function(){if(horiz.clientWidth){scroll(horiz.scrollLeft,"horizontal")}});this.checkedOverlay=false;if(ie&&ie_version<8){this.horiz.style.minHeight=this.vert.style.minWidth="18px"}}NativeScrollbars.prototype=copyObj({update:function(measure){var needsH=measure.scrollWidth>measure.clientWidth+1;var needsV=measure.scrollHeight>measure.clientHeight+1;var sWidth=measure.nativeBarWidth;if(needsV){this.vert.style.display="block";this.vert.style.bottom=needsH?sWidth+"px":"0";var totalHeight=measure.viewHeight-(needsH?sWidth:0);this.vert.firstChild.style.height=Math.max(0,measure.scrollHeight-measure.clientHeight+totalHeight)+"px" -}else{this.vert.style.display="";this.vert.firstChild.style.height="0"}if(needsH){this.horiz.style.display="block";this.horiz.style.right=needsV?sWidth+"px":"0";this.horiz.style.left=measure.barLeft+"px";var totalWidth=measure.viewWidth-measure.barLeft-(needsV?sWidth:0);this.horiz.firstChild.style.width=(measure.scrollWidth-measure.clientWidth+totalWidth)+"px"}else{this.horiz.style.display="";this.horiz.firstChild.style.width="0"}if(!this.checkedOverlay&&measure.clientHeight>0){if(sWidth==0){this.overlayHack()}this.checkedOverlay=true}return{right:needsV?sWidth:0,bottom:needsH?sWidth:0}},setScrollLeft:function(pos){if(this.horiz.scrollLeft!=pos){this.horiz.scrollLeft=pos}},setScrollTop:function(pos){if(this.vert.scrollTop!=pos){this.vert.scrollTop=pos}},overlayHack:function(){var w=mac&&!mac_geMountainLion?"12px":"18px";this.horiz.style.minHeight=this.vert.style.minWidth=w;var self=this;var barMouseDown=function(e){if(e_target(e)!=self.vert&&e_target(e)!=self.horiz){operation(self.cm,onMouseDown)(e)}};on(this.vert,"mousedown",barMouseDown);on(this.horiz,"mousedown",barMouseDown)},clear:function(){var parent=this.horiz.parentNode;parent.removeChild(this.horiz);parent.removeChild(this.vert)}},NativeScrollbars.prototype);function NullScrollbars(){}NullScrollbars.prototype=copyObj({update:function(){return{bottom:0,right:0}},setScrollLeft:function(){},setScrollTop:function(){},clear:function(){}},NullScrollbars.prototype);CodeMirror.scrollbarModel={"native":NativeScrollbars,"null":NullScrollbars};function initScrollbars(cm){if(cm.display.scrollbars){cm.display.scrollbars.clear();if(cm.display.scrollbars.addClass){rmClass(cm.display.wrapper,cm.display.scrollbars.addClass)}}cm.display.scrollbars=new CodeMirror.scrollbarModel[cm.options.scrollbarStyle](function(node){cm.display.wrapper.insertBefore(node,cm.display.scrollbarFiller);on(node,"mousedown",function(){if(cm.state.focused){setTimeout(function(){cm.display.input.focus()},0)}});node.setAttribute("cm-not-content","true")},function(pos,axis){if(axis=="horizontal"){setScrollLeft(cm,pos)}else{setScrollTop(cm,pos)}},cm);if(cm.display.scrollbars.addClass){addClass(cm.display.wrapper,cm.display.scrollbars.addClass)}}function updateScrollbars(cm,measure){if(!measure){measure=measureForScrollbars(cm)}var startWidth=cm.display.barWidth,startHeight=cm.display.barHeight;updateScrollbarsInner(cm,measure);for(var i=0;i<4&&startWidth!=cm.display.barWidth||startHeight!=cm.display.barHeight;i++){if(startWidth!=cm.display.barWidth&&cm.options.lineWrapping){updateHeightsInViewport(cm)}updateScrollbarsInner(cm,measureForScrollbars(cm));startWidth=cm.display.barWidth;startHeight=cm.display.barHeight}}function updateScrollbarsInner(cm,measure){var d=cm.display;var sizes=d.scrollbars.update(measure);d.sizer.style.paddingRight=(d.barWidth=sizes.right)+"px";d.sizer.style.paddingBottom=(d.barHeight=sizes.bottom)+"px";if(sizes.right&&sizes.bottom){d.scrollbarFiller.style.display="block";d.scrollbarFiller.style.height=sizes.bottom+"px";d.scrollbarFiller.style.width=sizes.right+"px"}else{d.scrollbarFiller.style.display=""}if(sizes.bottom&&cm.options.coverGutterNextToScrollbar&&cm.options.fixedGutter){d.gutterFiller.style.display="block";d.gutterFiller.style.height=sizes.bottom+"px";d.gutterFiller.style.width=measure.gutterWidth+"px"}else{d.gutterFiller.style.display=""}}function visibleLines(display,doc,viewport){var top=viewport&&viewport.top!=null?Math.max(0,viewport.top):display.scroller.scrollTop;top=Math.floor(top-paddingTop(display));var bottom=viewport&&viewport.bottom!=null?viewport.bottom:top+display.wrapper.clientHeight;var from=lineAtHeight(doc,top),to=lineAtHeight(doc,bottom);if(viewport&&viewport.ensure){var ensureFrom=viewport.ensure.from.line,ensureTo=viewport.ensure.to.line;if(ensureFrom=to){from=lineAtHeight(doc,heightAtLine(getLine(doc,ensureTo))-display.wrapper.clientHeight);to=ensureTo}}}return{from:from,to:Math.max(to,from+1)}}function alignHorizontally(cm){var display=cm.display,view=display.view;if(!display.alignWidgets&&(!display.gutters.firstChild||!cm.options.fixedGutter)){return}var comp=compensateForHScroll(display)-display.scroller.scrollLeft+cm.doc.scrollLeft;var gutterW=display.gutters.offsetWidth,left=comp+"px";for(var i=0;i=display.viewFrom&&update.visible.to<=display.viewTo&&(display.updateLineNumbers==null||display.updateLineNumbers>=display.viewTo)&&display.renderedView==display.view&&countDirtyView(cm)==0){return false}if(maybeUpdateLineNumberWidth(cm)){resetView(cm);update.dims=getDimensions(cm)}var end=doc.first+doc.size;var from=Math.max(update.visible.from-cm.options.viewportMargin,doc.first);var to=Math.min(end,update.visible.to+cm.options.viewportMargin);if(display.viewFromto&&display.viewTo-to<20){to=Math.min(end,display.viewTo)}if(sawCollapsedSpans){from=visualLineNo(cm.doc,from);to=visualLineEndNo(cm.doc,to)}var different=from!=display.viewFrom||to!=display.viewTo||display.lastWrapHeight!=update.wrapperHeight||display.lastWrapWidth!=update.wrapperWidth;adjustView(cm,from,to);display.viewOffset=heightAtLine(getLine(cm.doc,display.viewFrom));cm.display.mover.style.top=display.viewOffset+"px";var toUpdate=countDirtyView(cm);if(!different&&toUpdate==0&&!update.force&&display.renderedView==display.view&&(display.updateLineNumbers==null||display.updateLineNumbers>=display.viewTo)){return false}var focused=activeElt();if(toUpdate>4){display.lineDiv.style.display="none"}patchDisplay(cm,display.updateLineNumbers,update.dims);if(toUpdate>4){display.lineDiv.style.display=""}display.renderedView=display.view;if(focused&&activeElt()!=focused&&focused.offsetHeight){focused.focus()}removeChildren(display.cursorDiv);removeChildren(display.selectionDiv);display.gutters.style.height=0;if(different){display.lastWrapHeight=update.wrapperHeight;display.lastWrapWidth=update.wrapperWidth;startWorker(cm,400)}display.updateLineNumbers=null;return true}function postUpdateDisplay(cm,update){var force=update.force,viewport=update.viewport;for(var first=true;;first=false){if(first&&cm.options.lineWrapping&&update.oldDisplayWidth!=displayWidth(cm)){force=true}else{force=false;if(viewport&&viewport.top!=null){viewport={top:Math.min(cm.doc.height+paddingVert(cm.display)-displayHeight(cm),viewport.top)}}update.visible=visibleLines(cm.display,cm.doc,viewport);if(update.visible.from>=cm.display.viewFrom&&update.visible.to<=cm.display.viewTo){break}}if(!updateDisplayIfNeeded(cm,update)){break}updateHeightsInViewport(cm);var barMeasure=measureForScrollbars(cm);updateSelection(cm);setDocumentHeight(cm,barMeasure);updateScrollbars(cm,barMeasure)}update.signal(cm,"update",cm);if(cm.display.viewFrom!=cm.display.reportedViewFrom||cm.display.viewTo!=cm.display.reportedViewTo){update.signal(cm,"viewportChange",cm,cm.display.viewFrom,cm.display.viewTo);cm.display.reportedViewFrom=cm.display.viewFrom;cm.display.reportedViewTo=cm.display.viewTo}}function updateDisplaySimple(cm,viewport){var update=new DisplayUpdate(cm,viewport);if(updateDisplayIfNeeded(cm,update)){updateHeightsInViewport(cm);postUpdateDisplay(cm,update);var barMeasure=measureForScrollbars(cm);updateSelection(cm);setDocumentHeight(cm,barMeasure);updateScrollbars(cm,barMeasure);update.finish()}}function setDocumentHeight(cm,measure){cm.display.sizer.style.minHeight=measure.docHeight+"px";var total=measure.docHeight+cm.display.barHeight; -cm.display.heightForcer.style.top=total+"px";cm.display.gutters.style.height=Math.max(total+scrollGap(cm),measure.clientHeight)+"px"}function updateHeightsInViewport(cm){var display=cm.display;var prevBottom=display.lineDiv.offsetTop;for(var i=0;i0.001||diff<-0.001){updateLineHeight(cur.line,height);updateWidgetHeight(cur.line);if(cur.rest){for(var j=0;j-1){updateNumber=false}updateLineForChanges(cm,lineView,lineN,dims)}if(updateNumber){removeChildren(lineView.lineNumber);lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options,lineN)))}cur=lineView.node.nextSibling}}lineN+=lineView.size}while(cur){cur=rm(cur)}}function updateLineForChanges(cm,lineView,lineN,dims){for(var j=0;j1){if(lastCopied&&lastCopied.join("\n")==inserted){multiPaste=sel.ranges.length%lastCopied.length==0&&map(lastCopied,splitLines)}else{if(textLines.length==sel.ranges.length){multiPaste=map(textLines,function(l){return[l]})}}}for(var i=sel.ranges.length-1;i>=0;i--){var range=sel.ranges[i];var from=range.from(),to=range.to();if(range.empty()){if(deleted&&deleted>0){from=Pos(from.line,from.ch-deleted)}else{if(cm.state.overwrite&&!cm.state.pasteIncoming){to=Pos(to.line,Math.min(getLine(doc,to.line).text.length,to.ch+lst(textLines).length))}}}var updateInput=cm.curOp.updateInput;var changeEvent={from:from,to:to,text:multiPaste?multiPaste[i%multiPaste.length]:textLines,origin:cm.state.pasteIncoming?"paste":cm.state.cutIncoming?"cut":"+input"};makeChange(cm.doc,changeEvent);signalLater(cm,"inputRead",cm,changeEvent);if(inserted&&!cm.state.pasteIncoming&&cm.options.electricChars&&cm.options.smartIndent&&range.head.ch<100&&(!i||sel.ranges[i-1].head.line!=range.head.line)){var mode=cm.getModeAt(range.head);var end=changeEnd(changeEvent);if(mode.electricChars){for(var j=0;j-1){indentLine(cm,end.line,"smart");break}}}else{if(mode.electricInput){if(mode.electricInput.test(getLine(doc,end.line).text.slice(0,end.ch))){indentLine(cm,end.line,"smart")}}}}}ensureCursorVisible(cm);cm.curOp.updateInput=updateInput;cm.curOp.typing=true;cm.state.pasteIncoming=cm.state.cutIncoming=false}function copyableRanges(cm){var text=[],ranges=[];for(var i=0;i=9&&input.hasSelection){input.hasSelection=null}input.poll()});on(te,"paste",function(){if(webkit&&!cm.state.fakedLastChar&&!(new Date-cm.state.lastMiddleDown<200)){var start=te.selectionStart,end=te.selectionEnd;te.value+="$";te.selectionEnd=end;te.selectionStart=start;cm.state.fakedLastChar=true}cm.state.pasteIncoming=true;input.fastPoll()});function prepareCopyCut(e){if(cm.somethingSelected()){lastCopied=cm.getSelections();if(input.inaccurateSelection){input.prevInput="";input.inaccurateSelection=false;te.value=lastCopied.join("\n");selectInput(te)}}else{var ranges=copyableRanges(cm);lastCopied=ranges.text;if(e.type=="cut"){cm.setSelections(ranges.ranges,null,sel_dontScroll)}else{input.prevInput="";te.value=ranges.text.join("\n");selectInput(te)}}if(e.type=="cut"){cm.state.cutIncoming=true}}on(te,"cut",prepareCopyCut);on(te,"copy",prepareCopyCut);on(display.scroller,"paste",function(e){if(eventInWidget(display,e)){return}cm.state.pasteIncoming=true;input.focus()});on(display.lineSpace,"selectstart",function(e){if(!eventInWidget(display,e)){e_preventDefault(e)}})},prepareSelection:function(){var cm=this.cm,display=cm.display,doc=cm.doc;var result=prepareSelection(cm);if(cm.options.moveInputWithCursor){var headPos=cursorCoords(cm,doc.sel.primary().head,"div");var wrapOff=display.wrapper.getBoundingClientRect(),lineOff=display.lineDiv.getBoundingClientRect();result.teTop=Math.max(0,Math.min(display.wrapper.clientHeight-10,headPos.top+lineOff.top-wrapOff.top));result.teLeft=Math.max(0,Math.min(display.wrapper.clientWidth-10,headPos.left+lineOff.left-wrapOff.left))}return result},showSelection:function(drawn){var cm=this.cm,display=cm.display;removeChildrenAndAdd(display.cursorDiv,drawn.cursors);removeChildrenAndAdd(display.selectionDiv,drawn.selection);if(drawn.teTop!=null){this.wrapper.style.top=drawn.teTop+"px";this.wrapper.style.left=drawn.teLeft+"px"}},reset:function(typing){if(this.contextMenuPending){return}var minimal,selected,cm=this.cm,doc=cm.doc;if(cm.somethingSelected()){this.prevInput="";var range=doc.sel.primary();minimal=hasCopyEvent&&(range.to().line-range.from().line>100||(selected=cm.getSelection()).length>1000);var content=minimal?"-":selected||cm.getSelection();this.textarea.value=content;if(cm.state.focused){selectInput(this.textarea)}if(ie&&ie_version>=9){this.hasSelection=content}}else{if(!typing){this.prevInput=this.textarea.value="";if(ie&&ie_version>=9){this.hasSelection=null}}}this.inaccurateSelection=minimal},getField:function(){return this.textarea},supportsTouch:function(){return false},focus:function(){if(this.cm.options.readOnly!="nocursor"&&(!mobile||activeElt()!=this.textarea)){try{this.textarea.focus()}catch(e){}}},blur:function(){this.textarea.blur()},resetPosition:function(){this.wrapper.style.top=this.wrapper.style.left=0},receivedFocus:function(){this.slowPoll()},slowPoll:function(){var input=this;if(input.pollingFast){return}input.polling.set(this.cm.options.pollInterval,function(){input.poll();if(input.cm.state.focused){input.slowPoll()}})},fastPoll:function(){var missed=false,input=this;input.pollingFast=true;function p(){var changed=input.poll();if(!changed&&!missed){missed=true;input.polling.set(60,p)}else{input.pollingFast=false;input.slowPoll()}}input.polling.set(20,p)},poll:function(){var cm=this.cm,input=this.textarea,prevInput=this.prevInput;if(!cm.state.focused||(hasSelection(input)&&!prevInput)||isReadOnly(cm)||cm.options.disableInput||cm.state.keySeq){return false}if(cm.state.pasteIncoming&&cm.state.fakedLastChar){input.value=input.value.substring(0,input.value.length-1);cm.state.fakedLastChar=false}var text=input.value;if(text==prevInput&&!cm.somethingSelected()){return false}if(ie&&ie_version>=9&&this.hasSelection===text||mac&&/[\uf700-\uf7ff]/.test(text)){cm.display.input.reset();return false}if(text.charCodeAt(0)==8203&&cm.doc.sel==cm.display.selForContextMenu&&!prevInput){prevInput="\u200b" -}var same=0,l=Math.min(prevInput.length,text.length);while(same1000||text.indexOf("\n")>-1){input.value=self.prevInput=""}else{self.prevInput=text}});return true},ensurePolled:function(){if(this.pollingFast&&this.poll()){this.pollingFast=false}},onKeyPress:function(){if(ie&&ie_version>=9){this.hasSelection=null}this.fastPoll()},onContextMenu:function(e){var input=this,cm=input.cm,display=cm.display,te=input.textarea;var pos=posFromMouse(cm,e),scrollPos=display.scroller.scrollTop;if(!pos||presto){return}var reset=cm.options.resetSelectionOnContextMenu;if(reset&&cm.doc.sel.contains(pos)==-1){operation(cm,setSelection)(cm.doc,simpleSelection(pos),sel_dontScroll)}var oldCSS=te.style.cssText;input.wrapper.style.position="absolute";te.style.cssText="position: fixed; width: 30px; height: 30px; top: "+(e.clientY-5)+"px; left: "+(e.clientX-5)+"px; z-index: 1000; background: "+(ie?"rgba(255, 255, 255, .05)":"transparent")+"; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";if(webkit){var oldScrollY=window.scrollY}display.input.focus();if(webkit){window.scrollTo(null,oldScrollY)}display.input.reset();if(!cm.somethingSelected()){te.value=input.prevInput=" "}input.contextMenuPending=true;display.selForContextMenu=cm.doc.sel;clearTimeout(display.detectingSelectAll);function prepareSelectAllHack(){if(te.selectionStart!=null){var selected=cm.somethingSelected();var extval=te.value="\u200b"+(selected?te.value:"");input.prevInput=selected?"":"\u200b";te.selectionStart=1;te.selectionEnd=extval.length;display.selForContextMenu=cm.doc.sel}}function rehide(){input.contextMenuPending=false;input.wrapper.style.position="relative";te.style.cssText=oldCSS;if(ie&&ie_version<9){display.scrollbars.setScrollTop(display.scroller.scrollTop=scrollPos)}if(te.selectionStart!=null){if(!ie||(ie&&ie_version<9)){prepareSelectAllHack()}var i=0,poll=function(){if(display.selForContextMenu==cm.doc.sel&&te.selectionStart==0){operation(cm,commands.selectAll)(cm)}else{if(i++<10){display.detectingSelectAll=setTimeout(poll,500)}else{display.input.reset()}}};display.detectingSelectAll=setTimeout(poll,200)}}if(ie&&ie_version>=9){prepareSelectAllHack()}if(captureRightClick){e_stop(e);var mouseup=function(){off(window,"mouseup",mouseup);setTimeout(rehide,20)};on(window,"mouseup",mouseup)}else{setTimeout(rehide,50)}},setUneditable:nothing,needsContentAttribute:false},TextareaInput.prototype);function ContentEditableInput(cm){this.cm=cm;this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null;this.polling=new Delayed()}ContentEditableInput.prototype=copyObj({init:function(display){var input=this,cm=input.cm;var div=input.div=display.lineDiv;div.contentEditable="true";disableBrowserMagic(div);on(div,"paste",function(e){var pasted=e.clipboardData&&e.clipboardData.getData("text/plain");if(pasted){e.preventDefault();cm.replaceSelection(pasted,null,"paste")}});on(div,"compositionstart",function(e){var data=e.data;input.composing={sel:cm.doc.sel,data:data,startData:data};if(!data){return}var prim=cm.doc.sel.primary();var line=cm.getLine(prim.head.line);var found=line.indexOf(data,Math.max(0,prim.head.ch-data.length));if(found>-1&&found<=prim.head.ch){input.composing.sel=simpleSelection(Pos(prim.head.line,found),Pos(prim.head.line,found+data.length))}});on(div,"compositionupdate",function(e){input.composing.data=e.data});on(div,"compositionend",function(e){var ours=input.composing;if(!ours){return}if(e.data!=ours.startData&&!/\u200b/.test(e.data)){ours.data=e.data}setTimeout(function(){if(!ours.handled){input.applyComposition(ours)}if(input.composing==ours){input.composing=null}},50)});on(div,"touchstart",function(){input.forceCompositionEnd()});on(div,"input",function(){if(input.composing){return}if(!input.pollContent()){runInOp(input.cm,function(){regChange(cm)})}});function onCopyCut(e){if(cm.somethingSelected()){lastCopied=cm.getSelections();if(e.type=="cut"){cm.replaceSelection("",null,"cut")}}else{var ranges=copyableRanges(cm);lastCopied=ranges.text;if(e.type=="cut"){cm.operation(function(){cm.setSelections(ranges.ranges,0,sel_dontScroll);cm.replaceSelection("",null,"cut")})}}if(e.clipboardData&&!ios){e.preventDefault();e.clipboardData.clearData();e.clipboardData.setData("text/plain",lastCopied.join("\n"))}else{var kludge=hiddenTextarea(),te=kludge.firstChild;cm.display.lineSpace.insertBefore(kludge,cm.display.lineSpace.firstChild);te.value=lastCopied.join("\n");var hadFocus=document.activeElement;selectInput(te);setTimeout(function(){cm.display.lineSpace.removeChild(kludge);hadFocus.focus()},50)}}on(div,"copy",onCopyCut);on(div,"cut",onCopyCut)},prepareSelection:function(){var result=prepareSelection(this.cm,false);result.focus=this.cm.state.focused;return result},showSelection:function(info){if(!info||!this.cm.display.view.length){return -}if(info.focus){this.showPrimarySelection()}this.showMultipleSelections(info)},showPrimarySelection:function(){var sel=window.getSelection(),prim=this.cm.doc.sel.primary();var curAnchor=domToPos(this.cm,sel.anchorNode,sel.anchorOffset);var curFocus=domToPos(this.cm,sel.focusNode,sel.focusOffset);if(curAnchor&&!curAnchor.bad&&curFocus&&!curFocus.bad&&cmp(minPos(curAnchor,curFocus),prim.from())==0&&cmp(maxPos(curAnchor,curFocus),prim.to())==0){return}var start=posToDOM(this.cm,prim.from());var end=posToDOM(this.cm,prim.to());if(!start&&!end){return}var view=this.cm.display.view;var old=sel.rangeCount&&sel.getRangeAt(0);if(!start){start={node:view[0].measure.map[2],offset:0}}else{if(!end){var measure=view[view.length-1].measure;var map=measure.maps?measure.maps[measure.maps.length-1]:measure.map;end={node:map[map.length-1],offset:map[map.length-2]-map[map.length-3]}}}try{var rng=range(start.node,start.offset,end.offset,end.node)}catch(e){}if(rng){sel.removeAllRanges();sel.addRange(rng);if(old&&sel.anchorNode==null){sel.addRange(old)}}this.rememberSelection()},showMultipleSelections:function(info){removeChildrenAndAdd(this.cm.display.cursorDiv,info.cursors);removeChildrenAndAdd(this.cm.display.selectionDiv,info.selection)},rememberSelection:function(){var sel=window.getSelection();this.lastAnchorNode=sel.anchorNode;this.lastAnchorOffset=sel.anchorOffset;this.lastFocusNode=sel.focusNode;this.lastFocusOffset=sel.focusOffset},selectionInEditor:function(){var sel=window.getSelection();if(!sel.rangeCount){return false}var node=sel.getRangeAt(0).commonAncestorContainer;return contains(this.div,node)},focus:function(){if(this.cm.options.readOnly!="nocursor"){this.div.focus()}},blur:function(){this.div.blur()},getField:function(){return this.div},supportsTouch:function(){return true},receivedFocus:function(){var input=this;if(this.selectionInEditor()){this.pollSelection()}else{runInOp(this.cm,function(){input.cm.curOp.selectionChanged=true})}function poll(){if(input.cm.state.focused){input.pollSelection();input.polling.set(input.cm.options.pollInterval,poll)}}this.polling.set(this.cm.options.pollInterval,poll)},pollSelection:function(){if(this.composing){return}var sel=window.getSelection(),cm=this.cm;if(sel.anchorNode!=this.lastAnchorNode||sel.anchorOffset!=this.lastAnchorOffset||sel.focusNode!=this.lastFocusNode||sel.focusOffset!=this.lastFocusOffset){this.rememberSelection();var anchor=domToPos(cm,sel.anchorNode,sel.anchorOffset);var head=domToPos(cm,sel.focusNode,sel.focusOffset);if(anchor&&head){runInOp(cm,function(){setSelection(cm.doc,simpleSelection(anchor,head),sel_dontScroll);if(anchor.bad||head.bad){cm.curOp.selectionChanged=true}})}}},pollContent:function(){var cm=this.cm,display=cm.display,sel=cm.doc.sel.primary();var from=sel.from(),to=sel.to();if(from.linedisplay.viewTo-1){return false}var fromIndex;if(from.line==display.viewFrom||(fromIndex=findViewIndex(cm,from.line))==0){var fromLine=lineNo(display.view[0].line);var fromNode=display.view[0].node}else{var fromLine=lineNo(display.view[fromIndex].line);var fromNode=display.view[fromIndex-1].node.nextSibling}var toIndex=findViewIndex(cm,to.line);if(toIndex==display.view.length-1){var toLine=display.viewTo-1;var toNode=display.view[toIndex].node}else{var toLine=lineNo(display.view[toIndex+1].line)-1;var toNode=display.view[toIndex+1].node.previousSibling}var newText=splitLines(domTextBetween(cm,fromNode,toNode,fromLine,toLine));var oldText=getBetween(cm.doc,Pos(fromLine,0),Pos(toLine,getLine(cm.doc,toLine).text.length));while(newText.length>1&&oldText.length>1){if(lst(newText)==lst(oldText)){newText.pop();oldText.pop();toLine--}else{if(newText[0]==oldText[0]){newText.shift();oldText.shift();fromLine++}else{break}}}var cutFront=0,cutEnd=0;var newTop=newText[0],oldTop=oldText[0],maxCutFront=Math.min(newTop.length,oldTop.length);while(cutFront1||newText[0]||cmp(chFrom,chTo)){replaceRange(cm.doc,newText,chFrom,chTo,"+input");return true}},ensurePolled:function(){this.forceCompositionEnd()},reset:function(){this.forceCompositionEnd()},forceCompositionEnd:function(){if(!this.composing||this.composing.handled){return}this.applyComposition(this.composing);this.composing.handled=true;this.div.blur();this.div.focus()},applyComposition:function(composing){if(composing.data&&composing.data!=composing.startData){operation(this.cm,applyTextInput)(this.cm,composing.data,0,composing.sel) -}},setUneditable:function(node){node.setAttribute("contenteditable","false")},onKeyPress:function(e){e.preventDefault();operation(this.cm,applyTextInput)(this.cm,String.fromCharCode(e.charCode==null?e.keyCode:e.charCode),0)},onContextMenu:nothing,resetPosition:nothing,needsContentAttribute:true},ContentEditableInput.prototype);function posToDOM(cm,pos){var view=findViewForLine(cm,pos.line);if(!view||view.hidden){return null}var line=getLine(cm.doc,pos.line);var info=mapFromLineView(view,line,pos.line);var order=getOrder(line),side="left";if(order){var partPos=getBidiPartAt(order,pos.ch);side=partPos%2?"right":"left"}var result=nodeAndOffsetInLineMap(info.map,pos.ch,"left");result.offset=result.collapse=="right"?result.end:result.start;return result}function badPos(pos,bad){if(bad){pos.bad=true}return pos}function domToPos(cm,node,offset){var lineNode;if(node==cm.display.lineDiv){lineNode=cm.display.lineDiv.childNodes[offset];if(!lineNode){return badPos(cm.clipPos(Pos(cm.display.viewTo-1)),true)}node=null;offset=0}else{for(lineNode=node;;lineNode=lineNode.parentNode){if(!lineNode||lineNode==cm.display.lineDiv){return null}if(lineNode.parentNode&&lineNode.parentNode==cm.display.lineDiv){break}}}for(var i=0;i=0&&cmp(pos,range.to())<=0){return i}}return -1}};function Range(anchor,head){this.anchor=anchor;this.head=head -}Range.prototype={from:function(){return minPos(this.anchor,this.head)},to:function(){return maxPos(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}};function normalizeSelection(ranges,primIndex){var prim=ranges[primIndex];ranges.sort(function(a,b){return cmp(a.from(),b.from())});primIndex=indexOf(ranges,prim);for(var i=1;i=0){var from=minPos(prev.from(),cur.from()),to=maxPos(prev.to(),cur.to());var inv=prev.empty()?cur.from()==cur.head:prev.from()==prev.head;if(i<=primIndex){--primIndex}ranges.splice(--i,2,new Range(inv?to:from,inv?from:to))}}return new Selection(ranges,primIndex)}function simpleSelection(anchor,head){return new Selection([new Range(anchor,head||anchor)],0)}function clipLine(doc,n){return Math.max(doc.first,Math.min(n,doc.first+doc.size-1))}function clipPos(doc,pos){if(pos.linelast){return Pos(last,getLine(doc,last).text.length)}return clipToLen(pos,getLine(doc,pos.line).text.length)}function clipToLen(pos,linelen){var ch=pos.ch;if(ch==null||ch>linelen){return Pos(pos.line,linelen)}else{if(ch<0){return Pos(pos.line,0)}else{return pos}}}function isLine(doc,l){return l>=doc.first&&l=curPos.ch:sp.to>curPos.ch))){if(mayClear){signal(m,"beforeCursorEnter");if(m.explicitlyCleared){if(!line.markedSpans){break}else{--i;continue}}}if(!m.atomic){continue}var newPos=m.find(dir<0?-1:1);if(cmp(newPos,curPos)==0){newPos.ch+=dir; -if(newPos.ch<0){if(newPos.line>doc.first){newPos=clipPos(doc,Pos(newPos.line-1))}else{newPos=null}}else{if(newPos.ch>line.text.length){if(newPos.line3){add(left,leftPos.top,null,leftPos.bottom);left=leftSide;if(leftPos.bottomend.bottom||rightPos.bottom==end.bottom&&rightPos.right>end.right){end=rightPos}if(left0){display.blinker=setInterval(function(){display.cursorDiv.style.visibility=(on=!on)?"":"hidden"},cm.options.cursorBlinkRate)}else{if(cm.options.cursorBlinkRate<0){display.cursorDiv.style.visibility="hidden"}}}function startWorker(cm,time){if(cm.doc.mode.startState&&cm.doc.frontier=cm.display.viewTo){return}var end=+new Date+cm.options.workTime;var state=copyState(doc.mode,getStateBefore(cm,doc.frontier));var changedLines=[];doc.iter(doc.frontier,Math.min(doc.first+doc.size,cm.display.viewTo+500),function(line){if(doc.frontier>=cm.display.viewFrom){var oldStyles=line.styles; -var highlighted=highlightLine(cm,line,state,true);line.styles=highlighted.styles;var oldCls=line.styleClasses,newCls=highlighted.classes;if(newCls){line.styleClasses=newCls}else{if(oldCls){line.styleClasses=null}}var ischange=!oldStyles||oldStyles.length!=line.styles.length||oldCls!=newCls&&(!oldCls||!newCls||oldCls.bgClass!=newCls.bgClass||oldCls.textClass!=newCls.textClass);for(var i=0;!ischange&&iend){startWorker(cm,cm.options.workDelay);return true}});if(changedLines.length){runInOp(cm,function(){for(var i=0;ilim;--search){if(search<=doc.first){return doc.first}var line=getLine(doc,search-1);if(line.stateAfter&&(!precise||search<=doc.frontier)){return search}var indented=countColumn(line.text,null,cm.options.tabSize);if(minline==null||minindent>indented){minline=search-1;minindent=indented}}return minline}function getStateBefore(cm,n,precise){var doc=cm.doc,display=cm.display;if(!doc.mode.startState){return true}var pos=findStartLine(cm,n,precise),state=pos>doc.first&&getLine(doc,pos-1).stateAfter;if(!state){state=startState(doc.mode)}else{state=copyState(doc.mode,state)}doc.iter(pos,n,function(line){processLine(cm,line.text,state);var save=pos==n-1||pos%5==0||pos>=display.viewFrom&&pos2){heights.push((cur.bottom+next.top)/2-rect.top)}}}heights.push(rect.bottom-rect.top)}}function mapFromLineView(lineView,line,lineN){if(lineView.line==line){return{map:lineView.measure.map,cache:lineView.measure.cache}}for(var i=0;ilineN){return{map:lineView.measure.maps[i],cache:lineView.measure.caches[i],before:true}}}}function updateExternalMeasurement(cm,line){line=visualLine(line);var lineN=lineNo(line);var view=cm.display.externalMeasured=new LineView(cm.doc,line,lineN);view.lineN=lineN;var built=view.built=buildLineContent(cm,view);view.text=built.pre;removeChildrenAndAdd(cm.display.lineMeasure,built.pre);return view}function measureChar(cm,line,ch,bias){return measureCharPrepared(cm,prepareMeasureForLine(cm,line),ch,bias)}function findViewForLine(cm,lineN){if(lineN>=cm.display.viewFrom&&lineN=ext.lineN&&lineNch){end=mEnd-mStart;start=end-1;if(ch>=mEnd){collapse="right"}}}}if(start!=null){node=map[i+2];if(mStart==mEnd&&bias==(node.insertLeft?"left":"right")){collapse=bias}if(bias=="left"&&start==0){while(i&&map[i-2]==map[i-3]&&map[i-1].insertLeft){node=map[(i-=3)+2];collapse="left"}}if(bias=="right"&&start==mEnd-mStart){while(i0){collapse=bias="right"}var rects;if(cm.options.lineWrapping&&(rects=node.getClientRects()).length>1){rect=rects[bias=="right"?rects.length-1:0]}else{rect=node.getBoundingClientRect()}}if(ie&&ie_version<9&&!start&&(!rect||!rect.left&&!rect.right)){var rSpan=node.parentNode.getClientRects()[0];if(rSpan){rect={left:rSpan.left,right:rSpan.left+charWidth(cm.display),top:rSpan.top,bottom:rSpan.bottom}}else{rect=nullRect}}var rtop=rect.top-prepared.rect.top,rbot=rect.bottom-prepared.rect.top;var mid=(rtop+rbot)/2;var heights=prepared.view.measure.heights;for(var i=0;ipart.from){return get(ch-1)}return get(ch,right)}var order=getOrder(lineObj),ch=pos.ch;if(!order){return get(ch)}var partPos=getBidiPartAt(order,ch);var val=getBidi(ch,partPos);if(bidiOther!=null){val.other=getBidi(ch,bidiOther)}return val}function estimateCoords(cm,pos){var left=0,pos=clipPos(cm.doc,pos);if(!cm.options.lineWrapping){left=charWidth(cm.display)*pos.ch}var lineObj=getLine(cm.doc,pos.line);var top=heightAtLine(lineObj)+paddingTop(cm.display);return{left:left,right:left,top:top,bottom:top+lineObj.height}}function PosWithInfo(line,ch,outside,xRel){var pos=Pos(line,ch);pos.xRel=xRel;if(outside){pos.outside=true}return pos}function coordsChar(cm,x,y){var doc=cm.doc;y+=cm.display.viewOffset;if(y<0){return PosWithInfo(doc.first,0,true,-1)}var lineN=lineAtHeight(doc,y),last=doc.first+doc.size-1;if(lineN>last){return PosWithInfo(doc.first+doc.size-1,getLine(doc,last).text.length,true,1)}if(x<0){x=0}var lineObj=getLine(doc,lineN);for(;;){var found=coordsCharInner(cm,lineObj,lineN,x,y);var merged=collapsedSpanAtEnd(lineObj);var mergedPos=merged&&merged.find(0,true);if(merged&&(found.ch>mergedPos.from.ch||found.ch==mergedPos.from.ch&&found.xRel>0)){lineN=lineNo(lineObj=mergedPos.to.line)}else{return found}}}function coordsCharInner(cm,lineObj,lineNo,x,y){var innerOff=y-heightAtLine(lineObj);var wrongLine=false,adjust=2*cm.display.wrapper.clientWidth;var preparedMeasure=prepareMeasureForLine(cm,lineObj);function getX(ch){var sp=cursorCoords(cm,Pos(lineNo,ch),"line",lineObj,preparedMeasure);wrongLine=true;if(innerOff>sp.bottom){return sp.left-adjust}else{if(innerOfftoX){return PosWithInfo(lineNo,to,toOutside,1)}for(;;){if(bidi?to==from||to==moveVisually(lineObj,from,1):to-from<=1){var ch=x1?1:0);return pos}var step=Math.ceil(dist/2),middle=from+step;if(bidi){middle=from;for(var i=0;ix){to=middle;toX=middleX;if(toOutside=wrongLine){toX+=1000}dist=step}else{from=middle;fromX=middleX;fromOutside=wrongLine;dist-=step}}}var measureText;function textHeight(display){if(display.cachedTextHeight!=null){return display.cachedTextHeight}if(measureText==null){measureText=elt("pre");for(var i=0;i<49;++i){measureText.appendChild(document.createTextNode("x"));measureText.appendChild(elt("br"))}measureText.appendChild(document.createTextNode("x"))}removeChildrenAndAdd(display.measure,measureText);var height=measureText.offsetHeight/50;if(height>3){display.cachedTextHeight=height}removeChildren(display.measure);return height||1}function charWidth(display){if(display.cachedCharWidth!=null){return display.cachedCharWidth}var anchor=elt("span","xxxxxxxxxx");var pre=elt("pre",[anchor]);removeChildrenAndAdd(display.measure,pre);var rect=anchor.getBoundingClientRect(),width=(rect.right-rect.left)/10;if(width>2){display.cachedCharWidth=width}return width||10}var operationGroup=null;var nextOpId=0;function startOperation(cm){cm.curOp={cm:cm,viewChanged:false,startHeight:cm.doc.height,forceUpdate:false,updateInput:null,typing:false,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:false,updateMaxLine:false,scrollLeft:null,scrollTop:null,scrollToPos:null,id:++nextOpId};if(operationGroup){operationGroup.ops.push(cm.curOp)}else{cm.curOp.ownsGroup=operationGroup={ops:[cm.curOp],delayedCallbacks:[]}}}function fireCallbacksForOps(group){var callbacks=group.delayedCallbacks,i=0; -do{for(;i=display.viewTo)||display.maxLineChanged&&cm.options.lineWrapping;op.update=op.mustUpdate&&new DisplayUpdate(cm,op.mustUpdate&&{top:op.scrollTop,ensure:op.scrollToPos},op.forceUpdate)}function endOperation_W1(op){op.updatedDisplay=op.mustUpdate&&updateDisplayIfNeeded(op.cm,op.update)}function endOperation_R2(op){var cm=op.cm,display=cm.display;if(op.updatedDisplay){updateHeightsInViewport(cm)}op.barMeasure=measureForScrollbars(cm);if(display.maxLineChanged&&!cm.options.lineWrapping){op.adjustWidthTo=measureChar(cm,display.maxLine,display.maxLine.text.length).left+3;cm.display.sizerWidth=op.adjustWidthTo;op.barMeasure.scrollWidth=Math.max(display.scroller.clientWidth,display.sizer.offsetLeft+op.adjustWidthTo+scrollGap(cm)+cm.display.barWidth);op.maxScrollLeft=Math.max(0,display.sizer.offsetLeft+op.adjustWidthTo-displayWidth(cm))}if(op.updatedDisplay||op.selectionChanged){op.preparedSelection=display.input.prepareSelection()}}function endOperation_W2(op){var cm=op.cm;if(op.adjustWidthTo!=null){cm.display.sizer.style.minWidth=op.adjustWidthTo+"px";if(op.maxScrollLeft
            @@ -114,8 +116,38 @@
            - + + + + +