From f74f3ef5aa8d70bbcdde226c5d02c72a8e3e17be Mon Sep 17 00:00:00 2001 From: yanglbme Date: Mon, 9 Nov 2020 03:36:14 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20=20@=20f6162?= =?UTF-8?q?8b3a9968172257a233ac87e818d88c4b613=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/{app.d1e85e19.css => app.ddd984a9.css} | 2 +- index.html | 2 +- js/app.5922b786.js | 4 ++++ js/{app.8c64a5dd.js.map => app.5922b786.js.map} | 2 +- js/app.8c64a5dd.js | 4 ---- 5 files changed, 7 insertions(+), 7 deletions(-) rename css/{app.d1e85e19.css => app.ddd984a9.css} (98%) create mode 100644 js/app.5922b786.js rename js/{app.8c64a5dd.js.map => app.5922b786.js.map} (72%) delete mode 100644 js/app.8c64a5dd.js diff --git a/css/app.d1e85e19.css b/css/app.ddd984a9.css similarity index 98% rename from css/app.d1e85e19.css rename to css/app.ddd984a9.css index bedbda9..de178bb 100644 --- a/css/app.d1e85e19.css +++ b/css/app.ddd984a9.css @@ -1,3 +1,3 @@ -.loading-wrapper[data-v-28c1354c]{position:fixed;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.loading[data-v-28c1354c]{text-align:center;position:fixed;width:100%;height:100%;overflow:hidden;z-index:99999;background-color:#f2f2f2}.loading_night[data-v-28c1354c]{background-color:#303133}.loading-text[data-v-28c1354c]{font-size:18px;font-weight:700;margin-top:26px;color:#303133}.loading-anim[data-v-28c1354c]{display:inline-block;width:100px;height:100px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAt1BMVEX///8AAABIz0hHzkdIzkhIz0hIz0hHzkdIzkhFz0VAz0BHzUdIz0hHzkdIzkhIzUhHzUdHzUdIzkhEzEREzERGz0ZIz0hHzUdIzkhIzUhHzkdHzkdHzUdGz0ZIzkhHzkdKzkpIzUhGzUZD00NIzUhGzUZIzkhIzkhHzkdHzkdIzkhHz0dIzUhK1UpHzUdC0EJHzkdHzkdIz0hH1UdHzUdGzkZIzUhJ20lD10NJzklIzkhIzkj////r6/fCAAAAO3RSTlMAACDvoEBg0MAwEI9fz9+A8JDgDx5Ff/r9i+VdbHSDkx9RTRdce+6q6brLb58YSBvtd0oScFTxBxM/v5xq7LMAAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wwcCBssFsYwawAAAe9JREFUaN7t2tlywiAUBmABiQY1W6vWbna1i6Z2sYs97/9eNcQ6U40kEMhoh/824qeAxwSo1Wx2MUgimAAQLNNCAanDInWzCAUeahRxUsQx212NxGgaHhMq21sqCHIpdZFpRDoW2ROEtdpY/S1xu8XyEdZZ/BA8VcNbNO6wPIQbAK6akZa2v0rWN0mLk6+G+Gnr3O5qgnR1EjfOQviHCRS7yw02uyELwWGkbHAlCnGR3wkuM4WxLSuGkQNfmLYW5BDE8fUgXcHVXv9oYB45PoGBeQSd5ioaEHSWp+hA0DkMzSNoKFZKI78zuWsQuaA8l3BlEFnm2iL/FrlpZqanFbntZxmjO73IfdbVh31ERjQjj1LImEyYGMn+9xUjbELGKyRObviJI57CTzBdu/b8Ip7CDkkeQuIlQrffY5dB0rtvuqvINHnpqwISR8nTQsExSWbVW7ExSZ4jong1u2ZByJDu7kKsHszkCqQCIl+FLbKLyPtaefwwgWxEP2LvVixiEYtoQgqlHPJJC+XLLqoZRsyvpuKJB0R9XZiA18pfF+Yr3KqKS4qtcFeyVl/FrgNrlN8/aeTun3AlUh34aMPYsqcVOmWmsBMyW1Ysooi487nx/fhKThbwDdVvs0glpz0qObdSyQkchAOAQOUskU3h/AAe7qmqtAqp/QAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOS0xMi0yOFQwODoyNzo0NCswMDowMPJYdAwAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTktMTItMjhUMDg6Mjc6NDQrMDA6MDCDBcywAAAAAElFTkSuQmCC) no-repeat;background-size:cover}.dialog-footer[data-v-5102b5f0],.reset__dialog[data-v-5102b5f0],.text[data-v-5102b5f0]{text-align:center}.editor__header[data-v-75e84114]{width:100%}.header__item[data-v-75e84114]{margin:0 3px}.header__item_last[data-v-75e84114]{margin-right:8px}.header__switch[data-v-75e84114]{margin-left:8px}.mode__switch[data-v-75e84114]{margin-left:24px;width:24px;height:24px;background:url(data:image/png;base64,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) no-repeat;background-size:cover;-webkit-transition:all .3s;transition:all .3s}.mode__switch_black[data-v-75e84114]{background:url(data:image/png;base64,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) no-repeat;background-size:cover}.top[data-v-75e84114]{margin-right:0}.tb-options[data-v-745662b4]{margin-bottom:20px}.input-table[data-v-745662b4] .el-input__inner{border-radius:0}.head-style[data-v-745662b4] .el-input__inner{background-color:#f2f2f2}.menu[data-v-b08f13d6]{position:absolute;padding:6px 0;border-radius:4px;border:1px solid #aaa;background-color:#fff;z-index:9999}.menu_item[data-v-b08f13d6]{margin-top:10px;min-width:125px;font-size:14px;line-height:20px;color:#303133;cursor:pointer}.menu_item[data-v-b08f13d6]:first-of-type{margin-top:0}.menu_item[data-v-b08f13d6]:hover{color:#fff;background:#8b9294}.menu_item .btn-upload[data-v-b08f13d6],.menu_item span[data-v-b08f13d6]{text-align:center;display:inline-block;padding:4px 0;width:100%}.menu_item .btn-upload[data-v-b08f13d6]{margin:0;border:none;outline:none;background:transparent}.menu_item .btn-upload[data-v-b08f13d6]:hover{color:#fff;background:#8b9294}.menu_item[data-v-b08f13d6] .el-upload{width:100%}li[data-v-b08f13d6]:hover{background-color:#1790ff;color:#fff}li[data-v-b08f13d6]{font-size:15px;list-style:none}[data-v-b8858464] .el-dialog{width:40%}[data-v-b8858464] .el-upload-dragger{width:335px}[data-v-b8858464] .el-dialog__body{padding-bottom:50px}.upload-panel[data-v-b8858464]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;text-align:center}.upload-panel .el-select[data-v-b8858464]{-ms-flex-item-align:end;align-self:flex-end;margin:0 67.75px 20px;width:100px}.github-panel[data-v-b8858464]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.setting-form[data-v-b8858464]{width:100%}.setting-form .el-form-item[data-v-b8858464]{margin:15px}.setting-form .el-form-item[data-v-b8858464]:last-child{text-align:right}.main-body[data-v-4f7941be]{padding-top:12px;overflow:hidden}.el-main[data-v-4f7941be]{padding:0;margin:20px;margin-top:0}.container[data-v-4f7941be],.el-main[data-v-4f7941be]{-webkit-transition:all .3s;transition:all .3s}.preview[data-v-4f7941be]{-webkit-transition:background 0s;transition:background 0s;-webkit-transition-delay:.2s;transition-delay:.2s}.preview-wrapper_night[data-v-4f7941be]{overflow-y:inherit;position:relative;left:-3px}.preview-wrapper_night .preview[data-v-4f7941be]{background-color:#fff}#output-wrapper[data-v-4f7941be]{position:relative}.loading-mask[data-v-4f7941be]{top:50%;width:376px;height:101%;padding-top:1px;font-size:15px;color:grey;background-color:#1e1e1e}.loading-mask .loading__img[data-v-4f7941be],.loading-mask[data-v-4f7941be]{position:absolute;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.loading-mask .loading__img[data-v-4f7941be]{top:330px;width:50px;height:50px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAt1BMVEX///8AAABIz0hHzkdIzkhIz0hIz0hHzkdIzkhFz0VAz0BHzUdIz0hHzkdIzkhIzUhHzUdHzUdIzkhEzEREzERGz0ZIz0hHzUdIzkhIzUhHzkdHzkdHzUdGz0ZIzkhHzkdKzkpIzUhGzUZD00NIzUhGzUZIzkhIzkhHzkdHzkdIzkhHz0dIzUhK1UpHzUdC0EJHzkdHzkdIz0hH1UdHzUdGzkZIzUhJ20lD10NJzklIzkhIzkj////r6/fCAAAAO3RSTlMAACDvoEBg0MAwEI9fz9+A8JDgDx5Ff/r9i+VdbHSDkx9RTRdce+6q6brLb58YSBvtd0oScFTxBxM/v5xq7LMAAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wwcCBssFsYwawAAAe9JREFUaN7t2tlywiAUBmABiQY1W6vWbna1i6Z2sYs97/9eNcQ6U40kEMhoh/824qeAxwSo1Wx2MUgimAAQLNNCAanDInWzCAUeahRxUsQx212NxGgaHhMq21sqCHIpdZFpRDoW2ROEtdpY/S1xu8XyEdZZ/BA8VcNbNO6wPIQbAK6akZa2v0rWN0mLk6+G+Gnr3O5qgnR1EjfOQviHCRS7yw02uyELwWGkbHAlCnGR3wkuM4WxLSuGkQNfmLYW5BDE8fUgXcHVXv9oYB45PoGBeQSd5ioaEHSWp+hA0DkMzSNoKFZKI78zuWsQuaA8l3BlEFnm2iL/FrlpZqanFbntZxmjO73IfdbVh31ERjQjj1LImEyYGMn+9xUjbELGKyRObviJI57CTzBdu/b8Ip7CDkkeQuIlQrffY5dB0rtvuqvINHnpqwISR8nTQsExSWbVW7ExSZ4jong1u2ZByJDu7kKsHszkCqQCIl+FLbKLyPtaefwwgWxEP2LvVixiEYtoQgqlHPJJC+XLLqoZRsyvpuKJB0R9XZiA18pfF+Yr3KqKS4qtcFeyVl/FrgNrlN8/aeTun3AlUh34aMPYsqcVOmWmsBMyW1Ysooi487nx/fhKThbwDdVvs0glpz0qObdSyQkchAOAQOUskU3h/AAe7qmqtAqp/QAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOS0xMi0yOFQwODoyNzo0NCswMDowMPJYdAwAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTktMTItMjhUMDg6Mjc6NDQrMDA6MDCDBcywAAAAAElFTkSuQmCC) no-repeat;background-size:cover}.loading-mask span[data-v-4f7941be]{position:absolute;left:50%;top:390px;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.bounceInRight[data-v-4f7941be]{-webkit-animation-name:bounceInRight-data-v-4f7941be;animation-name:bounceInRight-data-v-4f7941be;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}@-webkit-keyframes bounceInRight-data-v-4f7941be{0%,60%,75%,90%,to{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight-data-v-4f7941be{0%,60%,75%,90%,to{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.cm-s-style-mirror.CodeMirror{background:#f5f5f5;color:#444;font-size:16px;padding:20px;line-height:25px}.cm-s-style-mirror div.CodeMirror-selected{background:#e0e0e0}.cm-s-style-mirror .CodeMirror-line::selection,.cm-s-style-mirror .CodeMirror-line>span::selection,.cm-s-style-mirror .CodeMirror-line>span>span::selection{background:#e0e0e0}.cm-s-style-mirror .CodeMirror-line::-moz-selection,.cm-s-style-mirror .CodeMirror-line>span::-moz-selection,.cm-s-style-mirror .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.cm-s-style-mirror .CodeMirror-gutters{background:#f5f5f5;border-right:0}.cm-s-style-mirror .CodeMirror-guttermarker{color:#ac4142}.cm-s-style-mirror .CodeMirror-guttermarker-subtle,.cm-s-style-mirror .CodeMirror-linenumber{color:#b0b0b0}.cm-s-style-mirror .CodeMirror-cursor{border-left:1px solid #505050}.cm-s-style-mirror span.cm-comment{color:green}.cm-s-style-mirror span.cm-atom,.cm-s-style-mirror span.cm-number{color:#aa759f}.cm-s-style-mirror span.cm-attribute,.cm-s-style-mirror span.cm-property{color:#90a959}.cm-s-style-mirror span.cm-keyword{color:#023a52}.cm-s-style-mirror span.cm-string{color:#e46918}.cm-s-style-mirror span.cm-variable{color:#90a959}.cm-s-style-mirror span.cm-variable-2{color:#00695f}.cm-s-style-mirror span.cm-variable-3{color:#2e6e8a}.cm-s-style-mirror span.cm-def{color:#d28445}.cm-s-style-mirror span.cm-bracket{color:#202020}.cm-s-style-mirror span.cm-tag{color:#000}.cm-s-style-mirror span.cm-link{color:#b26a00}.cm-s-style-mirror span.cm-error{text-decoration:underline;-webkit-text-decoration-style:wavy;text-decoration-style:wavy;-webkit-text-decoration-color:#df8d8e;text-decoration-color:#df8d8e}.cm-s-style-mirror .CodeMirror-activeline-background{background:#dddcdc}.cm-s-style-mirror .CodeMirror-matchingbracket{color:#202020!important;background-color:rgba(0,0,0,.1)!important} +.loading-wrapper[data-v-28c1354c]{position:fixed;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.loading[data-v-28c1354c]{text-align:center;position:fixed;width:100%;height:100%;overflow:hidden;z-index:99999;background-color:#f2f2f2}.loading_night[data-v-28c1354c]{background-color:#303133}.loading-text[data-v-28c1354c]{font-size:18px;font-weight:700;margin-top:26px;color:#303133}.loading-anim[data-v-28c1354c]{display:inline-block;width:100px;height:100px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAt1BMVEX///8AAABIz0hHzkdIzkhIz0hIz0hHzkdIzkhFz0VAz0BHzUdIz0hHzkdIzkhIzUhHzUdHzUdIzkhEzEREzERGz0ZIz0hHzUdIzkhIzUhHzkdHzkdHzUdGz0ZIzkhHzkdKzkpIzUhGzUZD00NIzUhGzUZIzkhIzkhHzkdHzkdIzkhHz0dIzUhK1UpHzUdC0EJHzkdHzkdIz0hH1UdHzUdGzkZIzUhJ20lD10NJzklIzkhIzkj////r6/fCAAAAO3RSTlMAACDvoEBg0MAwEI9fz9+A8JDgDx5Ff/r9i+VdbHSDkx9RTRdce+6q6brLb58YSBvtd0oScFTxBxM/v5xq7LMAAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wwcCBssFsYwawAAAe9JREFUaN7t2tlywiAUBmABiQY1W6vWbna1i6Z2sYs97/9eNcQ6U40kEMhoh/824qeAxwSo1Wx2MUgimAAQLNNCAanDInWzCAUeahRxUsQx212NxGgaHhMq21sqCHIpdZFpRDoW2ROEtdpY/S1xu8XyEdZZ/BA8VcNbNO6wPIQbAK6akZa2v0rWN0mLk6+G+Gnr3O5qgnR1EjfOQviHCRS7yw02uyELwWGkbHAlCnGR3wkuM4WxLSuGkQNfmLYW5BDE8fUgXcHVXv9oYB45PoGBeQSd5ioaEHSWp+hA0DkMzSNoKFZKI78zuWsQuaA8l3BlEFnm2iL/FrlpZqanFbntZxmjO73IfdbVh31ERjQjj1LImEyYGMn+9xUjbELGKyRObviJI57CTzBdu/b8Ip7CDkkeQuIlQrffY5dB0rtvuqvINHnpqwISR8nTQsExSWbVW7ExSZ4jong1u2ZByJDu7kKsHszkCqQCIl+FLbKLyPtaefwwgWxEP2LvVixiEYtoQgqlHPJJC+XLLqoZRsyvpuKJB0R9XZiA18pfF+Yr3KqKS4qtcFeyVl/FrgNrlN8/aeTun3AlUh34aMPYsqcVOmWmsBMyW1Ysooi487nx/fhKThbwDdVvs0glpz0qObdSyQkchAOAQOUskU3h/AAe7qmqtAqp/QAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOS0xMi0yOFQwODoyNzo0NCswMDowMPJYdAwAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTktMTItMjhUMDg6Mjc6NDQrMDA6MDCDBcywAAAAAElFTkSuQmCC) no-repeat;background-size:cover}.dialog-footer[data-v-5102b5f0],.reset__dialog[data-v-5102b5f0],.text[data-v-5102b5f0]{text-align:center}.editor__header[data-v-75e84114]{width:100%}.header__item[data-v-75e84114]{margin:0 3px}.header__item_last[data-v-75e84114]{margin-right:8px}.header__switch[data-v-75e84114]{margin-left:8px}.mode__switch[data-v-75e84114]{margin-left:24px;width:24px;height:24px;background:url(data:image/png;base64,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) no-repeat;background-size:cover;-webkit-transition:all .3s;transition:all .3s}.mode__switch_black[data-v-75e84114]{background:url(data:image/png;base64,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) no-repeat;background-size:cover}.top[data-v-75e84114]{margin-right:0}.tb-options[data-v-745662b4]{margin-bottom:20px}.input-table[data-v-745662b4] .el-input__inner{border-radius:0}.head-style[data-v-745662b4] .el-input__inner{background-color:#f2f2f2}.menu[data-v-b08f13d6]{position:absolute;padding:6px 0;border-radius:4px;border:1px solid #aaa;background-color:#fff;z-index:9999}.menu_item[data-v-b08f13d6]{margin-top:10px;min-width:125px;font-size:14px;line-height:20px;color:#303133;cursor:pointer}.menu_item[data-v-b08f13d6]:first-of-type{margin-top:0}.menu_item[data-v-b08f13d6]:hover{color:#fff;background:#8b9294}.menu_item .btn-upload[data-v-b08f13d6],.menu_item span[data-v-b08f13d6]{text-align:center;display:inline-block;padding:4px 0;width:100%}.menu_item .btn-upload[data-v-b08f13d6]{margin:0;border:none;outline:none;background:transparent}.menu_item .btn-upload[data-v-b08f13d6]:hover{color:#fff;background:#8b9294}.menu_item[data-v-b08f13d6] .el-upload{width:100%}li[data-v-b08f13d6]:hover{background-color:#1790ff;color:#fff}li[data-v-b08f13d6]{font-size:15px;list-style:none}[data-v-356019be] .el-dialog{width:40%}[data-v-356019be] .el-upload-dragger{width:335px}[data-v-356019be] .el-dialog__body{padding-bottom:50px}.upload-panel[data-v-356019be]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;text-align:center}.upload-panel .el-select[data-v-356019be]{-ms-flex-item-align:end;align-self:flex-end;margin:0 67.75px 20px;width:100px}.github-panel[data-v-356019be]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.setting-form[data-v-356019be]{width:100%}.setting-form .el-form-item[data-v-356019be]{margin:15px}.setting-form .el-form-item[data-v-356019be]:last-child{text-align:right}.main-body[data-v-4f7941be]{padding-top:12px;overflow:hidden}.el-main[data-v-4f7941be]{padding:0;margin:20px;margin-top:0}.container[data-v-4f7941be],.el-main[data-v-4f7941be]{-webkit-transition:all .3s;transition:all .3s}.preview[data-v-4f7941be]{-webkit-transition:background 0s;transition:background 0s;-webkit-transition-delay:.2s;transition-delay:.2s}.preview-wrapper_night[data-v-4f7941be]{overflow-y:inherit;position:relative;left:-3px}.preview-wrapper_night .preview[data-v-4f7941be]{background-color:#fff}#output-wrapper[data-v-4f7941be]{position:relative}.loading-mask[data-v-4f7941be]{top:50%;width:376px;height:101%;padding-top:1px;font-size:15px;color:grey;background-color:#1e1e1e}.loading-mask .loading__img[data-v-4f7941be],.loading-mask[data-v-4f7941be]{position:absolute;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.loading-mask .loading__img[data-v-4f7941be]{top:330px;width:50px;height:50px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAt1BMVEX///8AAABIz0hHzkdIzkhIz0hIz0hHzkdIzkhFz0VAz0BHzUdIz0hHzkdIzkhIzUhHzUdHzUdIzkhEzEREzERGz0ZIz0hHzUdIzkhIzUhHzkdHzkdHzUdGz0ZIzkhHzkdKzkpIzUhGzUZD00NIzUhGzUZIzkhIzkhHzkdHzkdIzkhHz0dIzUhK1UpHzUdC0EJHzkdHzkdIz0hH1UdHzUdGzkZIzUhJ20lD10NJzklIzkhIzkj////r6/fCAAAAO3RSTlMAACDvoEBg0MAwEI9fz9+A8JDgDx5Ff/r9i+VdbHSDkx9RTRdce+6q6brLb58YSBvtd0oScFTxBxM/v5xq7LMAAAABYktHRACIBR1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wwcCBssFsYwawAAAe9JREFUaN7t2tlywiAUBmABiQY1W6vWbna1i6Z2sYs97/9eNcQ6U40kEMhoh/824qeAxwSo1Wx2MUgimAAQLNNCAanDInWzCAUeahRxUsQx212NxGgaHhMq21sqCHIpdZFpRDoW2ROEtdpY/S1xu8XyEdZZ/BA8VcNbNO6wPIQbAK6akZa2v0rWN0mLk6+G+Gnr3O5qgnR1EjfOQviHCRS7yw02uyELwWGkbHAlCnGR3wkuM4WxLSuGkQNfmLYW5BDE8fUgXcHVXv9oYB45PoGBeQSd5ioaEHSWp+hA0DkMzSNoKFZKI78zuWsQuaA8l3BlEFnm2iL/FrlpZqanFbntZxmjO73IfdbVh31ERjQjj1LImEyYGMn+9xUjbELGKyRObviJI57CTzBdu/b8Ip7CDkkeQuIlQrffY5dB0rtvuqvINHnpqwISR8nTQsExSWbVW7ExSZ4jong1u2ZByJDu7kKsHszkCqQCIl+FLbKLyPtaefwwgWxEP2LvVixiEYtoQgqlHPJJC+XLLqoZRsyvpuKJB0R9XZiA18pfF+Yr3KqKS4qtcFeyVl/FrgNrlN8/aeTun3AlUh34aMPYsqcVOmWmsBMyW1Ysooi487nx/fhKThbwDdVvs0glpz0qObdSyQkchAOAQOUskU3h/AAe7qmqtAqp/QAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxOS0xMi0yOFQwODoyNzo0NCswMDowMPJYdAwAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTktMTItMjhUMDg6Mjc6NDQrMDA6MDCDBcywAAAAAElFTkSuQmCC) no-repeat;background-size:cover}.loading-mask span[data-v-4f7941be]{position:absolute;left:50%;top:390px;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.bounceInRight[data-v-4f7941be]{-webkit-animation-name:bounceInRight-data-v-4f7941be;animation-name:bounceInRight-data-v-4f7941be;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}@-webkit-keyframes bounceInRight-data-v-4f7941be{0%,60%,75%,90%,to{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes bounceInRight-data-v-4f7941be{0%,60%,75%,90%,to{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}.cm-s-style-mirror.CodeMirror{background:#f5f5f5;color:#444;font-size:16px;padding:20px;line-height:25px}.cm-s-style-mirror div.CodeMirror-selected{background:#e0e0e0}.cm-s-style-mirror .CodeMirror-line::selection,.cm-s-style-mirror .CodeMirror-line>span::selection,.cm-s-style-mirror .CodeMirror-line>span>span::selection{background:#e0e0e0}.cm-s-style-mirror .CodeMirror-line::-moz-selection,.cm-s-style-mirror .CodeMirror-line>span::-moz-selection,.cm-s-style-mirror .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.cm-s-style-mirror .CodeMirror-gutters{background:#f5f5f5;border-right:0}.cm-s-style-mirror .CodeMirror-guttermarker{color:#ac4142}.cm-s-style-mirror .CodeMirror-guttermarker-subtle,.cm-s-style-mirror .CodeMirror-linenumber{color:#b0b0b0}.cm-s-style-mirror .CodeMirror-cursor{border-left:1px solid #505050}.cm-s-style-mirror span.cm-comment{color:green}.cm-s-style-mirror span.cm-atom,.cm-s-style-mirror span.cm-number{color:#aa759f}.cm-s-style-mirror span.cm-attribute,.cm-s-style-mirror span.cm-property{color:#90a959}.cm-s-style-mirror span.cm-keyword{color:#023a52}.cm-s-style-mirror span.cm-string{color:#e46918}.cm-s-style-mirror span.cm-variable{color:#90a959}.cm-s-style-mirror span.cm-variable-2{color:#00695f}.cm-s-style-mirror span.cm-variable-3{color:#2e6e8a}.cm-s-style-mirror span.cm-def{color:#d28445}.cm-s-style-mirror span.cm-bracket{color:#202020}.cm-s-style-mirror span.cm-tag{color:#000}.cm-s-style-mirror span.cm-link{color:#b26a00}.cm-s-style-mirror span.cm-error{text-decoration:underline;-webkit-text-decoration-style:wavy;text-decoration-style:wavy;-webkit-text-decoration-color:#df8d8e;text-decoration-color:#df8d8e}.cm-s-style-mirror .CodeMirror-activeline-background{background:#dddcdc}.cm-s-style-mirror .CodeMirror-matchingbracket{color:#202020!important;background-color:rgba(0,0,0,.1)!important} /*! Color themes for Google Code Prettify | MIT License | github.com/jmblog/color-themes-for-google-code-prettify */.prettyprint{font-family:Menlo,Bitstream Vera Sans Mono,DejaVu Sans Mono,Monaco,Consolas,monospace;border:0!important}.pln{color:#333}ol.linenums{margin-top:0;margin-bottom:0;color:#ccc}li.L0,li.L1,li.L2,li.L3,li.L4,li.L5,li.L6,li.L7,li.L8,li.L9{padding-left:1em;background-color:#fff;list-style-type:decimal}@media screen{.str{color:#183691}.kwd{color:#a71d5d}.com{color:#969896}.lit,.typ{color:#0086b3}.clo,.opn,.pun{color:#333}.tag{color:navy}.atn{color:#795da3}.atv{color:#183691}.dec{color:#333}.var{color:teal}.fun{color:#900}}.rich_media_content .code-snippet *,.rich_media_content .code-snippet__wechat *{max-width:1000%!important}.code-snippet__wechat{word-wrap:break-word!important;font-size:14px;margin:10px 8px;color:#333;position:relative;background-color:rgba(27,31,35,.05);border:1px solid #f0f0f0;border-radius:2px;display:-webkit-box;display:-ms-flexbox;display:flex;line-height:24px}.code-snippet__wechat .code-snippet__line-index{counter-reset:line;-ms-flex-negative:0;flex-shrink:0;height:100%;padding:1em;list-style-type:none}.code-snippet__wechat .code-snippet__line-index li{list-style-type:none;text-align:right}.code-snippet__wechat .code-snippet__line-index li:before{min-width:1.5em;text-align:right;left:-2.5em;counter-increment:line;content:counter(line);display:inline;color:rgba(0,0,0,.15)}.code-snippet__wechat pre{overflow-x:auto;padding:1em 1em 1em 1em;white-space:normal;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-overflow-scrolling:touch}.code-snippet__wechat code{text-align:left;font-size:14px;white-space:pre;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;font-family:Consolas,Liberation Mono,Menlo,Courier,monospace}.code-snippet__wechat ul li{list-style:none}.code-snippet__github{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin:10px 8px;position:relative;height:auto;background-color:rgba(27,31,35,.05)}.code-snippet__github .code-snippet__line-index{display:none}.code-snippet__github .code__pre{display:grid;position:relative;counter-reset:line;overflow-x:auto;padding:1em;white-space:normal;-webkit-box-flex:1;-ms-flex:1;flex:1;line-height:20px;font-family:Operator Mono,Consolas,Monaco,Menlo,monospace;-webkit-overflow-scrolling:touch}.code-snippet__github pre{display:inline-block;font-size:12px}.code-snippet__github code{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;padding-right:8px;text-align:left;white-space:pre;font-family:Consolas,Liberation Mono,Menlo,Courier,monospace}.code-snippet__github code:before{display:none}.code-snippet__github ul li{list-style:none}*{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0}button,input,textarea{font-family:inherit}h1,h2,h3,h4,h5,h6{font-weight:400}em{font-style:normal!important}body,html{height:100%;font-family:PingFang SC,BlinkMacSystemFont,Roboto,Helvetica Neue,sans-serif}.el-message__icon{display:none}.container{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.container,.top{display:-webkit-box;display:-ms-flexbox;display:flex}.top{height:60px;padding:10px 20px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:20px}.web-title{margin:0 15px 0 5px}.web-icon{width:auto;height:1.5rem;vertical-align:middle}#editor{display:block;border:none;width:100%;padding:10px}#editor,section{height:100%}.main-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-top:0;padding-bottom:10px}.ctrl{-ms-flex-preferred-size:60px;flex-basis:60px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}.ctrl,.preview-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.preview-wrapper{-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);padding:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:scroll;word-break:break-all}.main-section{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%}.hint{opacity:.6;margin:20px 0}.preview{margin:0 -20px;width:375px;padding:20px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;outline:none;-webkit-box-shadow:0 0 60px rgba(0,0,0,.1);box-shadow:0 0 60px rgba(0,0,0,.1)}.preview table{margin-bottom:10px;border-collapse:collapse;display:table;width:100%!important}.select-item-left{float:left}.select-item-right{float:right;color:#8492a6;font-size:13px}.CodeMirror{height:100%!important;-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);font-size:14px;padding:20px;width:100%!important;font-family:PingFang SC,BlinkMacSystemFont,Roboto,Helvetica Neue,sans-serif!important}.el-form-item{margin-bottom:0!important}.el-tooltip{cursor:pointer}::-webkit-scrollbar{width:6px;height:6px;background-color:#fff}::-webkit-scrollbar-track{border-radius:6px;background-color:hsla(0,0%,78.4%,.3)}::-webkit-scrollbar-thumb{border-radius:6px;-webkit-transition:background-color .3s;transition:background-color .3s}::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background-color:rgba(144,146,152,.5)}.CodeMirror-vscrollbar:focus{outline:none}.CodeMirror-scroll,.preview-wrapper{overflow:unset;overflow-y:scroll}.fade-enter[data-v-f01d475a],.fade-leave-to[data-v-f01d475a]{opacity:0}.fade-enter-to[data-v-f01d475a],.fade-leave[data-v-f01d475a]{opacity:1}.fade-enter-active[data-v-f01d475a],.fade-leave-active[data-v-f01d475a]{-webkit-transition:all 1s;transition:all 1s}.container_night,.container_night .el-main{background-color:#333}.container_night .CodeMirror{caret-color:grey;color:grey;background-color:#1e1e1e;-webkit-box-shadow:inset 0 0 0 1px rgba(100,37,37,.102);box-shadow:inset 0 0 0 1px rgba(100,37,37,.102)}.container_night .output_night .preview{background-color:#1e1e1e;-webkit-box-shadow:0 0 70px rgba(0,0,0,.3);box-shadow:0 0 70px rgba(0,0,0,.3)}.container_night .output_night .preview-wrapper{background-color:#1e1e1e;-webkit-box-shadow:inset 0 0 0 1px hsla(0,4.3%,91%,.102);box-shadow:inset 0 0 0 1px hsla(0,4.3%,91%,.102)}.container_night .output_night .code-snippet__fix{background-color:#eee}.container_night .cm-s-style-mirror .CodeMirror-matchingbracket{color:#fff!important;background:#1e1e1e!important}.container_night .cm-s-style-mirror span.cm-tag,.container_night .cm-s-xq-light span.cm-variable-2{color:grey}.container_night .cm-s-xq-light .CodeMirror-activeline-background{background-color:transparent}.container_night .cm-s-xq-light span.cm-string{color:#8e9eb9}.container_night .cm-s-xq-light span.cm-link{color:#84868b}.container_night .editor__header{background-color:#3c3c3c}.container_night .el-button{color:#fff;background-color:#1e1e1e;border:1px solid transparent}.container_night .el-button.is-plain:focus,.container_night .el-button.is-plain:hover{background:#1e1e1e;color:#fff;border:1px solid #fff}.container_night .el-button.is-plain:focus i,.container_night .el-button.is-plain:hover i{color:#fff}.container_night .about__dialog .el-dialog,.container_night .insert__dialog .el-dialog,.container_night .reset__dialog .el-dialog,.container_night .upload__dialog .el-dialog{background-color:#333}.container_night .about__dialog .el-dialog__body,.container_night .about__dialog .el-dialog__title,.container_night .about__dialog .el-form-item__label,.container_night .insert__dialog .el-dialog__body,.container_night .insert__dialog .el-dialog__title,.container_night .insert__dialog .el-form-item__label,.container_night .reset__dialog .el-dialog__body,.container_night .reset__dialog .el-dialog__title,.container_night .reset__dialog .el-form-item__label,.container_night .upload__dialog .el-dialog__body,.container_night .upload__dialog .el-dialog__title,.container_night .upload__dialog .el-form-item__label{color:#fff}.container_night .about__dialog .el-tabs__item,.container_night .insert__dialog .el-tabs__item,.container_night .reset__dialog .el-tabs__item,.container_night .upload__dialog .el-tabs__item{color:grey}.container_night .about__dialog .is-active,.container_night .insert__dialog .is-active,.container_night .reset__dialog .is-active,.container_night .upload__dialog .is-active{color:#fff}.container_night .about__dialog .el-upload-dragger,.container_night .insert__dialog .el-upload-dragger,.container_night .reset__dialog .el-upload-dragger,.container_night .upload__dialog .el-upload-dragger{background-color:#1e1e1e}.container_night .el-icon-download,.container_night .el-icon-refresh,.container_night .el-icon-s-grid,.container_night ::v-deep .el-icon-upload{color:#fff}.container_night ::-webkit-scrollbar{background-color:#1e1e1e} \ No newline at end of file diff --git a/index.html b/index.html index 3da6226..4b4afaa 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -微信 Markdown 编辑器
\ No newline at end of file +微信 Markdown 编辑器
\ No newline at end of file diff --git a/js/app.5922b786.js b/js/app.5922b786.js new file mode 100644 index 0000000..c58ca26 --- /dev/null +++ b/js/app.5922b786.js @@ -0,0 +1,4 @@ +(function(e){function t(t){for(var o,a,s=t[0],c=t[1],l=t[2],d=0,f=[];d0}));r=i(r);var a=e.substring(0,t).split(",").map((function(e){return e.trim()}));a.forEach((function(e){o[e]||(o[e]={}),Object.keys(r).forEach((function(t){o[e][t]=r[t]}))})),e=e.slice(n+1).trim()};while(e.length>0&&-1!==e.indexOf("{")&&-1!==e.indexOf("}"))i();return o}function O(e,t){var n=e.getValue(0);n?localStorage.setItem(t,n):localStorage.removeItem(t)}function _(e){var t=g.a.format(e,{parser:"markdown",plugins:[b.a]});return t}function T(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"pre",t=document.getElementsByClassName("code__pre");t.length>0&&t.forEach((function(t){t.style.whiteSpace=e}))}function E(e){var t=document.createElement("a");t.download="content.md",t.style.display="none";var n=new Blob([e]);t.href=URL.createObjectURL(n),document.body.appendChild(t),t.click(),document.body.removeChild(t)}function I(e){for(var t=e.data,n=e.rows,o=e.cols,i="",r=[],a=0;a1?a-1:a;1===a?r.push("---\t"):r.push(t["k_".concat(c,"_").concat(s)]||"")}i+=r.join("\t|\t"),i+="\t|\n"}return i}var R=n("466b"),A=n.n(R);function $(){for(var e=document.getElementById("output"),t=e.getElementsByTagName("img"),n=0;n=1&&i<=127?t+=e.charAt(n):i>2047?(t+=String.fromCharCode(224|i>>12&15),t+=String.fromCharCode(128|i>>6&63),t+=String.fromCharCode(128|i>>0&63)):(t+=String.fromCharCode(192|i>>6&31),t+=String.fromCharCode(128|i>>0&63));return t}var we="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);function Oe(e){var t,n,o,i,r,a;o=e.length,n=0,t="";while(n>2),t+=we.charAt((3&i)<<4),t+="==";break}if(r=e.charCodeAt(n++),n==o){t+=we.charAt(i>>2),t+=we.charAt((3&i)<<4|(240&r)>>4),t+=we.charAt((15&r)<<2),t+="=";break}a=e.charCodeAt(n++),t+=we.charAt(i>>2),t+=we.charAt((3&i)<<4|(240&r)>>4),t+=we.charAt((15&r)<<2|(192&a)>>6),t+=we.charAt(63&a)}return t}function _e(e){return e=e.replace(/\+/g,"-"),e=e.replace(/\//g,"_"),e}var Te={username:"filess",repo:"images",branch:"master",accessToken:["7715d7ca67b5d3837cfdoocsmde8c38421815aa423510af","c411415bf95dbe39625doocsmd5047ba9b7a2a6c9642abe","2821cd8819fa345c053doocsmdca86ac653f8bc20db1f1b","445f0dae46ef1f2a4d6doocsmdc797301e94797b4750a4c","cc1d0c1426d0fd0902bdoocsmdd2d7184b14da61b86ec46","b67e9d15cb6f910492fdoocsmdac6b44d379c953bb19eff","618c4dc2244ccbbc088doocsmd125d17fd31b7d06a50cf3","a4b581732e1c1507458doocsmdc5b223b27dae5e2e16a55"]};function Ee(e,t){var n=localStorage.getItem("imgHost");switch(!n&&localStorage.setItem("imgHost","default"),n){case"aliOSS":return He(e,t.name);case"txCOS":return De(t);case"qiniu":return Fe(t);case"github":default:return Me(e,t.name)}}function Ie(e,t,n,o){var i=new Date,r=i.getFullYear()+"/"+(i.getMonth()+1).toString().padStart(2,"0")+"/"+i.getDate().toString().padStart(2,"0");return{method:"put",headers:{Authorization:"token "+o},branch:n,url:"https://api.github.com/repos/".concat(e,"/").concat(t,"/contents/").concat(r,"/")}}function Re(){var e=Te.accessToken[Math.floor(Math.random()*Te.accessToken.length)].replace("doocsmd","");return Ie(Te.username,Te.repo,Te.branch,e)}function Ae(){var e=JSON.parse(localStorage.getItem("githubConfig")),t=e.repo.replace("https://github.com/","").replace("http://github.com/","").replace("github.com/","").split("/"),n=t[0],o=t[1];return Ie(n,o,e.branch,e.accessToken)}function $e(e,t,n){var o=JSON.stringify(n),i=Oe(xe(o)),r=pe.a.HmacSHA1(i,t),a=r.toString(pe.a.enc.Base64);return e+":"+_e(a)+":"+i}function Me(e,t){return je.apply(this,arguments)}function je(){return je=Object(f["a"])(regeneratorRuntime.mark((function e(t,n){var o,i,r,a,s,c;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return o="github"!==localStorage.getItem("imgHost"),i=o?Re():Ae(),r=(new Date).getTime()+"-"+Object(ye["a"])()+"."+n.split(".")[1],e.next=5,fe({url:i.url+r,method:i.method,headers:i.headers,data:{branch:i.branch||"master",message:"Upload by ".concat(window.location.href),content:t}});case 5:return a=e.sent,s="raw.githubusercontent.com/filess/images/master/",c="cdn.jsdelivr.net/gh/filess/images@master/",e.abrupt("return",o?a.content.download_url.replace(s,c):a.content.download_url);case 9:case"end":return e.stop()}}),e)}))),je.apply(this,arguments)}function He(e,t){return ze.apply(this,arguments)}function ze(){return ze=Object(f["a"])(regeneratorRuntime.mark((function e(t,n){var o,i,r,a,s,c;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return o=(new Date).getTime()+"-"+Object(ye["a"])()+"."+n.split(".")[1],i=JSON.parse(localStorage.getItem("aliOSSConfig")),r=Se()(t,"base64"),e.prev=3,a=i.path+"/"+o,s=new he.a({region:i.region,bucket:i.bucket,accessKeyId:i.accessKeyId,accessKeySecret:i.accessKeySecret}),e.next=8,s.put(a,r);case 8:return c=e.sent,e.abrupt("return",""==i.cdnHost?c.url:i.cdnHost+"/"+(""==i.path?o:a));case 12:return e.prev=12,e.t0=e["catch"](3),e.abrupt("return",Promise.reject(e.t0));case 15:case"end":return e.stop()}}),e,null,[[3,12]])}))),ze.apply(this,arguments)}function De(e){return Ge.apply(this,arguments)}function Ge(){return Ge=Object(f["a"])(regeneratorRuntime.mark((function e(t){var n,o,i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return n=(new Date).getTime()+"-"+Object(ye["a"])()+"."+t.name.split(".")[1],o=JSON.parse(localStorage.getItem("txCOSConfig")),i=new ve.a({SecretId:o.secretId,SecretKey:o.secretKey}),e.abrupt("return",new Promise((function(e,r){i.putObject({Bucket:o.bucket,Region:o.region,Key:o.path+"/"+n,Body:t},(function(t,i){t?r(t):o.cdnHost?e(""!=o.path?o.cdnHost+"/"+o.path+"/"+n:o.cdnHost+"/"+n):r(i.Location)}))})));case 4:case"end":return e.stop()}}),e)}))),Ge.apply(this,arguments)}function Fe(e){return qe.apply(this,arguments)}function qe(){return qe=Object(f["a"])(regeneratorRuntime.mark((function e(t){var n,o,i,r,a,s,c;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return n=JSON.parse(localStorage.getItem("qiniuConfig")),o={scope:n.bucket,deadline:Math.trunc((new Date).getTime()/1e3)+3600},i=$e(n.accessKey,n.secretKey,o),r=n.path?n.path+"/":"",a=r+(new Date).getTime()+"-"+Object(ye["a"])()+"."+t.name.split(".")[1],s={region:n.region},c=ke["a"](t,a,i,{},s),e.abrupt("return",new Promise((function(e,t){c.subscribe({next:function(e){console.log(e)},error:function(e){t(e.message)},complete:function(t){e(n.domain+"/"+t.key)}})})));case 8:case"end":return e.stop()}}),e)}))),qe.apply(this,arguments)}var Ke={fileUpload:Ee};function Ne(e){return new Promise((function(t,n){var o=Ve(e);if(o)n(o);else{var i=new FileReader;i.readAsDataURL(e),i.onload=function(){var o=this.result.split(",").pop();Ke.fileUpload(o,e).then((function(e){t(e)})).catch((function(e){n(e)}))}}}))}function Ve(e){return/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(e.name)?e.size>5242880&&"由于公众号限制,图片大小不能超过 5.0M":"请上传 JPG/PNG/GIF 格式的图片"}var Pe={props:{value:{type:Boolean,default:!1},top:{type:Number,default:0},left:{type:Number,default:0}},data:function(){return{list:[{text:"上传图片",key:"insertPic"},{text:"插入表格",key:"insertTable"},{text:"页面重置",key:"pageReset"},{text:"下载MD文档",key:"downLoad"}]}},methods:{closeCB:function(){this.$emit("input",!1)},onMouseDown:function(e){this.$emit("menuTick",e),this.$emit("closeMenu",!1)}}},Be=Pe,Le=(n("67d9"),Object(N["a"])(Be,se,ce,!1,null,"b08f13d6",null)),Qe=Le.exports,Je=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-dialog",{staticClass:"upload__dialog",attrs:{title:"本地上传",visible:e.value},on:{close:function(t){return e.$emit("close")}}},[n("el-tabs",{attrs:{type:"card",value:"upload"}},[n("el-tab-pane",{staticClass:"upload-panel",attrs:{label:"选择上传",name:"upload"}},[n("el-select",{attrs:{placeholder:"请选择",size:"small"},on:{change:e.changeImgHost},model:{value:e.imgHost,callback:function(t){e.imgHost=t},expression:"imgHost"}},e._l(e.options,(function(e){return n("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1),n("el-upload",{directives:[{name:"loading",rawName:"v-loading",value:e.uploadingImg,expression:"uploadingImg"}],attrs:{drag:"",action:"",headers:{"Content-Type":"multipart/form-data"},"show-file-list":!1,multiple:!0,accept:".jpg, .jpeg, .png, .gif",name:"file","before-upload":e.beforeUpload}},[n("i",{staticClass:"el-icon-upload"}),n("div",{staticClass:"el-upload__text"},[e._v(" 将图片拖到此处,或 "),n("em",[e._v("点击上传")])])])],1),n("el-tab-pane",{staticClass:"github-panel",attrs:{label:"GitHub 图床",name:"github"}},[n("el-form",{ref:"form",staticClass:"setting-form",attrs:{model:e.formGitHub,"label-position":"right","label-width":"140px"}},[n("el-form-item",{attrs:{label:"GitHub 仓库",required:!0}},[n("el-input",{attrs:{placeholder:"如:github.com/yanglbme/resource"},model:{value:e.formGitHub.repo,callback:function(t){e.$set(e.formGitHub,"repo","string"===typeof t?t.trim():t)},expression:"formGitHub.repo"}})],1),n("el-form-item",{attrs:{label:"分支"}},[n("el-input",{attrs:{placeholder:"如:release,可不填,默认 master"},model:{value:e.formGitHub.branch,callback:function(t){e.$set(e.formGitHub,"branch","string"===typeof t?t.trim():t)},expression:"formGitHub.branch"}})],1),n("el-form-item",{attrs:{label:"Token",required:!0}},[n("el-input",{attrs:{"show-password":"",placeholder:"如:cc1d0c1426d0fd0902bd2d7184b14da61b8abc46"},model:{value:e.formGitHub.accessToken,callback:function(t){e.$set(e.formGitHub,"accessToken","string"===typeof t?t.trim():t)},expression:"formGitHub.accessToken"}}),n("el-link",{attrs:{type:"primary",href:"https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token",target:"_blank"}},[e._v("如何获取 GitHub Token?")])],1),n("el-form-item",[n("el-button",{attrs:{type:"primary"},on:{click:e.saveGitHubConfiguration}},[e._v("保存配置")])],1)],1)],1),n("el-tab-pane",{staticClass:"github-panel",attrs:{label:"阿里云 OSS",name:"aliOSS"}},[n("el-form",{ref:"form",staticClass:"setting-form",attrs:{model:e.formAliOSS,"label-position":"right","label-width":"140px"}},[n("el-form-item",{attrs:{label:"AccessKey ID",required:!0}},[n("el-input",{attrs:{placeholder:"如:LTAI4GdoocsmdoxUf13ylbaNHk"},model:{value:e.formAliOSS.accessKeyId,callback:function(t){e.$set(e.formAliOSS,"accessKeyId","string"===typeof t?t.trim():t)},expression:"formAliOSS.accessKeyId"}})],1),n("el-form-item",{attrs:{label:"AccessKey Secret",required:!0}},[n("el-input",{attrs:{"show-password":"",placeholder:"如:cc1d0c142doocs0902bd2d7md4b14da6ylbabc46"},model:{value:e.formAliOSS.accessKeySecret,callback:function(t){e.$set(e.formAliOSS,"accessKeySecret","string"===typeof t?t.trim():t)},expression:"formAliOSS.accessKeySecret"}})],1),n("el-form-item",{attrs:{label:"Bucket",required:!0}},[n("el-input",{attrs:{placeholder:"如:doocs"},model:{value:e.formAliOSS.bucket,callback:function(t){e.$set(e.formAliOSS,"bucket","string"===typeof t?t.trim():t)},expression:"formAliOSS.bucket"}})],1),n("el-form-item",{attrs:{label:"Bucket 所在区域",required:!0}},[n("el-input",{attrs:{placeholder:"如:oss-cn-shenzhen"},model:{value:e.formAliOSS.region,callback:function(t){e.$set(e.formAliOSS,"region","string"===typeof t?t.trim():t)},expression:"formAliOSS.region"}})],1),n("el-form-item",{attrs:{label:"自定义 CDN 域名",required:!1}},[n("el-input",{attrs:{placeholder:"如:https://imagecdn.alidaodao.com,可不填"},model:{value:e.formAliOSS.cdnHost,callback:function(t){e.$set(e.formAliOSS,"cdnHost","string"===typeof t?t.trim():t)},expression:"formAliOSS.cdnHost"}})],1),n("el-form-item",{attrs:{label:"存储路径"}},[n("el-input",{attrs:{placeholder:"如:img,可不填,默认为根目录"},model:{value:e.formAliOSS.path,callback:function(t){e.$set(e.formAliOSS,"path","string"===typeof t?t.trim():t)},expression:"formAliOSS.path"}}),n("el-link",{attrs:{type:"primary",href:"https://help.aliyun.com/document_detail/31883.html",target:"_blank"}},[e._v("如何使用阿里云 OSS?")])],1),n("el-form-item",[n("el-button",{attrs:{type:"primary"},on:{click:e.saveAliOSSConfiguration}},[e._v("保存配置")])],1)],1)],1),n("el-tab-pane",{staticClass:"github-panel",attrs:{label:"腾讯云 COS",name:"txCOS"}},[n("el-form",{ref:"form",staticClass:"setting-form",attrs:{model:e.formTxCOS,"label-position":"right","label-width":"140px"}},[n("el-form-item",{attrs:{label:"SecretId",required:!0}},[n("el-input",{attrs:{placeholder:"如:AKIDnQp1w3DOOCSs8F5MDp9tdoocsmdUPonW3"},model:{value:e.formTxCOS.secretId,callback:function(t){e.$set(e.formTxCOS,"secretId","string"===typeof t?t.trim():t)},expression:"formTxCOS.secretId"}})],1),n("el-form-item",{attrs:{label:"SecretKey",required:!0}},[n("el-input",{attrs:{"show-password":"",placeholder:"如:ukLmdtEJ9271f3DOocsMDsCXdS3YlbW0"},model:{value:e.formTxCOS.secretKey,callback:function(t){e.$set(e.formTxCOS,"secretKey","string"===typeof t?t.trim():t)},expression:"formTxCOS.secretKey"}})],1),n("el-form-item",{attrs:{label:"Bucket",required:!0}},[n("el-input",{attrs:{placeholder:"如:doocs-3212520134"},model:{value:e.formTxCOS.bucket,callback:function(t){e.$set(e.formTxCOS,"bucket","string"===typeof t?t.trim():t)},expression:"formTxCOS.bucket"}})],1),n("el-form-item",{attrs:{label:"Bucket 所在区域",required:!0}},[n("el-input",{attrs:{placeholder:"如:ap-guangzhou"},model:{value:e.formTxCOS.region,callback:function(t){e.$set(e.formTxCOS,"region","string"===typeof t?t.trim():t)},expression:"formTxCOS.region"}})],1),n("el-form-item",{attrs:{label:"自定义 CDN 域名",required:!1}},[n("el-input",{attrs:{placeholder:"如:https://imagecdn.alidaodao.com,可不填"},model:{value:e.formTxCOS.cdnHost,callback:function(t){e.$set(e.formTxCOS,"cdnHost","string"===typeof t?t.trim():t)},expression:"formTxCOS.cdnHost"}})],1),n("el-form-item",{attrs:{label:"存储路径"}},[n("el-input",{attrs:{placeholder:"如:img,可不填,默认根目录"},model:{value:e.formTxCOS.path,callback:function(t){e.$set(e.formTxCOS,"path","string"===typeof t?t.trim():t)},expression:"formTxCOS.path"}}),n("el-link",{attrs:{type:"primary",href:"https://cloud.tencent.com/document/product/436/38484",target:"_blank"}},[e._v("如何使用腾讯云 COS?")])],1),n("el-form-item",[n("el-button",{attrs:{type:"primary"},on:{click:e.saveTxCOSConfiguration}},[e._v("保存配置")])],1)],1)],1),n("el-tab-pane",{staticClass:"github-panel",attrs:{label:"七牛云 Kodo",name:"qiniu"}},[n("el-form",{ref:"form",staticClass:"setting-form",attrs:{model:e.formQiniu,"label-position":"right","label-width":"140px"}},[n("el-form-item",{attrs:{label:"AccessKey",required:!0}},[n("el-input",{attrs:{placeholder:"如:6DD3VaLJ_SQgOdoocsyTV_YWaDmdnL2n8EGx7kG"},model:{value:e.formQiniu.accessKey,callback:function(t){e.$set(e.formQiniu,"accessKey","string"===typeof t?t.trim():t)},expression:"formQiniu.accessKey"}})],1),n("el-form-item",{attrs:{label:"SecretKey",required:!0}},[n("el-input",{attrs:{"show-password":"",placeholder:"如:qgZa5qrvDOOcsmdKStD1oCjZ9nB7MDvJUs_34SIm"},model:{value:e.formQiniu.secretKey,callback:function(t){e.$set(e.formQiniu,"secretKey","string"===typeof t?t.trim():t)},expression:"formQiniu.secretKey"}})],1),n("el-form-item",{attrs:{label:"Bucket",required:!0}},[n("el-input",{attrs:{placeholder:"如:md"},model:{value:e.formQiniu.bucket,callback:function(t){e.$set(e.formQiniu,"bucket","string"===typeof t?t.trim():t)},expression:"formQiniu.bucket"}})],1),n("el-form-item",{attrs:{label:"Bucket 对应域名",required:!0}},[n("el-input",{attrs:{placeholder:"如:https://images.123ylb.cn"},model:{value:e.formQiniu.domain,callback:function(t){e.$set(e.formQiniu,"domain","string"===typeof t?t.trim():t)},expression:"formQiniu.domain"}})],1),n("el-form-item",{attrs:{label:"存储区域",required:!0}},[n("el-input",{attrs:{placeholder:"如:z2"},model:{value:e.formQiniu.region,callback:function(t){e.$set(e.formQiniu,"region","string"===typeof t?t.trim():t)},expression:"formQiniu.region"}})],1),n("el-form-item",{attrs:{label:"存储路径",required:!1}},[n("el-input",{attrs:{placeholder:"如:img,可不填,默认为根目录"},model:{value:e.formQiniu.path,callback:function(t){e.$set(e.formQiniu,"path","string"===typeof t?t.trim():t)},expression:"formQiniu.path"}}),n("el-link",{attrs:{type:"primary",href:"https://developer.qiniu.com/kodo",target:"_blank"}},[e._v("如何使用七牛云 Kodo?")])],1),n("el-form-item",[n("el-button",{attrs:{type:"primary"},on:{click:e.saveQiniuConfiguration}},[e._v("保存配置")])],1)],1)],1)],1)],1)},Ue=[],We={props:{value:{type:Boolean,default:!1}},data:function(){return{formGitHub:{repo:"",branch:"",accessToken:""},formAliOSS:{accessKeyId:"",accessKeySecret:"",bucket:"",region:"",path:"",cdnHost:""},formTxCOS:{secretId:"",secretKey:"",bucket:"",region:"",path:"",cdnHost:""},formQiniu:{accessKey:"",secretKey:"",bucket:"",domain:"",region:""},options:[{value:"default",label:"默认图床"},{value:"github",label:"GitHub"},{value:"aliOSS",label:"阿里云"},{value:"txCOS",label:"腾讯云"},{value:"qiniu",label:"七牛云"}],imgHost:"default",uploadingImg:!1}},created:function(){localStorage.getItem("githubConfig")&&(this.formGitHub=JSON.parse(localStorage.getItem("githubConfig"))),localStorage.getItem("aliOSSConfig")&&(this.formAliOSS=JSON.parse(localStorage.getItem("aliOSSConfig"))),localStorage.getItem("txCOSConfig")&&(this.formTxCOS=JSON.parse(localStorage.getItem("txCOSConfig"))),localStorage.getItem("imgHost")&&(this.imgHost=localStorage.getItem("imgHost"))},methods:{changeImgHost:function(){localStorage.setItem("imgHost",this.imgHost),this.$message({showClose:!0,message:"已成功切换图床",type:"success"})},saveGitHubConfiguration:function(){if(this.formGitHub.repo&&this.formGitHub.accessToken)localStorage.setItem("githubConfig",JSON.stringify(this.formGitHub)),this.$message({message:"保存成功",type:"success"});else{var e=this.formGitHub.repo?"token":"GitHub 仓库";this.$message({showClose:!0,message:"参数「​".concat(e,"」不能为空"),type:"error"})}},saveAliOSSConfiguration:function(){this.formAliOSS.accessKeyId&&this.formAliOSS.accessKeySecret&&this.formAliOSS.bucket&&this.formAliOSS.region?(localStorage.setItem("aliOSSConfig",JSON.stringify(this.formAliOSS)),this.$message({message:"保存成功",type:"success"})):this.$message({showClose:!0,message:"阿里云 OSS 参数配置不全",type:"error"})},saveTxCOSConfiguration:function(){this.formTxCOS.secretId&&this.formTxCOS.secretKey&&this.formTxCOS.bucket&&this.formTxCOS.region?(localStorage.setItem("txCOSConfig",JSON.stringify(this.formTxCOS)),this.$message({message:"保存成功",type:"success"})):this.$message({showClose:!0,message:"腾讯云 COS 参数配置不全",type:"error"})},saveQiniuConfiguration:function(){this.formQiniu.accessKey&&this.formQiniu.secretKey&&this.formQiniu.bucket&&this.formQiniu.domain&&this.formQiniu.region?(localStorage.setItem("qiniuConfig",JSON.stringify(this.formQiniu)),this.$message({message:"保存成功",type:"success"})):this.$message({showClose:!0,message:"七牛云 Kodo 参数配置不全",type:"error"})},beforeUpload:function(e){var t=this;if(this.validateConfig())return this.uploadingImg=!0,Ne(e).then((function(e){t.$emit("uploaded",e),t.uploadingImg=!1})).catch((function(e){t.uploadingImg=!1,t.$message({showClose:!0,message:e,type:"error"})})),!1},validateConfig:function(){var e=!0,t="";switch(localStorage.getItem("imgHost")){case"github":e=this.formGitHub.repo&&this.formGitHub.accessToken,t=e?"":"请先配置 GitHub 图床参数";break;case"aliOSS":e=this.formAliOSS.accessKeyId&&this.formAliOSS.accessKeySecret&&this.formAliOSS.bucket&&this.formAliOSS.region,t=e?"":"请先配置阿里云 OSS 参数";break;case"txCOS":e=this.formTxCOS.secretId&&this.formTxCOS.secretKey&&this.formTxCOS.bucket&&this.formTxCOS.region,t=e?"":"请先配置腾讯云 COS 参数";break;case"qiniu":e=this.formQiniu.accessKey&&this.formQiniu.secretKey&&this.formQiniu.bucket&&this.formQiniu.domain&&this.formQiniu.region,t=e?"":"请先配置七牛云 Kodo 参数";break}return t&&this.$message.error(t),e}}},Ye=We,Ze=(n("9e5b"),Object(N["a"])(Ye,Je,Ue,!1,null,"356019be",null)),Xe=Ze.exports;n("f9d4");var et={data:function(){return{showCssEditor:!1,aboutDialogVisible:!1,dialogUploadImgVisible:!1,dialogFormVisible:!1,isCoping:!1,isImgLoading:!1,backLight:!1,timeout:null,changeTimer:null,source:"",mouseLeft:0,mouseTop:0}},components:{editorHeader:J,aboutDialog:ee,insertFormDialog:ae,rightClickMenu:Qe,uploadImgDialog:Xe},computed:Object(l["a"])({},Object(F["c"])({wxRenderer:function(e){return e.wxRenderer},output:function(e){return e.output},editor:function(e){return e.editor},cssEditor:function(e){return e.cssEditor},currentSize:function(e){return e.currentSize},currentColor:function(e){return e.currentColor},nightMode:function(e){return e.nightMode},rightClickMenuVisible:function(e){return e.rightClickMenuVisible}})),created:function(){var e=this;this.initEditorState(),this.$nextTick((function(){e.initEditor(),e.initCssEditor(),e.onEditorRefresh()}))},methods:Object(l["a"])({initEditor:function(){var e=this;this.initEditorEntity(),this.editor.on("change",(function(t,n){e.changeTimer&&clearTimeout(e.changeTimer),e.changeTimer=setTimeout((function(){e.onEditorRefresh(),O(e.editor,"__editor_content")}),300)})),this.editor.on("paste",(function(t,n){if(n.clipboardData&&n.clipboardData.items&&!e.isImgLoading)for(var o=0,i=n.clipboardData.items.length;o=65&&t.keyCode<=90||189===t.keyCode)&&e.showHint(t)})),this.cssEditor.on("update",(function(t){e.cssChanged(),O(e.cssEditor,"__css_content")}))},cssChanged:function(){var e=w(this.cssEditor.getValue(0)),t=k(this.currentSize.replace("px",""));t=x(e,this.currentColor,t),this.setWxRendererOptions({theme:t}),this.onEditorRefresh()},uploaded:function(e){if(e){this.dialogUploadImgVisible=!1;var t=this.editor.getCursor(),n=e,o="![](".concat(n,")");this.editor.replaceSelection("\n".concat(o,"\n"),t),this.$message({showClose:!0,message:"图片上传成功",type:"success"}),this.onEditorRefresh()}else this.$message({showClose:!0,message:"上传图片未知异常",type:"error"})},leftAndRightScroll:function(){var e=this,t=function(t){var i,r;clearTimeout(e.timeout),"preview"===t?(i=e.$refs.preview.$el,r=document.getElementsByClassName("CodeMirror-scroll")[0],e.editor.off("scroll",n),e.timeout=setTimeout((function(){e.editor.on("scroll",n)}),300)):"editor"===t&&(i=document.getElementsByClassName("CodeMirror-scroll")[0],r=e.$refs.preview.$el,r.removeEventListener("scroll",o,!1),e.timeout=setTimeout((function(){r.addEventListener("scroll",o,!1)}),300));var a=i.scrollTop/(i.scrollHeight-i.offsetHeight),s=a*(r.scrollHeight-r.offsetHeight);r.scrollTo(0,s)},n=function(){t("editor")},o=function(){t("preview")};this.$refs.preview.$el.addEventListener("scroll",o,!1),this.editor.on("scroll",n)},onEditorRefresh:function(){this.editorRefresh(),setTimeout((function(){return PR.prettyPrint()}),0)},endCopy:function(){var e=this;this.backLight=!1,setTimeout((function(){e.isCoping=!1}),800)},downloadEditorContent:function(){E(this.editor.getValue(0))},openMenu:function(e){var t=105,n=this.$el.getBoundingClientRect().left,o=this.$el.offsetWidth,i=o-t,r=e.clientX-n;this.mouseLeft=Math.min(i,r),this.mouseTop=e.clientY+10,this.$store.commit("setRightClickMenuVisible",!0)},closeRightClickMenu:function(){this.$store.commit("setRightClickMenuVisible",!1)},onMenuEvent:function(e){switch(e){case"pageReset":this.$refs.header.showResetConfirm=!0;break;case"insertPic":this.dialogUploadImgVisible=!0;break;case"downLoad":this.downloadEditorContent();break;case"insertTable":this.dialogFormVisible=!0;default:break}}},Object(F["b"])(["initEditorState","initEditorEntity","setWxRendererOptions","editorRefresh","initCssEditorEntity"])),mounted:function(){var e=this;setTimeout((function(){e.leftAndRightScroll(),PR.prettyPrint()}),300)}},tt=et,nt=(n("c8ee"),n("85fe"),Object(N["a"])(tt,s,c,!1,null,"4f7941be",null)),ot=nt.exports,it={name:"App",components:{Loading:a["default"],CodemirrorEditor:ot},data:function(){return{loading:!0}},mounted:function(){var e=this;setTimeout((function(){e.loading=!1}),100)}},rt=it,at=(n("91eb"),Object(N["a"])(rt,i,r,!1,null,"f01d475a",null)),st=at.exports,ct=n("e0c1"),lt=n.n(ct),ut=function(e){var t=this;this.opts=e;var n=!0,o=[],i=0,r=null,a="Menlo, Operator Mono, Consolas, Monaco, monospace",s=function(e,t){return Object.assign({},e,t)};this.buildTheme=function(e){var n={},o=s(e.BASE,{"font-family":t.opts.fonts,"font-size":t.opts.size}),i=s(o,{});for(var r in e.inline)if(e.inline.hasOwnProperty(r)){var c=e.inline[r];n[r]=s(o,c)}for(var l in e.block)if(e.block.hasOwnProperty(l)){var u=e.block[l];"code"===l&&(u["font-family"]=a),n[l]=s(i,u)}return n};var c=function(e,t){var n=[],o=r[e];if(!o)return"";for(var i in o)n.push(i+":"+o[i]);return'style="'.concat(n.join(";")+(t||""),'"')},l=function(e,t){return o.push([++i,e,t]),i};this.buildFootnotes=function(){var e=o.map((function(e){return e[1]===e[2]?'['.concat(e[0],"]: ").concat(e[1],"
"):'['.concat(e[0],"] ").concat(e[1],": ").concat(e[2],"
")}));return"

引用链接

").concat(e.join("\n"),"

")},this.buildAddition=function(){return"\n \n "},this.setOptions=function(e){t.opts=s(t.opts,e)},this.hasFootnotes=function(){return 0!==o.length},this.getRenderer=function(e){o=[],i=0,r=t.buildTheme(t.opts.theme);var a=new lt.a.Renderer;return a.heading=function(e,t){switch(t){case 1:return"

").concat(e,"

");case 2:return"

").concat(e,"

");case 3:return"

").concat(e,"

");default:return"

").concat(e,"

")}},a.paragraph=function(e){return-1!=e.indexOf("").concat(e,"

")},a.blockquote=function(e){return e=e.replace(//g,"

")),"

").concat(e,"
")},a.code=function(e,t){e=e.replace(//g,">");var n=e.split("\n").map((function(e){return''.concat(e||"
","
")})),o="github";return'\n
\n
\n                        ').concat(n.join(""),"\n                    
\n
\n ")},a.codespan=function(e,t){return"").concat(e,"")},a.listitem=function(e){return"<%s/>').concat(e,"")},a.list=function(e,t,n){e=e.replace(/<\/*p.*?>/g,"");var o=e.split("<%s/>");if(!t)return e=o.join("•"),"

").concat(e,"

");e=o[0];for(var i=1;i").concat(e,"

")},a.image=function(e,t,o){var i="";o&&(i="
").concat(o,"
"));var r=c("figure"),a=c(n?"image":"image_org");return"
').concat(o,'').concat(i,"
")},a.link=function(t,n,o){if(0===t.indexOf("https://mp.weixin.qq.com"))return'").concat(o,"");if(t===o||!e)return o;var i=l(n||o,t);return"").concat(o,"[").concat(i,"]")},a.strong=function(e){return"").concat(e,"")},a.em=function(e){return''.concat(e,"")},a.table=function(e,t){return'
").concat(e,"").concat(t,"
")},a.tablecell=function(e,t){return"").concat(e,"")},a.hr=function(){return'
'},a}},dt=ut,ft=n("56b3"),mt=n.n(ft),pt='# 示例文章:Google 搜索的即时自动补全功能究竟是如何“工作”的?\n> Google 搜索**自动补全功能**的强大,相信不少朋友都能感受到,它帮助我们更快地“补全”我们所要输入的搜索关键字。那么,它怎么知道我们要输入什么内容?它又是如何工作的?在这篇文章里,我们一起来看看。\n\n## 使用自动补全\nGoogle 搜索的自动补全功能可以在 Google 搜索应用的大多数位置使用,包括 [Google](https://www.google.com/) 主页、适用于 IOS 和 Android 的 Google 应用,我们只需要在 Google 搜索框上开始键入关键字,就可以看到联想词了。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/juejin.gif)\n\n在上图示例中,我们可以看到,输入关键字 `juej`,Google 搜索会联想到“掘金”、“掘金小册”、“绝句”等等,好处就是,我们无须输入完整的关键字即可轻松完成针对这些 topics 的搜索。\n\n谷歌搜索的自动补全功能对于使用移动设备的用户来说特别有用,用户可以轻松在难以键入的小屏幕上完成搜索。当然,对于移动设备用户和台式机用户而言,这都节省了大量的时间。根据 Google 官方报告,自动补全功能可以减少大约 25% 的打字,累积起来,预计每天可以节省 200 多年的打字时间。是的,每天!\n\n> 注意,本文所提到的“**联想词**”与“**预测**”,是同一个意思。\n\n## 基于“预测”而非“建议”\nGoogle 官方将自动补全功能称之为“预测”,而不是“建议”,为什么呢?其实是有充分理由的。自动补全功能是为了**帮助用户完成他们打算进行的搜索**,而不是建议用户要执行什么搜索。\n\n那么,Google 是如何确定这些“预测”的?其实,Google 会根据趋势搜索 [trends](https://trends.google.com/trends/?geo=US) 给到我们这些“预测”。简单来说,哪个热门、哪个搜索频率高,就更可能推给我们。当然,这也与我们当前所处的位置以及我们的搜索历史相关。\n\n另外,这些“预测”也会随着我们键入的关键字的变更而更改。例如,当我们把键入的关键字从 `juej` 更改为 `juex` 时,与“掘金”相关的预测会“消失”,同时,与“觉醒”、“决心”相关联的词会出现。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/juex.gif)\n\n## 为什么看不到某些联想词?\n如果我们在输入某个关键字时看不到联想词,那么表明 Google 的算法可能检测到:\n\n- 这个关键字不是热门字词;\n- 搜索的字词太新了,我们可能需要等待几天或几周才能看到联想词;\n- 这是一个侮辱性或敏感字词,这个搜索字词违反了 Google 的相关政策。更加详细的情况,可以了解 [Google 搜索自动补全政策](https://support.google.com/websearch/answer/7368877)。\n\n## 为什么会看到某些不当的联想词?\nGoogle 拥有专门设计的系统,可以自动捕获不适当的预测结果而不显示出来。然而,Google 每天需要处理数十亿次搜索,这意味着 Google 每天会显示数十亿甚至上百亿条预测。再好的系统,也可能存在缺陷,不正确的预测也可能随时会出现。\n\n我们作为 Google 搜索的用户,如果认定某条预测违反了相关的搜索自动补全政策,可以进行举报反馈,点击右下角“**举报不当的联想查询**”并勾选相关选项即可。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/report.gif)\n\n## 如何实现自动补全算法?\n目前,Google 官方似乎并没有公开搜索自动补全的算法实现,但是业界在这方面已经有了不少研究。\n\n一个好的自动补全器必须是快速的,并且在用户键入下一个字符后立即更新联想词列表。**自动补全器的核心是一个函数,它接受输入的前缀,并搜索以给定前缀开头的词汇或语句列表**。通常来说,只需要返回少量的数目即可。\n\n接下来,我们先从一个简单且低效的实现开始,并在此基础上逐步构建更高效的方法。\n\n### 词汇表实现\n一个**简单粗暴的实现方式**是:顺序查找词汇表,依次检查每个词汇,看它是否以给定的前缀开头。\n\n但是,此方法需要将前缀与每个词汇进行匹配检查,若词汇量较少,这种方式可能勉强行得通。但是,如果词汇量规模较大,效率就太低了。\n\n一个**更好的实现方式是**:让词汇按字典顺序排序。借助二分搜索算法,可以快速搜索有序词汇表中的前缀。由于二分搜索的每一步都会将搜索的范围减半,因此,总的搜索时间与词汇表中单词数量的对数成正比,即时间复杂度是 `O(log N)`。二分搜索的性能很好,但有没有更好的实现呢?当然有,往下看。\n\n### 前缀树实现\n通常来说,许多词汇都以相同的前缀开头,比如 `need`、`nested` 都以 `ne` 开头,`seed`、`speed` 都以 `s` 开头。要是为每个单词分别存储公共前缀似乎很浪费。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/pretree.png)\n\n前缀树是一种利用公共前缀来加速补全速度的数据结构。前缀树在节点树中排列一组单词,单词沿着从根节点到叶子节点的路径存储,树的层次对应于前缀的字母位置。\n\n前缀的补全是顺着前缀定义的路径来查找的。例如,在上图的前缀树中,前缀 `ne` 对应于从子节点取左边缘 `N` 和唯一边缘 `E` 的路径。然后可以通过继续遍历从 `E` 节点可以达到的所有叶节点来生成补全列表。在图中,`ne` 的补全可以是两个分支:`-ed` 和 `-sted`。如果在数中找不到由前缀定义的路径,则说明词汇表中不包含以该前缀开头的单词。\n\n### 有限状态自动机(DFA)实现\n前缀树可以有效处理公共前缀,但是,对于其他共享词部分,仍会分别存储在每个分支中。比如,后缀 `ed`、`ing`、`tion` 在英文单词中特别常见。在上一个例子中,`e`、`d` 分别存放在了每一个分支上。\n\n有没有一种方法可以更加节省存储空间呢?有的,那就是 DFA。\n\n
\n
\n\n在上面的例子中,单词 `need`、`nested`、`seed` 和 `speed` 仅由 9 个节点组成,而上一张图中的前缀树包含了 17 个节点。\n\n可以看出,最小化前缀树 DFA 可以在很大程度上减少数据结构的大小。即使词汇量很大,最小化 DFA 通常也适合在内存中存储,避免昂贵的磁盘访问是实现快速自动补全的关键。\n\n### 一些扩展\n上面介绍了如何利用合理的数据结构实现基本的自动补全功能。这些数据结构可以通过多种方式进行扩展,从而改善用户体验。\n\n通常,满足特定前缀的词汇可能很多,而用户界面上能够显示的却不多,我们更希望能显示最常搜索或者最有价值的词汇。这通常可以通过为词汇表中的每个单词增加一个代表单词值的**权重** `weight`,并且按照权重高低来排序自动补全列表。\n\n- 对于排序后的词汇表来说,在词汇表每个元素上增加 `weight` 属性并不难;\n- 对于前缀树来说,将 `weight` 存储在叶子节点中,也是很简单的一个实现;\n- 对于 `DFA` 来说,则较为复杂。因为一个叶子节点可以通过多条路径到达。一种解决方案是将权重关联到路径而不是叶子节点。\n\n目前有不少开源库都提供了这个功能,比如主流的搜索引擎框架 [Elasticsearch](https://www.elastic.co/products/elasticsearch)、[Solr](https://lucene.apache.org/solr/) 等,基于此,我们可以实现高效而强大的自动补全功能。\n\n#### 推荐阅读\n- [阿里又一个 20k+ stars 开源项目诞生,恭喜 fastjson!](https://mp.weixin.qq.com/s/RNKDCK2KoyeuMeEs6GUrow)\n- [刷掉 90% 候选人的互联网大厂海量数据面试题(附题解 + 方法总结)](https://mp.weixin.qq.com/s/rjGqxUvrEqJNlo09GrT1Dw)\n- [好用!期待已久的文本块功能究竟如何在 Java 13 中发挥作用?](https://mp.weixin.qq.com/s/kalGv5T8AZGxTnLHr2wDsA)\n- [2019 GitHub 开源贡献排行榜新鲜出炉!微软谷歌领头,阿里跻身前 12!](https://mp.weixin.qq.com/s/_q812aGD1b9QvZ2WFI0Qgw)\n\n---\n\n欢迎关注我的公众号“**Doocs开源社区**”,原创技术文章第一时间推送。\n\n
\n \n
\n\n',gt=pt;o["default"].use(F["a"]);var ht={wxRenderer:null,output:"",html:"",editor:null,cssEditor:null,currentFont:"",currentSize:"",currentColor:"",citeStatus:0,nightMode:!1,codeTheme:"github",rightClickMenuVisible:!1},bt={setEditorValue:function(e,t){e.editor.setValue(t)},setCssEditorValue:function(e,t){e.cssEditor.setValue(t)},setWxRendererOptions:function(e,t){e.wxRenderer.setOptions(t)},setCiteStatus:function(e,t){e.citeStatus=t,localStorage.setItem("citeStatus",t)},setCurrentFont:function(e,t){e.currentFont=t,localStorage.setItem("fonts",t)},setCurrentSize:function(e,t){e.currentSize=t,localStorage.setItem("size",t)},setCurrentColor:function(e,t){e.currentColor=t,localStorage.setItem("color",t)},setCurrentCodeTheme:function(e,t){e.codeTheme=t,localStorage.setItem("codeTheme",t)},setRightClickMenuVisible:function(e,t){e.rightClickMenuVisible=t},themeChanged:function(e){e.nightMode=!e.nightMode,localStorage.setItem("nightMode",e.nightMode)},initEditorState:function(e){e.currentFont=localStorage.getItem("fonts")||j.builtinFonts[0].value,e.currentColor=localStorage.getItem("color")||j.colorOption[1].value,e.currentSize=localStorage.getItem("size")||j.sizeOption[2].value,e.codeTheme=localStorage.getItem("codeTheme")||j.codeThemeOption[0].value,e.citeStatus="true"===localStorage.getItem("citeStatus"),e.nightMode="true"===localStorage.getItem("nightMode"),e.wxRenderer=new dt({theme:y(e.currentColor),fonts:e.currentFont,size:e.currentSize,status:e.citeStatus})},initEditorEntity:function(e){e.editor=mt.a.fromTextArea(document.getElementById("editor"),{value:"",mode:"text/x-markdown",theme:"xq-light",lineNumbers:!1,lineWrapping:!0,styleActiveLine:!0,autoCloseBrackets:!0,extraKeys:{"Ctrl-F":function(e){var t=_(e.getValue(0));localStorage.setItem("__editor_content",t),e.setValue(t)},"Ctrl-S":function(e){}}}),e.editor.setValue(localStorage.getItem("__editor_content")||_(gt))},initCssEditorEntity:function(e){e.cssEditor=mt.a.fromTextArea(document.getElementById("cssEditor"),{value:"",mode:"css",theme:"style-mirror",lineNumbers:!1,lineWrapping:!0,matchBrackets:!0,autofocus:!0,extraKeys:{"Ctrl-F":function(e){var t=e.lineCount();e.autoFormatRange({line:0,ch:0},{line:t})},"Ctrl-S":function(e){}}}),e.cssEditor.setValue(localStorage.getItem("__css_content")||z)},editorRefresh:function(e){var t=lt()(e.editor.getValue(0),{renderer:e.wxRenderer.getRenderer(e.citeStatus)});t=t.replace(/(style=".*?)"/,'$1;margin-top: 0"'),e.citeStatus&&(t+=e.wxRenderer.buildFootnotes(),t+=e.wxRenderer.buildAddition()),e.output=t},clearEditorToDefault:function(e){var t=_(gt);e.editor.setValue(t),e.cssEditor.setValue(z)}},vt=new F["a"].Store({state:ht,mutations:bt,actions:{}}),Ct=n("5c96"),St=n.n(Ct);n("0fae");o["default"].use(Ct["Container"]),o["default"].use(Ct["Header"]),o["default"].use(Ct["Upload"]),o["default"].use(Ct["Tooltip"]),o["default"].use(Ct["Form"]),o["default"].use(Ct["FormItem"]),o["default"].use(Ct["Select"]),o["default"].use(Ct["Option"]),o["default"].use(Ct["ColorPicker"]),o["default"].use(Ct["Switch"]),o["default"].use(Ct["Button"]),o["default"].use(Ct["Main"]),o["default"].use(Ct["Col"]),o["default"].use(Ct["Row"]),o["default"].use(Ct["Dialog"]),o["default"].use(Ct["Loading"]),o["default"].component(Ct["Message"].name,Ct["Message"]),o["default"].prototype.$loading=Ct["Loading"].service,o["default"].prototype.$message=Ct["Message"];n("a7be"),n("0f7c"),n("8d7e"),n("7b00"),n("959b"),n("8c33"),n("31c5"),n("9b74"),n("111b"),n("90ba"),n("baa5");(function(){mt.a.extendMode("css",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(e,t){return/^[;{}]$/.test(t)}}),mt.a.defineExtension("commentRange",(function(e,t,n){var o=this,i=mt.a.innerMode(o.getMode(),o.getTokenAt(t).state).mode;o.operation((function(){if(e)o.replaceRange(i.commentEnd,n),o.replaceRange(i.commentStart,t),t.line==n.line&&t.ch==n.ch&&o.setCursor(t.line,t.ch+i.commentStart.length);else{var r=o.getRange(t,n),a=r.indexOf(i.commentStart),s=r.lastIndexOf(i.commentEnd);a>-1&&s>-1&&s>a&&(r=r.substr(0,a)+r.substring(a+i.commentStart.length,s)+r.substr(s+i.commentEnd.length)),o.replaceRange(r,t,n)}}))})),mt.a.defineExtension("autoIndentRange",(function(e,t){var n=this;this.operation((function(){for(var o=e.line;o<=t.line;o++)n.indentLine(o,"smart")}))})),mt.a.defineExtension("autoFormatRange",(function(e,t){var n=this,o=n.getMode(),i=n.getRange(e,t).split("\n"),r=mt.a.copyState(o,n.getTokenAt(e).state),a=n.getOption("tabSize"),s="",c=0,l=0==e.ch;function u(){s+="\n",l=!0,++c}for(var d=0;d",triples:"",explode:"[]{}"},n=e.Pos;function o(e,n){return"pairs"==n&&"string"==typeof e?e:"object"==Object(yt["a"])(e)&&null!=e[n]?e[n]:t[n]}e.defineOption("autoCloseBrackets",!1,(function(t,n,a){a&&a!=e.Init&&(t.removeKeyMap(i),t.state.closeBrackets=null),n&&(r(o(n,"pairs")),t.state.closeBrackets=n,t.addKeyMap(i))}));var i={Backspace:c,Enter:l};function r(e){for(var t=0;t=0;c--){var u=a[c].head;t.replaceRange("",n(u.line,u.ch-1),n(u.line,u.ch+1),"+delete")}}function l(t){var n=s(t),i=n&&o(n,"explode");if(!i||t.getOption("disableInput"))return e.Pass;for(var r=t.listSelections(),a=0;a0;return{anchor:new n(t.anchor.line,t.anchor.ch+(o?-1:1)),head:new n(t.head.line,t.head.ch+(o?1:-1))}}function d(t,i){var r=s(t);if(!r||t.getOption("disableInput"))return e.Pass;var a=o(r,"pairs"),c=a.indexOf(i);if(-1==c)return e.Pass;for(var l,d=o(r,"closeBefore"),f=o(r,"triples"),p=a.charAt(c+1)==i,g=t.listSelections(),h=c%2==0,b=0;b1&&f.indexOf(i)>=0&&t.getRange(n(S.line,S.ch-2),S)==i+i){if(S.ch>2&&/\bstring/.test(t.getTokenTypeAt(n(S.line,S.ch-2))))return e.Pass;v="addFour"}else if(p){var k=0==S.ch?" ":t.getRange(n(S.line,S.ch-1),S);if(e.isWordChar(y)||k==i||e.isWordChar(k))return e.Pass;v="both"}else{if(!h||!(0===y.length||/\s/.test(y)||d.indexOf(y)>-1))return e.Pass;v="both"}else v=p&&m(t,S)?"both":f.indexOf(i)>=0&&t.getRange(S,n(S.line,S.ch+3))==i+i+i?"skipThree":"skip";if(l){if(l!=v)return e.Pass}else l=v}var x=c%2?a.charAt(c-1):i,w=c%2?i:a.charAt(c+1);t.operation((function(){if("skip"==l)t.execCommand("goCharRight");else if("skipThree"==l)for(var e=0;e<3;e++)t.execCommand("goCharRight");else if("surround"==l){var n=t.getSelections();for(e=0;e 0 &&\n css.indexOf(\"{\") !== -1 &&\n css.indexOf(\"}\") !== -1\n ) {\n // 存储第一个左/右花括号的下标\n const lbracket = css.indexOf(\"{\");\n const rbracket = css.indexOf(\"}\");\n\n // 第一步:将声明转换为Object,如:\n // `font: 'Times New Roman' 1em; color: #ff0000; margin-top: 1em;`\n // ==>\n // `{\"font\": \"'Times New Roman' 1em\", \"color\": \"#ff0000\", \"margin-top\": \"1em\"}`\n\n // 辅助方法:将array转为object\n function toObject(array) {\n let ret = {};\n array.forEach((e) => {\n const index = e.indexOf(\":\");\n const property = e.substring(0, index).trim();\n const value = e.substring(index + 1).trim();\n ret[property] = value;\n });\n return ret;\n }\n\n // 切割声明块并移除空白符,然后放入数组中\n let declarations = css\n .substring(lbracket + 1, rbracket)\n .split(\";\")\n .map((e) => e.trim())\n .filter((e) => e.length > 0); // 移除所有\"\"空值\n\n // 转为Object对象\n declarations = toObject(declarations);\n\n // 第二步:选择器处理,每个选择器会与它对应的声明相关联,如:\n // `h1, p#bar {color: red}`\n // ==>\n // {\"h1\": {color: red}, \"p#bar\": {color: red}}\n\n let selectors = css\n .substring(0, lbracket)\n // 以,切割,并移除空格:`\"h1, p#bar, span.foo\"` => [\"h1\", \"p#bar\", \"span.foo\"]\n .split(\",\")\n .map((selector) => selector.trim());\n\n // 迭代赋值\n selectors.forEach((selector) => {\n // 若不存在,则先初始化\n if (!json[selector]) json[selector] = {};\n // 赋值到JSON\n Object.keys(declarations).forEach((key) => {\n json[selector][key] = declarations[key];\n });\n });\n\n // 继续下个声明块\n css = css.slice(rbracket + 1).trim();\n }\n\n // 返回JSON形式的结果串\n return json;\n}\n\n/**\n * 将编辑器内容保存到 LocalStorage\n * @param {*} editor\n * @param {*} name\n */\nexport function saveEditorContent(editor, name) {\n const content = editor.getValue(0);\n if (content) {\n localStorage.setItem(name, content);\n } else {\n localStorage.removeItem(name);\n }\n}\n\nexport function formatDoc(content) {\n const doc = prettier.format(content, {\n parser: \"markdown\",\n plugins: [prettierMarkdown],\n });\n return doc;\n}\n\nexport function fixCodeWhiteSpace(value = \"pre\") {\n const preDomList = document.getElementsByClassName(\"code__pre\");\n if (preDomList.length > 0) {\n preDomList.forEach((pre) => {\n pre.style.whiteSpace = value;\n });\n }\n}\n\nexport function downLoadMD(doc) {\n let downLink = document.createElement(\"a\");\n\n downLink.download = \"content.md\";\n downLink.style.display = \"none\";\n let blob = new Blob([doc]);\n\n downLink.href = URL.createObjectURL(blob);\n document.body.appendChild(downLink);\n downLink.click();\n document.body.removeChild(downLink);\n}\n\n/**\n * 生成列表字符串\n * @param {*} data 对应内容集合\n * @param {*} rows 行\n * @param {*} cols 列\n */\nexport function createTable({ data, rows, cols }) {\n let table = \"\";\n let currRow = [];\n for (let i = 0; i < rows + 2; ++i) {\n table += \"|\\t\";\n currRow = [];\n for (let j = 0; j < cols; ++j) {\n const rowIdx = i > 1 ? i - 1 : i;\n i === 1\n ? currRow.push(\"---\\t\")\n : currRow.push(data[`k_${rowIdx}_${j}`] || \"\");\n }\n table += currRow.join(\"\\t|\\t\");\n table += \"\\t|\\n\";\n }\n\n return table;\n}\n","import juice from \"juice\";\n\nexport function solveWeChatImage() {\n const clipboardDiv = document.getElementById(\"output\");\n const images = clipboardDiv.getElementsByTagName(\"img\");\n for (let i = 0; i < images.length; i++) {\n const image = images[i];\n const width = image.getAttribute(\"width\");\n const height = image.getAttribute(\"height\");\n image.removeAttribute(\"width\");\n image.removeAttribute(\"height\");\n image.style.width = width;\n image.style.height = height;\n }\n}\nexport function solveHtml() {\n const element = document.getElementById(\"output-wrapper\");\n let html = element.innerHTML;\n let res = \"\";\n res = juice.inlineContent(html, {\n inlinePseudoElements: true,\n preserveImportant: true,\n });\n return res;\n}\n","export default {\n builtinFonts: [\n {\n label: \"无衬线\",\n value:\n \"-apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif\",\n },\n {\n label: \"衬线\",\n value:\n \"Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, 'PingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif\",\n },\n ],\n sizeOption: [\n {\n label: \"12px\",\n value: \"12px\",\n desc: \"更小\",\n },\n {\n label: \"13px\",\n value: \"13px\",\n desc: \"稍小\",\n },\n {\n label: \"14px\",\n value: \"14px\",\n desc: \"推荐\",\n },\n {\n label: \"15px\",\n value: \"15px\",\n desc: \"稍大\",\n },\n {\n label: \"16px\",\n value: \"16px\",\n desc: \"更大\",\n },\n ],\n colorOption: [\n {\n label: \"经典蓝\",\n value: \"rgba(15, 76, 129, 1)\",\n desc: \"最新流行\",\n },\n {\n label: \"翡翠绿\",\n value: \"rgba(0, 152, 116, 1)\",\n desc: \"优雅清新\",\n },\n {\n label: \"活力橘\",\n value: \"rgba(250, 81, 81, 1)\",\n desc: \"热情活泼\",\n },\n ],\n codeThemeOption: [\n {\n label: \"微信\",\n value: \"wechat\",\n desc: \"默认样式\",\n },\n {\n label: \"GitHub\",\n value: \"github\",\n desc: \"精简风格\",\n },\n ],\n form: {\n rows: 1,\n cols: 1,\n },\n};\n","const DEFAULT_CSS_CONTENT = `/*\n 按Ctrl+F可格式化\n*/\n/* 一级标题样式 */\nh1 {\n}\n/* 二级标题样式 */\nh2 {\n}\n/* 三级标题样式 */\nh3 {\n}\n/* 四级标题样式 */\nh4 {\n}\n/* 图片样式 */\nimage {\n}\n/* 引用样式 */\nblockquote {\n}\n/* 引用段落样式 */\nblockquote_p {\n}\n/* 段落样式 */\np {\n}\n/* 行内代码样式 */\ncodespan {\n}\n/* 粗体样式 */\nstrong {\n}\n/* 链接样式 */\nlink {\n}\n/* 微信链接样式 */\nwx_link {\n}\n`;\nexport default DEFAULT_CSS_CONTENT;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-dialog',{staticClass:\"reset__dialog\",attrs:{\"title\":\"提示\",\"visible\":_vm.showResetConfirm},on:{\"close\":function($event){return _vm.$emit('close')}}},[_c('div',{staticClass:\"text\"},[_vm._v(\" 此操作将丢失本地缓存的文本和自定义样式,是否继续? \")]),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{attrs:{\"type\":_vm.btnType,\"plain\":\"\"},on:{\"click\":function($event){return _vm.$emit('close')}}},[_vm._v(\"取 消\")]),_c('el-button',{attrs:{\"type\":_vm.btnType,\"plain\":\"\"},on:{\"click\":function($event){return _vm.$emit('confirm')}}},[_vm._v(\"确 定\")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./resetDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./resetDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./resetDialog.vue?vue&type=template&id=5102b5f0&scoped=true&\"\nimport script from \"./resetDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./resetDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./resetDialog.vue?vue&type=style&index=0&id=5102b5f0&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5102b5f0\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./header.vue?vue&type=template&id=75e84114&scoped=true&\"\nimport script from \"./header.vue?vue&type=script&lang=js&\"\nexport * from \"./header.vue?vue&type=script&lang=js&\"\nimport style0 from \"./header.vue?vue&type=style&index=0&id=75e84114&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"75e84114\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-dialog',{staticClass:\"about__dialog\",attrs:{\"title\":\"关于\",\"visible\":_vm.value,\"width\":\"30%\",\"center\":\"\"},on:{\"close\":function($event){return _vm.$emit('input', false)}}},[_c('div',{staticStyle:{\"text-align\":\"center\"}},[_c('h3',[_vm._v(\"一款高度简洁的微信 Markdown 编辑器\")])]),_c('div',{staticStyle:{\"text-align\":\"center\",\"margin-top\":\"10px\"}},[_c('p',[_vm._v(\"扫码关注我的公众号,原创技术文章第一时间推送!\")]),_c('img',{staticStyle:{\"width\":\"40%\",\"display\":\"block\",\"margin\":\"20px auto 10px\"},attrs:{\"src\":\"https://gitee.com/yanglbme/resource/raw/master/doocs-md/qrcode.png\"}})]),_c('span',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{attrs:{\"type\":\"primary\",\"plain\":\"\"},on:{\"click\":function($event){return _vm.onRedirect('https://github.com/doocs/md')}}},[_vm._v(\"GitHub 仓库\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"plain\":\"\"},on:{\"click\":function($event){return _vm.onRedirect('https://gitee.com/doocs/md')}}},[_vm._v(\"Gitee 仓库\")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./aboutDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./aboutDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./aboutDialog.vue?vue&type=template&id=466956bb&scoped=true&\"\nimport script from \"./aboutDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./aboutDialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"466956bb\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-dialog',{staticClass:\"insert__dialog\",attrs:{\"title\":\"插入表格\",\"visible\":_vm.value,\"border\":\"\"},on:{\"close\":function($event){return _vm.$emit('input', false)}}},[_c('el-row',{staticClass:\"tb-options\",attrs:{\"type\":\"flex\",\"align\":\"middle\",\"gutter\":10}},[_c('el-col',[_vm._v(\" 行数: \"),_c('el-input-number',{attrs:{\"controls-position\":\"right\",\"min\":1,\"max\":100,\"size\":\"small\"},model:{value:(_vm.rowNum),callback:function ($$v) {_vm.rowNum=$$v},expression:\"rowNum\"}})],1),_c('el-col',[_vm._v(\" 列数: \"),_c('el-input-number',{attrs:{\"controls-position\":\"right\",\"min\":1,\"max\":100,\"size\":\"small\"},model:{value:(_vm.colNum),callback:function ($$v) {_vm.colNum=$$v},expression:\"colNum\"}})],1)],1),_c('table',{staticClass:\"input-table\",staticStyle:{\"border-collapse\":\"collapse\"}},_vm._l((_vm.rowNum + 1),function(row){return _c('tr',{key:row,class:{ 'head-style': row === 1 }},_vm._l((_vm.colNum),function(col){return _c('td',{key:col},[_c('el-input',{attrs:{\"align\":\"center\",\"placeholder\":row === 1 ? '表头' : ''},model:{value:(_vm.tableData[(\"k_\" + (row - 1) + \"_\" + (col - 1))]),callback:function ($$v) {_vm.$set(_vm.tableData, (\"k_\" + (row - 1) + \"_\" + (col - 1)), $$v)},expression:\"tableData[`k_${row - 1}_${col - 1}`]\"}})],1)}),0)}),0),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{attrs:{\"type\":_vm.btnType,\"plain\":\"\"},on:{\"click\":function($event){return _vm.$emit('input', false)}}},[_vm._v(\"取 消\")]),_c('el-button',{attrs:{\"type\":_vm.btnType,\"plain\":\"\"},on:{\"click\":_vm.insertTable}},[_vm._v(\"确 定\")])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./insertForm.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./insertForm.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./insertForm.vue?vue&type=template&id=745662b4&scoped=true&\"\nimport script from \"./insertForm.vue?vue&type=script&lang=js&\"\nexport * from \"./insertForm.vue?vue&type=script&lang=js&\"\nimport style0 from \"./insertForm.vue?vue&type=style&index=0&id=745662b4&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"745662b4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.value),expression:\"value\"}],staticClass:\"menu\",style:((\"left: \" + _vm.left + \"px;top: \" + _vm.top + \"px;\")),attrs:{\"id\":\"menu\"}},_vm._l((_vm.list),function(item){return _c('li',{key:item.key,staticClass:\"menu_item\",on:{\"mousedown\":function($event){return _vm.onMouseDown(item.key)}}},[_c('span',[_vm._v(_vm._s(item.text))])])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import axios from \"axios\";\n\n// 创建axios实例\nconst service = axios.create({\n baseURL: \"\",\n timeout: 10 * 1000, // 请求超时时间\n});\n\nservice.interceptors.request.use(\n (config) => {\n if (/^(post)|(put)|(delete)$/i.test(config.method)) {\n if (config.data && config.data.upload) {\n config.headers[\"Content-Type\"] = \"multipart/form-data\";\n }\n }\n return config;\n },\n (error) => {\n Promise.reject(error);\n }\n);\n\nservice.interceptors.response.use(\n (res) => {\n return res.data ? res.data : Promise.reject(res);\n },\n (error) => Promise.reject(error)\n);\n\nexport default service;\n","export function utf16to8(str) {\n var out, i, len, c;\n out = \"\";\n len = str.length;\n for (i = 0; i < len; i++) {\n c = str.charCodeAt(i);\n if (c >= 0x0001 && c <= 0x007f) {\n out += str.charAt(i);\n } else if (c > 0x07ff) {\n out += String.fromCharCode(0xe0 | ((c >> 12) & 0x0f));\n out += String.fromCharCode(0x80 | ((c >> 6) & 0x3f));\n out += String.fromCharCode(0x80 | ((c >> 0) & 0x3f));\n } else {\n out += String.fromCharCode(0xc0 | ((c >> 6) & 0x1f));\n out += String.fromCharCode(0x80 | ((c >> 0) & 0x3f));\n }\n }\n return out;\n}\n\nexport function utf8to16(str) {\n var out, i, len, c;\n var char2, char3;\n out = \"\";\n len = str.length;\n i = 0;\n while (i < len) {\n c = str.charCodeAt(i++);\n switch (c >> 4) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n // 0xxxxxxx\n out += str.charAt(i - 1);\n break;\n case 12:\n case 13:\n // 110x xxxx 10xx xxxx\n char2 = str.charCodeAt(i++);\n out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f));\n break;\n case 14:\n // 1110 xxxx 10xx xxxx 10xx xxxx\n char2 = str.charCodeAt(i++);\n char3 = str.charCodeAt(i++);\n out += String.fromCharCode(\n ((c & 0x0f) << 12) |\n ((char2 & 0x3f) << 6) |\n ((char3 & 0x3f) << 0)\n );\n break;\n }\n }\n return out;\n}\n\nconst base64EncodeChars =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\nconst base64DecodeChars = new Array(\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 62,\n -1,\n -1,\n -1,\n 63,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 59,\n 60,\n 61,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22,\n 23,\n 24,\n 25,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 38,\n 39,\n 40,\n 41,\n 42,\n 43,\n 44,\n 45,\n 46,\n 47,\n 48,\n 49,\n 50,\n 51,\n -1,\n -1,\n -1,\n -1,\n -1\n);\nexport function base64encode(str) {\n var out, i, len;\n var c1, c2, c3;\n len = str.length;\n i = 0;\n out = \"\";\n while (i < len) {\n c1 = str.charCodeAt(i++) & 0xff;\n if (i == len) {\n out += base64EncodeChars.charAt(c1 >> 2);\n out += base64EncodeChars.charAt((c1 & 0x3) << 4);\n out += \"==\";\n break;\n }\n c2 = str.charCodeAt(i++);\n if (i == len) {\n out += base64EncodeChars.charAt(c1 >> 2);\n out += base64EncodeChars.charAt(\n ((c1 & 0x3) << 4) | ((c2 & 0xf0) >> 4)\n );\n out += base64EncodeChars.charAt((c2 & 0xf) << 2);\n out += \"=\";\n break;\n }\n c3 = str.charCodeAt(i++);\n out += base64EncodeChars.charAt(c1 >> 2);\n out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xf0) >> 4));\n out += base64EncodeChars.charAt(((c2 & 0xf) << 2) | ((c3 & 0xc0) >> 6));\n out += base64EncodeChars.charAt(c3 & 0x3f);\n }\n return out;\n}\n\nexport function base64decode(str) {\n var c1, c2, c3, c4;\n var i, len, out;\n len = str.length;\n i = 0;\n out = \"\";\n while (i < len) {\n /* c1 */\n do {\n c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];\n } while (i < len && c1 == -1);\n if (c1 == -1) break;\n /* c2 */\n do {\n c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];\n } while (i < len && c2 == -1);\n if (c2 == -1) break;\n out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));\n /* c3 */\n do {\n c3 = str.charCodeAt(i++) & 0xff;\n if (c3 == 61) return out;\n c3 = base64DecodeChars[c3];\n } while (i < len && c3 == -1);\n if (c3 == -1) break;\n out += String.fromCharCode(((c2 & 0xf) << 4) | ((c3 & 0x3c) >> 2));\n /* c4 */\n do {\n c4 = str.charCodeAt(i++) & 0xff;\n if (c4 == 61) return out;\n c4 = base64DecodeChars[c4];\n } while (i < len && c4 == -1);\n if (c4 == -1) break;\n out += String.fromCharCode(((c3 & 0x03) << 6) | c4);\n }\n return out;\n}\n\nexport function safe64(base64) {\n base64 = base64.replace(/\\+/g, \"-\");\n base64 = base64.replace(/\\//g, \"_\");\n return base64;\n}\n","import fetch from \"./fetch\";\nimport CryptoJS from \"crypto-js\";\nimport OSS from \"ali-oss\";\nimport COS from \"cos-js-sdk-v5\";\nimport Buffer from \"buffer-from\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport * as qiniu from \"qiniu-js\";\nimport { utf16to8, base64encode, safe64 } from \"../assets/scripts/tokenTools\";\n\nconst defaultConfig = {\n username: \"filess\",\n repo: \"images\",\n branch: \"master\",\n accessToken: [\n \"7715d7ca67b5d3837cfdoocsmde8c38421815aa423510af\",\n \"c411415bf95dbe39625doocsmd5047ba9b7a2a6c9642abe\",\n \"2821cd8819fa345c053doocsmdca86ac653f8bc20db1f1b\",\n \"445f0dae46ef1f2a4d6doocsmdc797301e94797b4750a4c\",\n \"cc1d0c1426d0fd0902bdoocsmdd2d7184b14da61b86ec46\",\n \"b67e9d15cb6f910492fdoocsmdac6b44d379c953bb19eff\",\n \"618c4dc2244ccbbc088doocsmd125d17fd31b7d06a50cf3\",\n \"a4b581732e1c1507458doocsmdc5b223b27dae5e2e16a55\",\n ],\n};\n\nfunction fileUpload(content, file) {\n const imgHost = localStorage.getItem(\"imgHost\");\n !imgHost && localStorage.setItem(\"imgHost\", \"default\");\n switch (imgHost) {\n case \"aliOSS\":\n return aliOSSFileUpload(content, file.name);\n case \"txCOS\":\n return txCOSFileUpload(file);\n case \"qiniu\":\n return qiniuUpload(file);\n case \"github\":\n default:\n return ghFileUpload(content, file.name);\n }\n}\n\nfunction getGitHubCommonConfig(username, repo, branch, token) {\n const date = new Date();\n const dir =\n date.getFullYear() +\n \"/\" +\n (date.getMonth() + 1).toString().padStart(2, \"0\") +\n \"/\" +\n date.getDate().toString().padStart(2, \"0\");\n return {\n method: \"put\",\n headers: {\n Authorization: \"token \" + token,\n },\n branch: branch,\n url: `https://api.github.com/repos/${username}/${repo}/contents/${dir}/`,\n };\n}\n\nfunction getDefaultConfig() {\n const token = defaultConfig.accessToken[\n Math.floor(Math.random() * defaultConfig.accessToken.length)\n ].replace(\"doocsmd\", \"\");\n return getGitHubCommonConfig(\n defaultConfig.username,\n defaultConfig.repo,\n defaultConfig.branch,\n token\n );\n}\n\nfunction getGitHubConfig() {\n const githubConfig = JSON.parse(localStorage.getItem(\"githubConfig\"));\n const repoUrl = githubConfig.repo\n .replace(\"https://github.com/\", \"\")\n .replace(\"http://github.com/\", \"\")\n .replace(\"github.com/\", \"\")\n .split(\"/\");\n const username = repoUrl[0];\n const repo = repoUrl[1];\n return getGitHubCommonConfig(\n username,\n repo,\n githubConfig.branch,\n githubConfig.accessToken\n );\n}\n\nfunction getQiniuToken(accessKey, secretKey, putPolicy) {\n const policy = JSON.stringify(putPolicy);\n const encoded = base64encode(utf16to8(policy));\n const hash = CryptoJS.HmacSHA1(encoded, secretKey);\n const encodedSigned = hash.toString(CryptoJS.enc.Base64);\n return accessKey + \":\" + safe64(encodedSigned) + \":\" + encoded;\n}\n\nasync function ghFileUpload(content, filename) {\n const isDefault = localStorage.getItem(\"imgHost\") !== \"github\";\n const config = isDefault ? getDefaultConfig() : getGitHubConfig();\n const dateFilename =\n new Date().getTime() + \"-\" + uuidv4() + \".\" + filename.split(\".\")[1];\n const res = await fetch({\n url: config.url + dateFilename,\n method: config.method,\n headers: config.headers,\n data: {\n branch: config.branch || \"master\",\n message: `Upload by ${window.location.href}`,\n content: content,\n },\n });\n const githubResourceUrl = \"raw.githubusercontent.com/filess/images/master/\";\n const cdnResourceUrl = \"cdn.jsdelivr.net/gh/filess/images@master/\";\n return isDefault\n ? res.content.download_url.replace(githubResourceUrl, cdnResourceUrl)\n : res.content.download_url;\n}\n\nasync function aliOSSFileUpload(content, filename) {\n const dateFilename =\n new Date().getTime() + \"-\" + uuidv4() + \".\" + filename.split(\".\")[1];\n const aliOSSConfig = JSON.parse(localStorage.getItem(\"aliOSSConfig\"));\n const buffer = Buffer(content, \"base64\");\n try {\n const dir = aliOSSConfig.path + \"/\" + dateFilename;\n const client = new OSS({\n region: aliOSSConfig.region,\n bucket: aliOSSConfig.bucket,\n accessKeyId: aliOSSConfig.accessKeyId,\n accessKeySecret: aliOSSConfig.accessKeySecret,\n });\n const res = await client.put(dir, buffer);\n return aliOSSConfig.cdnHost == \"\"\n ? res.url\n : aliOSSConfig.cdnHost +\n \"/\" +\n (aliOSSConfig.path == \"\" ? dateFilename : dir);\n } catch (e) {\n return Promise.reject(e);\n }\n}\n\nasync function txCOSFileUpload(file) {\n const dateFilename =\n new Date().getTime() + \"-\" + uuidv4() + \".\" + file.name.split(\".\")[1];\n const txCOSConfig = JSON.parse(localStorage.getItem(\"txCOSConfig\"));\n const cos = new COS({\n SecretId: txCOSConfig.secretId,\n SecretKey: txCOSConfig.secretKey,\n });\n return new Promise((resolve, reject) => {\n cos.putObject(\n {\n Bucket: txCOSConfig.bucket,\n Region: txCOSConfig.region,\n Key: txCOSConfig.path + \"/\" + dateFilename,\n Body: file,\n },\n function (err, data) {\n if (err) {\n reject(err);\n } else if (txCOSConfig.cdnHost) {\n // if cdnHost exists\n resolve(\n txCOSConfig.path != \"\"\n ? txCOSConfig.cdnHost +\n \"/\" +\n txCOSConfig.path +\n \"/\" +\n dateFilename\n : txCOSConfig.cdnHost + \"/\" + dateFilename\n );\n } else {\n // if cdnHost not exists\n reject(data.Location);\n }\n }\n );\n });\n}\n\nasync function qiniuUpload(file) {\n const qiniuConfig = JSON.parse(localStorage.getItem(\"qiniuConfig\"));\n const putPolicy = {\n scope: qiniuConfig.bucket,\n deadline: Math.trunc(new Date().getTime() / 1000) + 3600,\n };\n const token = getQiniuToken(\n qiniuConfig.accessKey,\n qiniuConfig.secretKey,\n putPolicy\n );\n const dir = qiniuConfig.path ? qiniuConfig.path + \"/\" : \"\";\n const dateFilename =\n dir +\n new Date().getTime() +\n \"-\" +\n uuidv4() +\n \".\" +\n file.name.split(\".\")[1];\n const config = {\n region: qiniuConfig.region,\n };\n const observable = qiniu.upload(file, dateFilename, token, {}, config);\n return new Promise((resolve, reject) => {\n observable.subscribe({\n next: (result) => {\n console.log(result);\n },\n error: (err) => {\n reject(err.message);\n },\n complete: (result) => {\n resolve(qiniuConfig.domain + \"/\" + result.key);\n },\n });\n });\n}\n\nexport default {\n fileUpload,\n};\n","import fileApi from \"../../api/file\";\n\nexport function uploadImgFile(file) {\n return new Promise((resolve, reject) => {\n const checkImageResult = isImageIllegal(file);\n\n if (checkImageResult) {\n reject(checkImageResult);\n return;\n }\n const base64Reader = new FileReader();\n\n base64Reader.readAsDataURL(file);\n base64Reader.onload = function () {\n const base64Content = this.result.split(\",\").pop();\n fileApi\n .fileUpload(base64Content, file)\n .then((res) => {\n resolve(res);\n })\n .catch((err) => {\n reject(err);\n });\n };\n });\n}\n\nexport function isImageIllegal(file) {\n if (!/\\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(file.name)) {\n return \"请上传 JPG/PNG/GIF 格式的图片\";\n }\n if (file.size > 5 * 1024 * 1024) {\n return \"由于公众号限制,图片大小不能超过 5.0M\";\n }\n return false;\n}\n","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rightClickMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rightClickMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./rightClickMenu.vue?vue&type=template&id=b08f13d6&scoped=true&\"\nimport script from \"./rightClickMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./rightClickMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./rightClickMenu.vue?vue&type=style&index=0&id=b08f13d6&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b08f13d6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-dialog',{staticClass:\"upload__dialog\",attrs:{\"title\":\"本地上传\",\"visible\":_vm.value},on:{\"close\":function($event){return _vm.$emit('close')}}},[_c('el-tabs',{attrs:{\"type\":\"card\",\"value\":'upload'}},[_c('el-tab-pane',{staticClass:\"upload-panel\",attrs:{\"label\":\"选择上传\",\"name\":\"upload\"}},[_c('el-select',{attrs:{\"placeholder\":\"请选择\",\"size\":\"small\"},on:{\"change\":_vm.changeImgHost},model:{value:(_vm.imgHost),callback:function ($$v) {_vm.imgHost=$$v},expression:\"imgHost\"}},_vm._l((_vm.options),function(item){return _c('el-option',{key:item.value,attrs:{\"label\":item.label,\"value\":item.value}})}),1),_c('el-upload',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.uploadingImg),expression:\"uploadingImg\"}],attrs:{\"drag\":\"\",\"action\":\"\",\"headers\":{ 'Content-Type': 'multipart/form-data' },\"show-file-list\":false,\"multiple\":true,\"accept\":\".jpg, .jpeg, .png, .gif\",\"name\":\"file\",\"before-upload\":_vm.beforeUpload}},[_c('i',{staticClass:\"el-icon-upload\"}),_c('div',{staticClass:\"el-upload__text\"},[_vm._v(\" 将图片拖到此处,或 \"),_c('em',[_vm._v(\"点击上传\")])])])],1),_c('el-tab-pane',{staticClass:\"github-panel\",attrs:{\"label\":\"GitHub 图床\",\"name\":\"github\"}},[_c('el-form',{ref:\"form\",staticClass:\"setting-form\",attrs:{\"model\":_vm.formGitHub,\"label-position\":\"right\",\"label-width\":\"140px\"}},[_c('el-form-item',{attrs:{\"label\":\"GitHub 仓库\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:github.com/yanglbme/resource\"},model:{value:(_vm.formGitHub.repo),callback:function ($$v) {_vm.$set(_vm.formGitHub, \"repo\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formGitHub.repo\"}})],1),_c('el-form-item',{attrs:{\"label\":\"分支\"}},[_c('el-input',{attrs:{\"placeholder\":\"如:release,可不填,默认 master\"},model:{value:(_vm.formGitHub.branch),callback:function ($$v) {_vm.$set(_vm.formGitHub, \"branch\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formGitHub.branch\"}})],1),_c('el-form-item',{attrs:{\"label\":\"Token\",\"required\":true}},[_c('el-input',{attrs:{\"show-password\":\"\",\"placeholder\":\"如:cc1d0c1426d0fd0902bd2d7184b14da61b8abc46\"},model:{value:(_vm.formGitHub.accessToken),callback:function ($$v) {_vm.$set(_vm.formGitHub, \"accessToken\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formGitHub.accessToken\"}}),_c('el-link',{attrs:{\"type\":\"primary\",\"href\":\"https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token\",\"target\":\"_blank\"}},[_vm._v(\"如何获取 GitHub Token?\")])],1),_c('el-form-item',[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.saveGitHubConfiguration}},[_vm._v(\"保存配置\")])],1)],1)],1),_c('el-tab-pane',{staticClass:\"github-panel\",attrs:{\"label\":\"阿里云 OSS\",\"name\":\"aliOSS\"}},[_c('el-form',{ref:\"form\",staticClass:\"setting-form\",attrs:{\"model\":_vm.formAliOSS,\"label-position\":\"right\",\"label-width\":\"140px\"}},[_c('el-form-item',{attrs:{\"label\":\"AccessKey ID\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:LTAI4GdoocsmdoxUf13ylbaNHk\"},model:{value:(_vm.formAliOSS.accessKeyId),callback:function ($$v) {_vm.$set(_vm.formAliOSS, \"accessKeyId\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formAliOSS.accessKeyId\"}})],1),_c('el-form-item',{attrs:{\"label\":\"AccessKey Secret\",\"required\":true}},[_c('el-input',{attrs:{\"show-password\":\"\",\"placeholder\":\"如:cc1d0c142doocs0902bd2d7md4b14da6ylbabc46\"},model:{value:(_vm.formAliOSS.accessKeySecret),callback:function ($$v) {_vm.$set(_vm.formAliOSS, \"accessKeySecret\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formAliOSS.accessKeySecret\"}})],1),_c('el-form-item',{attrs:{\"label\":\"Bucket\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:doocs\"},model:{value:(_vm.formAliOSS.bucket),callback:function ($$v) {_vm.$set(_vm.formAliOSS, \"bucket\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formAliOSS.bucket\"}})],1),_c('el-form-item',{attrs:{\"label\":\"Bucket 所在区域\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:oss-cn-shenzhen\"},model:{value:(_vm.formAliOSS.region),callback:function ($$v) {_vm.$set(_vm.formAliOSS, \"region\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formAliOSS.region\"}})],1),_c('el-form-item',{attrs:{\"label\":\"自定义 CDN 域名\",\"required\":false}},[_c('el-input',{attrs:{\"placeholder\":\"如:https://imagecdn.alidaodao.com,可不填\"},model:{value:(_vm.formAliOSS.cdnHost),callback:function ($$v) {_vm.$set(_vm.formAliOSS, \"cdnHost\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formAliOSS.cdnHost\"}})],1),_c('el-form-item',{attrs:{\"label\":\"存储路径\"}},[_c('el-input',{attrs:{\"placeholder\":\"如:img,可不填,默认为根目录\"},model:{value:(_vm.formAliOSS.path),callback:function ($$v) {_vm.$set(_vm.formAliOSS, \"path\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formAliOSS.path\"}}),_c('el-link',{attrs:{\"type\":\"primary\",\"href\":\"https://help.aliyun.com/document_detail/31883.html\",\"target\":\"_blank\"}},[_vm._v(\"如何使用阿里云 OSS?\")])],1),_c('el-form-item',[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.saveAliOSSConfiguration}},[_vm._v(\"保存配置\")])],1)],1)],1),_c('el-tab-pane',{staticClass:\"github-panel\",attrs:{\"label\":\"腾讯云 COS\",\"name\":\"txCOS\"}},[_c('el-form',{ref:\"form\",staticClass:\"setting-form\",attrs:{\"model\":_vm.formTxCOS,\"label-position\":\"right\",\"label-width\":\"140px\"}},[_c('el-form-item',{attrs:{\"label\":\"SecretId\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:AKIDnQp1w3DOOCSs8F5MDp9tdoocsmdUPonW3\"},model:{value:(_vm.formTxCOS.secretId),callback:function ($$v) {_vm.$set(_vm.formTxCOS, \"secretId\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formTxCOS.secretId\"}})],1),_c('el-form-item',{attrs:{\"label\":\"SecretKey\",\"required\":true}},[_c('el-input',{attrs:{\"show-password\":\"\",\"placeholder\":\"如:ukLmdtEJ9271f3DOocsMDsCXdS3YlbW0\"},model:{value:(_vm.formTxCOS.secretKey),callback:function ($$v) {_vm.$set(_vm.formTxCOS, \"secretKey\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formTxCOS.secretKey\"}})],1),_c('el-form-item',{attrs:{\"label\":\"Bucket\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:doocs-3212520134\"},model:{value:(_vm.formTxCOS.bucket),callback:function ($$v) {_vm.$set(_vm.formTxCOS, \"bucket\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formTxCOS.bucket\"}})],1),_c('el-form-item',{attrs:{\"label\":\"Bucket 所在区域\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:ap-guangzhou\"},model:{value:(_vm.formTxCOS.region),callback:function ($$v) {_vm.$set(_vm.formTxCOS, \"region\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formTxCOS.region\"}})],1),_c('el-form-item',{attrs:{\"label\":\"自定义 CDN 域名\",\"required\":false}},[_c('el-input',{attrs:{\"placeholder\":\"如:https://imagecdn.alidaodao.com,可不填\"},model:{value:(_vm.formTxCOS.cdnHost),callback:function ($$v) {_vm.$set(_vm.formTxCOS, \"cdnHost\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formTxCOS.cdnHost\"}})],1),_c('el-form-item',{attrs:{\"label\":\"存储路径\"}},[_c('el-input',{attrs:{\"placeholder\":\"如:img,可不填,默认根目录\"},model:{value:(_vm.formTxCOS.path),callback:function ($$v) {_vm.$set(_vm.formTxCOS, \"path\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formTxCOS.path\"}}),_c('el-link',{attrs:{\"type\":\"primary\",\"href\":\"https://cloud.tencent.com/document/product/436/38484\",\"target\":\"_blank\"}},[_vm._v(\"如何使用腾讯云 COS?\")])],1),_c('el-form-item',[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.saveTxCOSConfiguration}},[_vm._v(\"保存配置\")])],1)],1)],1),_c('el-tab-pane',{staticClass:\"github-panel\",attrs:{\"label\":\"七牛云 Kodo\",\"name\":\"qiniu\"}},[_c('el-form',{ref:\"form\",staticClass:\"setting-form\",attrs:{\"model\":_vm.formQiniu,\"label-position\":\"right\",\"label-width\":\"140px\"}},[_c('el-form-item',{attrs:{\"label\":\"AccessKey\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:6DD3VaLJ_SQgOdoocsyTV_YWaDmdnL2n8EGx7kG\"},model:{value:(_vm.formQiniu.accessKey),callback:function ($$v) {_vm.$set(_vm.formQiniu, \"accessKey\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formQiniu.accessKey\"}})],1),_c('el-form-item',{attrs:{\"label\":\"SecretKey\",\"required\":true}},[_c('el-input',{attrs:{\"show-password\":\"\",\"placeholder\":\"如:qgZa5qrvDOOcsmdKStD1oCjZ9nB7MDvJUs_34SIm\"},model:{value:(_vm.formQiniu.secretKey),callback:function ($$v) {_vm.$set(_vm.formQiniu, \"secretKey\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formQiniu.secretKey\"}})],1),_c('el-form-item',{attrs:{\"label\":\"Bucket\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:md\"},model:{value:(_vm.formQiniu.bucket),callback:function ($$v) {_vm.$set(_vm.formQiniu, \"bucket\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formQiniu.bucket\"}})],1),_c('el-form-item',{attrs:{\"label\":\"Bucket 对应域名\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:https://images.123ylb.cn\"},model:{value:(_vm.formQiniu.domain),callback:function ($$v) {_vm.$set(_vm.formQiniu, \"domain\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formQiniu.domain\"}})],1),_c('el-form-item',{attrs:{\"label\":\"存储区域\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:z2\"},model:{value:(_vm.formQiniu.region),callback:function ($$v) {_vm.$set(_vm.formQiniu, \"region\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formQiniu.region\"}})],1),_c('el-form-item',{attrs:{\"label\":\"存储路径\",\"required\":false}},[_c('el-input',{attrs:{\"placeholder\":\"如:img,可不填,默认为根目录\"},model:{value:(_vm.formQiniu.path),callback:function ($$v) {_vm.$set(_vm.formQiniu, \"path\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formQiniu.path\"}}),_c('el-link',{attrs:{\"type\":\"primary\",\"href\":\"https://developer.qiniu.com/kodo\",\"target\":\"_blank\"}},[_vm._v(\"如何使用七牛云 Kodo?\")])],1),_c('el-form-item',[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.saveQiniuConfiguration}},[_vm._v(\"保存配置\")])],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./uploadImgDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./uploadImgDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./uploadImgDialog.vue?vue&type=template&id=b8858464&scoped=true&\"\nimport script from \"./uploadImgDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./uploadImgDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./uploadImgDialog.vue?vue&type=style&index=0&id=b8858464&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b8858464\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodemirrorEditor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodemirrorEditor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CodemirrorEditor.vue?vue&type=template&id=4f7941be&scoped=true&\"\nimport script from \"./CodemirrorEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./CodemirrorEditor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CodemirrorEditor.vue?vue&type=style&index=0&id=4f7941be&lang=less&scoped=true&\"\nimport style1 from \"./CodemirrorEditor.vue?vue&type=style&index=1&lang=less&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f7941be\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=f01d475a&scoped=true&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=f01d475a&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f01d475a\",\n null\n \n)\n\nexport default component.exports","import marked from \"marked\";\nconst WxRenderer = function (opts) {\n this.opts = opts;\n let ENV_STRETCH_IMAGE = true;\n\n let footnotes = [];\n let footnoteIndex = 0;\n let styleMapping = null;\n\n const CODE_FONT_FAMILY =\n \"Menlo, Operator Mono, Consolas, Monaco, monospace\";\n\n let merge = (base, extend) => Object.assign({}, base, extend);\n\n this.buildTheme = (themeTpl) => {\n let mapping = {};\n let base = merge(themeTpl.BASE, {\n \"font-family\": this.opts.fonts,\n \"font-size\": this.opts.size,\n });\n let base_block = merge(base, {});\n for (let ele in themeTpl.inline) {\n if (themeTpl.inline.hasOwnProperty(ele)) {\n let style = themeTpl.inline[ele];\n mapping[ele] = merge(base, style);\n }\n }\n\n for (let ele in themeTpl.block) {\n if (themeTpl.block.hasOwnProperty(ele)) {\n let style = themeTpl.block[ele];\n if (ele === \"code\") {\n style[\"font-family\"] = CODE_FONT_FAMILY;\n }\n mapping[ele] = merge(base_block, style);\n }\n }\n return mapping;\n };\n\n let getStyles = (tokenName, addition) => {\n let arr = [];\n let dict = styleMapping[tokenName];\n if (!dict) return \"\";\n for (const key in dict) {\n arr.push(key + \":\" + dict[key]);\n }\n return `style=\"${arr.join(\";\") + (addition || \"\")}\"`;\n };\n\n let addFootnote = (title, link) => {\n footnotes.push([++footnoteIndex, title, link]);\n return footnoteIndex;\n };\n\n this.buildFootnotes = () => {\n let footnoteArray = footnotes.map((x) => {\n if (x[1] === x[2]) {\n return `[${x[0]}]: ${x[1]}
`;\n }\n return `[${x[0]}] ${x[1]}: ${x[2]}
`;\n });\n return `

引用链接

${footnoteArray.join(\"\\n\")}

`;\n };\n\n this.buildAddition = () => {\n return `\n \n `;\n };\n\n this.setOptions = (newOpts) => {\n this.opts = merge(this.opts, newOpts);\n };\n\n this.hasFootnotes = () => footnotes.length !== 0;\n\n this.getRenderer = (status) => {\n footnotes = [];\n footnoteIndex = 0;\n\n styleMapping = this.buildTheme(this.opts.theme);\n let renderer = new marked.Renderer();\n\n renderer.heading = (text, level) => {\n switch (level) {\n case 1:\n return `

${text}

`;\n case 2:\n return `

${text}

`;\n case 3:\n return `

${text}

`;\n default:\n return `

${text}

`;\n }\n };\n renderer.paragraph = (text) => {\n if (text.indexOf(\"${text}

`;\n };\n\n renderer.blockquote = (text) => {\n text = text.replace(//g, `

`);\n return `

${text}
`;\n };\n renderer.code = (text, lang) => {\n text = text.replace(//g, \">\");\n const codeLines = text\n .split(\"\\n\")\n .map(\n (line) =>\n `${\n line || \"
\"\n }
`\n );\n const codeTheme = \"github\";\n return `\n
\n
\n                        ${codeLines.join(\"\")}\n                    
\n
\n `;\n };\n renderer.codespan = (text, lang) =>\n `${text}`;\n renderer.listitem = (text) =>\n `<%s/>${text}`;\n\n renderer.list = (text, ordered, start) => {\n text = text.replace(/<\\/*p.*?>/g, \"\");\n let segments = text.split(`<%s/>`);\n if (!ordered) {\n text = segments.join(\"•\");\n return `

${text}

`;\n }\n text = segments[0];\n for (let i = 1; i < segments.length; i++) {\n text = text + i + \".\" + segments[i];\n }\n return `

${text}

`;\n };\n renderer.image = (href, title, text) => {\n let subText = \"\";\n if (text) {\n subText = `
${text}
`;\n }\n let figureStyles = getStyles(\"figure\");\n let imgStyles = getStyles(\n ENV_STRETCH_IMAGE ? \"image\" : \"image_org\"\n );\n return `
\"${text}\"/${subText}
`;\n };\n renderer.link = (href, title, text) => {\n if (href.indexOf(\"https://mp.weixin.qq.com\") === 0) {\n return `${text}`;\n }\n if (href === text || !status) {\n return text;\n }\n let ref = addFootnote(title || text, href);\n return `${text}[${ref}]`;\n };\n renderer.strong = (text) =>\n `${text}`;\n renderer.em = (text) =>\n `${text}`;\n renderer.table = (header, body) =>\n `
${header}${body}
`;\n // renderer.tablerow = (text) => `${text}`;\n renderer.tablecell = (text, flags) =>\n `${text}`;\n renderer.hr = () =>\n `
`;\n return renderer;\n };\n};\nexport default WxRenderer;\n","const DEFAULT_CONTENT = `# 示例文章:Google 搜索的即时自动补全功能究竟是如何“工作”的?\n> Google 搜索**自动补全功能**的强大,相信不少朋友都能感受到,它帮助我们更快地“补全”我们所要输入的搜索关键字。那么,它怎么知道我们要输入什么内容?它又是如何工作的?在这篇文章里,我们一起来看看。\n\n## 使用自动补全\nGoogle 搜索的自动补全功能可以在 Google 搜索应用的大多数位置使用,包括 [Google](https://www.google.com/) 主页、适用于 IOS 和 Android 的 Google 应用,我们只需要在 Google 搜索框上开始键入关键字,就可以看到联想词了。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/juejin.gif)\n\n在上图示例中,我们可以看到,输入关键字 \\`juej\\`,Google 搜索会联想到“掘金”、“掘金小册”、“绝句”等等,好处就是,我们无须输入完整的关键字即可轻松完成针对这些 topics 的搜索。\n\n谷歌搜索的自动补全功能对于使用移动设备的用户来说特别有用,用户可以轻松在难以键入的小屏幕上完成搜索。当然,对于移动设备用户和台式机用户而言,这都节省了大量的时间。根据 Google 官方报告,自动补全功能可以减少大约 25% 的打字,累积起来,预计每天可以节省 200 多年的打字时间。是的,每天!\n\n> 注意,本文所提到的“**联想词**”与“**预测**”,是同一个意思。\n\n## 基于“预测”而非“建议”\nGoogle 官方将自动补全功能称之为“预测”,而不是“建议”,为什么呢?其实是有充分理由的。自动补全功能是为了**帮助用户完成他们打算进行的搜索**,而不是建议用户要执行什么搜索。\n\n那么,Google 是如何确定这些“预测”的?其实,Google 会根据趋势搜索 [trends](https://trends.google.com/trends/?geo=US) 给到我们这些“预测”。简单来说,哪个热门、哪个搜索频率高,就更可能推给我们。当然,这也与我们当前所处的位置以及我们的搜索历史相关。\n\n另外,这些“预测”也会随着我们键入的关键字的变更而更改。例如,当我们把键入的关键字从 \\`juej\\` 更改为 \\`juex\\` 时,与“掘金”相关的预测会“消失”,同时,与“觉醒”、“决心”相关联的词会出现。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/juex.gif)\n\n## 为什么看不到某些联想词?\n如果我们在输入某个关键字时看不到联想词,那么表明 Google 的算法可能检测到:\n\n- 这个关键字不是热门字词;\n- 搜索的字词太新了,我们可能需要等待几天或几周才能看到联想词;\n- 这是一个侮辱性或敏感字词,这个搜索字词违反了 Google 的相关政策。更加详细的情况,可以了解 [Google 搜索自动补全政策](https://support.google.com/websearch/answer/7368877)。\n\n## 为什么会看到某些不当的联想词?\nGoogle 拥有专门设计的系统,可以自动捕获不适当的预测结果而不显示出来。然而,Google 每天需要处理数十亿次搜索,这意味着 Google 每天会显示数十亿甚至上百亿条预测。再好的系统,也可能存在缺陷,不正确的预测也可能随时会出现。\n\n我们作为 Google 搜索的用户,如果认定某条预测违反了相关的搜索自动补全政策,可以进行举报反馈,点击右下角“**举报不当的联想查询**”并勾选相关选项即可。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/report.gif)\n\n## 如何实现自动补全算法?\n目前,Google 官方似乎并没有公开搜索自动补全的算法实现,但是业界在这方面已经有了不少研究。\n\n一个好的自动补全器必须是快速的,并且在用户键入下一个字符后立即更新联想词列表。**自动补全器的核心是一个函数,它接受输入的前缀,并搜索以给定前缀开头的词汇或语句列表**。通常来说,只需要返回少量的数目即可。\n\n接下来,我们先从一个简单且低效的实现开始,并在此基础上逐步构建更高效的方法。\n\n### 词汇表实现\n一个**简单粗暴的实现方式**是:顺序查找词汇表,依次检查每个词汇,看它是否以给定的前缀开头。\n\n但是,此方法需要将前缀与每个词汇进行匹配检查,若词汇量较少,这种方式可能勉强行得通。但是,如果词汇量规模较大,效率就太低了。\n\n一个**更好的实现方式是**:让词汇按字典顺序排序。借助二分搜索算法,可以快速搜索有序词汇表中的前缀。由于二分搜索的每一步都会将搜索的范围减半,因此,总的搜索时间与词汇表中单词数量的对数成正比,即时间复杂度是 \\`O(log N)\\`。二分搜索的性能很好,但有没有更好的实现呢?当然有,往下看。\n\n### 前缀树实现\n通常来说,许多词汇都以相同的前缀开头,比如 \\`need\\`、\\`nested\\` 都以 \\`ne\\` 开头,\\`seed\\`、\\`speed\\` 都以 \\`s\\` 开头。要是为每个单词分别存储公共前缀似乎很浪费。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/pretree.png)\n\n前缀树是一种利用公共前缀来加速补全速度的数据结构。前缀树在节点树中排列一组单词,单词沿着从根节点到叶子节点的路径存储,树的层次对应于前缀的字母位置。\n\n前缀的补全是顺着前缀定义的路径来查找的。例如,在上图的前缀树中,前缀 \\`ne\\` 对应于从子节点取左边缘 \\`N\\` 和唯一边缘 \\`E\\` 的路径。然后可以通过继续遍历从 \\`E\\` 节点可以达到的所有叶节点来生成补全列表。在图中,\\`ne\\` 的补全可以是两个分支:\\`-ed\\` 和 \\`-sted\\`。如果在数中找不到由前缀定义的路径,则说明词汇表中不包含以该前缀开头的单词。\n\n### 有限状态自动机(DFA)实现\n前缀树可以有效处理公共前缀,但是,对于其他共享词部分,仍会分别存储在每个分支中。比如,后缀 \\`ed\\`、\\`ing\\`、\\`tion\\` 在英文单词中特别常见。在上一个例子中,\\`e\\`、\\`d\\` 分别存放在了每一个分支上。\n\n有没有一种方法可以更加节省存储空间呢?有的,那就是 DFA。\n\n
\n
\n\n在上面的例子中,单词 \\`need\\`、\\`nested\\`、\\`seed\\` 和 \\`speed\\` 仅由 9 个节点组成,而上一张图中的前缀树包含了 17 个节点。\n\n可以看出,最小化前缀树 DFA 可以在很大程度上减少数据结构的大小。即使词汇量很大,最小化 DFA 通常也适合在内存中存储,避免昂贵的磁盘访问是实现快速自动补全的关键。\n\n### 一些扩展\n上面介绍了如何利用合理的数据结构实现基本的自动补全功能。这些数据结构可以通过多种方式进行扩展,从而改善用户体验。\n\n通常,满足特定前缀的词汇可能很多,而用户界面上能够显示的却不多,我们更希望能显示最常搜索或者最有价值的词汇。这通常可以通过为词汇表中的每个单词增加一个代表单词值的**权重** \\`weight\\`,并且按照权重高低来排序自动补全列表。\n\n- 对于排序后的词汇表来说,在词汇表每个元素上增加 \\`weight\\` 属性并不难;\n- 对于前缀树来说,将 \\`weight\\` 存储在叶子节点中,也是很简单的一个实现;\n- 对于 \\`DFA\\` 来说,则较为复杂。因为一个叶子节点可以通过多条路径到达。一种解决方案是将权重关联到路径而不是叶子节点。\n\n目前有不少开源库都提供了这个功能,比如主流的搜索引擎框架 [Elasticsearch](https://www.elastic.co/products/elasticsearch)、[Solr](https://lucene.apache.org/solr/) 等,基于此,我们可以实现高效而强大的自动补全功能。\n\n#### 推荐阅读\n- [阿里又一个 20k+ stars 开源项目诞生,恭喜 fastjson!](https://mp.weixin.qq.com/s/RNKDCK2KoyeuMeEs6GUrow)\n- [刷掉 90% 候选人的互联网大厂海量数据面试题(附题解 + 方法总结)](https://mp.weixin.qq.com/s/rjGqxUvrEqJNlo09GrT1Dw)\n- [好用!期待已久的文本块功能究竟如何在 Java 13 中发挥作用?](https://mp.weixin.qq.com/s/kalGv5T8AZGxTnLHr2wDsA)\n- [2019 GitHub 开源贡献排行榜新鲜出炉!微软谷歌领头,阿里跻身前 12!](https://mp.weixin.qq.com/s/_q812aGD1b9QvZ2WFI0Qgw)\n\n---\n\n欢迎关注我的公众号“**Doocs开源社区**”,原创技术文章第一时间推送。\n\n
\n \n
\n\n`;\nexport default DEFAULT_CONTENT;\n","import Vue from \"vue\";\nimport Vuex from \"vuex\";\nimport config from \"../assets/scripts/config\";\nimport WxRenderer from \"../assets/scripts/renderers/wx-renderer\";\nimport marked from \"marked\";\nimport CodeMirror from \"codemirror/lib/codemirror\";\nimport DEFAULT_CONTENT from \"../assets/scripts/default-content\";\nimport DEFAULT_CSS_CONTENT from \"../assets/scripts/themes/default-theme-css\";\nimport { setColor, formatDoc } from \"../assets/scripts/util\";\n\nVue.use(Vuex);\n\nconst state = {\n wxRenderer: null,\n output: \"\",\n html: \"\",\n editor: null,\n cssEditor: null,\n currentFont: \"\",\n currentSize: \"\",\n currentColor: \"\",\n citeStatus: 0,\n nightMode: false,\n codeTheme: \"github\",\n rightClickMenuVisible: false,\n};\nconst mutations = {\n setEditorValue(state, data) {\n state.editor.setValue(data);\n },\n setCssEditorValue(state, data) {\n state.cssEditor.setValue(data);\n },\n setWxRendererOptions(state, data) {\n state.wxRenderer.setOptions(data);\n },\n setCiteStatus(state, data) {\n state.citeStatus = data;\n localStorage.setItem(\"citeStatus\", data);\n },\n setCurrentFont(state, data) {\n state.currentFont = data;\n localStorage.setItem(\"fonts\", data);\n },\n setCurrentSize(state, data) {\n state.currentSize = data;\n localStorage.setItem(\"size\", data);\n },\n setCurrentColor(state, data) {\n state.currentColor = data;\n localStorage.setItem(\"color\", data);\n },\n setCurrentCodeTheme(state, data) {\n state.codeTheme = data;\n localStorage.setItem(\"codeTheme\", data);\n },\n setRightClickMenuVisible(state, data) {\n state.rightClickMenuVisible = data;\n },\n themeChanged(state) {\n state.nightMode = !state.nightMode;\n localStorage.setItem(\"nightMode\", state.nightMode);\n },\n initEditorState(state) {\n state.currentFont =\n localStorage.getItem(\"fonts\") || config.builtinFonts[0].value;\n state.currentColor =\n localStorage.getItem(\"color\") || config.colorOption[1].value;\n state.currentSize =\n localStorage.getItem(\"size\") || config.sizeOption[2].value;\n state.codeTheme =\n localStorage.getItem(\"codeTheme\") ||\n config.codeThemeOption[0].value;\n state.citeStatus = localStorage.getItem(\"citeStatus\") === \"true\";\n state.nightMode = localStorage.getItem(\"nightMode\") === \"true\";\n state.wxRenderer = new WxRenderer({\n theme: setColor(state.currentColor),\n fonts: state.currentFont,\n size: state.currentSize,\n status: state.citeStatus,\n });\n },\n initEditorEntity(state) {\n state.editor = CodeMirror.fromTextArea(\n document.getElementById(\"editor\"),\n {\n value: \"\",\n mode: \"text/x-markdown\",\n theme: \"xq-light\",\n lineNumbers: false,\n lineWrapping: true,\n styleActiveLine: true,\n autoCloseBrackets: true,\n extraKeys: {\n \"Ctrl-F\": function autoFormat(editor) {\n const doc = formatDoc(editor.getValue(0));\n localStorage.setItem(\"__editor_content\", doc);\n editor.setValue(doc);\n },\n \"Ctrl-S\": function save(editor) {},\n },\n }\n );\n\n // 如果有编辑器内容被保存则读取,否则加载默认内容\n state.editor.setValue(\n localStorage.getItem(\"__editor_content\") ||\n formatDoc(DEFAULT_CONTENT)\n );\n },\n initCssEditorEntity(state) {\n state.cssEditor = CodeMirror.fromTextArea(\n document.getElementById(\"cssEditor\"),\n {\n value: \"\",\n mode: \"css\",\n theme: \"style-mirror\",\n lineNumbers: false,\n lineWrapping: true,\n matchBrackets: true,\n autofocus: true,\n extraKeys: {\n \"Ctrl-F\": function autoFormat(editor) {\n const totalLines = editor.lineCount();\n\n editor.autoFormatRange(\n {\n line: 0,\n ch: 0,\n },\n {\n line: totalLines,\n }\n );\n },\n \"Ctrl-S\": function save(editor) {},\n },\n }\n );\n\n // 如果有编辑器内容被保存则读取,否则加载默认内容\n state.cssEditor.setValue(\n localStorage.getItem(\"__css_content\") || DEFAULT_CSS_CONTENT\n );\n },\n editorRefresh(state) {\n let output = marked(state.editor.getValue(0), {\n renderer: state.wxRenderer.getRenderer(state.citeStatus),\n });\n\n // 去除第一行的 margin-top\n output = output.replace(/(style=\".*?)\"/, '$1;margin-top: 0\"');\n if (state.citeStatus) {\n // 引用脚注\n output += state.wxRenderer.buildFootnotes();\n // 附加的一些 style\n output += state.wxRenderer.buildAddition();\n }\n state.output = output;\n },\n clearEditorToDefault(state) {\n const doc = formatDoc(DEFAULT_CONTENT);\n\n state.editor.setValue(doc);\n state.cssEditor.setValue(DEFAULT_CSS_CONTENT);\n },\n};\n\nexport default new Vuex.Store({\n state,\n mutations,\n actions: {},\n});\n","import Vue from \"vue\";\nimport {\n Container,\n Header,\n Upload,\n Tooltip,\n Form,\n FormItem,\n Select,\n Option,\n ColorPicker,\n Switch,\n Button,\n Main,\n Col,\n Row,\n Dialog,\n Loading,\n Message,\n} from \"element-ui\";\n\nVue.use(Container);\nVue.use(Header);\nVue.use(Upload);\nVue.use(Tooltip);\nVue.use(Form);\nVue.use(FormItem);\nVue.use(Select);\nVue.use(Option);\nVue.use(ColorPicker);\nVue.use(Switch);\nVue.use(Button);\nVue.use(Main);\nVue.use(Col);\nVue.use(Row);\nVue.use(Dialog);\nVue.use(Loading);\nVue.component(Message.name, Message);\n\nVue.prototype.$loading = Loading.service;\nVue.prototype.$message = Message;\n","import CodeMirror from \"codemirror/lib/codemirror\";\n(function () {\n CodeMirror.extendMode(\"css\", {\n commentStart: \"/*\",\n commentEnd: \"*/\",\n newlineAfterToken: function (type, content) {\n return /^[;{}]$/.test(content);\n },\n });\n\n // Comment/uncomment the specified range\n CodeMirror.defineExtension(\"commentRange\", function (isComment, from, to) {\n var cm = this;\n var curMode = CodeMirror.innerMode(\n cm.getMode(),\n cm.getTokenAt(from).state\n ).mode;\n cm.operation(function () {\n if (isComment) {\n // Comment range\n cm.replaceRange(curMode.commentEnd, to);\n cm.replaceRange(curMode.commentStart, from);\n if (from.line == to.line && from.ch == to.ch) {\n // An empty comment inserted - put cursor inside\n cm.setCursor(\n from.line,\n from.ch + curMode.commentStart.length\n );\n }\n } else {\n // Uncomment range\n var selText = cm.getRange(from, to);\n var startIndex = selText.indexOf(curMode.commentStart);\n var endIndex = selText.lastIndexOf(curMode.commentEnd);\n if (startIndex > -1 && endIndex > -1 && endIndex > startIndex) {\n // Take string till comment start\n selText =\n selText.substr(0, startIndex) +\n // From comment start till comment end\n selText.substring(\n startIndex + curMode.commentStart.length,\n endIndex\n ) +\n // From comment end till string end\n selText.substr(endIndex + curMode.commentEnd.length);\n }\n cm.replaceRange(selText, from, to);\n }\n });\n });\n\n // Applies automatic mode-aware indentation to the specified range\n CodeMirror.defineExtension(\"autoIndentRange\", function (from, to) {\n var cmInstance = this;\n this.operation(function () {\n for (var i = from.line; i <= to.line; i++) {\n cmInstance.indentLine(i, \"smart\");\n }\n });\n });\n\n // Applies automatic formatting to the specified range\n CodeMirror.defineExtension(\"autoFormatRange\", function (from, to) {\n var cm = this;\n var outer = cm.getMode();\n var text = cm.getRange(from, to).split(\"\\n\");\n var state = CodeMirror.copyState(outer, cm.getTokenAt(from).state);\n var tabSize = cm.getOption(\"tabSize\");\n\n var out = \"\";\n var lines = 0;\n var atSol = from.ch == 0;\n\n function newline() {\n out += \"\\n\";\n atSol = true;\n ++lines;\n }\n\n for (var i = 0; i < text.length; ++i) {\n var stream = new CodeMirror.StringStream(text[i], tabSize);\n while (!stream.eol()) {\n var inner = CodeMirror.innerMode(outer, state);\n var style = outer.token(stream, state);\n var cur = stream.current();\n stream.start = stream.pos;\n if (!atSol || /\\S/.test(cur)) {\n out += cur;\n atSol = false;\n }\n if (\n !atSol &&\n inner.mode.newlineAfterToken &&\n inner.mode.newlineAfterToken(\n style,\n cur,\n stream.string.slice(stream.pos) || text[i + 1] || \"\",\n inner.state\n )\n ) {\n newline();\n }\n }\n if (!stream.pos && outer.blankLine) outer.blankLine(state);\n if (!atSol) newline();\n }\n\n cm.operation(function () {\n cm.replaceRange(out, from, to);\n for (\n var cur = from.line + 1, end = from.line + lines;\n cur <= end;\n ++cur\n ) {\n cm.indentLine(cur, \"smart\");\n }\n cm.setSelection(from, cm.getCursor(false));\n });\n });\n})();\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\nimport CodeMirror from \"codemirror/lib/codemirror\";\n(function (CodeMirror) {\n var defaults = {\n pairs: \"()[]{}''\\\"\\\"\",\n closeBefore: \")]}'\\\":;>\",\n triples: \"\",\n explode: \"[]{}\",\n };\n\n var Pos = CodeMirror.Pos;\n\n CodeMirror.defineOption(\"autoCloseBrackets\", false, function (\n cm,\n val,\n old\n ) {\n if (old && old != CodeMirror.Init) {\n cm.removeKeyMap(keyMap);\n cm.state.closeBrackets = null;\n }\n if (val) {\n ensureBound(getOption(val, \"pairs\"));\n cm.state.closeBrackets = val;\n cm.addKeyMap(keyMap);\n }\n });\n\n function getOption(conf, name) {\n if (name == \"pairs\" && typeof conf == \"string\") return conf;\n if (typeof conf == \"object\" && conf[name] != null) return conf[name];\n return defaults[name];\n }\n\n var keyMap = {\n Backspace: handleBackspace,\n Enter: handleEnter,\n };\n\n function ensureBound(chars) {\n for (var i = 0; i < chars.length; i++) {\n var ch = chars.charAt(i),\n key = \"'\" + ch + \"'\";\n if (!keyMap[key]) keyMap[key] = handler(ch);\n }\n }\n ensureBound(defaults.pairs + \"`\");\n\n function handler(ch) {\n return function (cm) {\n return handleChar(cm, ch);\n };\n }\n\n function getConfig(cm) {\n var deflt = cm.state.closeBrackets;\n if (!deflt || deflt.override) return deflt;\n var mode = cm.getModeAt(cm.getCursor());\n return mode.closeBrackets || deflt;\n }\n\n function handleBackspace(cm) {\n var conf = getConfig(cm);\n if (!conf || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n var pairs = getOption(conf, \"pairs\");\n var ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) return CodeMirror.Pass;\n var around = charsAround(cm, ranges[i].head);\n if (!around || pairs.indexOf(around) % 2 != 0)\n return CodeMirror.Pass;\n }\n for (var i = ranges.length - 1; i >= 0; i--) {\n var cur = ranges[i].head;\n cm.replaceRange(\n \"\",\n Pos(cur.line, cur.ch - 1),\n Pos(cur.line, cur.ch + 1),\n \"+delete\"\n );\n }\n }\n\n function handleEnter(cm) {\n var conf = getConfig(cm);\n var explode = conf && getOption(conf, \"explode\");\n if (!explode || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n var ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) return CodeMirror.Pass;\n var around = charsAround(cm, ranges[i].head);\n if (!around || explode.indexOf(around) % 2 != 0)\n return CodeMirror.Pass;\n }\n cm.operation(function () {\n var linesep = cm.lineSeparator() || \"\\n\";\n cm.replaceSelection(linesep + linesep, null);\n cm.execCommand(\"goCharLeft\");\n ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++) {\n var line = ranges[i].head.line;\n cm.indentLine(line, null, true);\n cm.indentLine(line + 1, null, true);\n }\n });\n }\n\n function contractSelection(sel) {\n var inverted = CodeMirror.cmpPos(sel.anchor, sel.head) > 0;\n return {\n anchor: new Pos(\n sel.anchor.line,\n sel.anchor.ch + (inverted ? -1 : 1)\n ),\n head: new Pos(sel.head.line, sel.head.ch + (inverted ? 1 : -1)),\n };\n }\n\n function handleChar(cm, ch) {\n var conf = getConfig(cm);\n if (!conf || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n var pairs = getOption(conf, \"pairs\");\n var pos = pairs.indexOf(ch);\n if (pos == -1) return CodeMirror.Pass;\n\n var closeBefore = getOption(conf, \"closeBefore\");\n\n var triples = getOption(conf, \"triples\");\n\n var identical = pairs.charAt(pos + 1) == ch;\n var ranges = cm.listSelections();\n var opening = pos % 2 == 0;\n\n var type;\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i],\n cur = range.head,\n curType;\n var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1));\n if (opening && !range.empty()) {\n curType = \"surround\";\n } else if ((identical || !opening) && next == ch) {\n if (identical && stringStartsAfter(cm, cur)) curType = \"both\";\n else if (\n triples.indexOf(ch) >= 0 &&\n cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == ch + ch + ch\n )\n curType = \"skipThree\";\n else curType = \"skip\";\n } else if (\n identical &&\n cur.ch > 1 &&\n triples.indexOf(ch) >= 0 &&\n cm.getRange(Pos(cur.line, cur.ch - 2), cur) == ch + ch\n ) {\n if (\n cur.ch > 2 &&\n /\\bstring/.test(\n cm.getTokenTypeAt(Pos(cur.line, cur.ch - 2))\n )\n )\n return CodeMirror.Pass;\n curType = \"addFour\";\n } else if (identical) {\n var prev =\n cur.ch == 0\n ? \" \"\n : cm.getRange(Pos(cur.line, cur.ch - 1), cur);\n if (\n !CodeMirror.isWordChar(next) &&\n prev != ch &&\n !CodeMirror.isWordChar(prev)\n )\n curType = \"both\";\n else return CodeMirror.Pass;\n } else if (\n opening &&\n (next.length === 0 ||\n /\\s/.test(next) ||\n closeBefore.indexOf(next) > -1)\n ) {\n curType = \"both\";\n } else {\n return CodeMirror.Pass;\n }\n if (!type) type = curType;\n else if (type != curType) return CodeMirror.Pass;\n }\n\n var left = pos % 2 ? pairs.charAt(pos - 1) : ch;\n var right = pos % 2 ? ch : pairs.charAt(pos + 1);\n cm.operation(function () {\n if (type == \"skip\") {\n cm.execCommand(\"goCharRight\");\n } else if (type == \"skipThree\") {\n for (var i = 0; i < 3; i++) cm.execCommand(\"goCharRight\");\n } else if (type == \"surround\") {\n var sels = cm.getSelections();\n for (var i = 0; i < sels.length; i++)\n sels[i] = left + sels[i] + right;\n cm.replaceSelections(sels, \"around\");\n sels = cm.listSelections().slice();\n for (var i = 0; i < sels.length; i++)\n sels[i] = contractSelection(sels[i]);\n cm.setSelections(sels);\n } else if (type == \"both\") {\n cm.replaceSelection(left + right, null);\n cm.triggerElectric(left + right);\n cm.execCommand(\"goCharLeft\");\n } else if (type == \"addFour\") {\n cm.replaceSelection(left + left + left + left, \"before\");\n cm.execCommand(\"goCharRight\");\n }\n });\n }\n\n function charsAround(cm, pos) {\n var str = cm.getRange(\n Pos(pos.line, pos.ch - 1),\n Pos(pos.line, pos.ch + 1)\n );\n return str.length == 2 ? str : null;\n }\n\n function stringStartsAfter(cm, pos) {\n var token = cm.getTokenAt(Pos(pos.line, pos.ch + 1));\n return (\n /\\bstring/.test(token.type) &&\n token.start == pos.ch &&\n (pos.ch == 0 || !/\\bstring/.test(cm.getTokenTypeAt(pos)))\n );\n }\n})(CodeMirror);\n","import Vue from \"vue\";\nimport App from \"./App.vue\";\nimport store from \"./store\";\nimport ElementUI from \"element-ui\";\nimport \"element-ui/lib/theme-chalk/index.css\";\nimport \"./plugins/element\";\nimport \"codemirror/lib/codemirror.css\";\nimport \"codemirror/theme/ambiance.css\";\nimport \"codemirror/theme/xq-light.css\";\nimport \"codemirror/mode/css/css\";\nimport \"codemirror/mode/markdown/markdown\";\nimport \"codemirror/addon/edit/matchbrackets\";\nimport \"codemirror/addon/selection/active-line\";\nimport \"codemirror/addon/hint/show-hint.js\";\nimport \"codemirror/addon/hint/css-hint.js\";\nimport \"./assets/less/theme.less\";\n// 对codemirror预处理\nimport \"./assets/scripts/format\";\nimport \"./assets/scripts/closebrackets\";\nVue.use(ElementUI);\n\nVue.config.productionTip = false;\n\nnew Vue({\n store,\n render: (h) => h(App),\n}).$mount(\"#app\");\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rightClickMenu.vue?vue&type=style&index=0&id=b08f13d6&lang=less&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./uploadImgDialog.vue?vue&type=style&index=0&id=b8858464&lang=less&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodemirrorEditor.vue?vue&type=style&index=1&lang=less&\"","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&id=f01d475a&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./insertForm.vue?vue&type=style&index=0&id=745662b4&lang=less&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodemirrorEditor.vue?vue&type=style&index=0&id=4f7941be&lang=less&scoped=true&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=style&index=0&id=75e84114&lang=less&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./resetDialog.vue?vue&type=style&index=0&id=5102b5f0&lang=less&scoped=true&\""],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/Loading.vue?12be","webpack:///./src/components/Loading.vue","webpack:///./src/components/Loading.vue?11cf","webpack:///./src/App.vue?1f8a","webpack:///./src/view/CodemirrorEditor.vue?400a","webpack:///./src/components/CodemirrorEditor/header.vue?b95f","webpack:///./src/assets/scripts/themes/default-theme.js","webpack:///./src/assets/scripts/util.js","webpack:///./src/assets/scripts/converter.js","webpack:///./src/assets/scripts/config.js","webpack:///./src/assets/scripts/themes/default-theme-css.js","webpack:///./src/components/CodemirrorEditor/resetDialog.vue?46ca","webpack:///src/components/CodemirrorEditor/resetDialog.vue","webpack:///./src/components/CodemirrorEditor/resetDialog.vue?9ca8","webpack:///./src/components/CodemirrorEditor/resetDialog.vue","webpack:///src/components/CodemirrorEditor/header.vue","webpack:///./src/components/CodemirrorEditor/header.vue?ada2","webpack:///./src/components/CodemirrorEditor/header.vue","webpack:///./src/components/CodemirrorEditor/aboutDialog.vue?f7ff","webpack:///src/components/CodemirrorEditor/aboutDialog.vue","webpack:///./src/components/CodemirrorEditor/aboutDialog.vue?d507","webpack:///./src/components/CodemirrorEditor/aboutDialog.vue","webpack:///./src/components/CodemirrorEditor/insertForm.vue?2347","webpack:///src/components/CodemirrorEditor/insertForm.vue","webpack:///./src/components/CodemirrorEditor/insertForm.vue?240a","webpack:///./src/components/CodemirrorEditor/insertForm.vue","webpack:///./src/components/CodemirrorEditor/rightClickMenu.vue?1d5f","webpack:///./src/api/fetch.js","webpack:///./src/assets/scripts/tokenTools.js","webpack:///./src/api/file.js","webpack:///./src/assets/scripts/uploadImageFile.js","webpack:///src/components/CodemirrorEditor/rightClickMenu.vue","webpack:///./src/components/CodemirrorEditor/rightClickMenu.vue?d3c9","webpack:///./src/components/CodemirrorEditor/rightClickMenu.vue","webpack:///./src/components/CodemirrorEditor/uploadImgDialog.vue?88cf","webpack:///src/components/CodemirrorEditor/uploadImgDialog.vue","webpack:///./src/components/CodemirrorEditor/uploadImgDialog.vue?b979","webpack:///./src/components/CodemirrorEditor/uploadImgDialog.vue","webpack:///src/view/CodemirrorEditor.vue","webpack:///./src/view/CodemirrorEditor.vue?e829","webpack:///./src/view/CodemirrorEditor.vue","webpack:///src/App.vue","webpack:///./src/App.vue?1160","webpack:///./src/App.vue","webpack:///./src/assets/scripts/renderers/wx-renderer.js","webpack:///./src/assets/scripts/default-content.js","webpack:///./src/store/index.js","webpack:///./src/plugins/element/index.js","webpack:///./src/assets/scripts/format.js","webpack:///./src/assets/scripts/closebrackets.js","webpack:///./src/main.js","webpack:///./src/components/CodemirrorEditor/rightClickMenu.vue?975e","webpack:///./src/view/CodemirrorEditor.vue?8abc","webpack:///./src/App.vue?cef0","webpack:///./src/components/CodemirrorEditor/uploadImgDialog.vue?fd55","webpack:///./src/components/CodemirrorEditor/insertForm.vue?9a0f","webpack:///./src/view/CodemirrorEditor.vue?016c","webpack:///./src/components/Loading.vue?f931","webpack:///./src/components/CodemirrorEditor/header.vue?ba7e","webpack:///./src/components/CodemirrorEditor/resetDialog.vue?862e"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","component","render","_vm","this","_h","$createElement","_self","_c","_m","staticRenderFns","staticClass","attrs","_v","class","container_night","nightMode","ref","on","onEditorRefresh","cssChanged","downloadEditorContent","$event","showCssEditor","aboutDialogVisible","dialogFormVisible","dialogUploadImgVisible","isCoping","backLight","endCopy","nativeOn","preventDefault","openMenu","directives","rawName","expression","domProps","target","composing","source","output_night","_s","output","_e","uploaded","model","callback","$$v","mouseLeft","mouseTop","onMenuEvent","closeRightClickMenu","rightClickMenuVisible","effect","$emit","showResetConfirm","fontChanged","selectFont","_l","config","font","style","fontFamily","label","sizeChanged","selectSize","size","desc","colorChanged","selectColor","color","statusChanged","citeStatus","btnType","customStyle","copy","btnContent","themeChanged","confirmReset","cancelReset","BASE","BASE_BLOCK","margin","block","h1","display","padding","h2","background","h3","h4","blockquote","blockquote_p","code","overflow","border","image","width","image_org","ol","ul","footnotes","figure","inline","listitem","codespan","link","wx_link","strong","table","thead","td","footnote","figcaption","setColorWithTemplate","template","custom_theme","JSON","parse","stringify","setColorWithCustomTemplate","setFontSizeWithTemplate","fontSize","setColor","default_theme","setFontSize","customCssWithTemplate","jsonString","theme","assign","css2json","css","open","close","indexOf","substring","json","lbracket","rbracket","toObject","array","ret","forEach","e","index","trim","declarations","split","map","filter","selectors","selector","keys","saveEditorContent","editor","content","getValue","localStorage","setItem","removeItem","formatDoc","doc","prettier","format","parser","plugins","prettierMarkdown","fixCodeWhiteSpace","preDomList","document","getElementsByClassName","pre","whiteSpace","downLoadMD","downLink","createElement","download","blob","Blob","href","URL","createObjectURL","body","appendChild","click","removeChild","createTable","rows","cols","currRow","rowIdx","join","solveWeChatImage","clipboardDiv","getElementById","images","getElementsByTagName","getAttribute","height","removeAttribute","solveHtml","element","html","innerHTML","res","juice","inlineContent","inlinePseudoElements","preserveImportant","builtinFonts","sizeOption","colorOption","codeThemeOption","form","DEFAULT_CSS_CONTENT","slot","staticStyle","onRedirect","rowNum","colNum","row","col","tableData","$set","insertTable","left","top","item","onMouseDown","text","service","axios","baseURL","timeout","interceptors","request","use","test","method","upload","headers","error","Promise","reject","response","utf16to8","str","out","len","charCodeAt","charAt","String","fromCharCode","base64EncodeChars","Array","base64encode","c1","c2","c3","safe64","base64","replace","defaultConfig","username","repo","branch","accessToken","fileUpload","file","imgHost","getItem","aliOSSFileUpload","txCOSFileUpload","qiniuUpload","ghFileUpload","getGitHubCommonConfig","token","date","Date","dir","getFullYear","getMonth","toString","padStart","getDate","Authorization","url","getDefaultConfig","Math","floor","random","getGitHubConfig","githubConfig","repoUrl","getQiniuToken","accessKey","secretKey","putPolicy","policy","encoded","hash","CryptoJS","HmacSHA1","encodedSigned","enc","Base64","filename","isDefault","dateFilename","getTime","uuidv4","fetch","message","location","githubResourceUrl","cdnResourceUrl","download_url","aliOSSConfig","buffer","Buffer","path","client","OSS","region","bucket","accessKeyId","accessKeySecret","put","cdnHost","txCOSConfig","cos","COS","SecretId","secretId","SecretKey","resolve","putObject","Bucket","Region","Key","Body","err","Location","qiniuConfig","scope","deadline","trunc","observable","qiniu","subscribe","next","console","log","complete","domain","uploadImgFile","checkImageResult","isImageIllegal","base64Reader","FileReader","readAsDataURL","onload","base64Content","pop","fileApi","then","catch","changeImgHost","beforeUpload","formGitHub","saveGitHubConfiguration","formAliOSS","saveAliOSSConfiguration","formTxCOS","saveTxCOSConfiguration","formQiniu","saveQiniuConfiguration","WxRenderer","opts","ENV_STRETCH_IMAGE","footnoteIndex","styleMapping","CODE_FONT_FAMILY","merge","base","extend","buildTheme","themeTpl","mapping","fonts","base_block","ele","getStyles","tokenName","addition","arr","dict","addFootnote","title","buildFootnotes","footnoteArray","x","buildAddition","setOptions","newOpts","hasFootnotes","getRenderer","status","renderer","marked","Renderer","heading","level","paragraph","lang","codeLines","line","codeTheme","list","ordered","start","segments","subText","figureStyles","imgStyles","em","header","tablecell","flags","hr","DEFAULT_CONTENT","Vue","Vuex","state","wxRenderer","cssEditor","currentFont","currentSize","currentColor","mutations","setEditorValue","setValue","setCssEditorValue","setWxRendererOptions","setCiteStatus","setCurrentFont","setCurrentSize","setCurrentColor","setCurrentCodeTheme","setRightClickMenuVisible","initEditorState","initEditorEntity","CodeMirror","fromTextArea","lineNumbers","lineWrapping","styleActiveLine","autoCloseBrackets","extraKeys","initCssEditorEntity","matchBrackets","autofocus","totalLines","lineCount","autoFormatRange","ch","editorRefresh","clearEditorToDefault","Store","actions","Container","Header","Upload","Tooltip","Form","FormItem","Select","Option","ColorPicker","Switch","Button","Main","Col","Row","Dialog","Loading","Message","$loading","$message","extendMode","commentStart","commentEnd","newlineAfterToken","type","defineExtension","isComment","from","to","cm","curMode","innerMode","getMode","getTokenAt","operation","replaceRange","setCursor","selText","getRange","startIndex","endIndex","lastIndexOf","substr","cmInstance","indentLine","outer","copyState","tabSize","getOption","lines","atSol","newline","stream","StringStream","eol","inner","cur","current","pos","string","blankLine","end","setSelection","getCursor","defaults","pairs","closeBefore","triples","explode","Pos","conf","defineOption","val","old","Init","removeKeyMap","keyMap","closeBrackets","ensureBound","addKeyMap","Backspace","handleBackspace","Enter","handleEnter","chars","handler","handleChar","getConfig","deflt","override","getModeAt","Pass","ranges","listSelections","empty","around","charsAround","head","linesep","lineSeparator","replaceSelection","execCommand","contractSelection","sel","inverted","cmpPos","anchor","identical","opening","curType","range","getTokenTypeAt","prev","isWordChar","stringStartsAfter","right","sels","getSelections","replaceSelections","setSelections","triggerElectric","ElementUI","productionTip","store","h","App","$mount"],"mappings":"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IACC,GACA,GACA,EACD,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACC,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACC,GACA,GACA,GACA,GACA,GACA,EACD,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACC,GACA,GACA,GACA,GACA,GAEE,SAASC,GAAaT,GACzB,IAAIC,EAAK7S,EAAG8S,EACRQ,EAAIC,EAAIC,EACZV,EAAMF,EAAI1S,OACVF,EAAI,EACJ6S,EAAM,GACN,MAAO7S,EAAI8S,EAAK,CAEZ,GADAQ,EAA2B,IAAtBV,EAAIG,WAAW/S,KAChBA,GAAK8S,EAAK,CACVD,GAAOM,GAAkBH,OAAOM,GAAM,GACtCT,GAAOM,GAAkBH,QAAa,EAALM,IAAa,GAC9CT,GAAO,KACP,MAGJ,GADAU,EAAKX,EAAIG,WAAW/S,KAChBA,GAAK8S,EAAK,CACVD,GAAOM,GAAkBH,OAAOM,GAAM,GACtCT,GAAOM,GAAkBH,QACd,EAALM,IAAa,GAAY,IAALC,IAAc,GAExCV,GAAOM,GAAkBH,QAAa,GAALO,IAAa,GAC9CV,GAAO,IACP,MAEJW,EAAKZ,EAAIG,WAAW/S,KACpB6S,GAAOM,GAAkBH,OAAOM,GAAM,GACtCT,GAAOM,GAAkBH,QAAc,EAALM,IAAa,GAAY,IAALC,IAAc,GACpEV,GAAOM,GAAkBH,QAAc,GAALO,IAAa,GAAY,IAALC,IAAc,GACpEX,GAAOM,GAAkBH,OAAY,GAALQ,GAEpC,OAAOX,EAyCJ,SAASY,GAAOC,GAGnB,OAFAA,EAASA,EAAOC,QAAQ,MAAO,KAC/BD,EAASA,EAAOC,QAAQ,MAAO,KACxBD,EClQX,IAAME,GAAgB,CAClBC,SAAU,SACVC,KA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","file":"js/app.5922b786.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/md/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=style&index=0&id=28c1354c&lang=less&scoped=true&\"","import { render, staticRenderFns } from \"./Loading.vue?vue&type=template&id=28c1354c&scoped=true&\"\nimport script from \"./Loading.vue?vue&type=script&lang=js&\"\nexport * from \"./Loading.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Loading.vue?vue&type=style&index=0&id=28c1354c&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"28c1354c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"loading\",attrs:{\"id\":\"loading\"}},[_c('div',{staticClass:\"loading-wrapper\"},[_c('div',{staticClass:\"loading-anim\"}),_c('div',{staticClass:\"loading-text\"},[_vm._v(\"致力于让 Markdown 编辑更简单\")])])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.loading)?_c('transition',{attrs:{\"name\":\"fade\"}},[_c('loading')],1):_c('codemirror-editor')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\",class:{ container_night: _vm.nightMode }},[_c('el-container',[_c('el-header',{staticClass:\"editor__header\"},[_c('editor-header',{ref:\"header\",on:{\"refresh\":_vm.onEditorRefresh,\"cssChanged\":_vm.cssChanged,\"downLoad\":_vm.downloadEditorContent,\"showCssEditor\":function($event){_vm.showCssEditor = !_vm.showCssEditor},\"showAboutDialog\":function($event){_vm.aboutDialogVisible = true},\"showDialogForm\":function($event){_vm.dialogFormVisible = true},\"showDialogUploadImg\":function($event){_vm.dialogUploadImgVisible = true},\"startCopy\":function($event){(_vm.isCoping = true), (_vm.backLight = true)},\"endCopy\":_vm.endCopy}})],1),_c('el-main',{staticClass:\"main-body\"},[_c('el-row',{staticClass:\"main-section\"},[_c('el-col',{attrs:{\"span\":12},nativeOn:{\"contextmenu\":function($event){$event.preventDefault();return _vm.openMenu($event)}}},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.source),expression:\"source\"}],attrs:{\"id\":\"editor\",\"type\":\"textarea\",\"placeholder\":\"Your markdown text here.\"},domProps:{\"value\":(_vm.source)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.source=$event.target.value}}})]),_c('el-col',{ref:\"preview\",staticClass:\"preview-wrapper\",class:{\n 'preview-wrapper_night': _vm.nightMode && _vm.isCoping,\n },attrs:{\"span\":12,\"id\":\"preview\"}},[_c('section',{class:{ output_night: _vm.nightMode && !_vm.backLight },attrs:{\"id\":\"output-wrapper\"}},[_c('div',{staticClass:\"preview\"},[_c('section',{attrs:{\"id\":\"output\"},domProps:{\"innerHTML\":_vm._s(_vm.output)}}),(_vm.nightMode && _vm.isCoping)?_c('div',{staticClass:\"loading-mask\"},[_c('div',{staticClass:\"loading__img\"}),_c('span',[_vm._v(\"正在生成\")])]):_vm._e()])])]),_c('transition',{attrs:{\"name\":\"custom-classes-transition\",\"enter-active-class\":\"bounceInRight\"}},[_c('el-col',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showCssEditor),expression:\"showCssEditor\"}],attrs:{\"id\":\"cssBox\",\"span\":12}},[_c('textarea',{attrs:{\"id\":\"cssEditor\",\"type\":\"textarea\",\"placeholder\":\"Your custom css here.\"}})])],1)],1)],1)],1),_c('upload-img-dialog',{on:{\"close\":function($event){_vm.dialogUploadImgVisible = false},\"uploaded\":_vm.uploaded},model:{value:(_vm.dialogUploadImgVisible),callback:function ($$v) {_vm.dialogUploadImgVisible=$$v},expression:\"dialogUploadImgVisible\"}}),_c('about-dialog',{model:{value:(_vm.aboutDialogVisible),callback:function ($$v) {_vm.aboutDialogVisible=$$v},expression:\"aboutDialogVisible\"}}),_c('insert-form-dialog',{model:{value:(_vm.dialogFormVisible),callback:function ($$v) {_vm.dialogFormVisible=$$v},expression:\"dialogFormVisible\"}}),_c('right-click-menu',{attrs:{\"left\":_vm.mouseLeft,\"top\":_vm.mouseTop},on:{\"menuTick\":_vm.onMenuEvent,\"closeMenu\":_vm.closeRightClickMenu},model:{value:(_vm.rightClickMenuVisible),callback:function ($$v) {_vm.rightClickMenuVisible=$$v},expression:\"rightClickMenuVisible\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-container',{staticClass:\"top is-dark\"},[_c('el-tooltip',{attrs:{\"effect\":_vm.effect,\"content\":\"上传图片\",\"placement\":\"bottom-start\"}},[_c('i',{staticClass:\"el-icon-upload\",attrs:{\"size\":\"medium\"},on:{\"click\":function($event){return _vm.$emit('showDialogUploadImg')}}})]),_c('el-tooltip',{staticClass:\"header__item\",attrs:{\"effect\":_vm.effect,\"content\":\"下载编辑框Markdown文档\",\"placement\":\"bottom-start\"}},[_c('i',{staticClass:\"el-icon-download\",attrs:{\"size\":\"medium\"},on:{\"click\":function($event){return _vm.$emit('downLoad')}}})]),_c('el-tooltip',{staticClass:\"header__item\",attrs:{\"effect\":_vm.effect,\"content\":\"重置页面\",\"placement\":\"bottom-start\"}},[_c('i',{staticClass:\"el-icon-refresh\",attrs:{\"size\":\"medium\"},on:{\"click\":function($event){_vm.showResetConfirm = true}}})]),_c('el-tooltip',{staticClass:\"header__item header__item_last\",attrs:{\"effect\":_vm.effect,\"content\":\"插入表格\",\"placement\":\"bottom-start\"}},[_c('i',{staticClass:\"el-icon-s-grid\",attrs:{\"size\":\"medium\"},on:{\"click\":function($event){return _vm.$emit('showDialogForm')}}})]),_c('el-form',{staticClass:\"ctrl\",attrs:{\"size\":\"mini\",\"inline\":true}},[_c('el-form-item',[_c('el-select',{attrs:{\"size\":\"mini\",\"placeholder\":\"选择字体\",\"clearable\":\"\"},on:{\"change\":_vm.fontChanged},model:{value:(_vm.selectFont),callback:function ($$v) {_vm.selectFont=$$v},expression:\"selectFont\"}},_vm._l((_vm.config.builtinFonts),function(font){return _c('el-option',{key:font.value,style:({ fontFamily: font.value }),attrs:{\"label\":font.label,\"value\":font.value}},[_c('span',{staticClass:\"select-item-left\"},[_vm._v(_vm._s(font.label))]),_c('span',{staticClass:\"select-item-right\"},[_vm._v(\"Abc\")])])}),1)],1),_c('el-form-item',[_c('el-select',{attrs:{\"size\":\"mini\",\"placeholder\":\"选择段落字号\",\"clearable\":\"\"},on:{\"change\":_vm.sizeChanged},model:{value:(_vm.selectSize),callback:function ($$v) {_vm.selectSize=$$v},expression:\"selectSize\"}},_vm._l((_vm.config.sizeOption),function(size){return _c('el-option',{key:size.value,attrs:{\"label\":size.label,\"value\":size.value}},[_c('span',{staticClass:\"select-item-left\"},[_vm._v(_vm._s(size.label))]),_c('span',{staticClass:\"select-item-right\"},[_vm._v(_vm._s(size.desc))])])}),1)],1),_c('el-form-item',[_c('el-select',{attrs:{\"size\":\"mini\",\"placeholder\":\"选择颜色\",\"clearable\":\"\"},on:{\"change\":_vm.colorChanged},model:{value:(_vm.selectColor),callback:function ($$v) {_vm.selectColor=$$v},expression:\"selectColor\"}},_vm._l((_vm.config.colorOption),function(color){return _c('el-option',{key:color.value,attrs:{\"label\":color.label,\"value\":color.value}},[_c('span',{staticClass:\"select-item-left\"},[_vm._v(_vm._s(color.label))]),_c('span',{staticClass:\"select-item-right\"},[_vm._v(_vm._s(color.desc))])])}),1)],1),_c('el-tooltip',{attrs:{\"content\":\"自定义颜色\",\"effect\":_vm.effect,\"placement\":\"top\"}},[_c('el-color-picker',{attrs:{\"size\":\"mini\",\"show-alpha\":\"\"},on:{\"change\":_vm.colorChanged},model:{value:(_vm.selectColor),callback:function ($$v) {_vm.selectColor=$$v},expression:\"selectColor\"}})],1),_c('el-tooltip',{attrs:{\"content\":\"微信外链自动转为文末引用\",\"effect\":_vm.effect,\"placement\":\"top\"}},[_c('el-switch',{staticClass:\"header__switch\",attrs:{\"active-color\":\"#67c23a\",\"inactive-color\":\"#dcdfe6\"},on:{\"change\":_vm.statusChanged},model:{value:(_vm.citeStatus),callback:function ($$v) {_vm.citeStatus=$$v},expression:\"citeStatus\"}})],1)],1),_c('el-tooltip',{staticClass:\"item\",attrs:{\"effect\":_vm.effect,\"content\":\"自定义CSS样式\",\"placement\":\"left\"}},[_c('el-button',{attrs:{\"type\":_vm.btnType,\"plain\":\"\",\"size\":\"medium\",\"icon\":\"el-icon-setting\"},on:{\"click\":_vm.customStyle}})],1),_c('el-button',{attrs:{\"type\":_vm.btnType,\"plain\":\"\",\"size\":\"medium\",\"placement\":\"bottom-start\"},on:{\"click\":_vm.copy}},[_vm._v(\"复制\")]),_c('el-button',{staticClass:\"about\",attrs:{\"type\":_vm.btnType,\"plain\":\"\",\"size\":\"medium\"},on:{\"click\":function($event){return _vm.$emit('showAboutDialog')}}},[_vm._v(\"关于\")]),_c('el-tooltip',{attrs:{\"content\":_vm.btnContent,\"effect\":_vm.effect,\"placement\":\"bottom-start\"}},[(_vm.nightMode)?_c('div',{staticClass:\"mode__switch mode__switch_black\",on:{\"click\":_vm.themeChanged}}):_c('div',{staticClass:\"mode__switch\",on:{\"click\":_vm.themeChanged}})]),_c('resetDialog',{attrs:{\"showResetConfirm\":_vm.showResetConfirm},on:{\"confirm\":_vm.confirmReset,\"close\":_vm.cancelReset}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default {\n BASE: {\n \"text-align\": \"left\",\n color: \"#3f3f3f\",\n \"line-height\": \"1.75\",\n },\n BASE_BLOCK: {\n margin: \"1em 8px\",\n },\n block: {\n // 一级标题样式\n h1: {\n \"font-size\": \"1.2em\",\n \"text-align\": \"center\",\n \"font-weight\": \"bold\",\n display: \"table\",\n margin: \"2em auto 1em\",\n padding: \"0 1em\",\n \"border-bottom\": \"2px solid rgba(0, 152, 116, 0.9)\",\n },\n\n // 二级标题样式\n h2: {\n \"font-size\": \"1.2em\",\n \"text-align\": \"center\",\n \"font-weight\": \"bold\",\n display: \"table\",\n margin: \"4em auto 2em\",\n padding: \"0 0.2em\",\n background: \"rgba(0, 152, 116, 0.9)\",\n color: \"#fff\",\n },\n\n // 三级标题样式\n h3: {\n \"font-weight\": \"bold\",\n \"font-size\": \"1.1em\",\n margin: \"2em 8px 0.75em 0\",\n \"line-height\": \"1.2\",\n \"padding-left\": \"8px\",\n \"border-left\": \"3px solid rgba(0, 152, 116, 0.9)\",\n },\n\n // 四级标题样式\n h4: {\n \"font-weight\": \"bold\",\n \"font-size\": \"1em\",\n margin: \"2em 8px 0.5em\",\n color: \"rgba(66, 185, 131, 0.9)\",\n },\n\n // 段落样式\n p: {\n margin: \"1.5em 8px\",\n \"letter-spacing\": \"0.1em\",\n },\n\n // 引用样式\n blockquote: {\n \"font-style\": \"normal\",\n \"border-left\": \"none\",\n padding: \"1em\",\n \"border-radius\": \"4px\",\n color: \"#FEEEED\",\n background: \"rgba(27,31,35,.05)\",\n margin: \"2em 8px\",\n },\n\n blockquote_p: {\n \"letter-spacing\": \"0.1em\",\n color: \"rgb(80, 80, 80)\",\n \"font-size\": \"1em\",\n display: \"block\",\n },\n\n code: {\n \"font-size\": \"80%\",\n overflow: \"auto\",\n color: \"#333\",\n \"white-space\": \"pre\",\n background: \"rgb(247, 247, 247)\",\n \"border-radius\": \"2px\",\n padding: \"10px\",\n \"line-height\": \"1.5\",\n border: \"1px solid rgb(236,236,236)\",\n margin: \"20px 0\",\n },\n\n image: {\n \"border-radius\": \"4px\",\n display: \"block\",\n margin: \"0.1em auto 0.5em\",\n width: \"100% !important\",\n },\n\n image_org: {\n \"border-radius\": \"4px\",\n display: \"block\",\n },\n\n ol: {\n \"margin-left\": \"0\",\n \"padding-left\": \"1em\",\n },\n\n ul: {\n \"margin-left\": \"0\",\n \"padding-left\": \"1em\",\n \"list-style\": \"circle\",\n },\n\n footnotes: {\n margin: \"0.5em 8px\",\n \"font-size\": \"80%\",\n },\n\n figure: {\n margin: \"1.5em 8px\",\n },\n },\n inline: {\n listitem: {\n \"text-indent\": \"-1em\",\n display: \"block\",\n margin: \"0.2em 8px\",\n },\n\n codespan: {\n \"font-size\": \"90%\",\n \"white-space\": \"pre\",\n color: \"#d14\",\n background: \"rgba(27,31,35,.05)\",\n padding: \"3px 5px\",\n \"border-radius\": \"4px\",\n },\n\n link: {\n color: \"#576b95\",\n },\n\n wx_link: {\n color: \"#576b95\",\n \"text-decoration\": \"none\",\n },\n\n // 字体加粗样式\n strong: {\n color: \"rgba(15, 76, 129, 0.9)\",\n \"font-weight\": \"bold\",\n },\n\n table: {\n \"border-collapse\": \"collapse\",\n \"text-align\": \"center\",\n margin: \"1em 8px\",\n },\n\n thead: {\n background: \"rgba(0, 0, 0, 0.05)\",\n \"font-weight\": \"bold\",\n },\n\n td: {\n border: \"1px solid #dfdfdf\",\n padding: \"0.25em 0.5em\",\n },\n\n footnote: {\n \"font-size\": \"12px\",\n },\n\n figcaption: {\n \"text-align\": \"center\",\n color: \"#888\",\n \"font-size\": \"0.8em\",\n },\n },\n};\n","import default_theme from \"./themes/default-theme\";\nimport prettier from \"prettier/standalone\";\nimport prettierMarkdown from \"prettier/parser-markdown\";\n\n// 设置自定义颜色\nexport function setColorWithTemplate(template) {\n return function (color) {\n let custom_theme = JSON.parse(JSON.stringify(template));\n custom_theme.block.h1[\"border-bottom\"] = `2px solid ${color}`;\n custom_theme.block.h2[\"background\"] = color;\n custom_theme.block.h3[\"border-left\"] = `3px solid ${color}`;\n custom_theme.block.h4[\"color\"] = color;\n custom_theme.inline.strong[\"color\"] = color;\n return custom_theme;\n };\n}\n\nexport const setColorWithCustomTemplate = function setColorWithCustomTemplate(\n template,\n color\n) {\n let custom_theme = JSON.parse(JSON.stringify(template));\n custom_theme.block.h1[\"border-bottom\"] = `2px solid ${color}`;\n custom_theme.block.h2[\"background\"] = color;\n custom_theme.block.h3[\"border-left\"] = `3px solid ${color}`;\n custom_theme.block.h4[\"color\"] = color;\n custom_theme.inline.strong[\"color\"] = color;\n return custom_theme;\n};\n\n// 设置自定义字体大小\nexport function setFontSizeWithTemplate(template) {\n return function (fontSize) {\n let custom_theme = JSON.parse(JSON.stringify(template));\n custom_theme.block.h1[\"font-size\"] = `${fontSize * 1.14}px`;\n custom_theme.block.h2[\"font-size\"] = `${fontSize * 1.1}px`;\n custom_theme.block.h3[\"font-size\"] = `${fontSize}px`;\n custom_theme.block.h4[\"font-size\"] = `${fontSize}px`;\n return custom_theme;\n };\n}\n\nexport const setColor = setColorWithTemplate(default_theme);\nexport const setFontSize = setFontSizeWithTemplate(default_theme);\n\nexport function customCssWithTemplate(jsonString, color, theme) {\n let custom_theme = JSON.parse(JSON.stringify(theme));\n // block\n custom_theme.block.h1[\"border-bottom\"] = `2px solid ${color}`;\n custom_theme.block.h2[\"background\"] = color;\n custom_theme.block.h3[\"border-left\"] = `3px solid ${color}`;\n custom_theme.block.h4[\"color\"] = color;\n custom_theme.inline.strong[\"color\"] = color;\n\n custom_theme.block.h1 = Object.assign(custom_theme.block.h1, jsonString.h1);\n custom_theme.block.h2 = Object.assign(custom_theme.block.h2, jsonString.h2);\n custom_theme.block.h3 = Object.assign(custom_theme.block.h3, jsonString.h3);\n custom_theme.block.h4 = Object.assign(custom_theme.block.h4, jsonString.h4);\n custom_theme.block.p = Object.assign(custom_theme.block.p, jsonString.p);\n custom_theme.block.blockquote = Object.assign(\n custom_theme.block.blockquote,\n jsonString.blockquote\n );\n custom_theme.block.blockquote_p = Object.assign(\n custom_theme.block.blockquote_p,\n jsonString.blockquote_p\n );\n custom_theme.block.image = Object.assign(\n custom_theme.block.image,\n jsonString.image\n );\n\n // inline\n custom_theme.inline.strong = Object.assign(\n custom_theme.inline.strong,\n jsonString.strong\n );\n custom_theme.inline.codespan = Object.assign(\n custom_theme.inline.codespan,\n jsonString.codespan\n );\n custom_theme.inline.link = Object.assign(\n custom_theme.inline.link,\n jsonString.link\n );\n custom_theme.inline.wx_link = Object.assign(\n custom_theme.inline.wx_link,\n jsonString.wx_link\n );\n\n return custom_theme;\n}\n\n/**\n * 将CSS形式的字符串转换为JSON\n *\n * @param {css字符串} css\n */\nexport function css2json(css) {\n // 移除CSS所有注释\n let open, close;\n while (\n (open = css.indexOf(\"/*\")) !== -1 &&\n (close = css.indexOf(\"*/\")) !== -1\n ) {\n css = css.substring(0, open) + css.substring(close + 2);\n }\n\n // 初始化返回值\n let json = {};\n\n while (\n css.length > 0 &&\n css.indexOf(\"{\") !== -1 &&\n css.indexOf(\"}\") !== -1\n ) {\n // 存储第一个左/右花括号的下标\n const lbracket = css.indexOf(\"{\");\n const rbracket = css.indexOf(\"}\");\n\n // 第一步:将声明转换为Object,如:\n // `font: 'Times New Roman' 1em; color: #ff0000; margin-top: 1em;`\n // ==>\n // `{\"font\": \"'Times New Roman' 1em\", \"color\": \"#ff0000\", \"margin-top\": \"1em\"}`\n\n // 辅助方法:将array转为object\n function toObject(array) {\n let ret = {};\n array.forEach((e) => {\n const index = e.indexOf(\":\");\n const property = e.substring(0, index).trim();\n const value = e.substring(index + 1).trim();\n ret[property] = value;\n });\n return ret;\n }\n\n // 切割声明块并移除空白符,然后放入数组中\n let declarations = css\n .substring(lbracket + 1, rbracket)\n .split(\";\")\n .map((e) => e.trim())\n .filter((e) => e.length > 0); // 移除所有\"\"空值\n\n // 转为Object对象\n declarations = toObject(declarations);\n\n // 第二步:选择器处理,每个选择器会与它对应的声明相关联,如:\n // `h1, p#bar {color: red}`\n // ==>\n // {\"h1\": {color: red}, \"p#bar\": {color: red}}\n\n let selectors = css\n .substring(0, lbracket)\n // 以,切割,并移除空格:`\"h1, p#bar, span.foo\"` => [\"h1\", \"p#bar\", \"span.foo\"]\n .split(\",\")\n .map((selector) => selector.trim());\n\n // 迭代赋值\n selectors.forEach((selector) => {\n // 若不存在,则先初始化\n if (!json[selector]) json[selector] = {};\n // 赋值到JSON\n Object.keys(declarations).forEach((key) => {\n json[selector][key] = declarations[key];\n });\n });\n\n // 继续下个声明块\n css = css.slice(rbracket + 1).trim();\n }\n\n // 返回JSON形式的结果串\n return json;\n}\n\n/**\n * 将编辑器内容保存到 LocalStorage\n * @param {*} editor\n * @param {*} name\n */\nexport function saveEditorContent(editor, name) {\n const content = editor.getValue(0);\n if (content) {\n localStorage.setItem(name, content);\n } else {\n localStorage.removeItem(name);\n }\n}\n\nexport function formatDoc(content) {\n const doc = prettier.format(content, {\n parser: \"markdown\",\n plugins: [prettierMarkdown],\n });\n return doc;\n}\n\nexport function fixCodeWhiteSpace(value = \"pre\") {\n const preDomList = document.getElementsByClassName(\"code__pre\");\n if (preDomList.length > 0) {\n preDomList.forEach((pre) => {\n pre.style.whiteSpace = value;\n });\n }\n}\n\nexport function downLoadMD(doc) {\n let downLink = document.createElement(\"a\");\n\n downLink.download = \"content.md\";\n downLink.style.display = \"none\";\n let blob = new Blob([doc]);\n\n downLink.href = URL.createObjectURL(blob);\n document.body.appendChild(downLink);\n downLink.click();\n document.body.removeChild(downLink);\n}\n\n/**\n * 生成列表字符串\n * @param {*} data 对应内容集合\n * @param {*} rows 行\n * @param {*} cols 列\n */\nexport function createTable({ data, rows, cols }) {\n let table = \"\";\n let currRow = [];\n for (let i = 0; i < rows + 2; ++i) {\n table += \"|\\t\";\n currRow = [];\n for (let j = 0; j < cols; ++j) {\n const rowIdx = i > 1 ? i - 1 : i;\n i === 1\n ? currRow.push(\"---\\t\")\n : currRow.push(data[`k_${rowIdx}_${j}`] || \"\");\n }\n table += currRow.join(\"\\t|\\t\");\n table += \"\\t|\\n\";\n }\n\n return table;\n}\n","import juice from \"juice\";\n\nexport function solveWeChatImage() {\n const clipboardDiv = document.getElementById(\"output\");\n const images = clipboardDiv.getElementsByTagName(\"img\");\n for (let i = 0; i < images.length; i++) {\n const image = images[i];\n const width = image.getAttribute(\"width\");\n const height = image.getAttribute(\"height\");\n image.removeAttribute(\"width\");\n image.removeAttribute(\"height\");\n image.style.width = width;\n image.style.height = height;\n }\n}\nexport function solveHtml() {\n const element = document.getElementById(\"output-wrapper\");\n let html = element.innerHTML;\n let res = \"\";\n res = juice.inlineContent(html, {\n inlinePseudoElements: true,\n preserveImportant: true,\n });\n return res;\n}\n","export default {\n builtinFonts: [\n {\n label: \"无衬线\",\n value:\n \"-apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif\",\n },\n {\n label: \"衬线\",\n value:\n \"Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, 'PingFang SC', Cambria, Cochin, Georgia, Times, 'Times New Roman', serif\",\n },\n ],\n sizeOption: [\n {\n label: \"12px\",\n value: \"12px\",\n desc: \"更小\",\n },\n {\n label: \"13px\",\n value: \"13px\",\n desc: \"稍小\",\n },\n {\n label: \"14px\",\n value: \"14px\",\n desc: \"推荐\",\n },\n {\n label: \"15px\",\n value: \"15px\",\n desc: \"稍大\",\n },\n {\n label: \"16px\",\n value: \"16px\",\n desc: \"更大\",\n },\n ],\n colorOption: [\n {\n label: \"经典蓝\",\n value: \"rgba(15, 76, 129, 1)\",\n desc: \"最新流行\",\n },\n {\n label: \"翡翠绿\",\n value: \"rgba(0, 152, 116, 1)\",\n desc: \"优雅清新\",\n },\n {\n label: \"活力橘\",\n value: \"rgba(250, 81, 81, 1)\",\n desc: \"热情活泼\",\n },\n ],\n codeThemeOption: [\n {\n label: \"微信\",\n value: \"wechat\",\n desc: \"默认样式\",\n },\n {\n label: \"GitHub\",\n value: \"github\",\n desc: \"精简风格\",\n },\n ],\n form: {\n rows: 1,\n cols: 1,\n },\n};\n","const DEFAULT_CSS_CONTENT = `/*\n 按Ctrl+F可格式化\n*/\n/* 一级标题样式 */\nh1 {\n}\n/* 二级标题样式 */\nh2 {\n}\n/* 三级标题样式 */\nh3 {\n}\n/* 四级标题样式 */\nh4 {\n}\n/* 图片样式 */\nimage {\n}\n/* 引用样式 */\nblockquote {\n}\n/* 引用段落样式 */\nblockquote_p {\n}\n/* 段落样式 */\np {\n}\n/* 行内代码样式 */\ncodespan {\n}\n/* 粗体样式 */\nstrong {\n}\n/* 链接样式 */\nlink {\n}\n/* 微信链接样式 */\nwx_link {\n}\n`;\nexport default DEFAULT_CSS_CONTENT;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-dialog',{staticClass:\"reset__dialog\",attrs:{\"title\":\"提示\",\"visible\":_vm.showResetConfirm},on:{\"close\":function($event){return _vm.$emit('close')}}},[_c('div',{staticClass:\"text\"},[_vm._v(\" 此操作将丢失本地缓存的文本和自定义样式,是否继续? \")]),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{attrs:{\"type\":_vm.btnType,\"plain\":\"\"},on:{\"click\":function($event){return _vm.$emit('close')}}},[_vm._v(\"取 消\")]),_c('el-button',{attrs:{\"type\":_vm.btnType,\"plain\":\"\"},on:{\"click\":function($event){return _vm.$emit('confirm')}}},[_vm._v(\"确 定\")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./resetDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./resetDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./resetDialog.vue?vue&type=template&id=5102b5f0&scoped=true&\"\nimport script from \"./resetDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./resetDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./resetDialog.vue?vue&type=style&index=0&id=5102b5f0&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5102b5f0\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./header.vue?vue&type=template&id=75e84114&scoped=true&\"\nimport script from \"./header.vue?vue&type=script&lang=js&\"\nexport * from \"./header.vue?vue&type=script&lang=js&\"\nimport style0 from \"./header.vue?vue&type=style&index=0&id=75e84114&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"75e84114\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-dialog',{staticClass:\"about__dialog\",attrs:{\"title\":\"关于\",\"visible\":_vm.value,\"width\":\"30%\",\"center\":\"\"},on:{\"close\":function($event){return _vm.$emit('input', false)}}},[_c('div',{staticStyle:{\"text-align\":\"center\"}},[_c('h3',[_vm._v(\"一款高度简洁的微信 Markdown 编辑器\")])]),_c('div',{staticStyle:{\"text-align\":\"center\",\"margin-top\":\"10px\"}},[_c('p',[_vm._v(\"扫码关注我的公众号,原创技术文章第一时间推送!\")]),_c('img',{staticStyle:{\"width\":\"40%\",\"display\":\"block\",\"margin\":\"20px auto 10px\"},attrs:{\"src\":\"https://gitee.com/yanglbme/resource/raw/master/doocs-md/qrcode.png\"}})]),_c('span',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{attrs:{\"type\":\"primary\",\"plain\":\"\"},on:{\"click\":function($event){return _vm.onRedirect('https://github.com/doocs/md')}}},[_vm._v(\"GitHub 仓库\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"plain\":\"\"},on:{\"click\":function($event){return _vm.onRedirect('https://gitee.com/doocs/md')}}},[_vm._v(\"Gitee 仓库\")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./aboutDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./aboutDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./aboutDialog.vue?vue&type=template&id=466956bb&scoped=true&\"\nimport script from \"./aboutDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./aboutDialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"466956bb\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-dialog',{staticClass:\"insert__dialog\",attrs:{\"title\":\"插入表格\",\"visible\":_vm.value,\"border\":\"\"},on:{\"close\":function($event){return _vm.$emit('input', false)}}},[_c('el-row',{staticClass:\"tb-options\",attrs:{\"type\":\"flex\",\"align\":\"middle\",\"gutter\":10}},[_c('el-col',[_vm._v(\" 行数: \"),_c('el-input-number',{attrs:{\"controls-position\":\"right\",\"min\":1,\"max\":100,\"size\":\"small\"},model:{value:(_vm.rowNum),callback:function ($$v) {_vm.rowNum=$$v},expression:\"rowNum\"}})],1),_c('el-col',[_vm._v(\" 列数: \"),_c('el-input-number',{attrs:{\"controls-position\":\"right\",\"min\":1,\"max\":100,\"size\":\"small\"},model:{value:(_vm.colNum),callback:function ($$v) {_vm.colNum=$$v},expression:\"colNum\"}})],1)],1),_c('table',{staticClass:\"input-table\",staticStyle:{\"border-collapse\":\"collapse\"}},_vm._l((_vm.rowNum + 1),function(row){return _c('tr',{key:row,class:{ 'head-style': row === 1 }},_vm._l((_vm.colNum),function(col){return _c('td',{key:col},[_c('el-input',{attrs:{\"align\":\"center\",\"placeholder\":row === 1 ? '表头' : ''},model:{value:(_vm.tableData[(\"k_\" + (row - 1) + \"_\" + (col - 1))]),callback:function ($$v) {_vm.$set(_vm.tableData, (\"k_\" + (row - 1) + \"_\" + (col - 1)), $$v)},expression:\"tableData[`k_${row - 1}_${col - 1}`]\"}})],1)}),0)}),0),_c('div',{staticClass:\"dialog-footer\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{attrs:{\"type\":_vm.btnType,\"plain\":\"\"},on:{\"click\":function($event){return _vm.$emit('input', false)}}},[_vm._v(\"取 消\")]),_c('el-button',{attrs:{\"type\":_vm.btnType,\"plain\":\"\"},on:{\"click\":_vm.insertTable}},[_vm._v(\"确 定\")])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./insertForm.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./insertForm.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./insertForm.vue?vue&type=template&id=745662b4&scoped=true&\"\nimport script from \"./insertForm.vue?vue&type=script&lang=js&\"\nexport * from \"./insertForm.vue?vue&type=script&lang=js&\"\nimport style0 from \"./insertForm.vue?vue&type=style&index=0&id=745662b4&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"745662b4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.value),expression:\"value\"}],staticClass:\"menu\",style:((\"left: \" + _vm.left + \"px;top: \" + _vm.top + \"px;\")),attrs:{\"id\":\"menu\"}},_vm._l((_vm.list),function(item){return _c('li',{key:item.key,staticClass:\"menu_item\",on:{\"mousedown\":function($event){return _vm.onMouseDown(item.key)}}},[_c('span',[_vm._v(_vm._s(item.text))])])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import axios from \"axios\";\n\n// 创建axios实例\nconst service = axios.create({\n baseURL: \"\",\n timeout: 10 * 1000, // 请求超时时间\n});\n\nservice.interceptors.request.use(\n (config) => {\n if (/^(post)|(put)|(delete)$/i.test(config.method)) {\n if (config.data && config.data.upload) {\n config.headers[\"Content-Type\"] = \"multipart/form-data\";\n }\n }\n return config;\n },\n (error) => {\n Promise.reject(error);\n }\n);\n\nservice.interceptors.response.use(\n (res) => {\n return res.data ? res.data : Promise.reject(res);\n },\n (error) => Promise.reject(error)\n);\n\nexport default service;\n","export function utf16to8(str) {\n var out, i, len, c;\n out = \"\";\n len = str.length;\n for (i = 0; i < len; i++) {\n c = str.charCodeAt(i);\n if (c >= 0x0001 && c <= 0x007f) {\n out += str.charAt(i);\n } else if (c > 0x07ff) {\n out += String.fromCharCode(0xe0 | ((c >> 12) & 0x0f));\n out += String.fromCharCode(0x80 | ((c >> 6) & 0x3f));\n out += String.fromCharCode(0x80 | ((c >> 0) & 0x3f));\n } else {\n out += String.fromCharCode(0xc0 | ((c >> 6) & 0x1f));\n out += String.fromCharCode(0x80 | ((c >> 0) & 0x3f));\n }\n }\n return out;\n}\n\nexport function utf8to16(str) {\n var out, i, len, c;\n var char2, char3;\n out = \"\";\n len = str.length;\n i = 0;\n while (i < len) {\n c = str.charCodeAt(i++);\n switch (c >> 4) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n // 0xxxxxxx\n out += str.charAt(i - 1);\n break;\n case 12:\n case 13:\n // 110x xxxx 10xx xxxx\n char2 = str.charCodeAt(i++);\n out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f));\n break;\n case 14:\n // 1110 xxxx 10xx xxxx 10xx xxxx\n char2 = str.charCodeAt(i++);\n char3 = str.charCodeAt(i++);\n out += String.fromCharCode(\n ((c & 0x0f) << 12) |\n ((char2 & 0x3f) << 6) |\n ((char3 & 0x3f) << 0)\n );\n break;\n }\n }\n return out;\n}\n\nconst base64EncodeChars =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\nconst base64DecodeChars = new Array(\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 62,\n -1,\n -1,\n -1,\n 63,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 59,\n 60,\n 61,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 21,\n 22,\n 23,\n 24,\n 25,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 26,\n 27,\n 28,\n 29,\n 30,\n 31,\n 32,\n 33,\n 34,\n 35,\n 36,\n 37,\n 38,\n 39,\n 40,\n 41,\n 42,\n 43,\n 44,\n 45,\n 46,\n 47,\n 48,\n 49,\n 50,\n 51,\n -1,\n -1,\n -1,\n -1,\n -1\n);\nexport function base64encode(str) {\n var out, i, len;\n var c1, c2, c3;\n len = str.length;\n i = 0;\n out = \"\";\n while (i < len) {\n c1 = str.charCodeAt(i++) & 0xff;\n if (i == len) {\n out += base64EncodeChars.charAt(c1 >> 2);\n out += base64EncodeChars.charAt((c1 & 0x3) << 4);\n out += \"==\";\n break;\n }\n c2 = str.charCodeAt(i++);\n if (i == len) {\n out += base64EncodeChars.charAt(c1 >> 2);\n out += base64EncodeChars.charAt(\n ((c1 & 0x3) << 4) | ((c2 & 0xf0) >> 4)\n );\n out += base64EncodeChars.charAt((c2 & 0xf) << 2);\n out += \"=\";\n break;\n }\n c3 = str.charCodeAt(i++);\n out += base64EncodeChars.charAt(c1 >> 2);\n out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xf0) >> 4));\n out += base64EncodeChars.charAt(((c2 & 0xf) << 2) | ((c3 & 0xc0) >> 6));\n out += base64EncodeChars.charAt(c3 & 0x3f);\n }\n return out;\n}\n\nexport function base64decode(str) {\n var c1, c2, c3, c4;\n var i, len, out;\n len = str.length;\n i = 0;\n out = \"\";\n while (i < len) {\n /* c1 */\n do {\n c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];\n } while (i < len && c1 == -1);\n if (c1 == -1) break;\n /* c2 */\n do {\n c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];\n } while (i < len && c2 == -1);\n if (c2 == -1) break;\n out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));\n /* c3 */\n do {\n c3 = str.charCodeAt(i++) & 0xff;\n if (c3 == 61) return out;\n c3 = base64DecodeChars[c3];\n } while (i < len && c3 == -1);\n if (c3 == -1) break;\n out += String.fromCharCode(((c2 & 0xf) << 4) | ((c3 & 0x3c) >> 2));\n /* c4 */\n do {\n c4 = str.charCodeAt(i++) & 0xff;\n if (c4 == 61) return out;\n c4 = base64DecodeChars[c4];\n } while (i < len && c4 == -1);\n if (c4 == -1) break;\n out += String.fromCharCode(((c3 & 0x03) << 6) | c4);\n }\n return out;\n}\n\nexport function safe64(base64) {\n base64 = base64.replace(/\\+/g, \"-\");\n base64 = base64.replace(/\\//g, \"_\");\n return base64;\n}\n","import fetch from \"./fetch\";\nimport CryptoJS from \"crypto-js\";\nimport OSS from \"ali-oss\";\nimport COS from \"cos-js-sdk-v5\";\nimport Buffer from \"buffer-from\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport * as qiniu from \"qiniu-js\";\nimport { utf16to8, base64encode, safe64 } from \"../assets/scripts/tokenTools\";\n\nconst defaultConfig = {\n username: \"filess\",\n repo: \"images\",\n branch: \"master\",\n accessToken: [\n \"7715d7ca67b5d3837cfdoocsmde8c38421815aa423510af\",\n \"c411415bf95dbe39625doocsmd5047ba9b7a2a6c9642abe\",\n \"2821cd8819fa345c053doocsmdca86ac653f8bc20db1f1b\",\n \"445f0dae46ef1f2a4d6doocsmdc797301e94797b4750a4c\",\n \"cc1d0c1426d0fd0902bdoocsmdd2d7184b14da61b86ec46\",\n \"b67e9d15cb6f910492fdoocsmdac6b44d379c953bb19eff\",\n \"618c4dc2244ccbbc088doocsmd125d17fd31b7d06a50cf3\",\n \"a4b581732e1c1507458doocsmdc5b223b27dae5e2e16a55\",\n ],\n};\n\nfunction fileUpload(content, file) {\n const imgHost = localStorage.getItem(\"imgHost\");\n !imgHost && localStorage.setItem(\"imgHost\", \"default\");\n switch (imgHost) {\n case \"aliOSS\":\n return aliOSSFileUpload(content, file.name);\n case \"txCOS\":\n return txCOSFileUpload(file);\n case \"qiniu\":\n return qiniuUpload(file);\n case \"github\":\n default:\n return ghFileUpload(content, file.name);\n }\n}\n\nfunction getGitHubCommonConfig(username, repo, branch, token) {\n const date = new Date();\n const dir =\n date.getFullYear() +\n \"/\" +\n (date.getMonth() + 1).toString().padStart(2, \"0\") +\n \"/\" +\n date.getDate().toString().padStart(2, \"0\");\n return {\n method: \"put\",\n headers: {\n Authorization: \"token \" + token,\n },\n branch: branch,\n url: `https://api.github.com/repos/${username}/${repo}/contents/${dir}/`,\n };\n}\n\nfunction getDefaultConfig() {\n const token = defaultConfig.accessToken[\n Math.floor(Math.random() * defaultConfig.accessToken.length)\n ].replace(\"doocsmd\", \"\");\n return getGitHubCommonConfig(\n defaultConfig.username,\n defaultConfig.repo,\n defaultConfig.branch,\n token\n );\n}\n\nfunction getGitHubConfig() {\n const githubConfig = JSON.parse(localStorage.getItem(\"githubConfig\"));\n const repoUrl = githubConfig.repo\n .replace(\"https://github.com/\", \"\")\n .replace(\"http://github.com/\", \"\")\n .replace(\"github.com/\", \"\")\n .split(\"/\");\n const username = repoUrl[0];\n const repo = repoUrl[1];\n return getGitHubCommonConfig(\n username,\n repo,\n githubConfig.branch,\n githubConfig.accessToken\n );\n}\n\nfunction getQiniuToken(accessKey, secretKey, putPolicy) {\n const policy = JSON.stringify(putPolicy);\n const encoded = base64encode(utf16to8(policy));\n const hash = CryptoJS.HmacSHA1(encoded, secretKey);\n const encodedSigned = hash.toString(CryptoJS.enc.Base64);\n return accessKey + \":\" + safe64(encodedSigned) + \":\" + encoded;\n}\n\nasync function ghFileUpload(content, filename) {\n const isDefault = localStorage.getItem(\"imgHost\") !== \"github\";\n const config = isDefault ? getDefaultConfig() : getGitHubConfig();\n const dateFilename =\n new Date().getTime() + \"-\" + uuidv4() + \".\" + filename.split(\".\")[1];\n const res = await fetch({\n url: config.url + dateFilename,\n method: config.method,\n headers: config.headers,\n data: {\n branch: config.branch || \"master\",\n message: `Upload by ${window.location.href}`,\n content: content,\n },\n });\n const githubResourceUrl = \"raw.githubusercontent.com/filess/images/master/\";\n const cdnResourceUrl = \"cdn.jsdelivr.net/gh/filess/images@master/\";\n return isDefault\n ? res.content.download_url.replace(githubResourceUrl, cdnResourceUrl)\n : res.content.download_url;\n}\n\nasync function aliOSSFileUpload(content, filename) {\n const dateFilename =\n new Date().getTime() + \"-\" + uuidv4() + \".\" + filename.split(\".\")[1];\n const aliOSSConfig = JSON.parse(localStorage.getItem(\"aliOSSConfig\"));\n const buffer = Buffer(content, \"base64\");\n try {\n const dir = aliOSSConfig.path + \"/\" + dateFilename;\n const client = new OSS({\n region: aliOSSConfig.region,\n bucket: aliOSSConfig.bucket,\n accessKeyId: aliOSSConfig.accessKeyId,\n accessKeySecret: aliOSSConfig.accessKeySecret,\n });\n const res = await client.put(dir, buffer);\n return aliOSSConfig.cdnHost == \"\"\n ? res.url\n : aliOSSConfig.cdnHost +\n \"/\" +\n (aliOSSConfig.path == \"\" ? dateFilename : dir);\n } catch (e) {\n return Promise.reject(e);\n }\n}\n\nasync function txCOSFileUpload(file) {\n const dateFilename =\n new Date().getTime() + \"-\" + uuidv4() + \".\" + file.name.split(\".\")[1];\n const txCOSConfig = JSON.parse(localStorage.getItem(\"txCOSConfig\"));\n const cos = new COS({\n SecretId: txCOSConfig.secretId,\n SecretKey: txCOSConfig.secretKey,\n });\n return new Promise((resolve, reject) => {\n cos.putObject(\n {\n Bucket: txCOSConfig.bucket,\n Region: txCOSConfig.region,\n Key: txCOSConfig.path + \"/\" + dateFilename,\n Body: file,\n },\n function (err, data) {\n if (err) {\n reject(err);\n } else if (txCOSConfig.cdnHost) {\n // if cdnHost exists\n resolve(\n txCOSConfig.path != \"\"\n ? txCOSConfig.cdnHost +\n \"/\" +\n txCOSConfig.path +\n \"/\" +\n dateFilename\n : txCOSConfig.cdnHost + \"/\" + dateFilename\n );\n } else {\n // if cdnHost not exists\n reject(data.Location);\n }\n }\n );\n });\n}\n\nasync function qiniuUpload(file) {\n const qiniuConfig = JSON.parse(localStorage.getItem(\"qiniuConfig\"));\n const putPolicy = {\n scope: qiniuConfig.bucket,\n deadline: Math.trunc(new Date().getTime() / 1000) + 3600,\n };\n const token = getQiniuToken(\n qiniuConfig.accessKey,\n qiniuConfig.secretKey,\n putPolicy\n );\n const dir = qiniuConfig.path ? qiniuConfig.path + \"/\" : \"\";\n const dateFilename =\n dir +\n new Date().getTime() +\n \"-\" +\n uuidv4() +\n \".\" +\n file.name.split(\".\")[1];\n const config = {\n region: qiniuConfig.region,\n };\n const observable = qiniu.upload(file, dateFilename, token, {}, config);\n return new Promise((resolve, reject) => {\n observable.subscribe({\n next: (result) => {\n console.log(result);\n },\n error: (err) => {\n reject(err.message);\n },\n complete: (result) => {\n resolve(qiniuConfig.domain + \"/\" + result.key);\n },\n });\n });\n}\n\nexport default {\n fileUpload,\n};\n","import fileApi from \"../../api/file\";\n\nexport function uploadImgFile(file) {\n return new Promise((resolve, reject) => {\n const checkImageResult = isImageIllegal(file);\n\n if (checkImageResult) {\n reject(checkImageResult);\n return;\n }\n const base64Reader = new FileReader();\n\n base64Reader.readAsDataURL(file);\n base64Reader.onload = function () {\n const base64Content = this.result.split(\",\").pop();\n fileApi\n .fileUpload(base64Content, file)\n .then((res) => {\n resolve(res);\n })\n .catch((err) => {\n reject(err);\n });\n };\n });\n}\n\nexport function isImageIllegal(file) {\n if (!/\\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(file.name)) {\n return \"请上传 JPG/PNG/GIF 格式的图片\";\n }\n if (file.size > 5 * 1024 * 1024) {\n return \"由于公众号限制,图片大小不能超过 5.0M\";\n }\n return false;\n}\n","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rightClickMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rightClickMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./rightClickMenu.vue?vue&type=template&id=b08f13d6&scoped=true&\"\nimport script from \"./rightClickMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./rightClickMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./rightClickMenu.vue?vue&type=style&index=0&id=b08f13d6&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b08f13d6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-dialog',{staticClass:\"upload__dialog\",attrs:{\"title\":\"本地上传\",\"visible\":_vm.value},on:{\"close\":function($event){return _vm.$emit('close')}}},[_c('el-tabs',{attrs:{\"type\":\"card\",\"value\":'upload'}},[_c('el-tab-pane',{staticClass:\"upload-panel\",attrs:{\"label\":\"选择上传\",\"name\":\"upload\"}},[_c('el-select',{attrs:{\"placeholder\":\"请选择\",\"size\":\"small\"},on:{\"change\":_vm.changeImgHost},model:{value:(_vm.imgHost),callback:function ($$v) {_vm.imgHost=$$v},expression:\"imgHost\"}},_vm._l((_vm.options),function(item){return _c('el-option',{key:item.value,attrs:{\"label\":item.label,\"value\":item.value}})}),1),_c('el-upload',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.uploadingImg),expression:\"uploadingImg\"}],attrs:{\"drag\":\"\",\"action\":\"\",\"headers\":{ 'Content-Type': 'multipart/form-data' },\"show-file-list\":false,\"multiple\":true,\"accept\":\".jpg, .jpeg, .png, .gif\",\"name\":\"file\",\"before-upload\":_vm.beforeUpload}},[_c('i',{staticClass:\"el-icon-upload\"}),_c('div',{staticClass:\"el-upload__text\"},[_vm._v(\" 将图片拖到此处,或 \"),_c('em',[_vm._v(\"点击上传\")])])])],1),_c('el-tab-pane',{staticClass:\"github-panel\",attrs:{\"label\":\"GitHub 图床\",\"name\":\"github\"}},[_c('el-form',{ref:\"form\",staticClass:\"setting-form\",attrs:{\"model\":_vm.formGitHub,\"label-position\":\"right\",\"label-width\":\"140px\"}},[_c('el-form-item',{attrs:{\"label\":\"GitHub 仓库\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:github.com/yanglbme/resource\"},model:{value:(_vm.formGitHub.repo),callback:function ($$v) {_vm.$set(_vm.formGitHub, \"repo\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formGitHub.repo\"}})],1),_c('el-form-item',{attrs:{\"label\":\"分支\"}},[_c('el-input',{attrs:{\"placeholder\":\"如:release,可不填,默认 master\"},model:{value:(_vm.formGitHub.branch),callback:function ($$v) {_vm.$set(_vm.formGitHub, \"branch\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formGitHub.branch\"}})],1),_c('el-form-item',{attrs:{\"label\":\"Token\",\"required\":true}},[_c('el-input',{attrs:{\"show-password\":\"\",\"placeholder\":\"如:cc1d0c1426d0fd0902bd2d7184b14da61b8abc46\"},model:{value:(_vm.formGitHub.accessToken),callback:function ($$v) {_vm.$set(_vm.formGitHub, \"accessToken\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formGitHub.accessToken\"}}),_c('el-link',{attrs:{\"type\":\"primary\",\"href\":\"https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token\",\"target\":\"_blank\"}},[_vm._v(\"如何获取 GitHub Token?\")])],1),_c('el-form-item',[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.saveGitHubConfiguration}},[_vm._v(\"保存配置\")])],1)],1)],1),_c('el-tab-pane',{staticClass:\"github-panel\",attrs:{\"label\":\"阿里云 OSS\",\"name\":\"aliOSS\"}},[_c('el-form',{ref:\"form\",staticClass:\"setting-form\",attrs:{\"model\":_vm.formAliOSS,\"label-position\":\"right\",\"label-width\":\"140px\"}},[_c('el-form-item',{attrs:{\"label\":\"AccessKey ID\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:LTAI4GdoocsmdoxUf13ylbaNHk\"},model:{value:(_vm.formAliOSS.accessKeyId),callback:function ($$v) {_vm.$set(_vm.formAliOSS, \"accessKeyId\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formAliOSS.accessKeyId\"}})],1),_c('el-form-item',{attrs:{\"label\":\"AccessKey Secret\",\"required\":true}},[_c('el-input',{attrs:{\"show-password\":\"\",\"placeholder\":\"如:cc1d0c142doocs0902bd2d7md4b14da6ylbabc46\"},model:{value:(_vm.formAliOSS.accessKeySecret),callback:function ($$v) {_vm.$set(_vm.formAliOSS, \"accessKeySecret\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formAliOSS.accessKeySecret\"}})],1),_c('el-form-item',{attrs:{\"label\":\"Bucket\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:doocs\"},model:{value:(_vm.formAliOSS.bucket),callback:function ($$v) {_vm.$set(_vm.formAliOSS, \"bucket\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formAliOSS.bucket\"}})],1),_c('el-form-item',{attrs:{\"label\":\"Bucket 所在区域\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:oss-cn-shenzhen\"},model:{value:(_vm.formAliOSS.region),callback:function ($$v) {_vm.$set(_vm.formAliOSS, \"region\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formAliOSS.region\"}})],1),_c('el-form-item',{attrs:{\"label\":\"自定义 CDN 域名\",\"required\":false}},[_c('el-input',{attrs:{\"placeholder\":\"如:https://imagecdn.alidaodao.com,可不填\"},model:{value:(_vm.formAliOSS.cdnHost),callback:function ($$v) {_vm.$set(_vm.formAliOSS, \"cdnHost\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formAliOSS.cdnHost\"}})],1),_c('el-form-item',{attrs:{\"label\":\"存储路径\"}},[_c('el-input',{attrs:{\"placeholder\":\"如:img,可不填,默认为根目录\"},model:{value:(_vm.formAliOSS.path),callback:function ($$v) {_vm.$set(_vm.formAliOSS, \"path\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formAliOSS.path\"}}),_c('el-link',{attrs:{\"type\":\"primary\",\"href\":\"https://help.aliyun.com/document_detail/31883.html\",\"target\":\"_blank\"}},[_vm._v(\"如何使用阿里云 OSS?\")])],1),_c('el-form-item',[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.saveAliOSSConfiguration}},[_vm._v(\"保存配置\")])],1)],1)],1),_c('el-tab-pane',{staticClass:\"github-panel\",attrs:{\"label\":\"腾讯云 COS\",\"name\":\"txCOS\"}},[_c('el-form',{ref:\"form\",staticClass:\"setting-form\",attrs:{\"model\":_vm.formTxCOS,\"label-position\":\"right\",\"label-width\":\"140px\"}},[_c('el-form-item',{attrs:{\"label\":\"SecretId\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:AKIDnQp1w3DOOCSs8F5MDp9tdoocsmdUPonW3\"},model:{value:(_vm.formTxCOS.secretId),callback:function ($$v) {_vm.$set(_vm.formTxCOS, \"secretId\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formTxCOS.secretId\"}})],1),_c('el-form-item',{attrs:{\"label\":\"SecretKey\",\"required\":true}},[_c('el-input',{attrs:{\"show-password\":\"\",\"placeholder\":\"如:ukLmdtEJ9271f3DOocsMDsCXdS3YlbW0\"},model:{value:(_vm.formTxCOS.secretKey),callback:function ($$v) {_vm.$set(_vm.formTxCOS, \"secretKey\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formTxCOS.secretKey\"}})],1),_c('el-form-item',{attrs:{\"label\":\"Bucket\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:doocs-3212520134\"},model:{value:(_vm.formTxCOS.bucket),callback:function ($$v) {_vm.$set(_vm.formTxCOS, \"bucket\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formTxCOS.bucket\"}})],1),_c('el-form-item',{attrs:{\"label\":\"Bucket 所在区域\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:ap-guangzhou\"},model:{value:(_vm.formTxCOS.region),callback:function ($$v) {_vm.$set(_vm.formTxCOS, \"region\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formTxCOS.region\"}})],1),_c('el-form-item',{attrs:{\"label\":\"自定义 CDN 域名\",\"required\":false}},[_c('el-input',{attrs:{\"placeholder\":\"如:https://imagecdn.alidaodao.com,可不填\"},model:{value:(_vm.formTxCOS.cdnHost),callback:function ($$v) {_vm.$set(_vm.formTxCOS, \"cdnHost\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formTxCOS.cdnHost\"}})],1),_c('el-form-item',{attrs:{\"label\":\"存储路径\"}},[_c('el-input',{attrs:{\"placeholder\":\"如:img,可不填,默认根目录\"},model:{value:(_vm.formTxCOS.path),callback:function ($$v) {_vm.$set(_vm.formTxCOS, \"path\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formTxCOS.path\"}}),_c('el-link',{attrs:{\"type\":\"primary\",\"href\":\"https://cloud.tencent.com/document/product/436/38484\",\"target\":\"_blank\"}},[_vm._v(\"如何使用腾讯云 COS?\")])],1),_c('el-form-item',[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.saveTxCOSConfiguration}},[_vm._v(\"保存配置\")])],1)],1)],1),_c('el-tab-pane',{staticClass:\"github-panel\",attrs:{\"label\":\"七牛云 Kodo\",\"name\":\"qiniu\"}},[_c('el-form',{ref:\"form\",staticClass:\"setting-form\",attrs:{\"model\":_vm.formQiniu,\"label-position\":\"right\",\"label-width\":\"140px\"}},[_c('el-form-item',{attrs:{\"label\":\"AccessKey\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:6DD3VaLJ_SQgOdoocsyTV_YWaDmdnL2n8EGx7kG\"},model:{value:(_vm.formQiniu.accessKey),callback:function ($$v) {_vm.$set(_vm.formQiniu, \"accessKey\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formQiniu.accessKey\"}})],1),_c('el-form-item',{attrs:{\"label\":\"SecretKey\",\"required\":true}},[_c('el-input',{attrs:{\"show-password\":\"\",\"placeholder\":\"如:qgZa5qrvDOOcsmdKStD1oCjZ9nB7MDvJUs_34SIm\"},model:{value:(_vm.formQiniu.secretKey),callback:function ($$v) {_vm.$set(_vm.formQiniu, \"secretKey\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formQiniu.secretKey\"}})],1),_c('el-form-item',{attrs:{\"label\":\"Bucket\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:md\"},model:{value:(_vm.formQiniu.bucket),callback:function ($$v) {_vm.$set(_vm.formQiniu, \"bucket\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formQiniu.bucket\"}})],1),_c('el-form-item',{attrs:{\"label\":\"Bucket 对应域名\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:https://images.123ylb.cn\"},model:{value:(_vm.formQiniu.domain),callback:function ($$v) {_vm.$set(_vm.formQiniu, \"domain\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formQiniu.domain\"}})],1),_c('el-form-item',{attrs:{\"label\":\"存储区域\",\"required\":true}},[_c('el-input',{attrs:{\"placeholder\":\"如:z2\"},model:{value:(_vm.formQiniu.region),callback:function ($$v) {_vm.$set(_vm.formQiniu, \"region\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formQiniu.region\"}})],1),_c('el-form-item',{attrs:{\"label\":\"存储路径\",\"required\":false}},[_c('el-input',{attrs:{\"placeholder\":\"如:img,可不填,默认为根目录\"},model:{value:(_vm.formQiniu.path),callback:function ($$v) {_vm.$set(_vm.formQiniu, \"path\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"formQiniu.path\"}}),_c('el-link',{attrs:{\"type\":\"primary\",\"href\":\"https://developer.qiniu.com/kodo\",\"target\":\"_blank\"}},[_vm._v(\"如何使用七牛云 Kodo?\")])],1),_c('el-form-item',[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.saveQiniuConfiguration}},[_vm._v(\"保存配置\")])],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./uploadImgDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./uploadImgDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./uploadImgDialog.vue?vue&type=template&id=356019be&scoped=true&\"\nimport script from \"./uploadImgDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./uploadImgDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./uploadImgDialog.vue?vue&type=style&index=0&id=356019be&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"356019be\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodemirrorEditor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodemirrorEditor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CodemirrorEditor.vue?vue&type=template&id=4f7941be&scoped=true&\"\nimport script from \"./CodemirrorEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./CodemirrorEditor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CodemirrorEditor.vue?vue&type=style&index=0&id=4f7941be&lang=less&scoped=true&\"\nimport style1 from \"./CodemirrorEditor.vue?vue&type=style&index=1&lang=less&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f7941be\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=f01d475a&scoped=true&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=f01d475a&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f01d475a\",\n null\n \n)\n\nexport default component.exports","import marked from \"marked\";\nconst WxRenderer = function (opts) {\n this.opts = opts;\n let ENV_STRETCH_IMAGE = true;\n\n let footnotes = [];\n let footnoteIndex = 0;\n let styleMapping = null;\n\n const CODE_FONT_FAMILY =\n \"Menlo, Operator Mono, Consolas, Monaco, monospace\";\n\n let merge = (base, extend) => Object.assign({}, base, extend);\n\n this.buildTheme = (themeTpl) => {\n let mapping = {};\n let base = merge(themeTpl.BASE, {\n \"font-family\": this.opts.fonts,\n \"font-size\": this.opts.size,\n });\n let base_block = merge(base, {});\n for (let ele in themeTpl.inline) {\n if (themeTpl.inline.hasOwnProperty(ele)) {\n let style = themeTpl.inline[ele];\n mapping[ele] = merge(base, style);\n }\n }\n\n for (let ele in themeTpl.block) {\n if (themeTpl.block.hasOwnProperty(ele)) {\n let style = themeTpl.block[ele];\n if (ele === \"code\") {\n style[\"font-family\"] = CODE_FONT_FAMILY;\n }\n mapping[ele] = merge(base_block, style);\n }\n }\n return mapping;\n };\n\n let getStyles = (tokenName, addition) => {\n let arr = [];\n let dict = styleMapping[tokenName];\n if (!dict) return \"\";\n for (const key in dict) {\n arr.push(key + \":\" + dict[key]);\n }\n return `style=\"${arr.join(\";\") + (addition || \"\")}\"`;\n };\n\n let addFootnote = (title, link) => {\n footnotes.push([++footnoteIndex, title, link]);\n return footnoteIndex;\n };\n\n this.buildFootnotes = () => {\n let footnoteArray = footnotes.map((x) => {\n if (x[1] === x[2]) {\n return `[${x[0]}]: ${x[1]}
`;\n }\n return `[${x[0]}] ${x[1]}: ${x[2]}
`;\n });\n return `

引用链接

${footnoteArray.join(\"\\n\")}

`;\n };\n\n this.buildAddition = () => {\n return `\n \n `;\n };\n\n this.setOptions = (newOpts) => {\n this.opts = merge(this.opts, newOpts);\n };\n\n this.hasFootnotes = () => footnotes.length !== 0;\n\n this.getRenderer = (status) => {\n footnotes = [];\n footnoteIndex = 0;\n\n styleMapping = this.buildTheme(this.opts.theme);\n let renderer = new marked.Renderer();\n\n renderer.heading = (text, level) => {\n switch (level) {\n case 1:\n return `

${text}

`;\n case 2:\n return `

${text}

`;\n case 3:\n return `

${text}

`;\n default:\n return `

${text}

`;\n }\n };\n renderer.paragraph = (text) => {\n if (text.indexOf(\"${text}

`;\n };\n\n renderer.blockquote = (text) => {\n text = text.replace(//g, `

`);\n return `

${text}
`;\n };\n renderer.code = (text, lang) => {\n text = text.replace(//g, \">\");\n const codeLines = text\n .split(\"\\n\")\n .map(\n (line) =>\n `${\n line || \"
\"\n }
`\n );\n const codeTheme = \"github\";\n return `\n
\n
\n                        ${codeLines.join(\"\")}\n                    
\n
\n `;\n };\n renderer.codespan = (text, lang) =>\n `${text}`;\n renderer.listitem = (text) =>\n `<%s/>${text}`;\n\n renderer.list = (text, ordered, start) => {\n text = text.replace(/<\\/*p.*?>/g, \"\");\n let segments = text.split(`<%s/>`);\n if (!ordered) {\n text = segments.join(\"•\");\n return `

${text}

`;\n }\n text = segments[0];\n for (let i = 1; i < segments.length; i++) {\n text = text + i + \".\" + segments[i];\n }\n return `

${text}

`;\n };\n renderer.image = (href, title, text) => {\n let subText = \"\";\n if (text) {\n subText = `
${text}
`;\n }\n let figureStyles = getStyles(\"figure\");\n let imgStyles = getStyles(\n ENV_STRETCH_IMAGE ? \"image\" : \"image_org\"\n );\n return `
\"${text}\"/${subText}
`;\n };\n renderer.link = (href, title, text) => {\n if (href.indexOf(\"https://mp.weixin.qq.com\") === 0) {\n return `${text}`;\n }\n if (href === text || !status) {\n return text;\n }\n let ref = addFootnote(title || text, href);\n return `${text}[${ref}]`;\n };\n renderer.strong = (text) =>\n `${text}`;\n renderer.em = (text) =>\n `${text}`;\n renderer.table = (header, body) =>\n `
${header}${body}
`;\n // renderer.tablerow = (text) => `${text}`;\n renderer.tablecell = (text, flags) =>\n `${text}`;\n renderer.hr = () =>\n `
`;\n return renderer;\n };\n};\nexport default WxRenderer;\n","const DEFAULT_CONTENT = `# 示例文章:Google 搜索的即时自动补全功能究竟是如何“工作”的?\n> Google 搜索**自动补全功能**的强大,相信不少朋友都能感受到,它帮助我们更快地“补全”我们所要输入的搜索关键字。那么,它怎么知道我们要输入什么内容?它又是如何工作的?在这篇文章里,我们一起来看看。\n\n## 使用自动补全\nGoogle 搜索的自动补全功能可以在 Google 搜索应用的大多数位置使用,包括 [Google](https://www.google.com/) 主页、适用于 IOS 和 Android 的 Google 应用,我们只需要在 Google 搜索框上开始键入关键字,就可以看到联想词了。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/juejin.gif)\n\n在上图示例中,我们可以看到,输入关键字 \\`juej\\`,Google 搜索会联想到“掘金”、“掘金小册”、“绝句”等等,好处就是,我们无须输入完整的关键字即可轻松完成针对这些 topics 的搜索。\n\n谷歌搜索的自动补全功能对于使用移动设备的用户来说特别有用,用户可以轻松在难以键入的小屏幕上完成搜索。当然,对于移动设备用户和台式机用户而言,这都节省了大量的时间。根据 Google 官方报告,自动补全功能可以减少大约 25% 的打字,累积起来,预计每天可以节省 200 多年的打字时间。是的,每天!\n\n> 注意,本文所提到的“**联想词**”与“**预测**”,是同一个意思。\n\n## 基于“预测”而非“建议”\nGoogle 官方将自动补全功能称之为“预测”,而不是“建议”,为什么呢?其实是有充分理由的。自动补全功能是为了**帮助用户完成他们打算进行的搜索**,而不是建议用户要执行什么搜索。\n\n那么,Google 是如何确定这些“预测”的?其实,Google 会根据趋势搜索 [trends](https://trends.google.com/trends/?geo=US) 给到我们这些“预测”。简单来说,哪个热门、哪个搜索频率高,就更可能推给我们。当然,这也与我们当前所处的位置以及我们的搜索历史相关。\n\n另外,这些“预测”也会随着我们键入的关键字的变更而更改。例如,当我们把键入的关键字从 \\`juej\\` 更改为 \\`juex\\` 时,与“掘金”相关的预测会“消失”,同时,与“觉醒”、“决心”相关联的词会出现。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/juex.gif)\n\n## 为什么看不到某些联想词?\n如果我们在输入某个关键字时看不到联想词,那么表明 Google 的算法可能检测到:\n\n- 这个关键字不是热门字词;\n- 搜索的字词太新了,我们可能需要等待几天或几周才能看到联想词;\n- 这是一个侮辱性或敏感字词,这个搜索字词违反了 Google 的相关政策。更加详细的情况,可以了解 [Google 搜索自动补全政策](https://support.google.com/websearch/answer/7368877)。\n\n## 为什么会看到某些不当的联想词?\nGoogle 拥有专门设计的系统,可以自动捕获不适当的预测结果而不显示出来。然而,Google 每天需要处理数十亿次搜索,这意味着 Google 每天会显示数十亿甚至上百亿条预测。再好的系统,也可能存在缺陷,不正确的预测也可能随时会出现。\n\n我们作为 Google 搜索的用户,如果认定某条预测违反了相关的搜索自动补全政策,可以进行举报反馈,点击右下角“**举报不当的联想查询**”并勾选相关选项即可。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/report.gif)\n\n## 如何实现自动补全算法?\n目前,Google 官方似乎并没有公开搜索自动补全的算法实现,但是业界在这方面已经有了不少研究。\n\n一个好的自动补全器必须是快速的,并且在用户键入下一个字符后立即更新联想词列表。**自动补全器的核心是一个函数,它接受输入的前缀,并搜索以给定前缀开头的词汇或语句列表**。通常来说,只需要返回少量的数目即可。\n\n接下来,我们先从一个简单且低效的实现开始,并在此基础上逐步构建更高效的方法。\n\n### 词汇表实现\n一个**简单粗暴的实现方式**是:顺序查找词汇表,依次检查每个词汇,看它是否以给定的前缀开头。\n\n但是,此方法需要将前缀与每个词汇进行匹配检查,若词汇量较少,这种方式可能勉强行得通。但是,如果词汇量规模较大,效率就太低了。\n\n一个**更好的实现方式是**:让词汇按字典顺序排序。借助二分搜索算法,可以快速搜索有序词汇表中的前缀。由于二分搜索的每一步都会将搜索的范围减半,因此,总的搜索时间与词汇表中单词数量的对数成正比,即时间复杂度是 \\`O(log N)\\`。二分搜索的性能很好,但有没有更好的实现呢?当然有,往下看。\n\n### 前缀树实现\n通常来说,许多词汇都以相同的前缀开头,比如 \\`need\\`、\\`nested\\` 都以 \\`ne\\` 开头,\\`seed\\`、\\`speed\\` 都以 \\`s\\` 开头。要是为每个单词分别存储公共前缀似乎很浪费。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/pretree.png)\n\n前缀树是一种利用公共前缀来加速补全速度的数据结构。前缀树在节点树中排列一组单词,单词沿着从根节点到叶子节点的路径存储,树的层次对应于前缀的字母位置。\n\n前缀的补全是顺着前缀定义的路径来查找的。例如,在上图的前缀树中,前缀 \\`ne\\` 对应于从子节点取左边缘 \\`N\\` 和唯一边缘 \\`E\\` 的路径。然后可以通过继续遍历从 \\`E\\` 节点可以达到的所有叶节点来生成补全列表。在图中,\\`ne\\` 的补全可以是两个分支:\\`-ed\\` 和 \\`-sted\\`。如果在数中找不到由前缀定义的路径,则说明词汇表中不包含以该前缀开头的单词。\n\n### 有限状态自动机(DFA)实现\n前缀树可以有效处理公共前缀,但是,对于其他共享词部分,仍会分别存储在每个分支中。比如,后缀 \\`ed\\`、\\`ing\\`、\\`tion\\` 在英文单词中特别常见。在上一个例子中,\\`e\\`、\\`d\\` 分别存放在了每一个分支上。\n\n有没有一种方法可以更加节省存储空间呢?有的,那就是 DFA。\n\n
\n
\n\n在上面的例子中,单词 \\`need\\`、\\`nested\\`、\\`seed\\` 和 \\`speed\\` 仅由 9 个节点组成,而上一张图中的前缀树包含了 17 个节点。\n\n可以看出,最小化前缀树 DFA 可以在很大程度上减少数据结构的大小。即使词汇量很大,最小化 DFA 通常也适合在内存中存储,避免昂贵的磁盘访问是实现快速自动补全的关键。\n\n### 一些扩展\n上面介绍了如何利用合理的数据结构实现基本的自动补全功能。这些数据结构可以通过多种方式进行扩展,从而改善用户体验。\n\n通常,满足特定前缀的词汇可能很多,而用户界面上能够显示的却不多,我们更希望能显示最常搜索或者最有价值的词汇。这通常可以通过为词汇表中的每个单词增加一个代表单词值的**权重** \\`weight\\`,并且按照权重高低来排序自动补全列表。\n\n- 对于排序后的词汇表来说,在词汇表每个元素上增加 \\`weight\\` 属性并不难;\n- 对于前缀树来说,将 \\`weight\\` 存储在叶子节点中,也是很简单的一个实现;\n- 对于 \\`DFA\\` 来说,则较为复杂。因为一个叶子节点可以通过多条路径到达。一种解决方案是将权重关联到路径而不是叶子节点。\n\n目前有不少开源库都提供了这个功能,比如主流的搜索引擎框架 [Elasticsearch](https://www.elastic.co/products/elasticsearch)、[Solr](https://lucene.apache.org/solr/) 等,基于此,我们可以实现高效而强大的自动补全功能。\n\n#### 推荐阅读\n- [阿里又一个 20k+ stars 开源项目诞生,恭喜 fastjson!](https://mp.weixin.qq.com/s/RNKDCK2KoyeuMeEs6GUrow)\n- [刷掉 90% 候选人的互联网大厂海量数据面试题(附题解 + 方法总结)](https://mp.weixin.qq.com/s/rjGqxUvrEqJNlo09GrT1Dw)\n- [好用!期待已久的文本块功能究竟如何在 Java 13 中发挥作用?](https://mp.weixin.qq.com/s/kalGv5T8AZGxTnLHr2wDsA)\n- [2019 GitHub 开源贡献排行榜新鲜出炉!微软谷歌领头,阿里跻身前 12!](https://mp.weixin.qq.com/s/_q812aGD1b9QvZ2WFI0Qgw)\n\n---\n\n欢迎关注我的公众号“**Doocs开源社区**”,原创技术文章第一时间推送。\n\n
\n \n
\n\n`;\nexport default DEFAULT_CONTENT;\n","import Vue from \"vue\";\nimport Vuex from \"vuex\";\nimport config from \"../assets/scripts/config\";\nimport WxRenderer from \"../assets/scripts/renderers/wx-renderer\";\nimport marked from \"marked\";\nimport CodeMirror from \"codemirror/lib/codemirror\";\nimport DEFAULT_CONTENT from \"../assets/scripts/default-content\";\nimport DEFAULT_CSS_CONTENT from \"../assets/scripts/themes/default-theme-css\";\nimport { setColor, formatDoc } from \"../assets/scripts/util\";\n\nVue.use(Vuex);\n\nconst state = {\n wxRenderer: null,\n output: \"\",\n html: \"\",\n editor: null,\n cssEditor: null,\n currentFont: \"\",\n currentSize: \"\",\n currentColor: \"\",\n citeStatus: 0,\n nightMode: false,\n codeTheme: \"github\",\n rightClickMenuVisible: false,\n};\nconst mutations = {\n setEditorValue(state, data) {\n state.editor.setValue(data);\n },\n setCssEditorValue(state, data) {\n state.cssEditor.setValue(data);\n },\n setWxRendererOptions(state, data) {\n state.wxRenderer.setOptions(data);\n },\n setCiteStatus(state, data) {\n state.citeStatus = data;\n localStorage.setItem(\"citeStatus\", data);\n },\n setCurrentFont(state, data) {\n state.currentFont = data;\n localStorage.setItem(\"fonts\", data);\n },\n setCurrentSize(state, data) {\n state.currentSize = data;\n localStorage.setItem(\"size\", data);\n },\n setCurrentColor(state, data) {\n state.currentColor = data;\n localStorage.setItem(\"color\", data);\n },\n setCurrentCodeTheme(state, data) {\n state.codeTheme = data;\n localStorage.setItem(\"codeTheme\", data);\n },\n setRightClickMenuVisible(state, data) {\n state.rightClickMenuVisible = data;\n },\n themeChanged(state) {\n state.nightMode = !state.nightMode;\n localStorage.setItem(\"nightMode\", state.nightMode);\n },\n initEditorState(state) {\n state.currentFont =\n localStorage.getItem(\"fonts\") || config.builtinFonts[0].value;\n state.currentColor =\n localStorage.getItem(\"color\") || config.colorOption[1].value;\n state.currentSize =\n localStorage.getItem(\"size\") || config.sizeOption[2].value;\n state.codeTheme =\n localStorage.getItem(\"codeTheme\") ||\n config.codeThemeOption[0].value;\n state.citeStatus = localStorage.getItem(\"citeStatus\") === \"true\";\n state.nightMode = localStorage.getItem(\"nightMode\") === \"true\";\n state.wxRenderer = new WxRenderer({\n theme: setColor(state.currentColor),\n fonts: state.currentFont,\n size: state.currentSize,\n status: state.citeStatus,\n });\n },\n initEditorEntity(state) {\n state.editor = CodeMirror.fromTextArea(\n document.getElementById(\"editor\"),\n {\n value: \"\",\n mode: \"text/x-markdown\",\n theme: \"xq-light\",\n lineNumbers: false,\n lineWrapping: true,\n styleActiveLine: true,\n autoCloseBrackets: true,\n extraKeys: {\n \"Ctrl-F\": function autoFormat(editor) {\n const doc = formatDoc(editor.getValue(0));\n localStorage.setItem(\"__editor_content\", doc);\n editor.setValue(doc);\n },\n \"Ctrl-S\": function save(editor) {},\n },\n }\n );\n\n // 如果有编辑器内容被保存则读取,否则加载默认内容\n state.editor.setValue(\n localStorage.getItem(\"__editor_content\") ||\n formatDoc(DEFAULT_CONTENT)\n );\n },\n initCssEditorEntity(state) {\n state.cssEditor = CodeMirror.fromTextArea(\n document.getElementById(\"cssEditor\"),\n {\n value: \"\",\n mode: \"css\",\n theme: \"style-mirror\",\n lineNumbers: false,\n lineWrapping: true,\n matchBrackets: true,\n autofocus: true,\n extraKeys: {\n \"Ctrl-F\": function autoFormat(editor) {\n const totalLines = editor.lineCount();\n\n editor.autoFormatRange(\n {\n line: 0,\n ch: 0,\n },\n {\n line: totalLines,\n }\n );\n },\n \"Ctrl-S\": function save(editor) {},\n },\n }\n );\n\n // 如果有编辑器内容被保存则读取,否则加载默认内容\n state.cssEditor.setValue(\n localStorage.getItem(\"__css_content\") || DEFAULT_CSS_CONTENT\n );\n },\n editorRefresh(state) {\n let output = marked(state.editor.getValue(0), {\n renderer: state.wxRenderer.getRenderer(state.citeStatus),\n });\n\n // 去除第一行的 margin-top\n output = output.replace(/(style=\".*?)\"/, '$1;margin-top: 0\"');\n if (state.citeStatus) {\n // 引用脚注\n output += state.wxRenderer.buildFootnotes();\n // 附加的一些 style\n output += state.wxRenderer.buildAddition();\n }\n state.output = output;\n },\n clearEditorToDefault(state) {\n const doc = formatDoc(DEFAULT_CONTENT);\n\n state.editor.setValue(doc);\n state.cssEditor.setValue(DEFAULT_CSS_CONTENT);\n },\n};\n\nexport default new Vuex.Store({\n state,\n mutations,\n actions: {},\n});\n","import Vue from \"vue\";\nimport {\n Container,\n Header,\n Upload,\n Tooltip,\n Form,\n FormItem,\n Select,\n Option,\n ColorPicker,\n Switch,\n Button,\n Main,\n Col,\n Row,\n Dialog,\n Loading,\n Message,\n} from \"element-ui\";\n\nVue.use(Container);\nVue.use(Header);\nVue.use(Upload);\nVue.use(Tooltip);\nVue.use(Form);\nVue.use(FormItem);\nVue.use(Select);\nVue.use(Option);\nVue.use(ColorPicker);\nVue.use(Switch);\nVue.use(Button);\nVue.use(Main);\nVue.use(Col);\nVue.use(Row);\nVue.use(Dialog);\nVue.use(Loading);\nVue.component(Message.name, Message);\n\nVue.prototype.$loading = Loading.service;\nVue.prototype.$message = Message;\n","import CodeMirror from \"codemirror/lib/codemirror\";\n(function () {\n CodeMirror.extendMode(\"css\", {\n commentStart: \"/*\",\n commentEnd: \"*/\",\n newlineAfterToken: function (type, content) {\n return /^[;{}]$/.test(content);\n },\n });\n\n // Comment/uncomment the specified range\n CodeMirror.defineExtension(\"commentRange\", function (isComment, from, to) {\n var cm = this;\n var curMode = CodeMirror.innerMode(\n cm.getMode(),\n cm.getTokenAt(from).state\n ).mode;\n cm.operation(function () {\n if (isComment) {\n // Comment range\n cm.replaceRange(curMode.commentEnd, to);\n cm.replaceRange(curMode.commentStart, from);\n if (from.line == to.line && from.ch == to.ch) {\n // An empty comment inserted - put cursor inside\n cm.setCursor(\n from.line,\n from.ch + curMode.commentStart.length\n );\n }\n } else {\n // Uncomment range\n var selText = cm.getRange(from, to);\n var startIndex = selText.indexOf(curMode.commentStart);\n var endIndex = selText.lastIndexOf(curMode.commentEnd);\n if (startIndex > -1 && endIndex > -1 && endIndex > startIndex) {\n // Take string till comment start\n selText =\n selText.substr(0, startIndex) +\n // From comment start till comment end\n selText.substring(\n startIndex + curMode.commentStart.length,\n endIndex\n ) +\n // From comment end till string end\n selText.substr(endIndex + curMode.commentEnd.length);\n }\n cm.replaceRange(selText, from, to);\n }\n });\n });\n\n // Applies automatic mode-aware indentation to the specified range\n CodeMirror.defineExtension(\"autoIndentRange\", function (from, to) {\n var cmInstance = this;\n this.operation(function () {\n for (var i = from.line; i <= to.line; i++) {\n cmInstance.indentLine(i, \"smart\");\n }\n });\n });\n\n // Applies automatic formatting to the specified range\n CodeMirror.defineExtension(\"autoFormatRange\", function (from, to) {\n var cm = this;\n var outer = cm.getMode();\n var text = cm.getRange(from, to).split(\"\\n\");\n var state = CodeMirror.copyState(outer, cm.getTokenAt(from).state);\n var tabSize = cm.getOption(\"tabSize\");\n\n var out = \"\";\n var lines = 0;\n var atSol = from.ch == 0;\n\n function newline() {\n out += \"\\n\";\n atSol = true;\n ++lines;\n }\n\n for (var i = 0; i < text.length; ++i) {\n var stream = new CodeMirror.StringStream(text[i], tabSize);\n while (!stream.eol()) {\n var inner = CodeMirror.innerMode(outer, state);\n var style = outer.token(stream, state);\n var cur = stream.current();\n stream.start = stream.pos;\n if (!atSol || /\\S/.test(cur)) {\n out += cur;\n atSol = false;\n }\n if (\n !atSol &&\n inner.mode.newlineAfterToken &&\n inner.mode.newlineAfterToken(\n style,\n cur,\n stream.string.slice(stream.pos) || text[i + 1] || \"\",\n inner.state\n )\n ) {\n newline();\n }\n }\n if (!stream.pos && outer.blankLine) outer.blankLine(state);\n if (!atSol) newline();\n }\n\n cm.operation(function () {\n cm.replaceRange(out, from, to);\n for (\n var cur = from.line + 1, end = from.line + lines;\n cur <= end;\n ++cur\n ) {\n cm.indentLine(cur, \"smart\");\n }\n cm.setSelection(from, cm.getCursor(false));\n });\n });\n})();\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\nimport CodeMirror from \"codemirror/lib/codemirror\";\n(function (CodeMirror) {\n var defaults = {\n pairs: \"()[]{}''\\\"\\\"\",\n closeBefore: \")]}'\\\":;>\",\n triples: \"\",\n explode: \"[]{}\",\n };\n\n var Pos = CodeMirror.Pos;\n\n CodeMirror.defineOption(\"autoCloseBrackets\", false, function (\n cm,\n val,\n old\n ) {\n if (old && old != CodeMirror.Init) {\n cm.removeKeyMap(keyMap);\n cm.state.closeBrackets = null;\n }\n if (val) {\n ensureBound(getOption(val, \"pairs\"));\n cm.state.closeBrackets = val;\n cm.addKeyMap(keyMap);\n }\n });\n\n function getOption(conf, name) {\n if (name == \"pairs\" && typeof conf == \"string\") return conf;\n if (typeof conf == \"object\" && conf[name] != null) return conf[name];\n return defaults[name];\n }\n\n var keyMap = {\n Backspace: handleBackspace,\n Enter: handleEnter,\n };\n\n function ensureBound(chars) {\n for (var i = 0; i < chars.length; i++) {\n var ch = chars.charAt(i),\n key = \"'\" + ch + \"'\";\n if (!keyMap[key]) keyMap[key] = handler(ch);\n }\n }\n ensureBound(defaults.pairs + \"`\");\n\n function handler(ch) {\n return function (cm) {\n return handleChar(cm, ch);\n };\n }\n\n function getConfig(cm) {\n var deflt = cm.state.closeBrackets;\n if (!deflt || deflt.override) return deflt;\n var mode = cm.getModeAt(cm.getCursor());\n return mode.closeBrackets || deflt;\n }\n\n function handleBackspace(cm) {\n var conf = getConfig(cm);\n if (!conf || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n var pairs = getOption(conf, \"pairs\");\n var ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) return CodeMirror.Pass;\n var around = charsAround(cm, ranges[i].head);\n if (!around || pairs.indexOf(around) % 2 != 0)\n return CodeMirror.Pass;\n }\n for (var i = ranges.length - 1; i >= 0; i--) {\n var cur = ranges[i].head;\n cm.replaceRange(\n \"\",\n Pos(cur.line, cur.ch - 1),\n Pos(cur.line, cur.ch + 1),\n \"+delete\"\n );\n }\n }\n\n function handleEnter(cm) {\n var conf = getConfig(cm);\n var explode = conf && getOption(conf, \"explode\");\n if (!explode || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n var ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) return CodeMirror.Pass;\n var around = charsAround(cm, ranges[i].head);\n if (!around || explode.indexOf(around) % 2 != 0)\n return CodeMirror.Pass;\n }\n cm.operation(function () {\n var linesep = cm.lineSeparator() || \"\\n\";\n cm.replaceSelection(linesep + linesep, null);\n cm.execCommand(\"goCharLeft\");\n ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++) {\n var line = ranges[i].head.line;\n cm.indentLine(line, null, true);\n cm.indentLine(line + 1, null, true);\n }\n });\n }\n\n function contractSelection(sel) {\n var inverted = CodeMirror.cmpPos(sel.anchor, sel.head) > 0;\n return {\n anchor: new Pos(\n sel.anchor.line,\n sel.anchor.ch + (inverted ? -1 : 1)\n ),\n head: new Pos(sel.head.line, sel.head.ch + (inverted ? 1 : -1)),\n };\n }\n\n function handleChar(cm, ch) {\n var conf = getConfig(cm);\n if (!conf || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n var pairs = getOption(conf, \"pairs\");\n var pos = pairs.indexOf(ch);\n if (pos == -1) return CodeMirror.Pass;\n\n var closeBefore = getOption(conf, \"closeBefore\");\n\n var triples = getOption(conf, \"triples\");\n\n var identical = pairs.charAt(pos + 1) == ch;\n var ranges = cm.listSelections();\n var opening = pos % 2 == 0;\n\n var type;\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i],\n cur = range.head,\n curType;\n var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1));\n if (opening && !range.empty()) {\n curType = \"surround\";\n } else if ((identical || !opening) && next == ch) {\n if (identical && stringStartsAfter(cm, cur)) curType = \"both\";\n else if (\n triples.indexOf(ch) >= 0 &&\n cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == ch + ch + ch\n )\n curType = \"skipThree\";\n else curType = \"skip\";\n } else if (\n identical &&\n cur.ch > 1 &&\n triples.indexOf(ch) >= 0 &&\n cm.getRange(Pos(cur.line, cur.ch - 2), cur) == ch + ch\n ) {\n if (\n cur.ch > 2 &&\n /\\bstring/.test(\n cm.getTokenTypeAt(Pos(cur.line, cur.ch - 2))\n )\n )\n return CodeMirror.Pass;\n curType = \"addFour\";\n } else if (identical) {\n var prev =\n cur.ch == 0\n ? \" \"\n : cm.getRange(Pos(cur.line, cur.ch - 1), cur);\n if (\n !CodeMirror.isWordChar(next) &&\n prev != ch &&\n !CodeMirror.isWordChar(prev)\n )\n curType = \"both\";\n else return CodeMirror.Pass;\n } else if (\n opening &&\n (next.length === 0 ||\n /\\s/.test(next) ||\n closeBefore.indexOf(next) > -1)\n ) {\n curType = \"both\";\n } else {\n return CodeMirror.Pass;\n }\n if (!type) type = curType;\n else if (type != curType) return CodeMirror.Pass;\n }\n\n var left = pos % 2 ? pairs.charAt(pos - 1) : ch;\n var right = pos % 2 ? ch : pairs.charAt(pos + 1);\n cm.operation(function () {\n if (type == \"skip\") {\n cm.execCommand(\"goCharRight\");\n } else if (type == \"skipThree\") {\n for (var i = 0; i < 3; i++) cm.execCommand(\"goCharRight\");\n } else if (type == \"surround\") {\n var sels = cm.getSelections();\n for (var i = 0; i < sels.length; i++)\n sels[i] = left + sels[i] + right;\n cm.replaceSelections(sels, \"around\");\n sels = cm.listSelections().slice();\n for (var i = 0; i < sels.length; i++)\n sels[i] = contractSelection(sels[i]);\n cm.setSelections(sels);\n } else if (type == \"both\") {\n cm.replaceSelection(left + right, null);\n cm.triggerElectric(left + right);\n cm.execCommand(\"goCharLeft\");\n } else if (type == \"addFour\") {\n cm.replaceSelection(left + left + left + left, \"before\");\n cm.execCommand(\"goCharRight\");\n }\n });\n }\n\n function charsAround(cm, pos) {\n var str = cm.getRange(\n Pos(pos.line, pos.ch - 1),\n Pos(pos.line, pos.ch + 1)\n );\n return str.length == 2 ? str : null;\n }\n\n function stringStartsAfter(cm, pos) {\n var token = cm.getTokenAt(Pos(pos.line, pos.ch + 1));\n return (\n /\\bstring/.test(token.type) &&\n token.start == pos.ch &&\n (pos.ch == 0 || !/\\bstring/.test(cm.getTokenTypeAt(pos)))\n );\n }\n})(CodeMirror);\n","import Vue from \"vue\";\nimport App from \"./App.vue\";\nimport store from \"./store\";\nimport ElementUI from \"element-ui\";\nimport \"element-ui/lib/theme-chalk/index.css\";\nimport \"./plugins/element\";\nimport \"codemirror/lib/codemirror.css\";\nimport \"codemirror/theme/ambiance.css\";\nimport \"codemirror/theme/xq-light.css\";\nimport \"codemirror/mode/css/css\";\nimport \"codemirror/mode/markdown/markdown\";\nimport \"codemirror/addon/edit/matchbrackets\";\nimport \"codemirror/addon/selection/active-line\";\nimport \"codemirror/addon/hint/show-hint.js\";\nimport \"codemirror/addon/hint/css-hint.js\";\nimport \"./assets/less/theme.less\";\n// 对codemirror预处理\nimport \"./assets/scripts/format\";\nimport \"./assets/scripts/closebrackets\";\nVue.use(ElementUI);\n\nVue.config.productionTip = false;\n\nnew Vue({\n store,\n render: (h) => h(App),\n}).$mount(\"#app\");\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rightClickMenu.vue?vue&type=style&index=0&id=b08f13d6&lang=less&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodemirrorEditor.vue?vue&type=style&index=1&lang=less&\"","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&id=f01d475a&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./uploadImgDialog.vue?vue&type=style&index=0&id=356019be&lang=less&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./insertForm.vue?vue&type=style&index=0&id=745662b4&lang=less&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CodemirrorEditor.vue?vue&type=style&index=0&id=4f7941be&lang=less&scoped=true&\"","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loading.vue?vue&type=script&lang=js&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./header.vue?vue&type=style&index=0&id=75e84114&lang=less&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./resetDialog.vue?vue&type=style&index=0&id=5102b5f0&lang=less&scoped=true&\""],"sourceRoot":""} \ No newline at end of file diff --git a/js/app.8c64a5dd.js b/js/app.8c64a5dd.js deleted file mode 100644 index 96bf076..0000000 --- a/js/app.8c64a5dd.js +++ /dev/null @@ -1,4 +0,0 @@ -(function(e){function t(t){for(var o,a,s=t[0],c=t[1],l=t[2],d=0,f=[];d0}));r=i(r);var a=e.substring(0,t).split(",").map((function(e){return e.trim()}));a.forEach((function(e){o[e]||(o[e]={}),Object.keys(r).forEach((function(t){o[e][t]=r[t]}))})),e=e.slice(n+1).trim()};while(e.length>0&&-1!==e.indexOf("{")&&-1!==e.indexOf("}"))i();return o}function O(e,t){var n=e.getValue(0);n?localStorage.setItem(t,n):localStorage.removeItem(t)}function _(e){var t=g.a.format(e,{parser:"markdown",plugins:[b.a]});return t}function T(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"pre",t=document.getElementsByClassName("code__pre");t.length>0&&t.forEach((function(t){t.style.whiteSpace=e}))}function E(e){var t=document.createElement("a");t.download="content.md",t.style.display="none";var n=new Blob([e]);t.href=URL.createObjectURL(n),document.body.appendChild(t),t.click(),document.body.removeChild(t)}function I(e){for(var t=e.data,n=e.rows,o=e.cols,i="",r=[],a=0;a1?a-1:a;1===a?r.push("---\t"):r.push(t["k_".concat(c,"_").concat(s)]||"")}i+=r.join("\t|\t"),i+="\t|\n"}return i}var R=n("466b"),A=n.n(R);function $(){for(var e=document.getElementById("output"),t=e.getElementsByTagName("img"),n=0;n=1&&i<=127?t+=e.charAt(n):i>2047?(t+=String.fromCharCode(224|i>>12&15),t+=String.fromCharCode(128|i>>6&63),t+=String.fromCharCode(128|i>>0&63)):(t+=String.fromCharCode(192|i>>6&31),t+=String.fromCharCode(128|i>>0&63));return t}var we="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);function Oe(e){var t,n,o,i,r,a;o=e.length,n=0,t="";while(n>2),t+=we.charAt((3&i)<<4),t+="==";break}if(r=e.charCodeAt(n++),n==o){t+=we.charAt(i>>2),t+=we.charAt((3&i)<<4|(240&r)>>4),t+=we.charAt((15&r)<<2),t+="=";break}a=e.charCodeAt(n++),t+=we.charAt(i>>2),t+=we.charAt((3&i)<<4|(240&r)>>4),t+=we.charAt((15&r)<<2|(192&a)>>6),t+=we.charAt(63&a)}return t}function _e(e){return e=e.replace(/\+/g,"-"),e=e.replace(/\//g,"_"),e}var Te={username:"filess",repo:"images",branch:"master",accessToken:["7715d7ca67b5d3837cfdoocsmde8c38421815aa423510af","c411415bf95dbe39625doocsmd5047ba9b7a2a6c9642abe","2821cd8819fa345c053doocsmdca86ac653f8bc20db1f1b","445f0dae46ef1f2a4d6doocsmdc797301e94797b4750a4c","cc1d0c1426d0fd0902bdoocsmdd2d7184b14da61b86ec46","b67e9d15cb6f910492fdoocsmdac6b44d379c953bb19eff","618c4dc2244ccbbc088doocsmd125d17fd31b7d06a50cf3","a4b581732e1c1507458doocsmdc5b223b27dae5e2e16a55"]};function Ee(e,t){var n=localStorage.getItem("imgHost");switch(!n&&localStorage.setItem("imgHost","default"),n){case"aliOSS":return He(e,t.name);case"txCOS":return De(t);case"qiniu":return Fe(t);case"github":default:return Me(e,t.name)}}function Ie(e,t,n,o){var i=new Date,r=i.getFullYear()+"/"+(i.getMonth()+1).toString().padStart(2,"0")+"/"+i.getDate().toString().padStart(2,"0");return{method:"put",headers:{Authorization:"token "+o},branch:n,url:"https://api.github.com/repos/".concat(e,"/").concat(t,"/contents/").concat(r,"/")}}function Re(){var e=Te.accessToken[Math.floor(Math.random()*Te.accessToken.length)].replace("doocsmd","");return Ie(Te.username,Te.repo,Te.branch,e)}function Ae(){var e=JSON.parse(localStorage.getItem("githubConfig")),t=e.repo.replace("https://github.com/","").replace("http://github.com/","").replace("github.com/","").split("/"),n=t[0],o=t[1];return Ie(n,o,e.branch,e.accessToken)}function $e(e,t,n){var o=JSON.stringify(n),i=Oe(xe(o)),r=pe.a.HmacSHA1(i,t),a=r.toString(pe.a.enc.Base64);return e+":"+_e(a)+":"+i}function Me(e,t){return je.apply(this,arguments)}function je(){return je=Object(f["a"])(regeneratorRuntime.mark((function e(t,n){var o,i,r,a,s,c;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return o="github"!==localStorage.getItem("imgHost"),i=o?Re():Ae(),r=(new Date).getTime()+"-"+Object(ye["a"])()+"."+n.split(".")[1],e.next=5,fe({url:i.url+r,method:i.method,headers:i.headers,data:{branch:i.branch||"master",message:"Upload by ".concat(window.location.href),content:t}});case 5:return a=e.sent,s="raw.githubusercontent.com/filess/images/master/",c="cdn.jsdelivr.net/gh/filess/images@master/",e.abrupt("return",o?a.content.download_url.replace(s,c):a.content.download_url);case 9:case"end":return e.stop()}}),e)}))),je.apply(this,arguments)}function He(e,t){return ze.apply(this,arguments)}function ze(){return ze=Object(f["a"])(regeneratorRuntime.mark((function e(t,n){var o,i,r,a,s,c;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return o=(new Date).getTime()+"-"+Object(ye["a"])()+"."+n.split(".")[1],i=JSON.parse(localStorage.getItem("aliOSSConfig")),r=Se()(t,"base64"),e.prev=3,a=i.path+"/"+o,s=new he.a({region:i.region,bucket:i.bucket,accessKeyId:i.accessKeyId,accessKeySecret:i.accessKeySecret}),e.next=8,s.put(a,r);case 8:return c=e.sent,e.abrupt("return",""==i.cdnHost?c.url:i.cdnHost+"/"+(""==i.path?o:a));case 12:return e.prev=12,e.t0=e["catch"](3),e.abrupt("return",Promise.reject(e.t0));case 15:case"end":return e.stop()}}),e,null,[[3,12]])}))),ze.apply(this,arguments)}function De(e){return Ge.apply(this,arguments)}function Ge(){return Ge=Object(f["a"])(regeneratorRuntime.mark((function e(t){var n,o,i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return n=(new Date).getTime()+"-"+Object(ye["a"])()+"."+t.name.split(".")[1],o=JSON.parse(localStorage.getItem("txCOSConfig")),i=new ve.a({SecretId:o.secretId,SecretKey:o.secretKey}),e.abrupt("return",new Promise((function(e,r){i.putObject({Bucket:o.bucket,Region:o.region,Key:o.path+"/"+n,Body:t},(function(t,i){t?r(t):o.cdnHost?e(""!=o.path?o.cdnHost+"/"+o.path+"/"+n:o.cdnHost+"/"+n):r(i.Location)}))})));case 4:case"end":return e.stop()}}),e)}))),Ge.apply(this,arguments)}function Fe(e){return qe.apply(this,arguments)}function qe(){return qe=Object(f["a"])(regeneratorRuntime.mark((function e(t){var n,o,i,r,a,s,c;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return n=JSON.parse(localStorage.getItem("qiniuConfig")),o={scope:n.bucket,deadline:Math.trunc((new Date).getTime()/1e3)+3600},i=$e(n.accessKey,n.secretKey,o),r=n.path?n.path+"/":"",a=r+(new Date).getTime()+"-"+Object(ye["a"])()+"."+t.name.split(".")[1],s={region:n.region},c=ke["a"](t,a,i,{},s),e.abrupt("return",new Promise((function(e,t){c.subscribe({next:function(e){console.log(e)},error:function(e){t(e.message)},complete:function(t){e(n.domain+"/"+t.key)}})})));case 8:case"end":return e.stop()}}),e)}))),qe.apply(this,arguments)}var Ke={fileUpload:Ee};function Ne(e){return new Promise((function(t,n){var o=Ve(e);if(o)n(o);else{var i=new FileReader;i.readAsDataURL(e),i.onload=function(){var o=this.result.split(",").pop();Ke.fileUpload(o,e).then((function(e){t(e)})).catch((function(e){n(e)}))}}}))}function Ve(e){return/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(e.name)?e.size>5242880&&"由于公众号限制,图片大小不能超过 5.0M":"请上传 JPG/PNG/GIF 格式的图片"}var Pe={props:{value:{type:Boolean,default:!1},top:{type:Number,default:0},left:{type:Number,default:0}},data:function(){return{list:[{text:"上传图片",key:"insertPic"},{text:"插入表格",key:"insertTable"},{text:"页面重置",key:"pageReset"},{text:"下载MD文档",key:"downLoad"}]}},methods:{closeCB:function(){this.$emit("input",!1)},onMouseDown:function(e){this.$emit("menuTick",e),this.$emit("closeMenu",!1)}}},Be=Pe,Le=(n("67d9"),Object(N["a"])(Be,se,ce,!1,null,"b08f13d6",null)),Qe=Le.exports,Je=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-dialog",{staticClass:"upload__dialog",attrs:{title:"本地上传",visible:e.value},on:{close:function(t){return e.$emit("close")}}},[n("el-tabs",{attrs:{type:"card",value:"upload"}},[n("el-tab-pane",{staticClass:"upload-panel",attrs:{label:"选择上传",name:"upload"}},[n("el-select",{attrs:{placeholder:"请选择",size:"small"},on:{change:e.changeImgHost},model:{value:e.imgHost,callback:function(t){e.imgHost=t},expression:"imgHost"}},e._l(e.options,(function(e){return n("el-option",{key:e.value,attrs:{label:e.label,value:e.value}})})),1),n("el-upload",{directives:[{name:"loading",rawName:"v-loading",value:e.uploadingImg,expression:"uploadingImg"}],attrs:{drag:"",action:"",headers:{"Content-Type":"multipart/form-data"},"show-file-list":!1,multiple:!0,accept:".jpg, .jpeg, .png, .gif",name:"file","before-upload":e.beforeUpload}},[n("i",{staticClass:"el-icon-upload"}),n("div",{staticClass:"el-upload__text"},[e._v(" 将图片拖到此处,或 "),n("em",[e._v("点击上传")])])])],1),n("el-tab-pane",{staticClass:"github-panel",attrs:{label:"GitHub 图床",name:"github"}},[n("el-form",{ref:"form",staticClass:"setting-form",attrs:{model:e.formGitHub,"label-position":"right","label-width":"140px"}},[n("el-form-item",{attrs:{label:"GitHub 仓库",required:!0}},[n("el-input",{attrs:{placeholder:"如:github.com/yanglbme/resource"},model:{value:e.formGitHub.repo,callback:function(t){e.$set(e.formGitHub,"repo","string"===typeof t?t.trim():t)},expression:"formGitHub.repo"}})],1),n("el-form-item",{attrs:{label:"分支"}},[n("el-input",{attrs:{placeholder:"如:release,可不填,默认 master"},model:{value:e.formGitHub.branch,callback:function(t){e.$set(e.formGitHub,"branch","string"===typeof t?t.trim():t)},expression:"formGitHub.branch"}})],1),n("el-form-item",{attrs:{label:"Token",required:!0}},[n("el-input",{attrs:{"show-password":"",placeholder:"如:cc1d0c1426d0fd0902bd2d7184b14da61b8abc46"},model:{value:e.formGitHub.accessToken,callback:function(t){e.$set(e.formGitHub,"accessToken","string"===typeof t?t.trim():t)},expression:"formGitHub.accessToken"}}),n("el-link",{attrs:{type:"primary",href:"https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token",target:"_blank"}},[e._v("如何获取 GitHub Token?")])],1),n("el-form-item",[n("el-button",{attrs:{type:"primary"},on:{click:e.saveGitHubConfiguration}},[e._v("保存配置")])],1)],1)],1),n("el-tab-pane",{staticClass:"github-panel",attrs:{label:"阿里云 OSS",name:"aliOSS"}},[n("el-form",{ref:"form",staticClass:"setting-form",attrs:{model:e.formAliOSS,"label-position":"right","label-width":"140px"}},[n("el-form-item",{attrs:{label:"AccessKey ID",required:!0}},[n("el-input",{attrs:{placeholder:"如:LTAI4GdoocsmdoxUf13ylbaNHk"},model:{value:e.formAliOSS.accessKeyId,callback:function(t){e.$set(e.formAliOSS,"accessKeyId","string"===typeof t?t.trim():t)},expression:"formAliOSS.accessKeyId"}})],1),n("el-form-item",{attrs:{label:"AccessKey Secret",required:!0}},[n("el-input",{attrs:{"show-password":"",placeholder:"如:cc1d0c142doocs0902bd2d7md4b14da6ylbabc46"},model:{value:e.formAliOSS.accessKeySecret,callback:function(t){e.$set(e.formAliOSS,"accessKeySecret","string"===typeof t?t.trim():t)},expression:"formAliOSS.accessKeySecret"}})],1),n("el-form-item",{attrs:{label:"Bucket",required:!0}},[n("el-input",{attrs:{placeholder:"如:doocs"},model:{value:e.formAliOSS.bucket,callback:function(t){e.$set(e.formAliOSS,"bucket","string"===typeof t?t.trim():t)},expression:"formAliOSS.bucket"}})],1),n("el-form-item",{attrs:{label:"Bucket 所在区域",required:!0}},[n("el-input",{attrs:{placeholder:"如:oss-cn-shenzhen"},model:{value:e.formAliOSS.region,callback:function(t){e.$set(e.formAliOSS,"region","string"===typeof t?t.trim():t)},expression:"formAliOSS.region"}})],1),n("el-form-item",{attrs:{label:"自定义 CDN 域名",required:!1}},[n("el-input",{attrs:{placeholder:"如:https://imagecdn.alidaodao.com,可不填"},model:{value:e.formAliOSS.cdnHost,callback:function(t){e.$set(e.formAliOSS,"cdnHost","string"===typeof t?t.trim():t)},expression:"formAliOSS.cdnHost"}})],1),n("el-form-item",{attrs:{label:"存储路径"}},[n("el-input",{attrs:{placeholder:"如:img,可不填,默认为根目录"},model:{value:e.formAliOSS.path,callback:function(t){e.$set(e.formAliOSS,"path","string"===typeof t?t.trim():t)},expression:"formAliOSS.path"}}),n("el-link",{attrs:{type:"primary",href:"https://help.aliyun.com/document_detail/31883.html",target:"_blank"}},[e._v("如何使用阿里云 OSS?")])],1),n("el-form-item",[n("el-button",{attrs:{type:"primary"},on:{click:e.saveAliOSSConfiguration}},[e._v("保存配置")])],1)],1)],1),n("el-tab-pane",{staticClass:"github-panel",attrs:{label:"腾讯云 COS",name:"txCOS"}},[n("el-form",{ref:"form",staticClass:"setting-form",attrs:{model:e.formTxCOS,"label-position":"right","label-width":"140px"}},[n("el-form-item",{attrs:{label:"SecretId",required:!0}},[n("el-input",{attrs:{placeholder:"如:AKIDnQp1w3DOOCSs8F5MDp9tdoocsmdUPonW3"},model:{value:e.formTxCOS.secretId,callback:function(t){e.$set(e.formTxCOS,"secretId","string"===typeof t?t.trim():t)},expression:"formTxCOS.secretId"}})],1),n("el-form-item",{attrs:{label:"SecretKey",required:!0}},[n("el-input",{attrs:{"show-password":"",placeholder:"如:ukLmdtEJ9271f3DOocsMDsCXdS3YlbW0"},model:{value:e.formTxCOS.secretKey,callback:function(t){e.$set(e.formTxCOS,"secretKey","string"===typeof t?t.trim():t)},expression:"formTxCOS.secretKey"}})],1),n("el-form-item",{attrs:{label:"Bucket",required:!0}},[n("el-input",{attrs:{placeholder:"如:doocs-3212520134"},model:{value:e.formTxCOS.bucket,callback:function(t){e.$set(e.formTxCOS,"bucket","string"===typeof t?t.trim():t)},expression:"formTxCOS.bucket"}})],1),n("el-form-item",{attrs:{label:"Bucket 所在区域",required:!0}},[n("el-input",{attrs:{placeholder:"如:ap-guangzhou"},model:{value:e.formTxCOS.region,callback:function(t){e.$set(e.formTxCOS,"region","string"===typeof t?t.trim():t)},expression:"formTxCOS.region"}})],1),n("el-form-item",{attrs:{label:"自定义 CDN 域名",required:!1}},[n("el-input",{attrs:{placeholder:"如:https://imagecdn.alidaodao.com,可不填"},model:{value:e.formTxCOS.cdnHost,callback:function(t){e.$set(e.formTxCOS,"cdnHost","string"===typeof t?t.trim():t)},expression:"formTxCOS.cdnHost"}})],1),n("el-form-item",{attrs:{label:"存储路径"}},[n("el-input",{attrs:{placeholder:"如:img,可不填,默认根目录"},model:{value:e.formTxCOS.path,callback:function(t){e.$set(e.formTxCOS,"path","string"===typeof t?t.trim():t)},expression:"formTxCOS.path"}}),n("el-link",{attrs:{type:"primary",href:"https://cloud.tencent.com/document/product/436/38484",target:"_blank"}},[e._v("如何使用腾讯云 COS?")])],1),n("el-form-item",[n("el-button",{attrs:{type:"primary"},on:{click:e.saveTxCOSConfiguration}},[e._v("保存配置")])],1)],1)],1),n("el-tab-pane",{staticClass:"github-panel",attrs:{label:"七牛云 Kodo",name:"qiniu"}},[n("el-form",{ref:"form",staticClass:"setting-form",attrs:{model:e.formQiniu,"label-position":"right","label-width":"140px"}},[n("el-form-item",{attrs:{label:"AccessKey",required:!0}},[n("el-input",{attrs:{placeholder:"如:6DD3VaLJ_SQgOdoocsyTV_YWaDmdnL2n8EGx7kG"},model:{value:e.formQiniu.accessKey,callback:function(t){e.$set(e.formQiniu,"accessKey","string"===typeof t?t.trim():t)},expression:"formQiniu.accessKey"}})],1),n("el-form-item",{attrs:{label:"SecretKey",required:!0}},[n("el-input",{attrs:{"show-password":"",placeholder:"如:qgZa5qrvDOOcsmdKStD1oCjZ9nB7MDvJUs_34SIm"},model:{value:e.formQiniu.secretKey,callback:function(t){e.$set(e.formQiniu,"secretKey","string"===typeof t?t.trim():t)},expression:"formQiniu.secretKey"}})],1),n("el-form-item",{attrs:{label:"Bucket",required:!0}},[n("el-input",{attrs:{placeholder:"如:md"},model:{value:e.formQiniu.bucket,callback:function(t){e.$set(e.formQiniu,"bucket","string"===typeof t?t.trim():t)},expression:"formQiniu.bucket"}})],1),n("el-form-item",{attrs:{label:"Bucket 对应域名",required:!0}},[n("el-input",{attrs:{placeholder:"如:https://images.123ylb.cn"},model:{value:e.formQiniu.domain,callback:function(t){e.$set(e.formQiniu,"domain","string"===typeof t?t.trim():t)},expression:"formQiniu.domain"}})],1),n("el-form-item",{attrs:{label:"存储区域",required:!0}},[n("el-input",{attrs:{placeholder:"如:z2"},model:{value:e.formQiniu.region,callback:function(t){e.$set(e.formQiniu,"region","string"===typeof t?t.trim():t)},expression:"formQiniu.region"}})],1),n("el-form-item",{attrs:{label:"存储路径",required:!1}},[n("el-input",{attrs:{placeholder:"如:img,可不填,默认为根目录"},model:{value:e.formQiniu.path,callback:function(t){e.$set(e.formQiniu,"path","string"===typeof t?t.trim():t)},expression:"formQiniu.path"}}),n("el-link",{attrs:{type:"primary",href:"https://developer.qiniu.com/kodo",target:"_blank"}},[e._v("如何使用七牛云 Kodo?")])],1),n("el-form-item",[n("el-button",{attrs:{type:"primary"},on:{click:e.saveQiniuConfiguration}},[e._v("保存配置")])],1)],1)],1)],1)],1)},Ue=[],We={props:{value:{type:Boolean,default:!1}},data:function(){return{formGitHub:{repo:"",branch:"",accessToken:""},formAliOSS:{accessKeyId:"",accessKeySecret:"",bucket:"",region:"",path:"",cdnHost:""},formTxCOS:{secretId:"",secretKey:"",bucket:"",region:"",path:"",cdnHost:""},formQiniu:{accessKey:"",secretKey:"",bucket:"",domain:"",region:""},options:[{value:"default",label:"默认图床"},{value:"github",label:"GitHub"},{value:"aliOSS",label:"阿里云"},{value:"txCOS",label:"腾讯云"},{value:"qiniu",label:"七牛云"}],imgHost:"default",uploadingImg:!1}},created:function(){localStorage.getItem("githubConfig")&&(this.formGitHub=JSON.parse(localStorage.getItem("githubConfig"))),localStorage.getItem("aliOSSConfig")&&(this.formAliOSS=JSON.parse(localStorage.getItem("aliOSSConfig"))),localStorage.getItem("txCOSConfig")&&(this.formTxCOS=JSON.parse(localStorage.getItem("txCOSConfig"))),localStorage.getItem("imgHost")&&(this.imgHost=localStorage.getItem("imgHost"))},methods:{changeImgHost:function(){localStorage.setItem("imgHost",this.imgHost),this.$message({showClose:!0,message:"已成功切换图床",type:"success"})},saveGitHubConfiguration:function(){if(this.formGitHub.repo&&this.formGitHub.accessToken)localStorage.setItem("githubConfig",JSON.stringify(this.formGitHub)),this.$message({message:"保存成功",type:"success"});else{var e=this.formGitHub.repo?"token":"GitHub 仓库";this.$message({showClose:!0,message:"参数「​".concat(e,"」不能为空"),type:"error"})}},saveAliOSSConfiguration:function(){this.formAliOSS.accessKeyId&&this.formAliOSS.accessKeySecret&&this.formAliOSS.bucket&&this.formAliOSS.region?(localStorage.setItem("aliOSSConfig",JSON.stringify(this.formAliOSS)),this.$message({message:"保存成功",type:"success"})):this.$message({showClose:!0,message:"阿里云 OSS 参数配置不全",type:"error"})},saveTxCOSConfiguration:function(){this.formTxCOS.secretId&&this.formTxCOS.secretKey&&this.formTxCOS.bucket&&this.formTxCOS.region?(localStorage.setItem("txCOSConfig",JSON.stringify(this.formTxCOS)),this.$message({message:"保存成功",type:"success"})):this.$message({showClose:!0,message:"腾讯云 COS 参数配置不全",type:"error"})},saveQiniuConfiguration:function(){this.formQiniu.accessKey&&this.formQiniu.secretKey&&this.formQiniu.bucket&&this.formQiniu.domain&&this.formQiniu.region?(localStorage.setItem("qiniuConfig",JSON.stringify(this.formQiniu)),this.$message({message:"保存成功",type:"success"})):this.$message({showClose:!0,message:"七牛云 Kodo 参数配置不全",type:"error"})},beforeUpload:function(e){var t=this;if(this.validateConfig())return this.uploadingImg=!0,Ne(e).then((function(e){t.$emit("uploaded",e),t.uploadingImg=!1})).catch((function(e){t.uploadingImg=!1,t.$message({showClose:!0,message:e,type:"error"})})),!1},validateConfig:function(){var e=!0,t="";switch(localStorage.getItem("imgHost")){case"github":e=this.formGitHub.repo&&this.formGitHub.accessToken,t=e?"":"请先配置 GitHub 图床参数";break;case"aliOSS":e=this.formAliOSS.accessKeyId&&this.formAliOSS.accessKeySecret&&this.formAliOSS.bucket&&this.formAliOSS.region,t=e?"":"请先配置阿里云 OSS 参数";break;case"txCOS":e=this.formTxCOS.secretId&&this.formTxCOS.secretKey&&this.formTxCOS.bucket&&this.formTxCOS.region,t=e?"":"请先配置腾讯云 COS 参数";break;case"qiniu":e=this.formQiniu.accessKey&&this.formQiniu.secretKey&&this.formQiniu.bucket&&this.formQiniu.domain&&this.formQiniu.region,t=e?"":"请先配置七牛云 Kodo 参数";break}return t&&this.$message.error(t),e}}},Ye=We,Ze=(n("7d88"),Object(N["a"])(Ye,Je,Ue,!1,null,"b8858464",null)),Xe=Ze.exports;n("f9d4");var et={data:function(){return{showCssEditor:!1,aboutDialogVisible:!1,dialogUploadImgVisible:!1,dialogFormVisible:!1,isCoping:!1,isImgLoading:!1,backLight:!1,timeout:null,changeTimer:null,source:"",mouseLeft:0,mouseTop:0}},components:{editorHeader:J,aboutDialog:ee,insertFormDialog:ae,rightClickMenu:Qe,uploadImgDialog:Xe},computed:Object(l["a"])({},Object(F["c"])({wxRenderer:function(e){return e.wxRenderer},output:function(e){return e.output},editor:function(e){return e.editor},cssEditor:function(e){return e.cssEditor},currentSize:function(e){return e.currentSize},currentColor:function(e){return e.currentColor},nightMode:function(e){return e.nightMode},rightClickMenuVisible:function(e){return e.rightClickMenuVisible}})),created:function(){var e=this;this.initEditorState(),this.$nextTick((function(){e.initEditor(),e.initCssEditor(),e.onEditorRefresh()}))},methods:Object(l["a"])({initEditor:function(){var e=this;this.initEditorEntity(),this.editor.on("change",(function(t,n){e.changeTimer&&clearTimeout(e.changeTimer),e.changeTimer=setTimeout((function(){e.onEditorRefresh(),O(e.editor,"__editor_content")}),300)})),this.editor.on("paste",(function(t,n){if(n.clipboardData&&n.clipboardData.items&&!e.isImgLoading)for(var o=0,i=n.clipboardData.items.length;o=65&&t.keyCode<=90||189===t.keyCode)&&e.showHint(t)})),this.cssEditor.on("update",(function(t){e.cssChanged(),O(e.cssEditor,"__css_content")}))},cssChanged:function(){var e=w(this.cssEditor.getValue(0)),t=k(this.currentSize.replace("px",""));t=x(e,this.currentColor,t),this.setWxRendererOptions({theme:t}),this.onEditorRefresh()},uploaded:function(e){if(e){this.dialogUploadImgVisible=!1;var t=this.editor.getCursor(),n=e,o="![](".concat(n,")");this.editor.replaceSelection("\n".concat(o,"\n"),t),this.$message({showClose:!0,message:"图片上传成功",type:"success"}),this.onEditorRefresh()}else this.$message({showClose:!0,message:"上传图片未知异常",type:"error"})},leftAndRightScroll:function(){var e=this,t=function(t){var i,r;clearTimeout(e.timeout),"preview"===t?(i=e.$refs.preview.$el,r=document.getElementsByClassName("CodeMirror-scroll")[0],e.editor.off("scroll",n),e.timeout=setTimeout((function(){e.editor.on("scroll",n)}),300)):"editor"===t&&(i=document.getElementsByClassName("CodeMirror-scroll")[0],r=e.$refs.preview.$el,r.removeEventListener("scroll",o,!1),e.timeout=setTimeout((function(){r.addEventListener("scroll",o,!1)}),300));var a=i.scrollTop/(i.scrollHeight-i.offsetHeight),s=a*(r.scrollHeight-r.offsetHeight);r.scrollTo(0,s)},n=function(){t("editor")},o=function(){t("preview")};this.$refs.preview.$el.addEventListener("scroll",o,!1),this.editor.on("scroll",n)},onEditorRefresh:function(){this.editorRefresh(),setTimeout((function(){return PR.prettyPrint()}),0)},endCopy:function(){var e=this;this.backLight=!1,setTimeout((function(){e.isCoping=!1}),800)},downloadEditorContent:function(){E(this.editor.getValue(0))},openMenu:function(e){var t=105,n=this.$el.getBoundingClientRect().left,o=this.$el.offsetWidth,i=o-t,r=e.clientX-n;this.mouseLeft=Math.min(i,r),this.mouseTop=e.clientY+10,this.$store.commit("setRightClickMenuVisible",!0)},closeRightClickMenu:function(){this.$store.commit("setRightClickMenuVisible",!1)},onMenuEvent:function(e){switch(e){case"pageReset":this.$refs.header.showResetConfirm=!0;break;case"insertPic":this.dialogUploadImgVisible=!0;break;case"downLoad":this.downloadEditorContent();break;case"insertTable":this.dialogFormVisible=!0;default:break}}},Object(F["b"])(["initEditorState","initEditorEntity","setWxRendererOptions","editorRefresh","initCssEditorEntity"])),mounted:function(){var e=this;setTimeout((function(){e.leftAndRightScroll(),PR.prettyPrint()}),300)}},tt=et,nt=(n("c8ee"),n("85fe"),Object(N["a"])(tt,s,c,!1,null,"4f7941be",null)),ot=nt.exports,it={name:"App",components:{Loading:a["default"],CodemirrorEditor:ot},data:function(){return{loading:!0}},mounted:function(){var e=this;setTimeout((function(){e.loading=!1}),100)}},rt=it,at=(n("91eb"),Object(N["a"])(rt,i,r,!1,null,"f01d475a",null)),st=at.exports,ct=n("e0c1"),lt=n.n(ct),ut=function(e){var t=this;this.opts=e;var n=!0,o=[],i=0,r=null,a="Menlo, Operator Mono, Consolas, Monaco, monospace",s=function(e,t){return Object.assign({},e,t)};this.buildTheme=function(e){var n={},o=s(e.BASE,{"font-family":t.opts.fonts,"font-size":t.opts.size}),i=s(o,{});for(var r in e.inline)if(e.inline.hasOwnProperty(r)){var c=e.inline[r];n[r]=s(o,c)}for(var l in e.block)if(e.block.hasOwnProperty(l)){var u=e.block[l];"code"===l&&(u["font-family"]=a),n[l]=s(i,u)}return n};var c=function(e,t){var n=[],o=r[e];if(!o)return"";for(var i in o)n.push(i+":"+o[i]);return'style="'.concat(n.join(";")+(t||""),'"')},l=function(e,t){return o.push([++i,e,t]),i};this.buildFootnotes=function(){var e=o.map((function(e){return e[1]===e[2]?'['.concat(e[0],"]: ").concat(e[1],"
"):'['.concat(e[0],"] ").concat(e[1],": ").concat(e[2],"
")}));return"

引用链接

").concat(e.join("\n"),"

")},this.buildAddition=function(){return"\n \n "},this.setOptions=function(e){t.opts=s(t.opts,e)},this.hasFootnotes=function(){return 0!==o.length},this.getRenderer=function(e){o=[],i=0,r=t.buildTheme(t.opts.theme);var a=new lt.a.Renderer;return a.heading=function(e,t){switch(t){case 1:return"

").concat(e,"

");case 2:return"

").concat(e,"

");case 3:return"

").concat(e,"

");default:return"

").concat(e,"

")}},a.paragraph=function(e){return-1!=e.indexOf("").concat(e,"

")},a.blockquote=function(e){return e=e.replace(//g,"

")),"

").concat(e,"
")},a.code=function(e,t){e=e.replace(//g,">");var n=e.split("\n").map((function(e){return''.concat(e||"
","
")})),o="github";return'\n
\n
\n                        ').concat(n.join(""),"\n                    
\n
\n ")},a.codespan=function(e,t){return"").concat(e,"")},a.listitem=function(e){return"<%s/>').concat(e,"")},a.list=function(e,t,n){e=e.replace(/<\/*p.*?>/g,"");var o=e.split("<%s/>");if(!t)return e=o.join("•"),"

").concat(e,"

");e=o[0];for(var i=1;i").concat(e,"

")},a.image=function(e,t,o){var i="";o&&(i="
").concat(o,"
"));var r=c("figure"),a=c(n?"image":"image_org");return"
').concat(o,'').concat(i,"
")},a.link=function(t,n,o){if(0===t.indexOf("https://mp.weixin.qq.com"))return'").concat(o,"");if(t===o||!e)return o;var i=l(n||o,t);return"").concat(o,"[").concat(i,"]")},a.strong=function(e){return"").concat(e,"")},a.em=function(e){return''.concat(e,"")},a.table=function(e,t){return'
").concat(e,"").concat(t,"
")},a.tablecell=function(e,t){return"").concat(e,"")},a.hr=function(){return'
'},a}},dt=ut,ft=n("56b3"),mt=n.n(ft),pt='# 示例文章:Google 搜索的即时自动补全功能究竟是如何“工作”的?\n> Google 搜索**自动补全功能**的强大,相信不少朋友都能感受到,它帮助我们更快地“补全”我们所要输入的搜索关键字。那么,它怎么知道我们要输入什么内容?它又是如何工作的?在这篇文章里,我们一起来看看。\n\n## 使用自动补全\nGoogle 搜索的自动补全功能可以在 Google 搜索应用的大多数位置使用,包括 [Google](https://www.google.com/) 主页、适用于 IOS 和 Android 的 Google 应用,我们只需要在 Google 搜索框上开始键入关键字,就可以看到联想词了。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/juejin.gif)\n\n在上图示例中,我们可以看到,输入关键字 `juej`,Google 搜索会联想到“掘金”、“掘金小册”、“绝句”等等,好处就是,我们无须输入完整的关键字即可轻松完成针对这些 topics 的搜索。\n\n谷歌搜索的自动补全功能对于使用移动设备的用户来说特别有用,用户可以轻松在难以键入的小屏幕上完成搜索。当然,对于移动设备用户和台式机用户而言,这都节省了大量的时间。根据 Google 官方报告,自动补全功能可以减少大约 25% 的打字,累积起来,预计每天可以节省 200 多年的打字时间。是的,每天!\n\n> 注意,本文所提到的“**联想词**”与“**预测**”,是同一个意思。\n\n## 基于“预测”而非“建议”\nGoogle 官方将自动补全功能称之为“预测”,而不是“建议”,为什么呢?其实是有充分理由的。自动补全功能是为了**帮助用户完成他们打算进行的搜索**,而不是建议用户要执行什么搜索。\n\n那么,Google 是如何确定这些“预测”的?其实,Google 会根据趋势搜索 [trends](https://trends.google.com/trends/?geo=US) 给到我们这些“预测”。简单来说,哪个热门、哪个搜索频率高,就更可能推给我们。当然,这也与我们当前所处的位置以及我们的搜索历史相关。\n\n另外,这些“预测”也会随着我们键入的关键字的变更而更改。例如,当我们把键入的关键字从 `juej` 更改为 `juex` 时,与“掘金”相关的预测会“消失”,同时,与“觉醒”、“决心”相关联的词会出现。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/juex.gif)\n\n## 为什么看不到某些联想词?\n如果我们在输入某个关键字时看不到联想词,那么表明 Google 的算法可能检测到:\n\n- 这个关键字不是热门字词;\n- 搜索的字词太新了,我们可能需要等待几天或几周才能看到联想词;\n- 这是一个侮辱性或敏感字词,这个搜索字词违反了 Google 的相关政策。更加详细的情况,可以了解 [Google 搜索自动补全政策](https://support.google.com/websearch/answer/7368877)。\n\n## 为什么会看到某些不当的联想词?\nGoogle 拥有专门设计的系统,可以自动捕获不适当的预测结果而不显示出来。然而,Google 每天需要处理数十亿次搜索,这意味着 Google 每天会显示数十亿甚至上百亿条预测。再好的系统,也可能存在缺陷,不正确的预测也可能随时会出现。\n\n我们作为 Google 搜索的用户,如果认定某条预测违反了相关的搜索自动补全政策,可以进行举报反馈,点击右下角“**举报不当的联想查询**”并勾选相关选项即可。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/report.gif)\n\n## 如何实现自动补全算法?\n目前,Google 官方似乎并没有公开搜索自动补全的算法实现,但是业界在这方面已经有了不少研究。\n\n一个好的自动补全器必须是快速的,并且在用户键入下一个字符后立即更新联想词列表。**自动补全器的核心是一个函数,它接受输入的前缀,并搜索以给定前缀开头的词汇或语句列表**。通常来说,只需要返回少量的数目即可。\n\n接下来,我们先从一个简单且低效的实现开始,并在此基础上逐步构建更高效的方法。\n\n### 词汇表实现\n一个**简单粗暴的实现方式**是:顺序查找词汇表,依次检查每个词汇,看它是否以给定的前缀开头。\n\n但是,此方法需要将前缀与每个词汇进行匹配检查,若词汇量较少,这种方式可能勉强行得通。但是,如果词汇量规模较大,效率就太低了。\n\n一个**更好的实现方式是**:让词汇按字典顺序排序。借助二分搜索算法,可以快速搜索有序词汇表中的前缀。由于二分搜索的每一步都会将搜索的范围减半,因此,总的搜索时间与词汇表中单词数量的对数成正比,即时间复杂度是 `O(log N)`。二分搜索的性能很好,但有没有更好的实现呢?当然有,往下看。\n\n### 前缀树实现\n通常来说,许多词汇都以相同的前缀开头,比如 `need`、`nested` 都以 `ne` 开头,`seed`、`speed` 都以 `s` 开头。要是为每个单词分别存储公共前缀似乎很浪费。\n\n![](https://gitee.com/yanglbme/resource/raw/master/doocs-md/pretree.png)\n\n前缀树是一种利用公共前缀来加速补全速度的数据结构。前缀树在节点树中排列一组单词,单词沿着从根节点到叶子节点的路径存储,树的层次对应于前缀的字母位置。\n\n前缀的补全是顺着前缀定义的路径来查找的。例如,在上图的前缀树中,前缀 `ne` 对应于从子节点取左边缘 `N` 和唯一边缘 `E` 的路径。然后可以通过继续遍历从 `E` 节点可以达到的所有叶节点来生成补全列表。在图中,`ne` 的补全可以是两个分支:`-ed` 和 `-sted`。如果在数中找不到由前缀定义的路径,则说明词汇表中不包含以该前缀开头的单词。\n\n### 有限状态自动机(DFA)实现\n前缀树可以有效处理公共前缀,但是,对于其他共享词部分,仍会分别存储在每个分支中。比如,后缀 `ed`、`ing`、`tion` 在英文单词中特别常见。在上一个例子中,`e`、`d` 分别存放在了每一个分支上。\n\n有没有一种方法可以更加节省存储空间呢?有的,那就是 DFA。\n\n
\n
\n\n在上面的例子中,单词 `need`、`nested`、`seed` 和 `speed` 仅由 9 个节点组成,而上一张图中的前缀树包含了 17 个节点。\n\n可以看出,最小化前缀树 DFA 可以在很大程度上减少数据结构的大小。即使词汇量很大,最小化 DFA 通常也适合在内存中存储,避免昂贵的磁盘访问是实现快速自动补全的关键。\n\n### 一些扩展\n上面介绍了如何利用合理的数据结构实现基本的自动补全功能。这些数据结构可以通过多种方式进行扩展,从而改善用户体验。\n\n通常,满足特定前缀的词汇可能很多,而用户界面上能够显示的却不多,我们更希望能显示最常搜索或者最有价值的词汇。这通常可以通过为词汇表中的每个单词增加一个代表单词值的**权重** `weight`,并且按照权重高低来排序自动补全列表。\n\n- 对于排序后的词汇表来说,在词汇表每个元素上增加 `weight` 属性并不难;\n- 对于前缀树来说,将 `weight` 存储在叶子节点中,也是很简单的一个实现;\n- 对于 `DFA` 来说,则较为复杂。因为一个叶子节点可以通过多条路径到达。一种解决方案是将权重关联到路径而不是叶子节点。\n\n目前有不少开源库都提供了这个功能,比如主流的搜索引擎框架 [Elasticsearch](https://www.elastic.co/products/elasticsearch)、[Solr](https://lucene.apache.org/solr/) 等,基于此,我们可以实现高效而强大的自动补全功能。\n\n#### 推荐阅读\n- [阿里又一个 20k+ stars 开源项目诞生,恭喜 fastjson!](https://mp.weixin.qq.com/s/RNKDCK2KoyeuMeEs6GUrow)\n- [刷掉 90% 候选人的互联网大厂海量数据面试题(附题解 + 方法总结)](https://mp.weixin.qq.com/s/rjGqxUvrEqJNlo09GrT1Dw)\n- [好用!期待已久的文本块功能究竟如何在 Java 13 中发挥作用?](https://mp.weixin.qq.com/s/kalGv5T8AZGxTnLHr2wDsA)\n- [2019 GitHub 开源贡献排行榜新鲜出炉!微软谷歌领头,阿里跻身前 12!](https://mp.weixin.qq.com/s/_q812aGD1b9QvZ2WFI0Qgw)\n\n---\n\n欢迎关注我的公众号“**Doocs开源社区**”,原创技术文章第一时间推送。\n\n
\n \n
\n\n',gt=pt;o["default"].use(F["a"]);var ht={wxRenderer:null,output:"",html:"",editor:null,cssEditor:null,currentFont:"",currentSize:"",currentColor:"",citeStatus:0,nightMode:!1,codeTheme:"github",rightClickMenuVisible:!1},bt={setEditorValue:function(e,t){e.editor.setValue(t)},setCssEditorValue:function(e,t){e.cssEditor.setValue(t)},setWxRendererOptions:function(e,t){e.wxRenderer.setOptions(t)},setCiteStatus:function(e,t){e.citeStatus=t,localStorage.setItem("citeStatus",t)},setCurrentFont:function(e,t){e.currentFont=t,localStorage.setItem("fonts",t)},setCurrentSize:function(e,t){e.currentSize=t,localStorage.setItem("size",t)},setCurrentColor:function(e,t){e.currentColor=t,localStorage.setItem("color",t)},setCurrentCodeTheme:function(e,t){e.codeTheme=t,localStorage.setItem("codeTheme",t)},setRightClickMenuVisible:function(e,t){e.rightClickMenuVisible=t},themeChanged:function(e){e.nightMode=!e.nightMode,localStorage.setItem("nightMode",e.nightMode)},initEditorState:function(e){e.currentFont=localStorage.getItem("fonts")||j.builtinFonts[0].value,e.currentColor=localStorage.getItem("color")||j.colorOption[1].value,e.currentSize=localStorage.getItem("size")||j.sizeOption[2].value,e.codeTheme=localStorage.getItem("codeTheme")||j.codeThemeOption[0].value,e.citeStatus="true"===localStorage.getItem("citeStatus"),e.nightMode="true"===localStorage.getItem("nightMode"),e.wxRenderer=new dt({theme:y(e.currentColor),fonts:e.currentFont,size:e.currentSize,status:e.citeStatus})},initEditorEntity:function(e){e.editor=mt.a.fromTextArea(document.getElementById("editor"),{value:"",mode:"text/x-markdown",theme:"xq-light",lineNumbers:!1,lineWrapping:!0,styleActiveLine:!0,autoCloseBrackets:!0,extraKeys:{"Ctrl-F":function(e){var t=_(e.getValue(0));localStorage.setItem("__editor_content",t),e.setValue(t)},"Ctrl-S":function(e){}}}),e.editor.setValue(localStorage.getItem("__editor_content")||_(gt))},initCssEditorEntity:function(e){e.cssEditor=mt.a.fromTextArea(document.getElementById("cssEditor"),{value:"",mode:"css",theme:"style-mirror",lineNumbers:!1,lineWrapping:!0,matchBrackets:!0,autofocus:!0,extraKeys:{"Ctrl-F":function(e){var t=e.lineCount();e.autoFormatRange({line:0,ch:0},{line:t})},"Ctrl-S":function(e){}}}),e.cssEditor.setValue(localStorage.getItem("__css_content")||z)},editorRefresh:function(e){var t=lt()(e.editor.getValue(0),{renderer:e.wxRenderer.getRenderer(e.citeStatus)});t=t.replace(/(style=".*?)"/,'$1;margin-top: 0"'),e.citeStatus&&(t+=e.wxRenderer.buildFootnotes(),t+=e.wxRenderer.buildAddition()),e.output=t},clearEditorToDefault:function(e){var t=_(gt);e.editor.setValue(t),e.cssEditor.setValue(z)}},vt=new F["a"].Store({state:ht,mutations:bt,actions:{}}),Ct=n("5c96"),St=n.n(Ct);n("0fae");o["default"].use(Ct["Container"]),o["default"].use(Ct["Header"]),o["default"].use(Ct["Upload"]),o["default"].use(Ct["Tooltip"]),o["default"].use(Ct["Form"]),o["default"].use(Ct["FormItem"]),o["default"].use(Ct["Select"]),o["default"].use(Ct["Option"]),o["default"].use(Ct["ColorPicker"]),o["default"].use(Ct["Switch"]),o["default"].use(Ct["Button"]),o["default"].use(Ct["Main"]),o["default"].use(Ct["Col"]),o["default"].use(Ct["Row"]),o["default"].use(Ct["Dialog"]),o["default"].use(Ct["Loading"]),o["default"].component(Ct["Message"].name,Ct["Message"]),o["default"].prototype.$loading=Ct["Loading"].service,o["default"].prototype.$message=Ct["Message"];n("a7be"),n("0f7c"),n("8d7e"),n("7b00"),n("959b"),n("8c33"),n("31c5"),n("9b74"),n("111b"),n("90ba"),n("baa5");(function(){mt.a.extendMode("css",{commentStart:"/*",commentEnd:"*/",newlineAfterToken:function(e,t){return/^[;{}]$/.test(t)}}),mt.a.defineExtension("commentRange",(function(e,t,n){var o=this,i=mt.a.innerMode(o.getMode(),o.getTokenAt(t).state).mode;o.operation((function(){if(e)o.replaceRange(i.commentEnd,n),o.replaceRange(i.commentStart,t),t.line==n.line&&t.ch==n.ch&&o.setCursor(t.line,t.ch+i.commentStart.length);else{var r=o.getRange(t,n),a=r.indexOf(i.commentStart),s=r.lastIndexOf(i.commentEnd);a>-1&&s>-1&&s>a&&(r=r.substr(0,a)+r.substring(a+i.commentStart.length,s)+r.substr(s+i.commentEnd.length)),o.replaceRange(r,t,n)}}))})),mt.a.defineExtension("autoIndentRange",(function(e,t){var n=this;this.operation((function(){for(var o=e.line;o<=t.line;o++)n.indentLine(o,"smart")}))})),mt.a.defineExtension("autoFormatRange",(function(e,t){var n=this,o=n.getMode(),i=n.getRange(e,t).split("\n"),r=mt.a.copyState(o,n.getTokenAt(e).state),a=n.getOption("tabSize"),s="",c=0,l=0==e.ch;function u(){s+="\n",l=!0,++c}for(var d=0;d",triples:"",explode:"[]{}"},n=e.Pos;function o(e,n){return"pairs"==n&&"string"==typeof e?e:"object"==Object(yt["a"])(e)&&null!=e[n]?e[n]:t[n]}e.defineOption("autoCloseBrackets",!1,(function(t,n,a){a&&a!=e.Init&&(t.removeKeyMap(i),t.state.closeBrackets=null),n&&(r(o(n,"pairs")),t.state.closeBrackets=n,t.addKeyMap(i))}));var i={Backspace:c,Enter:l};function r(e){for(var t=0;t=0;c--){var u=a[c].head;t.replaceRange("",n(u.line,u.ch-1),n(u.line,u.ch+1),"+delete")}}function l(t){var n=s(t),i=n&&o(n,"explode");if(!i||t.getOption("disableInput"))return e.Pass;for(var r=t.listSelections(),a=0;a0;return{anchor:new n(t.anchor.line,t.anchor.ch+(o?-1:1)),head:new n(t.head.line,t.head.ch+(o?1:-1))}}function d(t,i){var r=s(t);if(!r||t.getOption("disableInput"))return e.Pass;var a=o(r,"pairs"),c=a.indexOf(i);if(-1==c)return e.Pass;for(var l,d=o(r,"closeBefore"),f=o(r,"triples"),p=a.charAt(c+1)==i,g=t.listSelections(),h=c%2==0,b=0;b1&&f.indexOf(i)>=0&&t.getRange(n(S.line,S.ch-2),S)==i+i){if(S.ch>2&&/\bstring/.test(t.getTokenTypeAt(n(S.line,S.ch-2))))return e.Pass;v="addFour"}else if(p){var k=0==S.ch?" ":t.getRange(n(S.line,S.ch-1),S);if(e.isWordChar(y)||k==i||e.isWordChar(k))return e.Pass;v="both"}else{if(!h||!(0===y.length||/\s/.test(y)||d.indexOf(y)>-1))return e.Pass;v="both"}else v=p&&m(t,S)?"both":f.indexOf(i)>=0&&t.getRange(S,n(S.line,S.ch+3))==i+i+i?"skipThree":"skip";if(l){if(l!=v)return e.Pass}else l=v}var x=c%2?a.charAt(c-1):i,w=c%2?i:a.charAt(c+1);t.operation((function(){if("skip"==l)t.execCommand("goCharRight");else if("skipThree"==l)for(var e=0;e<3;e++)t.execCommand("goCharRight");else if("surround"==l){var n=t.getSelections();for(e=0;e