md/js/app.a71abac0.js.map
2020-10-20 12:02:12 +00:00

1 line
212 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/Loading.vue","webpack:///./src/App.vue?0c85","webpack:///./src/view/CodemirrorEditor.vue?8816","webpack:///./src/components/CodemirrorEditor/header.vue?0929","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?82bc","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?5c1a","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?f90d","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?2a5a","webpack:///./src/api/fetch.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?2c15","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/uploadImgDialog.vue?3da8","webpack:///./src/components/Loading.vue?a5e5","webpack:///./src/view/CodemirrorEditor.vue?8abc","webpack:///./src/App.vue?5034","webpack:///./src/components/CodemirrorEditor/insertForm.vue?2177","webpack:///./src/components/CodemirrorEditor/rightClickMenu.vue?a0b7","webpack:///./src/components/CodemirrorEditor/header.vue?2a8a","webpack:///./src/view/CodemirrorEditor.vue?fd18","webpack:///./src/components/Loading.vue?f931","webpack:///./src/components/CodemirrorEditor/resetDialog.vue?a561","webpack:///./src/components/Loading.vue?4de3"],"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","_vm","this","_h","$createElement","_c","_self","attrs","staticRenderFns","staticClass","class","nightMode","ref","on","onEditorRefresh","cssChanged","downloadEditorContent","$event","showCssEditor","aboutDialogVisible","dialogFormVisible","dialogUploadImgVisible","isCoping","backLight","endCopy","nativeOn","preventDefault","openMenu","directives","rawName","expression","domProps","target","composing","source","_s","output","_v","_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","defaultConfig","username","repo","branch","accessToken","fileUpload","file","imgHost","getItem","aliOSSFileUpload","txCOSFileUpload","ghFileUpload","getGitHubCommonConfig","token","date","Date","dir","getFullYear","getMonth","toString","padStart","getDate","Authorization","url","getDefaultConfig","Math","floor","random","replace","getGitHubConfig","githubConfig","repoUrl","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","secretKey","resolve","putObject","Bucket","Region","Key","Body","err","Location","uploadImgFile","checkImageResult","isImageIllegal","base64Reader","FileReader","readAsDataURL","onload","base64Content","pop","fileApi","then","catch","changeImgHost","beforeUpload","formGitHub","saveGitHubConfiguration","formAliOSS","saveAliOSSConfiguration","formTxCOS","saveTxCOSConfiguration","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","out","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","charAt","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","next","getTokenTypeAt","prev","isWordChar","stringStartsAfter","right","sels","getSelections","replaceSelections","setSelections","triggerElectric","str","ElementUI","productionTip","store","render","h","App","$mount","_m"],"mappings":"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","file":"js/app.a71abac0.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","import { render, staticRenderFns } from \"./Loading.vue?vue&type=template&id=31c61828&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=31c61828&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 \"31c61828\",\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.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:{'preview-wrapper_night': _vm.nightMode && _vm.isCoping},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 }","<template>\n <el-dialog title=\"提示\" class=\"reset__dialog\" :visible=\"showResetConfirm\" @close=\"$emit('close')\">\n <div class=\"text\">\n 此操作将丢失本地缓存的文本和自定义样式,是否继续?\n </div>\n <div slot=\"footer\" class=\"dialog-footer\">\n <el-button :type=\"btnType\" plain @click=\"$emit('close')\">取 消</el-button>\n <el-button :type=\"btnType\" @click=\"$emit('confirm')\" plain>确 定</el-button>\n </div>\n </el-dialog>\n</template>\n\n<script>\n import {\n mapState\n } from 'vuex';\n export default {\n props: {\n showResetConfirm: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n btnType() {\n return this.nightMode ? 'default' : 'primary';\n },\n ...mapState({\n nightMode: state => state.nightMode\n })\n }\n }\n\n</script>\n\n<style lang=\"less\" scoped>\n .reset__dialog {\n text-align: center;\n }\n\n .text {\n text-align: center;\n }\n\n .dialog-footer {\n text-align: center;\n }\n\n</style>\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=c64ad108&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=c64ad108&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 \"c64ad108\",\n null\n \n)\n\nexport default component.exports","<template>\n <el-container class=\"top is-dark\">\n <!-- 图片上传 -->\n <el-tooltip :effect=\"effect\" content=\"上传图片\" placement=\"bottom-start\"> \n <i class=\"el-icon-upload\" size=\"medium\" @click=\"$emit('showDialogUploadImg')\"></i>\n </el-tooltip>\n <!-- 下载文本文档 -->\n <el-tooltip class=\"header__item\" :effect=\"effect\" content=\"下载编辑框Markdown文档\" placement=\"bottom-start\">\n <i class=\"el-icon-download\" size=\"medium\" @click=\"$emit('downLoad')\"></i>\n </el-tooltip>\n <!-- 页面重置 -->\n <el-tooltip class=\"header__item\" :effect=\"effect\" content=\"重置页面\" placement=\"bottom-start\">\n <i class=\"el-icon-refresh\" size=\"medium\" @click=\"showResetConfirm = true\"></i>\n </el-tooltip>\n <!-- 插入表格 -->\n <el-tooltip class=\"header__item header__item_last\" :effect=\"effect\" content=\"插入表格\" placement=\"bottom-start\">\n <i class=\"el-icon-s-grid\" size=\"medium\" @click=\"$emit('showDialogForm')\"></i>\n </el-tooltip>\n <el-form size=\"mini\" class=\"ctrl\" :inline=true>\n <el-form-item>\n <el-select v-model=\"selectFont\" size=\"mini\" placeholder=\"选择字体\" clearable @change=\"fontChanged\">\n <el-option v-for=\"font in config.builtinFonts\" :style=\"{fontFamily: font.value}\" :key=\"font.value\"\n :label=\"font.label\" :value=\"font.value\">\n <span class=\"select-item-left\">{{ font.label }}</span>\n <span class=\"select-item-right\">Abc</span>\n </el-option>\n </el-select>\n </el-form-item>\n <el-form-item>\n <el-select v-model=\"selectSize\" size=\"mini\" placeholder=\"选择段落字号\" clearable @change=\"sizeChanged\">\n <el-option v-for=\"size in config.sizeOption\" :key=\"size.value\" :label=\"size.label\" :value=\"size.value\">\n <span class=\"select-item-left\">{{ size.label }}</span>\n <span class=\"select-item-right\">{{ size.desc }}</span>\n </el-option>\n </el-select>\n </el-form-item>\n <el-form-item>\n <el-select v-model=\"selectColor\" size=\"mini\" placeholder=\"选择颜色\" clearable @change=\"colorChanged\">\n <el-option v-for=\"color in config.colorOption\" :key=\"color.value\" :label=\"color.label\" :value=\"color.value\">\n <span class=\"select-item-left\">{{ color.label }}</span>\n <span class=\"select-item-right\">{{ color.desc }}</span>\n </el-option>\n </el-select>\n </el-form-item>\n <el-tooltip content=\"自定义颜色\" :effect=\"effect\" placement=\"top\">\n <el-color-picker v-model=\"selectColor\" size=\"mini\" show-alpha @change=\"colorChanged\"></el-color-picker>\n </el-tooltip>\n <el-tooltip content=\"微信外链自动转为文末引用\" :effect=\"effect\" placement=\"top\">\n <el-switch class=\"header__switch\" v-model=\"citeStatus\" active-color=\"#67c23a\" inactive-color=\"#dcdfe6\" @change=\"statusChanged\">\n </el-switch>\n </el-tooltip>\n </el-form>\n <el-tooltip class=\"item\" :effect=\"effect\" content=\"自定义CSS样式\" placement=\"left\">\n <el-button :type=\"btnType\" plain size=\"medium\" icon=\"el-icon-setting\" @click=\"customStyle\"></el-button>\n </el-tooltip>\n <el-button :type=\"btnType\" plain size=\"medium\" @click=\"copy\" placement=\"bottom-start\">复制</el-button>\n <el-button :type=\"btnType\" plain size=\"medium\" class=\"about\" @click=\"$emit('showAboutDialog')\">关于</el-button>\n <el-tooltip :content=\"btnContent\" :effect=\"effect\" placement=\"bottom-start\">\n <div class=\"mode__switch mode__switch_black\" v-if=\"nightMode\" @click=\"themeChanged\"></div>\n <div class=\"mode__switch\" v-else @click=\"themeChanged\"></div>\n </el-tooltip>\n <resetDialog :showResetConfirm=\"showResetConfirm\" @confirm=\"confirmReset\" @close=\"cancelReset\"/>\n </el-container>\n</template>\n\n<script>\n\nimport {\n downLoadMD,\n setFontSize,\n fixCodeWhiteSpace,\n setColorWithCustomTemplate\n} from '../../assets/scripts/util'\nimport {\n solveWeChatImage,\n solveHtml\n} from '../../assets/scripts/converter'\nimport config from '../../assets/scripts/config'\nimport DEFAULT_CSS_CONTENT from '../../assets/scripts/themes/default-theme-css'\nimport resetDialog from './resetDialog'\nimport {mapState, mapMutations} from 'vuex'\nexport default {\n name: 'editor-header',\n data() {\n return {\n config: config,\n citeStatus: false,\n showResetConfirm: false,\n selectFont: '',\n selectSize: '',\n selectColor: '',\n selectCodeTheme: 'github'\n };\n },\n components: {\n resetDialog\n },\n computed: {\n effect() {\n return this.nightMode ? 'dark' : 'light'\n },\n btnContent() {\n return this.nightMode ? '浅色模式' : '暗黑模式'\n },\n btnType() {\n return this.nightMode ? 'default' : 'primary';\n },\n ...mapState({\n output: state => state.output,\n editor: state => state.editor,\n cssEditor: state => state.cssEditor,\n currentFont: state => state.currentFont,\n currentSize: state => state.currentSize,\n currentColor: state => state.currentColor,\n codeTheme: state => state.codeTheme,\n nightMode: state => state.nightMode\n })\n },\n methods: {\n fontChanged(fonts) {\n this.setWxRendererOptions({\n fonts: fonts\n });\n this.setCurrentFont(fonts);\n this.$emit('refresh');\n },\n sizeChanged(size) {\n let theme = setFontSize(size.replace('px', ''))\n theme = setColorWithCustomTemplate(theme, this.currentColor)\n this.setWxRendererOptions({\n size: size,\n theme: theme\n });\n this.setCurrentSize(size);\n this.$emit('refresh');\n },\n colorChanged(color) {\n let theme = setFontSize(this.currentSize.replace('px', ''));\n\n theme = setColorWithCustomTemplate(theme, color);\n this.setWxRendererOptions({\n theme: theme\n });\n this.setCurrentColor(color);\n this.$emit('refresh');\n },\n codeThemeChanged(theme) {\n this.setCurrentCodeTheme(theme);\n this.$emit('refresh');\n },\n statusChanged(val) {\n this.setCiteStatus(val);\n this.$emit('refresh');\n },\n // 复制到微信公众号\n copy(e) {\n this.$emit('startCopy');\n setTimeout(() => {\n let clipboardDiv = document.getElementById('output');\n solveWeChatImage();\n fixCodeWhiteSpace();\n solveHtml();\n clipboardDiv.focus();\n window.getSelection().removeAllRanges();\n let range = document.createRange();\n\n range.setStartBefore(clipboardDiv.firstChild);\n range.setEndAfter(clipboardDiv.lastChild);\n window.getSelection().addRange(range);\n document.execCommand('copy');\n window.getSelection().removeAllRanges();\n fixCodeWhiteSpace('normal');\n \n clipboardDiv.innerHTML = this.output;\n // 输出提示\n this.$notify({\n showClose: true,\n message: '已复制渲染后的文章到剪贴板,可直接到公众号后台粘贴',\n offset: 80,\n duration: 1600,\n type: 'success'\n });\n this.$emit('refresh');\n this.$emit('endCopy');\n }, 350);\n e.target.blur(); \n },\n // 自定义CSS样式\n async customStyle() {\n this.$emit('showCssEditor');\n this.$nextTick(() => {\n if(!this.cssEditor) {\n this.cssEditor.refresh();\n }\n })\n setTimeout(() => {\n this.cssEditor.refresh();\n },50)\n let flag = await localStorage.getItem('__css_content');\n\n if (!flag) {\n this.setCssEditorValue(DEFAULT_CSS_CONTENT);\n }\n },\n // 重置页面\n confirmReset() {\n localStorage.clear()\n this.clearEditorToDefault();\n this.editor.focus()\n this.citeStatus = false;\n this.statusChanged(false);\n this.fontChanged(this.config.builtinFonts[0].value)\n this.colorChanged(this.config.colorOption[1].value)\n this.sizeChanged(this.config.sizeOption[2].value)\n this.$emit('cssChanged')\n this.selectFont = this.currentFont;\n this.selectSize = this.currentSize;\n this.selectColor = this.currentColor;\n this.showResetConfirm = false;\n },\n cancelReset() {\n this.showResetConfirm = false;\n this.editor.focus()\n },\n ...mapMutations([\n 'clearEditorToDefault',\n 'setCurrentColor',\n 'setCiteStatus',\n 'themeChanged',\n 'setCurrentFont',\n 'setCurrentSize',\n 'setCssEditorValue',\n 'setCurrentCodeTheme',\n 'setWxRendererOptions'\n ])\n },\n mounted() {\n this.selectFont = this.currentFont;\n this.selectSize = this.currentSize;\n this.selectColor = this.currentColor;\n this.selectCodeTheme = this.codeTheme;\n }\n}\n</script>\n\n<style lang=\"less\" scoped>\n.editor__header {\n width: 100%;\n}\n.header__item {\n margin: 0 3px;\n}\n.header__item_last {\n margin-right: 8px;\n}\n.header__switch {\n margin-left: 8px;\n}\n.mode__switch {\n margin-left: 24px;\n width: 24px;\n height: 24px;\n background: url('../../assets/images/night.png') no-repeat;\n background-size: cover;\n transition: all .3s;\n}\n.mode__switch_black {\n background: url('../../assets/images/light.png') no-repeat;\n background-size: cover;\n}\n.top {\n margin-right: 0;\n}\n</style>","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=7c306610&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=7c306610&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 \"7c306610\",\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 }","<template>\n <el-dialog title=\"关于\" class=\"about__dialog\" :visible=\"value\" @close=\"$emit('input', false)\" width=\"30%\" center>\n <div style=\"text-align: center;\">\n <h3>一款高度简洁的微信 Markdown 编辑器</h3>\n </div>\n <div style=\"text-align: center;margin-top:10px;\">\n <p>扫码关注我的公众号,原创技术文章第一时间推送!</p>\n <img src=\"https://gitee.com/yanglbme/resource/raw/master/doocs-md/qrcode.png\" style=\"width: 40%; display: block; margin: 20px auto 10px;\">\n </div>\n <span slot=\"footer\" class=\"dialog-footer\">\n <el-button type=\"primary\" @click=\"onRedirect('https://github.com/doocs/md')\" plain>GitHub 仓库</el-button>\n <el-button type=\"primary\" @click=\"onRedirect('https://gitee.com/doocs/md')\" plain>Gitee 仓库</el-button>\n </span>\n </el-dialog>\n</template>\n\n<script>\nexport default {\n props: {\n value: {\n type: Boolean,\n default: false\n }\n },\n methods: {\n onRedirect(url) {\n window.open(url);\n }\n }\n}\n</script>\n\n<style lang=\"less\" scoped>\n</style>","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=80a367d0&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 \"80a367d0\",\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 }","<template>\n <el-dialog\n title=\"插入表格\"\n class=\"insert__dialog\"\n :visible=\"value\"\n @close=\"$emit('input', false)\"\n border\n >\n <el-row class=\"tb-options\" type=\"flex\" align=\"middle\" :gutter=\"10\">\n <el-col>\n 行数:\n <el-input-number\n v-model=\"rowNum\"\n controls-position=\"right\"\n :min=\"1\"\n :max=\"100\"\n size=\"small\"\n ></el-input-number>\n </el-col>\n <el-col>\n 列数:\n <el-input-number\n v-model=\"colNum\"\n controls-position=\"right\"\n :min=\"1\"\n :max=\"100\"\n size=\"small\"\n ></el-input-number>\n </el-col>\n </el-row>\n <table style=\"border-collapse: collapse\" class=\"input-table\">\n <tr :class=\"{ 'head-style': row === 1 }\" v-for=\"row in rowNum+1\" :key=\"row\">\n <td v-for=\"col in colNum\" :key=\"col\">\n <el-input\n align=\"center\"\n v-model=\"tableData[`k_${row-1}_${col-1}`]\"\n :placeholder=\"row===1?'表头':''\"\n />\n </td>\n </tr>\n </table>\n <div slot=\"footer\" class=\"dialog-footer\">\n <el-button :type=\"btnType\" plain @click=\"$emit('input', false)\">取 消</el-button>\n <el-button :type=\"btnType\" @click=\"insertTable\" plain>确 定</el-button>\n </div>\n</el-dialog>\n</template>\n\n<script>\nimport config from \"../../assets/scripts/config\";\nimport {createTable} from '../../assets/scripts/util';\nimport {\n mapState,\n mapMutations\n} from \"vuex\";\nexport default {\n props: {\n value: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n config: config,\n rowNum: 3,\n colNum: 3,\n tableData: {}\n };\n },\n computed: {\n btnType() {\n return this.nightMode ? \"default\" : \"primary\";\n },\n ...mapState({\n nightMode: state => state.nightMode,\n editor: state => state.editor\n })\n },\n methods: {\n // 插入表格\n insertTable() {\n const cursor = this.editor.getCursor();\n const table = createTable({\n data: this.tableData,\n rows: this.rowNum,\n cols: this.colNum\n });\n \n this.tableData = {};\n this.rowNum = 3;\n this.colNum = 3;\n this.editor.replaceSelection(`\\n${table}\\n`, \"end\");\n this.$emit('input', false);\n this.editorRefresh();\n },\n ...mapMutations([\"editorRefresh\"])\n }\n};\n</script>\n\n<style lang=\"less\" scoped>\n.tb-options {\n margin-bottom: 20px;\n}\n\n.input-table ::v-deep .el-input__inner {\n border-radius: 0;\n}\n\n.head-style /deep/ .el-input__inner {\n background-color: #f2f2f2;\n}\n</style>\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=c52aa6f0&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=c52aa6f0&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 \"c52aa6f0\",\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","import fetch from \"./fetch\";\nimport OSS from \"ali-oss\";\nimport COS from \"cos-js-sdk-v5\";\nimport Buffer from \"buffer-from\";\nimport { v4 as uuidv4 } from \"uuid\";\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 \"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\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\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","<template>\n <ul v-show=\"value\" id=\"menu\" class=\"menu\" :style=\"`left: ${left}px;top: ${top}px;`\">\n <li v-for=\"item of list\" :key=\"item.key\" class=\"menu_item\" @mousedown=\"onMouseDown(item.key)\">\n <span>{{item.text}}</span>\n </li>\n </ul>\n</template>\n\n<script>\nimport {\n uploadImgFile,\n} from '../../assets/scripts/uploadImageFile';\nexport default {\n props: {\n value: {\n type: Boolean,\n default: false\n },\n top: {\n type: Number,\n default: 0\n },\n left: {\n type: Number,\n default: 0\n }\n },\n data() {\n return {\n list: [\n {\n text: '上传图片',\n key: 'insertPic'\n },\n {\n text: '插入表格',\n key: 'insertTable'\n },\n {\n text: '页面重置',\n key: 'pageReset'\n },\n {\n text: '下载MD文档',\n key: 'downLoad'\n }\n ]\n }\n },\n methods: {\n closeCB() {\n this.$emit('input', false);\n },\n onMouseDown(key){\n this.$emit('menuTick', key)\n this.$emit('closeMenu', false)\n }\n },\n}\n</script>\n\n<style lang=\"less\" scoped>\n.menu {\n position: absolute;\n padding: 6px 0;\n border-radius: 4px;\n border: 1px solid #aaaaaa;\n background-color: #ffffff;\n z-index: 9999;\n}\n\n.menu_item {\n margin-top: 10px;\n min-width: 125px;\n font-size: 14px;\n line-height: 20px;\n color: #303133;\n cursor: pointer;\n &:first-of-type {\n margin-top: 0;\n }\n &:hover {\n color: white;\n background: rgb(139, 146, 148);\n }\n span,.btn-upload {\n text-align: center;\n display: inline-block;\n padding: 4px 0;\n width: 100%;\n }\n .btn-upload {\n margin: 0;\n border:none;\n outline: none;\n background: transparent;\n }\n .btn-upload:hover {\n color: white;\n background: rgb(139, 146, 148);\n }\n ::v-deep .el-upload {\n width: 100%;\n }\n}\n\n\nli:hover {\n background-color: #1790ff;\n color: white;\n}\n\nli {\n font-size: 15px;\n list-style: none;\n}\n\n</style>\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=26fb3bc3&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=26fb3bc3&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 \"26fb3bc3\",\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)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <el-dialog title=\"本地上传\" class=\"upload__dialog\" :visible=\"value\" @close=\"$emit('close')\">\r\n <el-tabs type=\"card\" :value=\"'upload'\">\r\n <el-tab-pane class=\"upload-panel\" label=\"选择上传\" name=\"upload\">\r\n <el-select v-model=\"imgHost\" @change=\"changeImgHost\" placeholder=\"请选择\" size=\"small\">\r\n <el-option v-for=\"item in options\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\r\n </el-option>\r\n </el-select>\r\n <el-upload drag action :headers=\"{'Content-Type': 'multipart/form-data'}\" :show-file-list=\"false\"\r\n :multiple=\"true\" accept=\".jpg, .jpeg, .png, .gif\" name=\"file\" :before-upload=\"beforeUpload\"\r\n v-loading=\"uploadingImg\">\r\n <i class=\"el-icon-upload\"></i>\r\n <div class=\"el-upload__text\">\r\n 将图片拖到此处,或\r\n <em>点击上传</em>\r\n </div>\r\n </el-upload>\r\n </el-tab-pane>\r\n <el-tab-pane class=\"github-panel\" label=\"GitHub 图床\" name=\"github\">\r\n <el-form class=\"setting-form\" ref=\"form\" :model=\"formGitHub\" label-position=\"right\" label-width=\"140px\">\r\n <el-form-item label=\"GitHub 仓库\" :required=\"true\">\r\n <el-input v-model.trim=\"formGitHub.repo\" placeholder=\"如github.com/yanglbme/resource\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"分支\">\r\n <el-input v-model.trim=\"formGitHub.branch\" placeholder=\"如release可不填默认 master\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"Token\" :required=\"true\">\r\n <el-input v-model.trim=\"formGitHub.accessToken\" show-password\r\n placeholder=\"如cc1d0c1426d0fd0902bd2d7184b14da61b8abc46\"></el-input>\r\n <el-link type=\"primary\"\r\n href=\"https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token\"\r\n target=\"_blank\">如何获取 GitHub Token</el-link>\r\n </el-form-item>\r\n <el-form-item>\r\n <el-button type=\"primary\" @click=\"saveGitHubConfiguration\">保存配置</el-button>\r\n </el-form-item>\r\n </el-form>\r\n </el-tab-pane>\r\n <el-tab-pane class=\"github-panel\" label=\"阿里云 OSS\" name=\"aliOSS\">\r\n <el-form class=\"setting-form\" ref=\"form\" :model=\"formAliOSS\" label-position=\"right\" label-width=\"140px\">\r\n <el-form-item label=\"AccessKey ID\" :required=\"true\">\r\n <el-input v-model.trim=\"formAliOSS.accessKeyId\" placeholder=\"如LTAI4GdoocsmdoxUf13ylbaNHk\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"AccessKey Secret\" :required=\"true\">\r\n <el-input v-model.trim=\"formAliOSS.accessKeySecret\" show-password\r\n placeholder=\"如cc1d0c142doocs0902bd2d7md4b14da6ylbabc46\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"Bucket\" :required=\"true\">\r\n <el-input v-model.trim=\"formAliOSS.bucket\"\r\n placeholder=\"如doocs\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"Bucket 所在区域\" :required=\"true\">\r\n <el-input v-model.trim=\"formAliOSS.region\"\r\n placeholder=\"如oss-cn-shenzhen\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"自定义 CDN 域名\" :required=\"false\">\r\n <el-input v-model.trim=\"formAliOSS.cdnHost\"\r\n placeholder=\"如https://imagecdn.alidaodao.com可不填\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"存储路径\">\r\n <el-input v-model.trim=\"formAliOSS.path\"\r\n placeholder=\"如img可不填默认为根目录\"></el-input>\r\n <el-link type=\"primary\"\r\n href=\"https://help.aliyun.com/document_detail/31883.html\"\r\n target=\"_blank\">如何使用阿里云 OSS</el-link>\r\n </el-form-item>\r\n <el-form-item>\r\n <el-button type=\"primary\" @click=\"saveAliOSSConfiguration\">保存配置</el-button>\r\n </el-form-item>\r\n </el-form>\r\n </el-tab-pane>\r\n <el-tab-pane class=\"github-panel\" label=\"腾讯云 COS\" name=\"txCOS\">\r\n <el-form class=\"setting-form\" ref=\"form\" :model=\"formTxCOS\" label-position=\"right\" label-width=\"140px\">\r\n <el-form-item label=\"SecretId\" :required=\"true\">\r\n <el-input v-model.trim=\"formTxCOS.secretId\" placeholder=\"如AKIDnQp1w3DOOCSs8F5MDp9tdoocsmdUPonW3\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"SecretKey\" :required=\"true\">\r\n <el-input v-model.trim=\"formTxCOS.secretKey\" show-password\r\n placeholder=\"如ukLmdtEJ9271f3DOocsMDsCXdS3YlbW0\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"Bucket\" :required=\"true\">\r\n <el-input v-model.trim=\"formTxCOS.bucket\"\r\n placeholder=\"如doocs-3212520134\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"Bucket 所在区域\" :required=\"true\">\r\n <el-input v-model.trim=\"formTxCOS.region\"\r\n placeholder=\"如ap-guangzhou\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"自定义 CDN 域名\" :required=\"false\">\r\n <el-input v-model.trim=\"formTxCOS.cdnHost\"\r\n placeholder=\"如https://imagecdn.alidaodao.com可不填\"></el-input>\r\n </el-form-item>\r\n <el-form-item label=\"存储路径\">\r\n <el-input v-model.trim=\"formTxCOS.path\"\r\n placeholder=\"如img可不填默认根目录\"></el-input>\r\n <el-link type=\"primary\"\r\n href=\"https://cloud.tencent.com/document/product/436/38484\"\r\n target=\"_blank\">如何使用腾讯云 COS</el-link>\r\n </el-form-item>\r\n <el-form-item>\r\n <el-button type=\"primary\" @click=\"saveTxCOSConfiguration\">保存配置</el-button>\r\n </el-form-item>\r\n </el-form>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport {\r\n uploadImgFile\r\n} from \"../../assets/scripts/uploadImageFile\";\r\n\r\nexport default {\r\n props: {\r\n value: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n data() {\r\n return {\r\n formGitHub: {\r\n repo: \"\",\r\n branch: \"\",\r\n accessToken: \"\",\r\n },\r\n formAliOSS: {\r\n accessKeyId: \"\",\r\n accessKeySecret: \"\",\r\n bucket: \"\",\r\n region: \"\",\r\n path: \"\",\r\n cdnHost: \"\",\r\n },\r\n formTxCOS: {\r\n secretId: \"\",\r\n secretKey: \"\",\r\n bucket: \"\",\r\n region: \"\",\r\n path: \"\",\r\n cdnHost: \"\",\r\n },\r\n options: [{\r\n value: \"default\",\r\n label: \"默认图床\",\r\n },\r\n {\r\n value: \"github\",\r\n label: \"GitHub\",\r\n },\r\n {\r\n value: \"aliOSS\",\r\n label: \"阿里云\"\r\n },\r\n {\r\n value: \"txCOS\",\r\n label: \"腾讯云\"\r\n }\r\n ],\r\n imgHost: \"default\",\r\n uploadingImg: false,\r\n };\r\n },\r\n created() {\r\n if (localStorage.getItem(\"githubConfig\")) {\r\n this.formGitHub = JSON.parse(localStorage.getItem(\"githubConfig\"));\r\n }\r\n if (localStorage.getItem(\"aliOSSConfig\")) {\r\n this.formAliOSS = JSON.parse(localStorage.getItem(\"aliOSSConfig\"));\r\n }\r\n if (localStorage.getItem(\"txCOSConfig\")) {\r\n this.formTxCOS = JSON.parse(localStorage.getItem(\"txCOSConfig\"));\r\n }\r\n if (localStorage.getItem(\"imgHost\")) {\r\n this.imgHost = localStorage.getItem(\"imgHost\");\r\n }\r\n },\r\n methods: {\r\n changeImgHost() {\r\n localStorage.setItem(\"imgHost\", this.imgHost);\r\n this.$message({\r\n showClose: true,\r\n message: '已成功切换图床',\r\n type: \"success\",\r\n });\r\n },\r\n saveGitHubConfiguration() {\r\n if (!(this.formGitHub.repo && this.formGitHub.accessToken)) {\r\n const blankElement = this.formGitHub.repo ? \"token\" : \"GitHub 仓库\"\r\n this.$message({\r\n showClose: true,\r\n message: `参数「​${blankElement}」不能为空`,\r\n type: \"error\",\r\n });\r\n return;\r\n }\r\n localStorage.setItem(\"githubConfig\", JSON.stringify(this.formGitHub));\r\n this.$message({\r\n message: \"保存成功\",\r\n type: \"success\",\r\n });\r\n },\r\n saveAliOSSConfiguration() {\r\n if (!(this.formAliOSS.accessKeyId && this.formAliOSS.accessKeySecret && this.formAliOSS.bucket && this.formAliOSS.region)) {\r\n this.$message({\r\n showClose: true,\r\n message: `阿里云 OSS 参数配置不全`,\r\n type: \"error\",\r\n });\r\n return;\r\n }\r\n localStorage.setItem(\"aliOSSConfig\", JSON.stringify(this.formAliOSS));\r\n this.$message({\r\n message: \"保存成功\",\r\n type: \"success\",\r\n });\r\n },\r\n\r\n saveTxCOSConfiguration() {\r\n if (!(this.formTxCOS.secretId && this.formTxCOS.secretKey && this.formTxCOS.bucket && this.formTxCOS.region)) {\r\n this.$message({\r\n showClose: true,\r\n message: `腾讯云 COS 参数配置不全`,\r\n type: \"error\",\r\n });\r\n return;\r\n }\r\n localStorage.setItem(\"txCOSConfig\", JSON.stringify(this.formTxCOS));\r\n this.$message({\r\n message: \"保存成功\",\r\n type: \"success\",\r\n });\r\n },\r\n\r\n // 图片上传前的处理\r\n beforeUpload(file) {\r\n if (!this.validateConfig()) {\r\n return;\r\n }\r\n\r\n this.uploadingImg = true;\r\n uploadImgFile(file)\r\n .then(res => {\r\n this.$emit(\"uploaded\", res);\r\n this.uploadingImg = false;\r\n })\r\n .catch(err => {\r\n this.uploadingImg = false;\r\n this.$message({\r\n showClose: true,\r\n message: err,\r\n type: \"error\",\r\n });\r\n });\r\n return false;\r\n },\r\n validateConfig() {\r\n let checkRes = true, errMessage = '';\r\n\r\n switch (localStorage.getItem('imgHost')) {\r\n case 'github':\r\n checkRes = this.formGitHub.repo && this.formGitHub.accessToken;\r\n errMessage = checkRes ? '' : '请先配置 GitHub 图床参数';\r\n break;\r\n case 'aliOSS':\r\n checkRes = this.formAliOSS.accessKeyId && this.formAliOSS.accessKeySecret && this.formAliOSS.bucket && this.formAliOSS.region;\r\n errMessage = checkRes ? '' : '请先配置阿里云 OSS 参数';\r\n break;\r\n case 'txCOS':\r\n checkRes = this.formTxCOS.secretId && this.formTxCOS.secretKey && this.formTxCOS.bucket && this.formTxCOS.region;\r\n errMessage = checkRes ? '' : '请先配置腾讯云 COS 参数';\r\n break;\r\n }\r\n errMessage && this.$message.error(errMessage);\r\n return checkRes;\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n/deep/ .el-dialog {\r\n width: 40%;\r\n}\r\n/deep/ .el-upload-dragger {\r\n width: 335px;\r\n}\r\n/deep/ .el-dialog__body {\r\n padding-bottom: 50px;\r\n}\r\n.upload-panel {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n\r\n .el-select {\r\n align-self: flex-end;\r\n margin: 0 67.75px 20px;\r\n width: 100px;\r\n }\r\n}\r\n\r\n.github-panel {\r\n display: flex;\r\n justify-content: center;\r\n}\r\n\r\n.setting-form {\r\n width: 100%;\r\n\r\n .el-form-item {\r\n margin: 15px;\r\n }\r\n\r\n .el-form-item:last-child {\r\n text-align: right;\r\n }\r\n}\r\n\r\n</style>\r\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=01a2512a&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=01a2512a&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 \"01a2512a\",\n null\n \n)\n\nexport default component.exports","<template>\n <div class=\"container\" :class=\"{'container_night': nightMode}\">\n <el-container>\n <el-header class=\"editor__header\">\n <editor-header\n ref=\"header\"\n @refresh=\"onEditorRefresh\"\n @cssChanged=\"cssChanged\"\n @downLoad=\"downloadEditorContent\"\n @showCssEditor=\"showCssEditor = !showCssEditor\"\n @showAboutDialog=\"aboutDialogVisible = true\"\n @showDialogForm=\"dialogFormVisible = true\"\n @showDialogUploadImg=\"dialogUploadImgVisible = true\"\n @startCopy=\"isCoping = true, backLight = true\"\n @endCopy=\"endCopy\"\n />\n </el-header>\n <el-main class=\"main-body\">\n <el-row class=\"main-section\">\n <el-col :span=\"12\" @contextmenu.prevent.native=\"openMenu($event)\">\n <textarea id=\"editor\" type=\"textarea\" placeholder=\"Your markdown text here.\" v-model=\"source\">\n </textarea>\n </el-col>\n <el-col :span=\"12\" class=\"preview-wrapper\" id=\"preview\" ref=\"preview\" :class=\"{'preview-wrapper_night': nightMode && isCoping}\">\n <section id=\"output-wrapper\" :class=\"{'output_night': nightMode && !backLight}\">\n <div class=\"preview\">\n <section id=\"output\" v-html=\"output\">\n </section>\n <div class=\"loading-mask\" v-if=\"nightMode && isCoping\">\n <div class=\"loading__img\"></div>\n <span>正在生成</span>\n </div>\n </div>\n </section>\n </el-col>\n <transition name=\"custom-classes-transition\" enter-active-class=\"bounceInRight\">\n <el-col id=\"cssBox\" :span=\"12\" v-show=\"showCssEditor\">\n <textarea id=\"cssEditor\" type=\"textarea\" placeholder=\"Your custom css here.\">\n </textarea>\n </el-col>\n </transition>\n </el-row>\n </el-main>\n </el-container>\n <upload-img-dialog v-model=\"dialogUploadImgVisible\" @close=\"dialogUploadImgVisible = false\" @uploaded=\"uploaded\" />\n <about-dialog v-model=\"aboutDialogVisible\"/>\n <insert-form-dialog v-model=\"dialogFormVisible\"/>\n <right-click-menu\n v-model=\"rightClickMenuVisible\"\n :left=\"mouseLeft\"\n :top=\"mouseTop\"\n @menuTick=\"onMenuEvent\"\n @closeMenu=\"closeRightClickMenu\"\n />\n </div>\n</template>\n<script>\nimport editorHeader from '../components/CodemirrorEditor/header';\nimport aboutDialog from '../components/CodemirrorEditor/aboutDialog';\nimport insertFormDialog from '../components/CodemirrorEditor/insertForm';\nimport rightClickMenu from '../components/CodemirrorEditor/rightClickMenu';\nimport uploadImgDialog from '../components/CodemirrorEditor/uploadImgDialog';\n\nimport {\n css2json,\n downLoadMD,\n setFontSize,\n saveEditorContent,\n customCssWithTemplate\n} from '../assets/scripts/util'\nimport {uploadImgFile} from '../assets/scripts/uploadImageFile';\n\nrequire('codemirror/mode/javascript/javascript')\nimport {mapState, mapMutations} from 'vuex';\nexport default {\n data() {\n return {\n showCssEditor: false,\n aboutDialogVisible: false,\n dialogUploadImgVisible: false,\n dialogFormVisible: false,\n isCoping: false,\n isImgLoading: false,\n backLight: false,\n timeout: null,\n changeTimer: null,\n source: '',\n mouseLeft: 0,\n mouseTop: 0\n }\n },\n components: {\n editorHeader,\n aboutDialog,\n insertFormDialog,\n rightClickMenu,\n uploadImgDialog\n },\n computed: {\n ...mapState({\n wxRenderer: state => state.wxRenderer,\n output: state => state.output,\n editor: state => state.editor,\n cssEditor: state => state.cssEditor,\n currentSize: state => state.currentSize,\n currentColor: state => state.currentColor,\n nightMode: state => state.nightMode,\n rightClickMenuVisible: state => state.rightClickMenuVisible\n })\n },\n created() {\n this.initEditorState();\n this.$nextTick(() => {\n this.initEditor();\n this.initCssEditor();\n this.onEditorRefresh();\n });\n },\n methods: {\n initEditor() {\n this.initEditorEntity();\n this.editor.on('change', (cm, e) => {\n if (this.changeTimer) clearTimeout(this.changeTimer);\n this.changeTimer = setTimeout(() => {\n this.onEditorRefresh();\n saveEditorContent(this.editor, '__editor_content');\n }, 300);\n });\n\n // 粘贴上传图片并插入\n this.editor.on('paste', (cm, e) => {\n if (!(e.clipboardData && e.clipboardData.items) || this.isImgLoading) {\n return;\n }\n for (let i = 0, len = e.clipboardData.items.length; i < len; ++i) {\n let item = e.clipboardData.items[i];\n\n if (item.kind === 'file') {\n // 校验图床参数\n const imgHost = localStorage.getItem('imgHost') || 'default';\n if (imgHost != 'default' && !localStorage.getItem(`${imgHost}Config`)) {\n this.$message({\n showClose: true,\n message: '请先配置好图床参数',\n type: 'error'\n });\n continue;\n }\n\n this.isImgLoading = true;\n const pasteFile = item.getAsFile()\n uploadImgFile(pasteFile).then(res => {\n this.uploaded(res)\n }).catch(err => {\n this.$message({\n showClose: true,\n message: err,\n type: 'error'\n });\n });\n this.isImgLoading = false;\n }\n }\n });\n\n this.editor.on('mousedown', () => {\n this.$store.commit('setRightClickMenuVisible', false);\n });\n this.editor.on('blur', () => {\n //!影响到右键菜单的点击事件右键菜单的点击事件在组件内通过mousedown触发\n this.$store.commit('setRightClickMenuVisible', false); \n });\n this.editor.on('scroll', () => {\n this.$store.commit('setRightClickMenuVisible', false);\n });\n\n },\n initCssEditor() {\n this.initCssEditorEntity();\n // 自动提示\n this.cssEditor.on('keyup', (cm, e) => {\n if ((e.keyCode >= 65 && e.keyCode <= 90) || e.keyCode === 189) {\n cm.showHint(e);\n }\n });\n this.cssEditor.on('update', (instance) => {\n this.cssChanged();\n saveEditorContent(this.cssEditor, '__css_content');\n })\n },\n cssChanged() {\n let json = css2json(this.cssEditor.getValue(0));\n let theme = setFontSize(this.currentSize.replace('px', ''));\n\n theme = customCssWithTemplate(json, this.currentColor, theme);\n this.setWxRendererOptions({\n theme: theme\n });\n this.onEditorRefresh();\n },\n // 图片上传结束\n uploaded(response) {\n if (!response) {\n this.$message({\n showClose: true,\n message: '上传图片未知异常',\n type: 'error'\n });\n return;\n }\n this.dialogUploadImgVisible = false;\n // 上传成功,获取光标\n const cursor = this.editor.getCursor();\n const imageUrl = response;\n const markdownImage = `![](${imageUrl})`;\n // 将 Markdown 形式的 URL 插入编辑框光标所在位置\n this.editor.replaceSelection(`\\n${markdownImage}\\n`, cursor);\n this.$message({\n showClose: true,\n message: '图片上传成功',\n type: 'success'\n });\n this.onEditorRefresh();\n },\n // 左右滚动\n leftAndRightScroll() {\n const scrollCB = text => {\n let source, target;\n\n clearTimeout(this.timeout);\n if (text === 'preview') {\n source = this.$refs.preview.$el;\n target = document.getElementsByClassName('CodeMirror-scroll')[0];\n this.editor.off('scroll', editorScrollCB);\n this.timeout = setTimeout(() => {\n this.editor.on('scroll', editorScrollCB);\n }, 300);\n } else if (text === 'editor') {\n source = document.getElementsByClassName('CodeMirror-scroll')[0];\n target = this.$refs.preview.$el;\n target.removeEventListener(\"scroll\", previewScrollCB, false);\n this.timeout = setTimeout(() => {\n target.addEventListener(\"scroll\", previewScrollCB, false);\n }, 300);\n }\n\n let percentage = source.scrollTop / (source.scrollHeight - source.offsetHeight);\n let height = percentage * (target.scrollHeight - target.offsetHeight);\n\n target.scrollTo(0, height);\n };\n const editorScrollCB = () => {\n scrollCB('editor');\n };\n const previewScrollCB = () => {\n scrollCB('preview');\n };\n\n this.$refs.preview.$el.addEventListener(\"scroll\", previewScrollCB, false);\n this.editor.on('scroll', editorScrollCB);\n },\n // 更新编辑器\n onEditorRefresh() {\n this.editorRefresh();\n setTimeout(() => PR.prettyPrint(), 0);\n },\n // 复制结束\n endCopy() {\n this.backLight = false;\n setTimeout(() => {\n this.isCoping = false;\n }, 800);\n },\n // 下载编辑器内容到本地\n downloadEditorContent() {\n downLoadMD(this.editor.getValue(0));\n },\n // 右键菜单\n openMenu(e) {\n const menuMinWidth = 105;\n const offsetLeft = this.$el.getBoundingClientRect().left;\n const offsetWidth = this.$el.offsetWidth;\n const maxLeft = offsetWidth - menuMinWidth;\n const left = e.clientX - offsetLeft;\n this.mouseLeft = Math.min(maxLeft, left);\n this.mouseTop = e.clientY + 10;\n this.$store.commit('setRightClickMenuVisible', true);\n },\n closeRightClickMenu(){\n this.$store.commit('setRightClickMenuVisible', false);\n },\n onMenuEvent(type, info = {}) {\n switch (type) {\n case 'pageReset':\n this.$refs.header.showResetConfirm = true;\n break;\n case 'insertPic':\n this.dialogUploadImgVisible = true\n break;\n case 'downLoad':\n this.downloadEditorContent();\n break;\n case 'insertTable':\n this.dialogFormVisible = true;\n default:\n break;\n }\n },\n ...mapMutations([\n 'initEditorState',\n 'initEditorEntity',\n 'setWxRendererOptions',\n 'editorRefresh',\n 'initCssEditorEntity'])\n },\n mounted() {\n setTimeout(() => {\n this.leftAndRightScroll();\n PR.prettyPrint();\n }, 300);\n }\n}\n\n</script>\n<style lang=\"less\" scoped>\n.main-body {\n padding-top: 12px;\n overflow: hidden;\n}\n.el-main {\n transition: all .3s;\n padding: 0;\n margin: 20px;\n margin-top: 0;\n}\n.container {\n transition: all .3s;\n}\n.preview {\n transition: background 0s;\n transition-delay: .2s;\n}\n.preview-wrapper_night {\n overflow-y: inherit;\n position: relative;\n left: -3px;\n .preview {\n background-color: #fff;\n }\n}\n#output-wrapper {\n position: relative;\n}\n.loading-mask {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 376px;\n height: 101%;\n padding-top: 1px;\n font-size: 15px;\n color: gray;\n background-color: #1e1e1e;\n .loading__img {\n position: absolute;\n left: 50%;\n top: 330px;\n width: 50px;\n height: 50px;\n transform: translate(-50%, -50%);\n background: url('../assets/images/favicon.png') no-repeat;\n background-size: cover;\n }\n span {\n position: absolute;\n left: 50%;\n top: 390px;\n transform: translate(-50%, -50%);\n }\n}\n.bounceInRight {\n animation-name: bounceInRight;\n animation-duration: 1s;\n animation-fill-mode: both;\n}\n@keyframes bounceInRight {\n 0%,60%,75%,90%,100% {\n transition-timing-function: cubic-bezier(0.215,.610,.355,1.000)\n }\n 0% {\n opacity:0;\n transform:translate3d(3000px,0,0)}\n 60% {\n opacity:1;\n transform:translate3d(-25px,0,0)\n }\n 75% {\n transform:translate3d(10px,0,0)\n }\n 90% {\n transform:translate3d(-5px,0,0)\n }\n 100% {\n transform:none\n }\n}\n</style>\n<style lang=\"less\">\n@import url('../assets/less/app.less');\n@import url('../assets/less/style-mirror.css');\n@import url('../assets/less/github-v2.min.css');\n</style>\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=6d3220ad&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=6d3220ad&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 \"6d3220ad\",\n null\n \n)\n\nexport default component.exports","<template>\n <transition name=\"fade\" v-if=\"loading\">\n <loading />\n </transition>\n <codemirror-editor v-else />\n</template>\n\n<script>\nimport Loading from './components/Loading'\nimport CodemirrorEditor from './view/CodemirrorEditor'\nexport default {\n name: 'App',\n components: {\n Loading,\n CodemirrorEditor\n },\n data() {\n return {\n loading: true\n }\n },\n mounted() {\n setTimeout(() => {\n this.loading = false\n }, 100);\n }\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n.fade-enter, .fade-leave-to {\n opacity: 0;\n}\n.fade-enter-to, .fade-leave {\n opacity: 1;\n}\n.fade-enter-active, .fade-leave-active {\n transition: all 1s;\n}\n</style>\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=5b96f5f8&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=5b96f5f8&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 \"5b96f5f8\",\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 `<code style=\"font-size: 90%; opacity: 0.6;\">[${x[0]}]</code>: <i>${x[1]}</i><br/>`;\n }\n return `<code style=\"font-size: 90%; opacity: 0.6;\">[${x[0]}]</code> ${x[1]}: <i>${x[2]}</i><br/>`;\n });\n return `<h4 ${getStyles(\"h4\")}>引用链接</h4><p ${getStyles(\n \"footnotes\"\n )}>${footnoteArray.join(\"\\n\")}</p>`;\n };\n\n this.buildAddition = () => {\n return `\n <style>\n .preview-wrapper pre::before {\n position: absolute;\n top: 0;\n right: 0;\n color: #ccc;\n text-align: center;\n font-size: 0.8em;\n padding: 5px 10px 0;\n line-height: 15px;\n height: 15px;\n font-weight: 600;\n }\n </style>\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 `<h1 ${getStyles(\"h1\")}>${text}</h1>`;\n case 2:\n return `<h2 ${getStyles(\"h2\")}>${text}</h2>`;\n case 3:\n return `<h3 ${getStyles(\"h3\")}>${text}</h3>`;\n default:\n return `<h4 ${getStyles(\"h4\")}>${text}</h4>`;\n }\n };\n renderer.paragraph = (text) => {\n if (text.indexOf(\"<figure\") != -1 && text.indexOf(\"<img\") != -1) {\n return text;\n }\n return text.replace(/ /g, \"\") === \"\"\n ? \"\"\n : `<p ${getStyles(\"p\")}>${text}</p>`;\n };\n\n renderer.blockquote = (text) => {\n text = text.replace(/<p.*?>/g, `<p ${getStyles(\"blockquote_p\")}>`);\n return `<blockquote ${getStyles(\n \"blockquote\"\n )}>${text}</blockquote>`;\n };\n renderer.code = (text, lang) => {\n text = text.replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n const codeLines = text\n .split(\"\\n\")\n .map(\n (line) =>\n `<code class=\"prettyprint\"><span class=\"code-snippet_outer\">${\n line || \"<br>\"\n }</span></code>`\n );\n const codeTheme = \"github\";\n return `\n <section class=\"code-snippet__${codeTheme}\">\n <pre class=\"code__pre\" data-lang=\"${lang}\">\n ${codeLines.join(\"\")}\n </pre>\n </section>\n `;\n };\n renderer.codespan = (text, lang) =>\n `<code ${getStyles(\"codespan\")}>${text}</code>`;\n renderer.listitem = (text) =>\n `<span ${getStyles(\n \"listitem\"\n )}><span style=\"margin-right: 10px;\"><%s/></span>${text}</span>`;\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 `<p ${getStyles(\"ul\")}>${text}</p>`;\n }\n text = segments[0];\n for (let i = 1; i < segments.length; i++) {\n text = text + i + \".\" + segments[i];\n }\n return `<p ${getStyles(\"ol\")}>${text}</p>`;\n };\n renderer.image = (href, title, text) => {\n let subText = \"\";\n if (text) {\n subText = `<figcaption ${getStyles(\n \"figcaption\"\n )}>${text}</figcaption>`;\n }\n let figureStyles = getStyles(\"figure\");\n let imgStyles = getStyles(\n ENV_STRETCH_IMAGE ? \"image\" : \"image_org\"\n );\n return `<figure ${figureStyles}><img ${imgStyles} src=\"${href}\" title=\"${title}\" alt=\"${text}\"/>${subText}</figure>`;\n };\n renderer.link = (href, title, text) => {\n if (href.indexOf(\"https://mp.weixin.qq.com\") === 0) {\n return `<a href=\"${href}\" title=\"${title || text}\" ${getStyles(\n \"wx_link\"\n )}>${text}</a>`;\n }\n if (href === text || !status) {\n return text;\n }\n let ref = addFootnote(title || text, href);\n return `<span ${getStyles(\n \"link\"\n )}>${text}<sup>[${ref}]</sup></span>`;\n };\n renderer.strong = (text) =>\n `<strong ${getStyles(\"strong\")}>${text}</strong>`;\n renderer.em = (text) =>\n `<span style=\"font-style: italic;\">${text}</span>`;\n renderer.table = (header, body) =>\n `<section style=\"padding:0 8px;\"><table class=\"preview-table\"><thead ${getStyles(\n \"thead\"\n )}>${header}</thead><tbody>${body}</tbody></table></section>`;\n // renderer.tablerow = (text) => `<tr style=\"\">${text}</tr>`;\n renderer.tablecell = (text, flags) =>\n `<td ${getStyles(\"td\")}>${text}</td>`;\n renderer.hr = () =>\n `<hr style=\"border-style: solid;border-width: 1px 0 0;border-color: rgba(0,0,0,0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);\">`;\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<center>\n<img src=\"https://gitee.com/yanglbme/resource/raw/master/doocs-md/dfa.gif\" style=\"width: 50%;\"></center>\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<center>\n <img src=\"https://gitee.com/yanglbme/resource/raw/master/doocs-md/qrcode.png\" style=\"width: 100px;\">\n</center>\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","import mod 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=01a2512a&lang=less&scoped=true&\"; export default mod; 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=01a2512a&lang=less&scoped=true&\"","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 }","import mod 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 default mod; 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&\"","import mod 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=5b96f5f8&lang=scss&scoped=true&\"; export default mod; 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=5b96f5f8&lang=scss&scoped=true&\"","import mod 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=c52aa6f0&lang=less&scoped=true&\"; export default mod; 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=c52aa6f0&lang=less&scoped=true&\"","import mod 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=26fb3bc3&lang=less&scoped=true&\"; export default mod; 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=26fb3bc3&lang=less&scoped=true&\"","import mod 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=7c306610&lang=less&scoped=true&\"; export default mod; 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=7c306610&lang=less&scoped=true&\"","import mod 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=6d3220ad&lang=less&scoped=true&\"; export default mod; 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=6d3220ad&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&\"","import mod 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=c64ad108&lang=less&scoped=true&\"; export default mod; 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=c64ad108&lang=less&scoped=true&\"","import mod 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=31c61828&lang=less&scoped=true&\"; export default mod; 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=31c61828&lang=less&scoped=true&\""],"sourceRoot":""}