├── .babelrc ├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── README.md ├── build ├── build.js ├── check-versions.js ├── dev-client.js ├── dev-server.js ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js └── prod.env.js ├── dist ├── index.html └── static │ ├── css │ ├── app.b8a96cfdfc41fc31b20c241864d5cf56.css │ ├── app.b8a96cfdfc41fc31b20c241864d5cf56.css.map │ ├── atom-one-dark.min.css │ ├── github-markdown.css │ └── reset.scss │ └── js │ ├── app.912d741ee45a23187c6f.js │ ├── app.912d741ee45a23187c6f.js.map │ ├── highlight.min.js │ ├── manifest.b26844df2548cfeeb839.js │ ├── manifest.b26844df2548cfeeb839.js.map │ ├── rangeFn.js │ ├── vendor.0c5398add9621bc4c0a5.js │ └── vendor.0c5398add9621bc4c0a5.js.map ├── docs ├── index.html └── static │ ├── css │ ├── app.b8a96cfdfc41fc31b20c241864d5cf56.css │ ├── app.b8a96cfdfc41fc31b20c241864d5cf56.css.map │ ├── atom-one-dark.min.css │ ├── github-markdown.css │ └── reset.scss │ └── js │ ├── app.912d741ee45a23187c6f.js │ ├── app.912d741ee45a23187c6f.js.map │ ├── highlight.min.js │ ├── manifest.b26844df2548cfeeb839.js │ ├── manifest.b26844df2548cfeeb839.js.map │ ├── rangeFn.js │ ├── vendor.0c5398add9621bc4c0a5.js │ └── vendor.0c5398add9621bc4c0a5.js.map ├── index.html ├── package.json ├── src ├── App.vue ├── assets │ └── logo.png ├── components │ ├── index.vue │ └── markdown.vue ├── main.js └── router │ └── index.js └── static ├── .gitkeep ├── css ├── atom-one-dark.min.css ├── github-markdown.css └── reset.scss └── js ├── highlight.min.js └── rangeFn.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { "modules": false }], 4 | "stage-2" 5 | ], 6 | "plugins": ["transform-runtime"], 7 | "comments": false, 8 | "env": { 9 | "test": { 10 | "presets": ["env", "stage-2"], 11 | "plugins": [ "istanbul" ] 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | npm-debug.log 4 | yarn-error.log 5 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | // to edit target browsers: use "browserlist" field in package.json 6 | "autoprefixer": {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-mdeditor 2 | 3 | > 基于VUE的markdown文本编辑器 4 | 5 | ## 更新历史 6 | 7 | * 2017/08/08 8 | * 修复组件配置属性的判定错误,感谢[Imprevia](https://github.com/Imprevia) 9 | * 2017/03/29 10 | * 编辑器双向同步滚动功能 11 | * 支持配置左上角版权标志(吃水不忘挖井人,谢过了), 12 | * 优化表格快捷输入 13 | * 其他优化 14 | * 2017/03/27 15 | * 新增顶部窗口配置 16 | * 优化参数配置可能出现的bug 17 | * 优化组件传值,增加html格式的输出内容,便于用户上传 18 | * 修复文档部分错误 19 | * 2017/03/24 20 | * 初始化项目 21 | * 完成基本的功能,包括: 22 | * H1-H6标题等快捷输入 23 | * 编辑区域tab缩进 24 | * 编译后文件预览并高亮 25 | * VUE组件传值,配置输入和输出等 26 | 27 | ## DEMO案例 28 | > 我知道你想先看看效果,特意准备了在线DEMO,点进去看看吧 29 | 30 | **传送门** ======> [vue-mdeditor](https://ovenslove.github.io/vue-mdEditor/) 31 | 32 | ## 运行实例 33 | 34 | ``` bash 35 | # 安装依赖 36 | cnpm install 37 | 38 | # 开启热更新服务器s在 localhost:4397 (4397为自定义端口,如果需要修改,请前往/config/index.js:26(port:4397)修改) 39 | cnpm run dev 40 | 41 | # 打包压缩项目,并输出生产模式文件 42 | cnpm run build 43 | 44 | # 打包压缩文件,过程带输出信息 45 | cnpm run build --report 46 | ``` 47 | ## 使用方法 48 | > 使用前必知 49 | 50 | 本markdown组件采用vue-cli模式开发,适用于此类开发模式,其他模式请自行修改。 51 | 52 | > 安装依赖 53 | ```bash 54 | # 本组件css采用sass编写,亦可修改为css(请自行修改),核心依赖marked组件,请务必安装,谢谢 55 | # markdown编译依赖 marked 地址:https://www.npmjs.com/package/marked 56 | # 同步滚动依赖 vue-scroll 地址:https://www.npmjs.com/package/vue-scroll 57 | cnpm i marked vue-scroll --save 58 | 59 | cnpm i node-sass sass-loader --save-dev 60 | ``` 61 | > 配置要求 62 | ```html 63 | 64 | 65 | ``` 66 | ```javascript 67 | // 根据项目修改引入文件的路径(所需文件放在了static目录下) 68 | import Vue from 'vue' 69 | import marked from 'marked' 70 | import scroll from 'vue-scroll' 71 | Vue.use(scroll) 72 | import hljs from '../../static/js/highlight.min.js' 73 | import range from '../../static/js/rangeFn.js' 74 | ``` 75 | ```css 76 | /*根据项目修改引入文件的路径(所需文件放在了static目录下)*/ 77 | /*引入reset文件*/ 78 | @import "../../static/css/reset"; 79 | /*引入github的markdown样式文件*/ 80 | @import "../../static/css/github-markdown.css"; 81 | /*引入atom的代码高亮样式文件*/ 82 | @import "../../static/css/atom-one-dark.min.css"; 83 | 84 | ``` 85 | 86 | > 父组件中 87 | 88 | ```html 89 | 90 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | ``` 109 | ```javascript 110 | // 引入markdown组件 111 | import markdown from '../components/markdown' 112 | export default { 113 | name: 'index', 114 | data() { 115 | return { 116 | msg: { 117 | mdValue:'## Vue-markdownEditor' 118 | } 119 | //初始化markdown编辑器的内容,通过props传入子组件 120 | } 121 | }, 122 | components: { 123 | markdown // 声明mardown组件 124 | }, 125 | methods: { 126 | // 监听事件,接收子组件传过来的数据 127 | childEventHandler:function(res){ 128 | // res会传回一个data,包含属性mdValue和htmlValue,具体含义请自行翻译 129 | this.msg=res; 130 | } 131 | } 132 | } 133 | ``` 134 | ## 效果展示 135 | 136 | ![vue-mdeditor](http://static-oven.b0.upaiyun.com/github-resource/markdownEditor.png) 137 | 138 | ## 后期更新 139 | 140 | 1. 更多的语法支持 141 | 2. 更丰富的API文档 142 | 3. 更人性化的使用体验 143 | 4. 更傻瓜式的配置方式 144 | 145 | > 喜欢就关注一下吧。@_@!!! -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | process.env.NODE_ENV = 'production' 4 | 5 | var ora = require('ora') 6 | var rm = require('rimraf') 7 | var path = require('path') 8 | var chalk = require('chalk') 9 | var webpack = require('webpack') 10 | var config = require('../config') 11 | var webpackConfig = require('./webpack.prod.conf') 12 | 13 | var spinner = ora('building for production...') 14 | spinner.start() 15 | 16 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 17 | if (err) throw err 18 | webpack(webpackConfig, function (err, stats) { 19 | spinner.stop() 20 | if (err) throw err 21 | process.stdout.write(stats.toString({ 22 | colors: true, 23 | modules: false, 24 | children: false, 25 | chunks: false, 26 | chunkModules: false 27 | }) + '\n\n') 28 | 29 | console.log(chalk.cyan(' Build complete.\n')) 30 | console.log(chalk.yellow( 31 | ' Tip: built files are meant to be served over an HTTP server.\n' + 32 | ' Opening index.html over file:// won\'t work.\n' 33 | )) 34 | }) 35 | }) 36 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | var chalk = require('chalk') 2 | var semver = require('semver') 3 | var packageConfig = require('../package.json') 4 | 5 | function exec (cmd) { 6 | return require('child_process').execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | }, 15 | { 16 | name: 'npm', 17 | currentVersion: exec('npm --version'), 18 | versionRequirement: packageConfig.engines.npm 19 | } 20 | ] 21 | 22 | module.exports = function () { 23 | var warnings = [] 24 | for (var i = 0; i < versionRequirements.length; i++) { 25 | var mod = versionRequirements[i] 26 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 27 | warnings.push(mod.name + ': ' + 28 | chalk.red(mod.currentVersion) + ' should be ' + 29 | chalk.green(mod.versionRequirement) 30 | ) 31 | } 32 | } 33 | 34 | if (warnings.length) { 35 | console.log('') 36 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 37 | console.log() 38 | for (var i = 0; i < warnings.length; i++) { 39 | var warning = warnings[i] 40 | console.log(' ' + warning) 41 | } 42 | console.log() 43 | process.exit(1) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /build/dev-server.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | var config = require('../config') 4 | if (!process.env.NODE_ENV) { 5 | process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) 6 | } 7 | 8 | var opn = require('opn') 9 | var path = require('path') 10 | var express = require('express') 11 | var webpack = require('webpack') 12 | var proxyMiddleware = require('http-proxy-middleware') 13 | var webpackConfig = require('./webpack.dev.conf') 14 | 15 | // default port where dev server listens for incoming traffic 16 | var port = process.env.PORT || config.dev.port 17 | // automatically open browser, if not set will be false 18 | var autoOpenBrowser = !!config.dev.autoOpenBrowser 19 | // Define HTTP proxies to your custom API backend 20 | // https://github.com/chimurai/http-proxy-middleware 21 | var proxyTable = config.dev.proxyTable 22 | 23 | var app = express() 24 | var compiler = webpack(webpackConfig) 25 | 26 | var devMiddleware = require('webpack-dev-middleware')(compiler, { 27 | publicPath: webpackConfig.output.publicPath, 28 | quiet: true 29 | }) 30 | 31 | var hotMiddleware = require('webpack-hot-middleware')(compiler, { 32 | log: () => {} 33 | }) 34 | // force page reload when html-webpack-plugin template changes 35 | compiler.plugin('compilation', function (compilation) { 36 | compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { 37 | hotMiddleware.publish({ action: 'reload' }) 38 | cb() 39 | }) 40 | }) 41 | 42 | // proxy api requests 43 | Object.keys(proxyTable).forEach(function (context) { 44 | var options = proxyTable[context] 45 | if (typeof options === 'string') { 46 | options = { target: options } 47 | } 48 | app.use(proxyMiddleware(options.filter || context, options)) 49 | }) 50 | 51 | // handle fallback for HTML5 history API 52 | app.use(require('connect-history-api-fallback')()) 53 | 54 | // serve webpack bundle output 55 | app.use(devMiddleware) 56 | 57 | // enable hot-reload and state-preserving 58 | // compilation error display 59 | app.use(hotMiddleware) 60 | 61 | // serve pure static assets 62 | var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) 63 | app.use(staticPath, express.static('./static')) 64 | 65 | var uri = 'http://localhost:' + port 66 | 67 | var _resolve 68 | var readyPromise = new Promise(resolve => { 69 | _resolve = resolve 70 | }) 71 | 72 | console.log('> Starting dev server...') 73 | devMiddleware.waitUntilValid(() => { 74 | console.log('> Listening at ' + uri + '\n') 75 | // when env is testing, don't need open it 76 | if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { 77 | opn(uri) 78 | } 79 | _resolve() 80 | }) 81 | 82 | var server = app.listen(port) 83 | 84 | module.exports = { 85 | ready: readyPromise, 86 | close: () => { 87 | server.close() 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var config = require('../config') 3 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 4 | 5 | exports.assetsPath = function (_path) { 6 | var assetsSubDirectory = process.env.NODE_ENV === 'production' 7 | ? config.build.assetsSubDirectory 8 | : config.dev.assetsSubDirectory 9 | return path.posix.join(assetsSubDirectory, _path) 10 | } 11 | 12 | exports.cssLoaders = function (options) { 13 | options = options || {} 14 | 15 | var cssLoader = { 16 | loader: 'css-loader', 17 | options: { 18 | minimize: process.env.NODE_ENV === 'production', 19 | sourceMap: options.sourceMap 20 | } 21 | } 22 | 23 | // generate loader string to be used with extract text plugin 24 | function generateLoaders (loader, loaderOptions) { 25 | var loaders = [cssLoader] 26 | if (loader) { 27 | loaders.push({ 28 | loader: loader + '-loader', 29 | options: Object.assign({}, loaderOptions, { 30 | sourceMap: options.sourceMap 31 | }) 32 | }) 33 | } 34 | 35 | // Extract CSS when that option is specified 36 | // (which is the case during production build) 37 | if (options.extract) { 38 | return ExtractTextPlugin.extract({ 39 | use: loaders, 40 | fallback: 'vue-style-loader' 41 | }) 42 | } else { 43 | return ['vue-style-loader'].concat(loaders) 44 | } 45 | } 46 | 47 | // http://vuejs.github.io/vue-loader/en/configurations/extract-css.html 48 | return { 49 | css: generateLoaders(), 50 | postcss: generateLoaders(), 51 | less: generateLoaders('less'), 52 | sass: generateLoaders('sass', { indentedSyntax: true }), 53 | scss: generateLoaders('sass'), 54 | stylus: generateLoaders('stylus'), 55 | styl: generateLoaders('stylus') 56 | } 57 | } 58 | 59 | // Generate loaders for standalone style files (outside of .vue) 60 | exports.styleLoaders = function (options) { 61 | var output = [] 62 | var loaders = exports.cssLoaders(options) 63 | for (var extension in loaders) { 64 | var loader = loaders[extension] 65 | output.push({ 66 | test: new RegExp('\\.' + extension + '$'), 67 | use: loader 68 | }) 69 | } 70 | return output 71 | } 72 | -------------------------------------------------------------------------------- /build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var config = require('../config') 3 | var isProduction = process.env.NODE_ENV === 'production' 4 | 5 | module.exports = { 6 | loaders: utils.cssLoaders({ 7 | sourceMap: isProduction 8 | ? config.build.productionSourceMap 9 | : config.dev.cssSourceMap, 10 | extract: isProduction 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var config = require('../config') 4 | var vueLoaderConfig = require('./vue-loader.conf') 5 | 6 | function resolve(dir) { 7 | return path.join(__dirname, '..', dir) 8 | } 9 | 10 | module.exports = { 11 | entry: { 12 | app: './src/main.js' 13 | }, 14 | output: { 15 | path: config.build.assetsRoot, 16 | filename: '[name].js', 17 | publicPath: process.env.NODE_ENV === 'production' ? 18 | config.build.assetsPublicPath : config.dev.assetsPublicPath 19 | }, 20 | resolve: { 21 | extensions: ['.js', '.vue', '.json'], 22 | alias: { 23 | 'vue$': 'vue/dist/vue.esm.js', 24 | '@': resolve('src'), 25 | } 26 | }, 27 | module: { 28 | rules: [{ 29 | test: /\.vue$/, 30 | loader: 'vue-loader', 31 | options: vueLoaderConfig 32 | }, 33 | { 34 | test: /\.js$/, 35 | loader: 'babel-loader', 36 | include: [resolve('src'), resolve('test')] 37 | }, 38 | { 39 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 40 | loader: 'url-loader', 41 | query: { 42 | limit: 10000, 43 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 44 | } 45 | }, 46 | { 47 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 48 | loader: 'url-loader', 49 | query: { 50 | limit: 10000, 51 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 52 | } 53 | }, 54 | { 55 | test: /\.scss$/, 56 | loader: 'style!css!sass?sourceMap' 57 | }, 58 | 59 | { 60 | test: /\.jade$/, 61 | loader: "jade" 62 | }, 63 | { 64 | test: /\.pug$/, 65 | loader: 'pug' 66 | } 67 | ] 68 | } 69 | } -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var webpack = require('webpack') 3 | var config = require('../config') 4 | var merge = require('webpack-merge') 5 | var baseWebpackConfig = require('./webpack.base.conf') 6 | var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 8 | 9 | // add hot-reload related code to entry chunks 10 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 11 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 12 | }) 13 | 14 | module.exports = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) 17 | }, 18 | // cheap-module-eval-source-map is faster for development 19 | devtool: '#cheap-module-eval-source-map', 20 | plugins: [ 21 | new webpack.DefinePlugin({ 22 | 'process.env': config.dev.env 23 | }), 24 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 25 | new webpack.HotModuleReplacementPlugin(), 26 | new webpack.NoEmitOnErrorsPlugin(), 27 | // https://github.com/ampedandwired/html-webpack-plugin 28 | new HtmlWebpackPlugin({ 29 | filename: 'index.html', 30 | template: 'index.html', 31 | inject: true 32 | }), 33 | new FriendlyErrorsPlugin() 34 | ] 35 | }) 36 | -------------------------------------------------------------------------------- /build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var webpack = require('webpack') 4 | var config = require('../config') 5 | var merge = require('webpack-merge') 6 | var baseWebpackConfig = require('./webpack.base.conf') 7 | var CopyWebpackPlugin = require('copy-webpack-plugin') 8 | var HtmlWebpackPlugin = require('html-webpack-plugin') 9 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 10 | var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 11 | 12 | var env = config.build.env 13 | 14 | var webpackConfig = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ 17 | sourceMap: config.build.productionSourceMap, 18 | extract: true 19 | }) 20 | }, 21 | devtool: config.build.productionSourceMap ? '#source-map' : false, 22 | output: { 23 | path: config.build.assetsRoot, 24 | filename: utils.assetsPath('js/[name].[chunkhash].js'), 25 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 26 | }, 27 | plugins: [ 28 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 29 | new webpack.DefinePlugin({ 30 | 'process.env': env 31 | }), 32 | new webpack.optimize.UglifyJsPlugin({ 33 | compress: { 34 | warnings: false 35 | }, 36 | sourceMap: true 37 | }), 38 | // extract css into its own file 39 | new ExtractTextPlugin({ 40 | filename: utils.assetsPath('css/[name].[contenthash].css') 41 | }), 42 | // Compress extracted CSS. We are using this plugin so that possible 43 | // duplicated CSS from different components can be deduped. 44 | new OptimizeCSSPlugin({ 45 | cssProcessorOptions: { 46 | safe: true 47 | } 48 | }), 49 | // generate dist index.html with correct asset hash for caching. 50 | // you can customize output by editing /index.html 51 | // see https://github.com/ampedandwired/html-webpack-plugin 52 | new HtmlWebpackPlugin({ 53 | filename: config.build.index, 54 | template: 'index.html', 55 | inject: true, 56 | minify: { 57 | removeComments: true, 58 | collapseWhitespace: true, 59 | removeAttributeQuotes: true 60 | // more options: 61 | // https://github.com/kangax/html-minifier#options-quick-reference 62 | }, 63 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin 64 | chunksSortMode: 'dependency' 65 | }), 66 | // split vendor js into its own file 67 | new webpack.optimize.CommonsChunkPlugin({ 68 | name: 'vendor', 69 | minChunks: function (module, count) { 70 | // any required modules inside node_modules are extracted to vendor 71 | return ( 72 | module.resource && 73 | /\.js$/.test(module.resource) && 74 | module.resource.indexOf( 75 | path.join(__dirname, '../node_modules') 76 | ) === 0 77 | ) 78 | } 79 | }), 80 | // extract webpack runtime and module manifest to its own file in order to 81 | // prevent vendor hash from being updated whenever app bundle is updated 82 | new webpack.optimize.CommonsChunkPlugin({ 83 | name: 'manifest', 84 | chunks: ['vendor'] 85 | }), 86 | // copy custom static assets 87 | new CopyWebpackPlugin([ 88 | { 89 | from: path.resolve(__dirname, '../static'), 90 | to: config.build.assetsSubDirectory, 91 | ignore: ['.*'] 92 | } 93 | ]) 94 | ] 95 | }) 96 | 97 | if (config.build.productionGzip) { 98 | var CompressionWebpackPlugin = require('compression-webpack-plugin') 99 | 100 | webpackConfig.plugins.push( 101 | new CompressionWebpackPlugin({ 102 | asset: '[path].gz[query]', 103 | algorithm: 'gzip', 104 | test: new RegExp( 105 | '\\.(' + 106 | config.build.productionGzipExtensions.join('|') + 107 | ')$' 108 | ), 109 | threshold: 10240, 110 | minRatio: 0.8 111 | }) 112 | ) 113 | } 114 | 115 | if (config.build.bundleAnalyzerReport) { 116 | var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin 117 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 118 | } 119 | 120 | module.exports = webpackConfig 121 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: 'static', 10 | assetsPublicPath: '/', 11 | productionSourceMap: true, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: false, 17 | productionGzipExtensions: ['js', 'css'], 18 | // Run the build command with an extra argument to 19 | // View the bundle analyzer report after build finishes: 20 | // `npm run build --report` 21 | // Set to `true` or `false` to always turn it on or off 22 | bundleAnalyzerReport: process.env.npm_config_report 23 | }, 24 | dev: { 25 | env: require('./dev.env'), 26 | port: 4397, 27 | autoOpenBrowser: true, 28 | assetsSubDirectory: 'static', 29 | assetsPublicPath: '/', 30 | proxyTable: {}, 31 | // CSS Sourcemaps off by default because relative paths are "buggy" 32 | // with this option, according to the CSS-Loader README 33 | // (https://github.com/webpack/css-loader#sourcemaps) 34 | // In our experience, they generally work as expected, 35 | // just be aware of this issue when enabling this option. 36 | cssSourceMap: false 37 | } 38 | } -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | vue-mdeditor
-------------------------------------------------------------------------------- /dist/static/css/app.b8a96cfdfc41fc31b20c241864d5cf56.css: -------------------------------------------------------------------------------- 1 | #app,body,html{height:100%;width:100%}.show[data-v-b74131ec]{position:absolute;left:0;top:0}.indexContainer[data-v-b74131ec]{width:100%;height:100%;background:#ddd;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.btnsContainer[data-v-b74131ec],.indexContainer[data-v-b74131ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.btnsContainer[data-v-b74131ec]{position:absolute;z-index:10;left:65px;top:5px;height:25px;min-width:300px;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btnsContainer .btn[data-v-b74131ec]{display:inline-block;border:1px solid #ccc;margin-right:10px;box-sizing:border-box;padding:0 10px;background:#fff;font-size:12px;height:25px;line-height:25px;cursor:pointer;moz-user-select:-moz-none;-moz-user-select:none;-o-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.btnsContainer .btn[data-v-b74131ec]:active{opacity:.8;background:#add8e6}.maskContainer[data-v-b74131ec]{position:absolute;left:0;top:0;height:100%;width:100%;height:100vh;width:100vw;background:rgba(0,0,0,.5);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.maskContainer .contentContainer[data-v-b74131ec]{width:60%;height:60%;background:#fefefe;padding:20px;box-sizing:border-box;position:relative}.maskContainer .contentContainer .showAreaContainer[data-v-b74131ec]{height:100%;width:100%;outline:none;background:#eee;display:block;resize:none;padding:10px;box-sizing:border-box}.maskContainer .contentContainer .closeBtnContainer[data-v-b74131ec]{position:absolute;height:30px;width:30px;right:-40px;top:-40px;border:1px solid #fff;border-radius:50%}.maskContainer .contentContainer .closeBtnContainer[data-v-b74131ec]:before{content:"";position:absolute;width:70%;height:2px;display:bblock;background:#fff;left:15%;top:calc(50% - 1px);transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg)}.maskContainer .contentContainer .closeBtnContainer[data-v-b74131ec]:after{content:"";position:absolute;width:70%;height:2px;display:bblock;background:#fff;left:15%;top:calc(50% - 1px);transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg)}.editorContainer[data-v-b74131ec]{width:90%;height:90%;border:1px solid #ddd}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,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) format("woff")}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#333;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#969896}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#0086b3}.markdown-body .pl-e,.markdown-body .pl-en{color:#795da3}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#333}.markdown-body .pl-ent{color:#63a35c}.markdown-body .pl-k{color:#a71d5d}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#183691}.markdown-body .pl-v{color:#ed6a43}.markdown-body .pl-id{color:#b52a1d}.markdown-body .pl-ii{color:#f8f8f8;background-color:#b52a1d}.markdown-body .pl-sr .pl-cce{font-weight:700;color:#63a35c}.markdown-body .pl-ml{color:#693a17}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{font-weight:700;color:#1d3e81}.markdown-body .pl-mq{color:teal}.markdown-body .pl-mi{font-style:italic;color:#333}.markdown-body .pl-mb{font-weight:700;color:#333}.markdown-body .pl-md{color:#bd2c00;background-color:#ffecec}.markdown-body .pl-mi1{color:#55a532;background-color:#eaffea}.markdown-body .pl-mdr{font-weight:700;color:#795da3}.markdown-body .pl-mo{color:#1d3e81}.markdown-body .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.markdown-body a{background-color:transparent;-webkit-text-decoration-skip:objects}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit;font-weight:bolder}.markdown-body h1{margin:.67em 0}.markdown-body img{border-style:none}.markdown-body svg:not(:root){overflow:hidden}.markdown-body code,.markdown-body kbd,.markdown-body pre{font-family:monospace,monospace;font-size:1em}.markdown-body hr{box-sizing:content-box;overflow:visible}.markdown-body input{font:inherit;margin:0;overflow:visible}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#4078c0;text-decoration:none}.markdown-body a:active,.markdown-body a:hover{text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{height:0;margin:15px 0;overflow:hidden;background:transparent;border-bottom:1px solid #ddd}.markdown-body hr:after,.markdown-body hr:before{display:table;content:""}.markdown-body hr:after{clear:both}.markdown-body table{border-spacing:0;border-collapse:collapse}.markdown-body td,.markdown-body th{padding:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:0;margin-bottom:0}.markdown-body h1{font-size:32px;font-weight:600}.markdown-body h2{font-size:24px;font-weight:600}.markdown-body h3{font-size:20px;font-weight:600}.markdown-body h4{font-size:16px;font-weight:600}.markdown-body h5{font-size:14px;font-weight:600}.markdown-body h6{font-size:12px;font-weight:600}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{padding-left:0;margin-top:0;margin-bottom:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code{font-family:Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px}.markdown-body pre{margin-top:0;margin-bottom:0;font:12px Consolas,Liberation Mono,Menlo,Courier,monospace}.markdown-body .octicon{vertical-align:text-bottom}.markdown-body input{-webkit-font-feature-settings:"liga" 0;font-feature-settings:"liga" 0}.markdown-body:after,.markdown-body:before{display:table;content:""}.markdown-body:after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:none}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e7e7e7;border:0}.markdown-body blockquote{padding:0 1em;color:#777;border-left:.25em solid #ddd}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{font-size:11px}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{font-size:2em}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body code{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before{letter-spacing:-.2em;content:"\A0"}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code:after,.markdown-body pre code:before{content:normal}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:3px!important}.markdown-body .pl-2{padding-left:6px!important}.markdown-body .pl-3{padding-left:12px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:36px!important}.markdown-body .pl-6{padding-left:48px!important}.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#4078c0;border:1px solid #4078c0}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px Consolas,Liberation Mono,Menlo,Courier,monospace;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#4078c0}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.hljs{display:block;overflow-x:auto;padding:.5em;color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-built_in,.hljs-class .hljs-title{color:#e6c07b}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} 2 | /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */*{margin:0;padding:0;border:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body,html{height:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.clearfix{overflow:hidden;_zoom:1}.mdContainer{width:100%;height:100%;background:#add8e6}.mdContainer.fullPage{position:fixed;z-index:1000;left:0;top:0}.mdContainer .navContainer{width:100%;height:36px;background:#fff;box-sizing:border-box;border-bottom:1px solid #eee;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 10px}.mdContainer .navContainer .nameContainer{color:#add8e6;margin-right:10px;cursor:pointer}.mdContainer .navContainer .markContainer{width:auto;height:100%;margin-left:0}.mdContainer .navContainer .markContainer ul.markListGroup{height:100%;width:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.mdContainer .navContainer .markContainer ul.markListGroup li.markListItem{list-style:none;width:20px;height:20px;margin:0 2px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;font-size:12px;color:#333}.mdContainer .navContainer .markContainer ul.markListGroup li.markListItem:hover{background:#eee}.mdContainer .mdBodyContainer{width:100%;height:calc(100% - 36px);background:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;box-sizing:border-box}.mdContainer .mdBodyContainer.noMenu{height:100%}.editContainer{height:100%;width:100%;box-sizing:border-box;border-right:1px solid #ddd;background:#333;color:#fff;padding:10px}.editContainer .mdEditor{height:100%;width:100%;background:transparent;outline:none;color:#fff;resize:none}.previewContainer{width:100%;height:100%;box-sizing:border-box;background:#fff;overflow:auto;padding:10px} -------------------------------------------------------------------------------- /dist/static/css/atom-one-dark.min.css: -------------------------------------------------------------------------------- 1 | .hljs{display:block;overflow-x:auto;padding:0.5em;color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-keyword,.hljs-formula{color:#c678dd}.hljs-section,.hljs-name,.hljs-selector-tag,.hljs-deletion,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-attribute,.hljs-meta-string{color:#98c379}.hljs-built_in,.hljs-class .hljs-title{color:#e6c07b}.hljs-attr,.hljs-variable,.hljs-template-variable,.hljs-type,.hljs-selector-class,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-number{color:#d19a66}.hljs-symbol,.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-title{color:#61aeee}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.hljs-link{text-decoration:underline} -------------------------------------------------------------------------------- /dist/static/css/github-markdown.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: octicons-link; 3 | src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); 4 | } 5 | 6 | .markdown-body { 7 | -ms-text-size-adjust: 100%; 8 | -webkit-text-size-adjust: 100%; 9 | line-height: 1.5; 10 | color: #333; 11 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; 12 | font-size: 16px; 13 | line-height: 1.5; 14 | word-wrap: break-word; 15 | } 16 | 17 | .markdown-body .pl-c { 18 | color: #969896; 19 | } 20 | 21 | .markdown-body .pl-c1, 22 | .markdown-body .pl-s .pl-v { 23 | color: #0086b3; 24 | } 25 | 26 | .markdown-body .pl-e, 27 | .markdown-body .pl-en { 28 | color: #795da3; 29 | } 30 | 31 | .markdown-body .pl-smi, 32 | .markdown-body .pl-s .pl-s1 { 33 | color: #333; 34 | } 35 | 36 | .markdown-body .pl-ent { 37 | color: #63a35c; 38 | } 39 | 40 | .markdown-body .pl-k { 41 | color: #a71d5d; 42 | } 43 | 44 | .markdown-body .pl-s, 45 | .markdown-body .pl-pds, 46 | .markdown-body .pl-s .pl-pse .pl-s1, 47 | .markdown-body .pl-sr, 48 | .markdown-body .pl-sr .pl-cce, 49 | .markdown-body .pl-sr .pl-sre, 50 | .markdown-body .pl-sr .pl-sra { 51 | color: #183691; 52 | } 53 | 54 | .markdown-body .pl-v { 55 | color: #ed6a43; 56 | } 57 | 58 | .markdown-body .pl-id { 59 | color: #b52a1d; 60 | } 61 | 62 | .markdown-body .pl-ii { 63 | color: #f8f8f8; 64 | background-color: #b52a1d; 65 | } 66 | 67 | .markdown-body .pl-sr .pl-cce { 68 | font-weight: bold; 69 | color: #63a35c; 70 | } 71 | 72 | .markdown-body .pl-ml { 73 | color: #693a17; 74 | } 75 | 76 | .markdown-body .pl-mh, 77 | .markdown-body .pl-mh .pl-en, 78 | .markdown-body .pl-ms { 79 | font-weight: bold; 80 | color: #1d3e81; 81 | } 82 | 83 | .markdown-body .pl-mq { 84 | color: #008080; 85 | } 86 | 87 | .markdown-body .pl-mi { 88 | font-style: italic; 89 | color: #333; 90 | } 91 | 92 | .markdown-body .pl-mb { 93 | font-weight: bold; 94 | color: #333; 95 | } 96 | 97 | .markdown-body .pl-md { 98 | color: #bd2c00; 99 | background-color: #ffecec; 100 | } 101 | 102 | .markdown-body .pl-mi1 { 103 | color: #55a532; 104 | background-color: #eaffea; 105 | } 106 | 107 | .markdown-body .pl-mdr { 108 | font-weight: bold; 109 | color: #795da3; 110 | } 111 | 112 | .markdown-body .pl-mo { 113 | color: #1d3e81; 114 | } 115 | 116 | .markdown-body .octicon { 117 | display: inline-block; 118 | vertical-align: text-top; 119 | fill: currentColor; 120 | } 121 | 122 | .markdown-body a { 123 | background-color: transparent; 124 | -webkit-text-decoration-skip: objects; 125 | } 126 | 127 | .markdown-body a:active, 128 | .markdown-body a:hover { 129 | outline-width: 0; 130 | } 131 | 132 | .markdown-body strong { 133 | font-weight: inherit; 134 | } 135 | 136 | .markdown-body strong { 137 | font-weight: bolder; 138 | } 139 | 140 | .markdown-body h1 { 141 | font-size: 2em; 142 | margin: 0.67em 0; 143 | } 144 | 145 | .markdown-body img { 146 | border-style: none; 147 | } 148 | 149 | .markdown-body svg:not(:root) { 150 | overflow: hidden; 151 | } 152 | 153 | .markdown-body code, 154 | .markdown-body kbd, 155 | .markdown-body pre { 156 | font-family: monospace, monospace; 157 | font-size: 1em; 158 | } 159 | 160 | .markdown-body hr { 161 | box-sizing: content-box; 162 | height: 0; 163 | overflow: visible; 164 | } 165 | 166 | .markdown-body input { 167 | font: inherit; 168 | margin: 0; 169 | } 170 | 171 | .markdown-body input { 172 | overflow: visible; 173 | } 174 | 175 | .markdown-body [type="checkbox"] { 176 | box-sizing: border-box; 177 | padding: 0; 178 | } 179 | 180 | .markdown-body * { 181 | box-sizing: border-box; 182 | } 183 | 184 | .markdown-body input { 185 | font-family: inherit; 186 | font-size: inherit; 187 | line-height: inherit; 188 | } 189 | 190 | .markdown-body a { 191 | color: #4078c0; 192 | text-decoration: none; 193 | } 194 | 195 | .markdown-body a:hover, 196 | .markdown-body a:active { 197 | text-decoration: underline; 198 | } 199 | 200 | .markdown-body strong { 201 | font-weight: 600; 202 | } 203 | 204 | .markdown-body hr { 205 | height: 0; 206 | margin: 15px 0; 207 | overflow: hidden; 208 | background: transparent; 209 | border: 0; 210 | border-bottom: 1px solid #ddd; 211 | } 212 | 213 | .markdown-body hr::before { 214 | display: table; 215 | content: ""; 216 | } 217 | 218 | .markdown-body hr::after { 219 | display: table; 220 | clear: both; 221 | content: ""; 222 | } 223 | 224 | .markdown-body table { 225 | border-spacing: 0; 226 | border-collapse: collapse; 227 | } 228 | 229 | .markdown-body td, 230 | .markdown-body th { 231 | padding: 0; 232 | } 233 | 234 | .markdown-body h1, 235 | .markdown-body h2, 236 | .markdown-body h3, 237 | .markdown-body h4, 238 | .markdown-body h5, 239 | .markdown-body h6 { 240 | margin-top: 0; 241 | margin-bottom: 0; 242 | } 243 | 244 | .markdown-body h1 { 245 | font-size: 32px; 246 | font-weight: 600; 247 | } 248 | 249 | .markdown-body h2 { 250 | font-size: 24px; 251 | font-weight: 600; 252 | } 253 | 254 | .markdown-body h3 { 255 | font-size: 20px; 256 | font-weight: 600; 257 | } 258 | 259 | .markdown-body h4 { 260 | font-size: 16px; 261 | font-weight: 600; 262 | } 263 | 264 | .markdown-body h5 { 265 | font-size: 14px; 266 | font-weight: 600; 267 | } 268 | 269 | .markdown-body h6 { 270 | font-size: 12px; 271 | font-weight: 600; 272 | } 273 | 274 | .markdown-body p { 275 | margin-top: 0; 276 | margin-bottom: 10px; 277 | } 278 | 279 | .markdown-body blockquote { 280 | margin: 0; 281 | } 282 | 283 | .markdown-body ul, 284 | .markdown-body ol { 285 | padding-left: 0; 286 | margin-top: 0; 287 | margin-bottom: 0; 288 | } 289 | 290 | .markdown-body ol ol, 291 | .markdown-body ul ol { 292 | list-style-type: lower-roman; 293 | } 294 | 295 | .markdown-body ul ul ol, 296 | .markdown-body ul ol ol, 297 | .markdown-body ol ul ol, 298 | .markdown-body ol ol ol { 299 | list-style-type: lower-alpha; 300 | } 301 | 302 | .markdown-body dd { 303 | margin-left: 0; 304 | } 305 | 306 | .markdown-body code { 307 | font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; 308 | font-size: 12px; 309 | } 310 | 311 | .markdown-body pre { 312 | margin-top: 0; 313 | margin-bottom: 0; 314 | font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; 315 | } 316 | 317 | .markdown-body .octicon { 318 | vertical-align: text-bottom; 319 | } 320 | 321 | .markdown-body input { 322 | -webkit-font-feature-settings: "liga" 0; 323 | font-feature-settings: "liga" 0; 324 | } 325 | 326 | .markdown-body::before { 327 | display: table; 328 | content: ""; 329 | } 330 | 331 | .markdown-body::after { 332 | display: table; 333 | clear: both; 334 | content: ""; 335 | } 336 | 337 | .markdown-body>*:first-child { 338 | margin-top: 0 !important; 339 | } 340 | 341 | .markdown-body>*:last-child { 342 | margin-bottom: 0 !important; 343 | } 344 | 345 | .markdown-body a:not([href]) { 346 | color: inherit; 347 | text-decoration: none; 348 | } 349 | 350 | .markdown-body .anchor { 351 | float: left; 352 | padding-right: 4px; 353 | margin-left: -20px; 354 | line-height: 1; 355 | } 356 | 357 | .markdown-body .anchor:focus { 358 | outline: none; 359 | } 360 | 361 | .markdown-body p, 362 | .markdown-body blockquote, 363 | .markdown-body ul, 364 | .markdown-body ol, 365 | .markdown-body dl, 366 | .markdown-body table, 367 | .markdown-body pre { 368 | margin-top: 0; 369 | margin-bottom: 16px; 370 | } 371 | 372 | .markdown-body hr { 373 | height: 0.25em; 374 | padding: 0; 375 | margin: 24px 0; 376 | background-color: #e7e7e7; 377 | border: 0; 378 | } 379 | 380 | .markdown-body blockquote { 381 | padding: 0 1em; 382 | color: #777; 383 | border-left: 0.25em solid #ddd; 384 | } 385 | 386 | .markdown-body blockquote>:first-child { 387 | margin-top: 0; 388 | } 389 | 390 | .markdown-body blockquote>:last-child { 391 | margin-bottom: 0; 392 | } 393 | 394 | .markdown-body kbd { 395 | display: inline-block; 396 | padding: 3px 5px; 397 | font-size: 11px; 398 | line-height: 10px; 399 | color: #555; 400 | vertical-align: middle; 401 | background-color: #fcfcfc; 402 | border: solid 1px #ccc; 403 | border-bottom-color: #bbb; 404 | border-radius: 3px; 405 | box-shadow: inset 0 -1px 0 #bbb; 406 | } 407 | 408 | .markdown-body h1, 409 | .markdown-body h2, 410 | .markdown-body h3, 411 | .markdown-body h4, 412 | .markdown-body h5, 413 | .markdown-body h6 { 414 | margin-top: 24px; 415 | margin-bottom: 16px; 416 | font-weight: 600; 417 | line-height: 1.25; 418 | } 419 | 420 | .markdown-body h1 .octicon-link, 421 | .markdown-body h2 .octicon-link, 422 | .markdown-body h3 .octicon-link, 423 | .markdown-body h4 .octicon-link, 424 | .markdown-body h5 .octicon-link, 425 | .markdown-body h6 .octicon-link { 426 | color: #000; 427 | vertical-align: middle; 428 | visibility: hidden; 429 | } 430 | 431 | .markdown-body h1:hover .anchor, 432 | .markdown-body h2:hover .anchor, 433 | .markdown-body h3:hover .anchor, 434 | .markdown-body h4:hover .anchor, 435 | .markdown-body h5:hover .anchor, 436 | .markdown-body h6:hover .anchor { 437 | text-decoration: none; 438 | } 439 | 440 | .markdown-body h1:hover .anchor .octicon-link, 441 | .markdown-body h2:hover .anchor .octicon-link, 442 | .markdown-body h3:hover .anchor .octicon-link, 443 | .markdown-body h4:hover .anchor .octicon-link, 444 | .markdown-body h5:hover .anchor .octicon-link, 445 | .markdown-body h6:hover .anchor .octicon-link { 446 | visibility: visible; 447 | } 448 | 449 | .markdown-body h1 { 450 | padding-bottom: 0.3em; 451 | font-size: 2em; 452 | border-bottom: 1px solid #eee; 453 | } 454 | 455 | .markdown-body h2 { 456 | padding-bottom: 0.3em; 457 | font-size: 1.5em; 458 | border-bottom: 1px solid #eee; 459 | } 460 | 461 | .markdown-body h3 { 462 | font-size: 1.25em; 463 | } 464 | 465 | .markdown-body h4 { 466 | font-size: 1em; 467 | } 468 | 469 | .markdown-body h5 { 470 | font-size: 0.875em; 471 | } 472 | 473 | .markdown-body h6 { 474 | font-size: 0.85em; 475 | color: #777; 476 | } 477 | 478 | .markdown-body ul, 479 | .markdown-body ol { 480 | padding-left: 2em; 481 | } 482 | 483 | .markdown-body ul ul, 484 | .markdown-body ul ol, 485 | .markdown-body ol ol, 486 | .markdown-body ol ul { 487 | margin-top: 0; 488 | margin-bottom: 0; 489 | } 490 | 491 | .markdown-body li>p { 492 | margin-top: 16px; 493 | } 494 | 495 | .markdown-body li+li { 496 | margin-top: 0.25em; 497 | } 498 | 499 | .markdown-body dl { 500 | padding: 0; 501 | } 502 | 503 | .markdown-body dl dt { 504 | padding: 0; 505 | margin-top: 16px; 506 | font-size: 1em; 507 | font-style: italic; 508 | font-weight: bold; 509 | } 510 | 511 | .markdown-body dl dd { 512 | padding: 0 16px; 513 | margin-bottom: 16px; 514 | } 515 | 516 | .markdown-body table { 517 | display: block; 518 | width: 100%; 519 | overflow: auto; 520 | } 521 | 522 | .markdown-body table th { 523 | font-weight: bold; 524 | } 525 | 526 | .markdown-body table th, 527 | .markdown-body table td { 528 | padding: 6px 13px; 529 | border: 1px solid #ddd; 530 | } 531 | 532 | .markdown-body table tr { 533 | background-color: #fff; 534 | border-top: 1px solid #ccc; 535 | } 536 | 537 | .markdown-body table tr:nth-child(2n) { 538 | background-color: #f8f8f8; 539 | } 540 | 541 | .markdown-body img { 542 | max-width: 100%; 543 | box-sizing: content-box; 544 | background-color: #fff; 545 | } 546 | 547 | .markdown-body code { 548 | padding: 0; 549 | padding-top: 0.2em; 550 | padding-bottom: 0.2em; 551 | margin: 0; 552 | font-size: 85%; 553 | background-color: rgba(0,0,0,0.04); 554 | border-radius: 3px; 555 | } 556 | 557 | .markdown-body code::before, 558 | .markdown-body code::after { 559 | letter-spacing: -0.2em; 560 | content: "\00a0"; 561 | } 562 | 563 | .markdown-body pre { 564 | word-wrap: normal; 565 | } 566 | 567 | .markdown-body pre>code { 568 | padding: 0; 569 | margin: 0; 570 | font-size: 100%; 571 | word-break: normal; 572 | white-space: pre; 573 | background: transparent; 574 | border: 0; 575 | } 576 | 577 | .markdown-body .highlight { 578 | margin-bottom: 16px; 579 | } 580 | 581 | .markdown-body .highlight pre { 582 | margin-bottom: 0; 583 | word-break: normal; 584 | } 585 | 586 | .markdown-body .highlight pre, 587 | .markdown-body pre { 588 | padding: 16px; 589 | overflow: auto; 590 | font-size: 85%; 591 | line-height: 1.45; 592 | background-color: #f7f7f7; 593 | border-radius: 3px; 594 | } 595 | 596 | .markdown-body pre code { 597 | display: inline; 598 | max-width: auto; 599 | padding: 0; 600 | margin: 0; 601 | overflow: visible; 602 | line-height: inherit; 603 | word-wrap: normal; 604 | background-color: transparent; 605 | border: 0; 606 | } 607 | 608 | .markdown-body pre code::before, 609 | .markdown-body pre code::after { 610 | content: normal; 611 | } 612 | 613 | .markdown-body .pl-0 { 614 | padding-left: 0 !important; 615 | } 616 | 617 | .markdown-body .pl-1 { 618 | padding-left: 3px !important; 619 | } 620 | 621 | .markdown-body .pl-2 { 622 | padding-left: 6px !important; 623 | } 624 | 625 | .markdown-body .pl-3 { 626 | padding-left: 12px !important; 627 | } 628 | 629 | .markdown-body .pl-4 { 630 | padding-left: 24px !important; 631 | } 632 | 633 | .markdown-body .pl-5 { 634 | padding-left: 36px !important; 635 | } 636 | 637 | .markdown-body .pl-6 { 638 | padding-left: 48px !important; 639 | } 640 | 641 | .markdown-body .full-commit .btn-outline:not(:disabled):hover { 642 | color: #4078c0; 643 | border: 1px solid #4078c0; 644 | } 645 | 646 | .markdown-body kbd { 647 | display: inline-block; 648 | padding: 3px 5px; 649 | font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; 650 | line-height: 10px; 651 | color: #555; 652 | vertical-align: middle; 653 | background-color: #fcfcfc; 654 | border: solid 1px #ccc; 655 | border-bottom-color: #bbb; 656 | border-radius: 3px; 657 | box-shadow: inset 0 -1px 0 #bbb; 658 | } 659 | 660 | .markdown-body :checked+.radio-label { 661 | position: relative; 662 | z-index: 1; 663 | border-color: #4078c0; 664 | } 665 | 666 | .markdown-body .task-list-item { 667 | list-style-type: none; 668 | } 669 | 670 | .markdown-body .task-list-item+.task-list-item { 671 | margin-top: 3px; 672 | } 673 | 674 | .markdown-body .task-list-item input { 675 | margin: 0 0.2em 0.25em -1.6em; 676 | vertical-align: middle; 677 | } 678 | 679 | .markdown-body hr { 680 | border-bottom-color: #eee; 681 | } -------------------------------------------------------------------------------- /dist/static/css/reset.scss: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ 2 | 3 | /** 4 | * 1. Set default font family to sans-serif. 5 | * 2. Prevent iOS and IE text size adjust after device orientation change, 6 | * without disabling user zoom. 7 | */ 8 | 9 | *{ 10 | margin: 0; 11 | padding: 0; 12 | border: 0px; 13 | } 14 | 15 | html { 16 | font-family: sans-serif; /* 1 */ 17 | -ms-text-size-adjust: 100%; /* 2 */ 18 | -webkit-text-size-adjust: 100%; /* 2 */ 19 | height: 100%; 20 | } 21 | 22 | /** 23 | * Remove default margin. 24 | */ 25 | 26 | body { 27 | margin: 0; 28 | height: 100%; 29 | 30 | } 31 | 32 | /* HTML5 display definitions 33 | ========================================================================== */ 34 | 35 | /** 36 | * Correct `block` display not defined for any HTML5 element in IE 8/9. 37 | * Correct `block` display not defined for `details` or `summary` in IE 10/11 38 | * and Firefox. 39 | * Correct `block` display not defined for `main` in IE 11. 40 | */ 41 | 42 | article, 43 | aside, 44 | details, 45 | figcaption, 46 | figure, 47 | footer, 48 | header, 49 | main, 50 | menu, 51 | nav, 52 | section, 53 | summary { 54 | display: block; 55 | } 56 | 57 | /** 58 | * 1. Correct `inline-block` display not defined in IE 8/9. 59 | * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. 60 | */ 61 | 62 | audio, 63 | canvas, 64 | progress, 65 | video { 66 | display: inline-block; /* 1 */ 67 | vertical-align: baseline; /* 2 */ 68 | } 69 | 70 | /** 71 | * Prevent modern browsers from displaying `audio` without controls. 72 | * Remove excess height in iOS 5 devices. 73 | */ 74 | 75 | audio:not([controls]) { 76 | display: none; 77 | height: 0; 78 | } 79 | 80 | /** 81 | * Address `[hidden]` styling not present in IE 8/9/10. 82 | * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. 83 | */ 84 | 85 | [hidden], 86 | template { 87 | display: none; 88 | } 89 | 90 | /* Links 91 | ========================================================================== */ 92 | 93 | /** 94 | * Remove the gray background color from active links in IE 10. 95 | */ 96 | 97 | a { 98 | background-color: transparent; 99 | } 100 | 101 | /** 102 | * Improve readability of focused elements when they are also in an 103 | * active/hover state. 104 | */ 105 | 106 | a:active, 107 | a:hover { 108 | outline: 0; 109 | } 110 | 111 | /* Text-level semantics 112 | ========================================================================== */ 113 | 114 | /** 115 | * Address styling not present in IE 8/9/10/11, Safari, and Chrome. 116 | */ 117 | 118 | abbr[title] { 119 | border-bottom: 1px dotted; 120 | } 121 | 122 | /** 123 | * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. 124 | */ 125 | 126 | b, 127 | strong { 128 | font-weight: bold; 129 | } 130 | 131 | /** 132 | * Address styling not present in Safari and Chrome. 133 | */ 134 | 135 | dfn { 136 | font-style: italic; 137 | } 138 | 139 | /** 140 | * Address variable `h1` font-size and margin within `section` and `article` 141 | * contexts in Firefox 4+, Safari, and Chrome. 142 | */ 143 | 144 | h1 { 145 | font-size: 2em; 146 | margin: 0.67em 0; 147 | } 148 | 149 | /** 150 | * Address styling not present in IE 8/9. 151 | */ 152 | 153 | mark { 154 | background: #ff0; 155 | color: #000; 156 | } 157 | 158 | /** 159 | * Address inconsistent and variable font size in all browsers. 160 | */ 161 | 162 | small { 163 | font-size: 80%; 164 | } 165 | 166 | /** 167 | * Prevent `sub` and `sup` affecting `line-height` in all browsers. 168 | */ 169 | 170 | sub, 171 | sup { 172 | font-size: 75%; 173 | line-height: 0; 174 | position: relative; 175 | vertical-align: baseline; 176 | } 177 | 178 | sup { 179 | top: -0.5em; 180 | } 181 | 182 | sub { 183 | bottom: -0.25em; 184 | } 185 | 186 | /* Embedded content 187 | ========================================================================== */ 188 | 189 | /** 190 | * Remove border when inside `a` element in IE 8/9/10. 191 | */ 192 | 193 | img { 194 | border: 0; 195 | } 196 | 197 | /** 198 | * Correct overflow not hidden in IE 9/10/11. 199 | */ 200 | 201 | svg:not(:root) { 202 | overflow: hidden; 203 | } 204 | 205 | /* Grouping content 206 | ========================================================================== */ 207 | 208 | /** 209 | * Address margin not present in IE 8/9 and Safari. 210 | */ 211 | 212 | figure { 213 | margin: 1em 40px; 214 | } 215 | 216 | /** 217 | * Address differences between Firefox and other browsers. 218 | */ 219 | 220 | hr { 221 | box-sizing: content-box; 222 | height: 0; 223 | } 224 | 225 | /** 226 | * Contain overflow in all browsers. 227 | */ 228 | 229 | pre { 230 | overflow: auto; 231 | } 232 | 233 | /** 234 | * Address odd `em`-unit font size rendering in all browsers. 235 | */ 236 | 237 | code, 238 | kbd, 239 | pre, 240 | samp { 241 | font-family: monospace, monospace; 242 | font-size: 1em; 243 | } 244 | 245 | /* Forms 246 | ========================================================================== */ 247 | 248 | /** 249 | * Known limitation: by default, Chrome and Safari on OS X allow very limited 250 | * styling of `select`, unless a `border` property is set. 251 | */ 252 | 253 | /** 254 | * 1. Correct color not being inherited. 255 | * Known issue: affects color of disabled elements. 256 | * 2. Correct font properties not being inherited. 257 | * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. 258 | */ 259 | 260 | button, 261 | input, 262 | optgroup, 263 | select, 264 | textarea { 265 | color: inherit; /* 1 */ 266 | font: inherit; /* 2 */ 267 | margin: 0; /* 3 */ 268 | } 269 | 270 | /** 271 | * Address `overflow` set to `hidden` in IE 8/9/10/11. 272 | */ 273 | 274 | button { 275 | overflow: visible; 276 | } 277 | 278 | /** 279 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 280 | * All other form control elements do not inherit `text-transform` values. 281 | * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. 282 | * Correct `select` style inheritance in Firefox. 283 | */ 284 | 285 | button, 286 | select { 287 | text-transform: none; 288 | } 289 | 290 | /** 291 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 292 | * and `video` controls. 293 | * 2. Correct inability to style clickable `input` types in iOS. 294 | * 3. Improve usability and consistency of cursor style between image-type 295 | * `input` and others. 296 | */ 297 | 298 | button, 299 | html input[type="button"], /* 1 */ 300 | input[type="reset"], 301 | input[type="submit"] { 302 | -webkit-appearance: button; /* 2 */ 303 | cursor: pointer; /* 3 */ 304 | } 305 | 306 | /** 307 | * Re-set default cursor for disabled elements. 308 | */ 309 | 310 | button[disabled], 311 | html input[disabled] { 312 | cursor: default; 313 | } 314 | 315 | /** 316 | * Remove inner padding and border in Firefox 4+. 317 | */ 318 | 319 | button::-moz-focus-inner, 320 | input::-moz-focus-inner { 321 | border: 0; 322 | padding: 0; 323 | } 324 | 325 | /** 326 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in 327 | * the UA stylesheet. 328 | */ 329 | 330 | input { 331 | line-height: normal; 332 | } 333 | 334 | /** 335 | * It's recommended that you don't attempt to style these elements. 336 | * Firefox's implementation doesn't respect box-sizing, padding, or width. 337 | * 338 | * 1. Address box sizing set to `content-box` in IE 8/9/10. 339 | * 2. Remove excess padding in IE 8/9/10. 340 | */ 341 | 342 | input[type="checkbox"], 343 | input[type="radio"] { 344 | box-sizing: border-box; /* 1 */ 345 | padding: 0; /* 2 */ 346 | } 347 | 348 | /** 349 | * Fix the cursor style for Chrome's increment/decrement buttons. For certain 350 | * `font-size` values of the `input`, it causes the cursor style of the 351 | * decrement button to change from `default` to `text`. 352 | */ 353 | 354 | input[type="number"]::-webkit-inner-spin-button, 355 | input[type="number"]::-webkit-outer-spin-button { 356 | height: auto; 357 | } 358 | 359 | /** 360 | * 1. Address `appearance` set to `searchfield` in Safari and Chrome. 361 | * 2. Address `box-sizing` set to `border-box` in Safari and Chrome. 362 | */ 363 | 364 | input[type="search"] { 365 | -webkit-appearance: textfield; /* 1 */ 366 | box-sizing: content-box; /* 2 */ 367 | } 368 | 369 | /** 370 | * Remove inner padding and search cancel button in Safari and Chrome on OS X. 371 | * Safari (but not Chrome) clips the cancel button when the search input has 372 | * padding (and `textfield` appearance). 373 | */ 374 | 375 | input[type="search"]::-webkit-search-cancel-button, 376 | input[type="search"]::-webkit-search-decoration { 377 | -webkit-appearance: none; 378 | } 379 | 380 | /** 381 | * Define consistent border, margin, and padding. 382 | */ 383 | 384 | fieldset { 385 | border: 1px solid #c0c0c0; 386 | margin: 0 2px; 387 | padding: 0.35em 0.625em 0.75em; 388 | } 389 | 390 | /** 391 | * 1. Correct `color` not being inherited in IE 8/9/10/11. 392 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 393 | */ 394 | 395 | legend { 396 | border: 0; /* 1 */ 397 | padding: 0; /* 2 */ 398 | } 399 | 400 | /** 401 | * Remove default vertical scrollbar in IE 8/9/10/11. 402 | */ 403 | 404 | textarea { 405 | overflow: auto; 406 | } 407 | 408 | /** 409 | * Don't inherit the `font-weight` (applied by a rule above). 410 | * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. 411 | */ 412 | 413 | optgroup { 414 | font-weight: bold; 415 | } 416 | 417 | /* Tables 418 | ========================================================================== */ 419 | 420 | /** 421 | * Remove most spacing between table cells. 422 | */ 423 | 424 | table { 425 | border-collapse: collapse; 426 | border-spacing: 0; 427 | } 428 | 429 | td, 430 | th { 431 | padding: 0; 432 | } 433 | .clearfix { 434 | overflow: hidden; 435 | _zoom: 1; 436 | } -------------------------------------------------------------------------------- /dist/static/js/manifest.b26844df2548cfeeb839.js: -------------------------------------------------------------------------------- 1 | !function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var n=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var i,u,f,s=0,l=[];s textLength) { 67 | startPos = textLength; 68 | } 69 | if (endPos > textLength) { 70 | endPos = textLength; 71 | } 72 | if (startPos < 0) { 73 | startPos = textLength + startPos; 74 | } 75 | if (endPos < 0) { 76 | endPos = textLength + endPos; 77 | } 78 | if (textDom.createTextRange) { 79 | // IE Support 80 | var range = textDom.createTextRange(); 81 | range.moveStart("character", -textLength); 82 | range.moveEnd("character", -textLength); 83 | range.moveStart("character", startPos); 84 | range.moveEnd("character", endPos); 85 | range.select(); 86 | } else { 87 | // Firefox support 88 | textDom.setSelectionRange(startPos, endPos); 89 | textDom.focus(); 90 | } 91 | } 92 | } 93 | 94 | /** 95 | * 在光标后插入文本 96 | * 参数: 97 | * textDom [JavaScript DOM String] 当前对象 98 | * value [String] 要插入的文本 99 | */ 100 | function insertAfterText(textDom, value) { 101 | var selectRange; 102 | if (document.selection) { 103 | // IE Support 104 | textDom.focus(); 105 | selectRange = document.selection.createRange(); 106 | selectRange.text = value; 107 | textDom.focus(); 108 | } else if (textDom.selectionStart || textDom.selectionStart == '0') { 109 | // Firefox support 110 | var startPos = textDom.selectionStart; 111 | var endPos = textDom.selectionEnd; 112 | var scrollTop = textDom.scrollTop; 113 | textDom.value = textDom.value.substring(0, startPos) + value + textDom.value.substring(endPos, textDom.value.length); 114 | textDom.focus(); 115 | textDom.selectionStart = startPos + value.length; 116 | textDom.selectionEnd = startPos + value.length; 117 | textDom.scrollTop = scrollTop; 118 | } else { 119 | textDom.value += value; 120 | textDom.focus(); 121 | } 122 | } 123 | 124 | module.exports = { 125 | getCursortPosition, 126 | setCaretPosition, 127 | getSelectText, 128 | setSelectText, 129 | insertAfterText 130 | }; -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | vue-mdeditor 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /docs/static/css/app.b8a96cfdfc41fc31b20c241864d5cf56.css: -------------------------------------------------------------------------------- 1 | #app,body,html{height:100%;width:100%}.show[data-v-b74131ec]{position:absolute;left:0;top:0}.indexContainer[data-v-b74131ec]{width:100%;height:100%;background:#ddd;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.btnsContainer[data-v-b74131ec],.indexContainer[data-v-b74131ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.btnsContainer[data-v-b74131ec]{position:absolute;z-index:10;left:65px;top:5px;height:25px;min-width:300px;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btnsContainer .btn[data-v-b74131ec]{display:inline-block;border:1px solid #ccc;margin-right:10px;box-sizing:border-box;padding:0 10px;background:#fff;font-size:12px;height:25px;line-height:25px;cursor:pointer;moz-user-select:-moz-none;-moz-user-select:none;-o-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.btnsContainer .btn[data-v-b74131ec]:active{opacity:.8;background:#add8e6}.maskContainer[data-v-b74131ec]{position:absolute;left:0;top:0;height:100%;width:100%;height:100vh;width:100vw;background:rgba(0,0,0,.5);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.maskContainer .contentContainer[data-v-b74131ec]{width:60%;height:60%;background:#fefefe;padding:20px;box-sizing:border-box;position:relative}.maskContainer .contentContainer .showAreaContainer[data-v-b74131ec]{height:100%;width:100%;outline:none;background:#eee;display:block;resize:none;padding:10px;box-sizing:border-box}.maskContainer .contentContainer .closeBtnContainer[data-v-b74131ec]{position:absolute;height:30px;width:30px;right:-40px;top:-40px;border:1px solid #fff;border-radius:50%}.maskContainer .contentContainer .closeBtnContainer[data-v-b74131ec]:before{content:"";position:absolute;width:70%;height:2px;display:bblock;background:#fff;left:15%;top:calc(50% - 1px);transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg)}.maskContainer .contentContainer .closeBtnContainer[data-v-b74131ec]:after{content:"";position:absolute;width:70%;height:2px;display:bblock;background:#fff;left:15%;top:calc(50% - 1px);transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg)}.editorContainer[data-v-b74131ec]{width:90%;height:90%;border:1px solid #ddd}@font-face{font-family:octicons-link;src:url(data:font/woff;charset=utf-8;base64,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) format("woff")}.markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#333;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body .pl-c{color:#969896}.markdown-body .pl-c1,.markdown-body .pl-s .pl-v{color:#0086b3}.markdown-body .pl-e,.markdown-body .pl-en{color:#795da3}.markdown-body .pl-s .pl-s1,.markdown-body .pl-smi{color:#333}.markdown-body .pl-ent{color:#63a35c}.markdown-body .pl-k{color:#a71d5d}.markdown-body .pl-pds,.markdown-body .pl-s,.markdown-body .pl-s .pl-pse .pl-s1,.markdown-body .pl-sr,.markdown-body .pl-sr .pl-cce,.markdown-body .pl-sr .pl-sra,.markdown-body .pl-sr .pl-sre{color:#183691}.markdown-body .pl-v{color:#ed6a43}.markdown-body .pl-id{color:#b52a1d}.markdown-body .pl-ii{color:#f8f8f8;background-color:#b52a1d}.markdown-body .pl-sr .pl-cce{font-weight:700;color:#63a35c}.markdown-body .pl-ml{color:#693a17}.markdown-body .pl-mh,.markdown-body .pl-mh .pl-en,.markdown-body .pl-ms{font-weight:700;color:#1d3e81}.markdown-body .pl-mq{color:teal}.markdown-body .pl-mi{font-style:italic;color:#333}.markdown-body .pl-mb{font-weight:700;color:#333}.markdown-body .pl-md{color:#bd2c00;background-color:#ffecec}.markdown-body .pl-mi1{color:#55a532;background-color:#eaffea}.markdown-body .pl-mdr{font-weight:700;color:#795da3}.markdown-body .pl-mo{color:#1d3e81}.markdown-body .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.markdown-body a{background-color:transparent;-webkit-text-decoration-skip:objects}.markdown-body a:active,.markdown-body a:hover{outline-width:0}.markdown-body strong{font-weight:inherit;font-weight:bolder}.markdown-body h1{margin:.67em 0}.markdown-body img{border-style:none}.markdown-body svg:not(:root){overflow:hidden}.markdown-body code,.markdown-body kbd,.markdown-body pre{font-family:monospace,monospace;font-size:1em}.markdown-body hr{box-sizing:content-box;overflow:visible}.markdown-body input{font:inherit;margin:0;overflow:visible}.markdown-body [type=checkbox]{box-sizing:border-box;padding:0}.markdown-body *{box-sizing:border-box}.markdown-body input{font-family:inherit;font-size:inherit;line-height:inherit}.markdown-body a{color:#4078c0;text-decoration:none}.markdown-body a:active,.markdown-body a:hover{text-decoration:underline}.markdown-body strong{font-weight:600}.markdown-body hr{height:0;margin:15px 0;overflow:hidden;background:transparent;border-bottom:1px solid #ddd}.markdown-body hr:after,.markdown-body hr:before{display:table;content:""}.markdown-body hr:after{clear:both}.markdown-body table{border-spacing:0;border-collapse:collapse}.markdown-body td,.markdown-body th{padding:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:0;margin-bottom:0}.markdown-body h1{font-size:32px;font-weight:600}.markdown-body h2{font-size:24px;font-weight:600}.markdown-body h3{font-size:20px;font-weight:600}.markdown-body h4{font-size:16px;font-weight:600}.markdown-body h5{font-size:14px;font-weight:600}.markdown-body h6{font-size:12px;font-weight:600}.markdown-body p{margin-top:0;margin-bottom:10px}.markdown-body blockquote{margin:0}.markdown-body ol,.markdown-body ul{padding-left:0;margin-top:0;margin-bottom:0}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ol ol,.markdown-body ol ul ol,.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body dd{margin-left:0}.markdown-body code{font-family:Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:12px}.markdown-body pre{margin-top:0;margin-bottom:0;font:12px Consolas,Liberation Mono,Menlo,Courier,monospace}.markdown-body .octicon{vertical-align:text-bottom}.markdown-body input{-webkit-font-feature-settings:"liga" 0;font-feature-settings:"liga" 0}.markdown-body:after,.markdown-body:before{display:table;content:""}.markdown-body:after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:none}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e7e7e7;border:0}.markdown-body blockquote{padding:0 1em;color:#777;border-left:.25em solid #ddd}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{font-size:11px}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1{font-size:2em}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body code{padding:0;padding-top:.2em;padding-bottom:.2em;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before{letter-spacing:-.2em;content:"\A0"}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code:after,.markdown-body pre code:before{content:normal}.markdown-body .pl-0{padding-left:0!important}.markdown-body .pl-1{padding-left:3px!important}.markdown-body .pl-2{padding-left:6px!important}.markdown-body .pl-3{padding-left:12px!important}.markdown-body .pl-4{padding-left:24px!important}.markdown-body .pl-5{padding-left:36px!important}.markdown-body .pl-6{padding-left:48px!important}.markdown-body .full-commit .btn-outline:not(:disabled):hover{color:#4078c0;border:1px solid #4078c0}.markdown-body kbd{display:inline-block;padding:3px 5px;font:11px Consolas,Liberation Mono,Menlo,Courier,monospace;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.markdown-body :checked+.radio-label{position:relative;z-index:1;border-color:#4078c0}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.markdown-body hr{border-bottom-color:#eee}.hljs{display:block;overflow-x:auto;padding:.5em;color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-built_in,.hljs-class .hljs-title{color:#e6c07b}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} 2 | /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */*{margin:0;padding:0;border:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body,html{height:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.clearfix{overflow:hidden;_zoom:1}.mdContainer{width:100%;height:100%;background:#add8e6}.mdContainer.fullPage{position:fixed;z-index:1000;left:0;top:0}.mdContainer .navContainer{width:100%;height:36px;background:#fff;box-sizing:border-box;border-bottom:1px solid #eee;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 10px}.mdContainer .navContainer .nameContainer{color:#add8e6;margin-right:10px;cursor:pointer}.mdContainer .navContainer .markContainer{width:auto;height:100%;margin-left:0}.mdContainer .navContainer .markContainer ul.markListGroup{height:100%;width:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.mdContainer .navContainer .markContainer ul.markListGroup li.markListItem{list-style:none;width:20px;height:20px;margin:0 2px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;font-size:12px;color:#333}.mdContainer .navContainer .markContainer ul.markListGroup li.markListItem:hover{background:#eee}.mdContainer .mdBodyContainer{width:100%;height:calc(100% - 36px);background:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;box-sizing:border-box}.mdContainer .mdBodyContainer.noMenu{height:100%}.editContainer{height:100%;width:100%;box-sizing:border-box;border-right:1px solid #ddd;background:#333;color:#fff;padding:10px}.editContainer .mdEditor{height:100%;width:100%;background:transparent;outline:none;color:#fff;resize:none}.previewContainer{width:100%;height:100%;box-sizing:border-box;background:#fff;overflow:auto;padding:10px} -------------------------------------------------------------------------------- /docs/static/css/atom-one-dark.min.css: -------------------------------------------------------------------------------- 1 | .hljs{display:block;overflow-x:auto;padding:0.5em;color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-keyword,.hljs-formula{color:#c678dd}.hljs-section,.hljs-name,.hljs-selector-tag,.hljs-deletion,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-attribute,.hljs-meta-string{color:#98c379}.hljs-built_in,.hljs-class .hljs-title{color:#e6c07b}.hljs-attr,.hljs-variable,.hljs-template-variable,.hljs-type,.hljs-selector-class,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-number{color:#d19a66}.hljs-symbol,.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-title{color:#61aeee}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.hljs-link{text-decoration:underline} -------------------------------------------------------------------------------- /docs/static/css/github-markdown.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: octicons-link; 3 | src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); 4 | } 5 | 6 | .markdown-body { 7 | -ms-text-size-adjust: 100%; 8 | -webkit-text-size-adjust: 100%; 9 | line-height: 1.5; 10 | color: #333; 11 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; 12 | font-size: 16px; 13 | line-height: 1.5; 14 | word-wrap: break-word; 15 | } 16 | 17 | .markdown-body .pl-c { 18 | color: #969896; 19 | } 20 | 21 | .markdown-body .pl-c1, 22 | .markdown-body .pl-s .pl-v { 23 | color: #0086b3; 24 | } 25 | 26 | .markdown-body .pl-e, 27 | .markdown-body .pl-en { 28 | color: #795da3; 29 | } 30 | 31 | .markdown-body .pl-smi, 32 | .markdown-body .pl-s .pl-s1 { 33 | color: #333; 34 | } 35 | 36 | .markdown-body .pl-ent { 37 | color: #63a35c; 38 | } 39 | 40 | .markdown-body .pl-k { 41 | color: #a71d5d; 42 | } 43 | 44 | .markdown-body .pl-s, 45 | .markdown-body .pl-pds, 46 | .markdown-body .pl-s .pl-pse .pl-s1, 47 | .markdown-body .pl-sr, 48 | .markdown-body .pl-sr .pl-cce, 49 | .markdown-body .pl-sr .pl-sre, 50 | .markdown-body .pl-sr .pl-sra { 51 | color: #183691; 52 | } 53 | 54 | .markdown-body .pl-v { 55 | color: #ed6a43; 56 | } 57 | 58 | .markdown-body .pl-id { 59 | color: #b52a1d; 60 | } 61 | 62 | .markdown-body .pl-ii { 63 | color: #f8f8f8; 64 | background-color: #b52a1d; 65 | } 66 | 67 | .markdown-body .pl-sr .pl-cce { 68 | font-weight: bold; 69 | color: #63a35c; 70 | } 71 | 72 | .markdown-body .pl-ml { 73 | color: #693a17; 74 | } 75 | 76 | .markdown-body .pl-mh, 77 | .markdown-body .pl-mh .pl-en, 78 | .markdown-body .pl-ms { 79 | font-weight: bold; 80 | color: #1d3e81; 81 | } 82 | 83 | .markdown-body .pl-mq { 84 | color: #008080; 85 | } 86 | 87 | .markdown-body .pl-mi { 88 | font-style: italic; 89 | color: #333; 90 | } 91 | 92 | .markdown-body .pl-mb { 93 | font-weight: bold; 94 | color: #333; 95 | } 96 | 97 | .markdown-body .pl-md { 98 | color: #bd2c00; 99 | background-color: #ffecec; 100 | } 101 | 102 | .markdown-body .pl-mi1 { 103 | color: #55a532; 104 | background-color: #eaffea; 105 | } 106 | 107 | .markdown-body .pl-mdr { 108 | font-weight: bold; 109 | color: #795da3; 110 | } 111 | 112 | .markdown-body .pl-mo { 113 | color: #1d3e81; 114 | } 115 | 116 | .markdown-body .octicon { 117 | display: inline-block; 118 | vertical-align: text-top; 119 | fill: currentColor; 120 | } 121 | 122 | .markdown-body a { 123 | background-color: transparent; 124 | -webkit-text-decoration-skip: objects; 125 | } 126 | 127 | .markdown-body a:active, 128 | .markdown-body a:hover { 129 | outline-width: 0; 130 | } 131 | 132 | .markdown-body strong { 133 | font-weight: inherit; 134 | } 135 | 136 | .markdown-body strong { 137 | font-weight: bolder; 138 | } 139 | 140 | .markdown-body h1 { 141 | font-size: 2em; 142 | margin: 0.67em 0; 143 | } 144 | 145 | .markdown-body img { 146 | border-style: none; 147 | } 148 | 149 | .markdown-body svg:not(:root) { 150 | overflow: hidden; 151 | } 152 | 153 | .markdown-body code, 154 | .markdown-body kbd, 155 | .markdown-body pre { 156 | font-family: monospace, monospace; 157 | font-size: 1em; 158 | } 159 | 160 | .markdown-body hr { 161 | box-sizing: content-box; 162 | height: 0; 163 | overflow: visible; 164 | } 165 | 166 | .markdown-body input { 167 | font: inherit; 168 | margin: 0; 169 | } 170 | 171 | .markdown-body input { 172 | overflow: visible; 173 | } 174 | 175 | .markdown-body [type="checkbox"] { 176 | box-sizing: border-box; 177 | padding: 0; 178 | } 179 | 180 | .markdown-body * { 181 | box-sizing: border-box; 182 | } 183 | 184 | .markdown-body input { 185 | font-family: inherit; 186 | font-size: inherit; 187 | line-height: inherit; 188 | } 189 | 190 | .markdown-body a { 191 | color: #4078c0; 192 | text-decoration: none; 193 | } 194 | 195 | .markdown-body a:hover, 196 | .markdown-body a:active { 197 | text-decoration: underline; 198 | } 199 | 200 | .markdown-body strong { 201 | font-weight: 600; 202 | } 203 | 204 | .markdown-body hr { 205 | height: 0; 206 | margin: 15px 0; 207 | overflow: hidden; 208 | background: transparent; 209 | border: 0; 210 | border-bottom: 1px solid #ddd; 211 | } 212 | 213 | .markdown-body hr::before { 214 | display: table; 215 | content: ""; 216 | } 217 | 218 | .markdown-body hr::after { 219 | display: table; 220 | clear: both; 221 | content: ""; 222 | } 223 | 224 | .markdown-body table { 225 | border-spacing: 0; 226 | border-collapse: collapse; 227 | } 228 | 229 | .markdown-body td, 230 | .markdown-body th { 231 | padding: 0; 232 | } 233 | 234 | .markdown-body h1, 235 | .markdown-body h2, 236 | .markdown-body h3, 237 | .markdown-body h4, 238 | .markdown-body h5, 239 | .markdown-body h6 { 240 | margin-top: 0; 241 | margin-bottom: 0; 242 | } 243 | 244 | .markdown-body h1 { 245 | font-size: 32px; 246 | font-weight: 600; 247 | } 248 | 249 | .markdown-body h2 { 250 | font-size: 24px; 251 | font-weight: 600; 252 | } 253 | 254 | .markdown-body h3 { 255 | font-size: 20px; 256 | font-weight: 600; 257 | } 258 | 259 | .markdown-body h4 { 260 | font-size: 16px; 261 | font-weight: 600; 262 | } 263 | 264 | .markdown-body h5 { 265 | font-size: 14px; 266 | font-weight: 600; 267 | } 268 | 269 | .markdown-body h6 { 270 | font-size: 12px; 271 | font-weight: 600; 272 | } 273 | 274 | .markdown-body p { 275 | margin-top: 0; 276 | margin-bottom: 10px; 277 | } 278 | 279 | .markdown-body blockquote { 280 | margin: 0; 281 | } 282 | 283 | .markdown-body ul, 284 | .markdown-body ol { 285 | padding-left: 0; 286 | margin-top: 0; 287 | margin-bottom: 0; 288 | } 289 | 290 | .markdown-body ol ol, 291 | .markdown-body ul ol { 292 | list-style-type: lower-roman; 293 | } 294 | 295 | .markdown-body ul ul ol, 296 | .markdown-body ul ol ol, 297 | .markdown-body ol ul ol, 298 | .markdown-body ol ol ol { 299 | list-style-type: lower-alpha; 300 | } 301 | 302 | .markdown-body dd { 303 | margin-left: 0; 304 | } 305 | 306 | .markdown-body code { 307 | font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; 308 | font-size: 12px; 309 | } 310 | 311 | .markdown-body pre { 312 | margin-top: 0; 313 | margin-bottom: 0; 314 | font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; 315 | } 316 | 317 | .markdown-body .octicon { 318 | vertical-align: text-bottom; 319 | } 320 | 321 | .markdown-body input { 322 | -webkit-font-feature-settings: "liga" 0; 323 | font-feature-settings: "liga" 0; 324 | } 325 | 326 | .markdown-body::before { 327 | display: table; 328 | content: ""; 329 | } 330 | 331 | .markdown-body::after { 332 | display: table; 333 | clear: both; 334 | content: ""; 335 | } 336 | 337 | .markdown-body>*:first-child { 338 | margin-top: 0 !important; 339 | } 340 | 341 | .markdown-body>*:last-child { 342 | margin-bottom: 0 !important; 343 | } 344 | 345 | .markdown-body a:not([href]) { 346 | color: inherit; 347 | text-decoration: none; 348 | } 349 | 350 | .markdown-body .anchor { 351 | float: left; 352 | padding-right: 4px; 353 | margin-left: -20px; 354 | line-height: 1; 355 | } 356 | 357 | .markdown-body .anchor:focus { 358 | outline: none; 359 | } 360 | 361 | .markdown-body p, 362 | .markdown-body blockquote, 363 | .markdown-body ul, 364 | .markdown-body ol, 365 | .markdown-body dl, 366 | .markdown-body table, 367 | .markdown-body pre { 368 | margin-top: 0; 369 | margin-bottom: 16px; 370 | } 371 | 372 | .markdown-body hr { 373 | height: 0.25em; 374 | padding: 0; 375 | margin: 24px 0; 376 | background-color: #e7e7e7; 377 | border: 0; 378 | } 379 | 380 | .markdown-body blockquote { 381 | padding: 0 1em; 382 | color: #777; 383 | border-left: 0.25em solid #ddd; 384 | } 385 | 386 | .markdown-body blockquote>:first-child { 387 | margin-top: 0; 388 | } 389 | 390 | .markdown-body blockquote>:last-child { 391 | margin-bottom: 0; 392 | } 393 | 394 | .markdown-body kbd { 395 | display: inline-block; 396 | padding: 3px 5px; 397 | font-size: 11px; 398 | line-height: 10px; 399 | color: #555; 400 | vertical-align: middle; 401 | background-color: #fcfcfc; 402 | border: solid 1px #ccc; 403 | border-bottom-color: #bbb; 404 | border-radius: 3px; 405 | box-shadow: inset 0 -1px 0 #bbb; 406 | } 407 | 408 | .markdown-body h1, 409 | .markdown-body h2, 410 | .markdown-body h3, 411 | .markdown-body h4, 412 | .markdown-body h5, 413 | .markdown-body h6 { 414 | margin-top: 24px; 415 | margin-bottom: 16px; 416 | font-weight: 600; 417 | line-height: 1.25; 418 | } 419 | 420 | .markdown-body h1 .octicon-link, 421 | .markdown-body h2 .octicon-link, 422 | .markdown-body h3 .octicon-link, 423 | .markdown-body h4 .octicon-link, 424 | .markdown-body h5 .octicon-link, 425 | .markdown-body h6 .octicon-link { 426 | color: #000; 427 | vertical-align: middle; 428 | visibility: hidden; 429 | } 430 | 431 | .markdown-body h1:hover .anchor, 432 | .markdown-body h2:hover .anchor, 433 | .markdown-body h3:hover .anchor, 434 | .markdown-body h4:hover .anchor, 435 | .markdown-body h5:hover .anchor, 436 | .markdown-body h6:hover .anchor { 437 | text-decoration: none; 438 | } 439 | 440 | .markdown-body h1:hover .anchor .octicon-link, 441 | .markdown-body h2:hover .anchor .octicon-link, 442 | .markdown-body h3:hover .anchor .octicon-link, 443 | .markdown-body h4:hover .anchor .octicon-link, 444 | .markdown-body h5:hover .anchor .octicon-link, 445 | .markdown-body h6:hover .anchor .octicon-link { 446 | visibility: visible; 447 | } 448 | 449 | .markdown-body h1 { 450 | padding-bottom: 0.3em; 451 | font-size: 2em; 452 | border-bottom: 1px solid #eee; 453 | } 454 | 455 | .markdown-body h2 { 456 | padding-bottom: 0.3em; 457 | font-size: 1.5em; 458 | border-bottom: 1px solid #eee; 459 | } 460 | 461 | .markdown-body h3 { 462 | font-size: 1.25em; 463 | } 464 | 465 | .markdown-body h4 { 466 | font-size: 1em; 467 | } 468 | 469 | .markdown-body h5 { 470 | font-size: 0.875em; 471 | } 472 | 473 | .markdown-body h6 { 474 | font-size: 0.85em; 475 | color: #777; 476 | } 477 | 478 | .markdown-body ul, 479 | .markdown-body ol { 480 | padding-left: 2em; 481 | } 482 | 483 | .markdown-body ul ul, 484 | .markdown-body ul ol, 485 | .markdown-body ol ol, 486 | .markdown-body ol ul { 487 | margin-top: 0; 488 | margin-bottom: 0; 489 | } 490 | 491 | .markdown-body li>p { 492 | margin-top: 16px; 493 | } 494 | 495 | .markdown-body li+li { 496 | margin-top: 0.25em; 497 | } 498 | 499 | .markdown-body dl { 500 | padding: 0; 501 | } 502 | 503 | .markdown-body dl dt { 504 | padding: 0; 505 | margin-top: 16px; 506 | font-size: 1em; 507 | font-style: italic; 508 | font-weight: bold; 509 | } 510 | 511 | .markdown-body dl dd { 512 | padding: 0 16px; 513 | margin-bottom: 16px; 514 | } 515 | 516 | .markdown-body table { 517 | display: block; 518 | width: 100%; 519 | overflow: auto; 520 | } 521 | 522 | .markdown-body table th { 523 | font-weight: bold; 524 | } 525 | 526 | .markdown-body table th, 527 | .markdown-body table td { 528 | padding: 6px 13px; 529 | border: 1px solid #ddd; 530 | } 531 | 532 | .markdown-body table tr { 533 | background-color: #fff; 534 | border-top: 1px solid #ccc; 535 | } 536 | 537 | .markdown-body table tr:nth-child(2n) { 538 | background-color: #f8f8f8; 539 | } 540 | 541 | .markdown-body img { 542 | max-width: 100%; 543 | box-sizing: content-box; 544 | background-color: #fff; 545 | } 546 | 547 | .markdown-body code { 548 | padding: 0; 549 | padding-top: 0.2em; 550 | padding-bottom: 0.2em; 551 | margin: 0; 552 | font-size: 85%; 553 | background-color: rgba(0,0,0,0.04); 554 | border-radius: 3px; 555 | } 556 | 557 | .markdown-body code::before, 558 | .markdown-body code::after { 559 | letter-spacing: -0.2em; 560 | content: "\00a0"; 561 | } 562 | 563 | .markdown-body pre { 564 | word-wrap: normal; 565 | } 566 | 567 | .markdown-body pre>code { 568 | padding: 0; 569 | margin: 0; 570 | font-size: 100%; 571 | word-break: normal; 572 | white-space: pre; 573 | background: transparent; 574 | border: 0; 575 | } 576 | 577 | .markdown-body .highlight { 578 | margin-bottom: 16px; 579 | } 580 | 581 | .markdown-body .highlight pre { 582 | margin-bottom: 0; 583 | word-break: normal; 584 | } 585 | 586 | .markdown-body .highlight pre, 587 | .markdown-body pre { 588 | padding: 16px; 589 | overflow: auto; 590 | font-size: 85%; 591 | line-height: 1.45; 592 | background-color: #f7f7f7; 593 | border-radius: 3px; 594 | } 595 | 596 | .markdown-body pre code { 597 | display: inline; 598 | max-width: auto; 599 | padding: 0; 600 | margin: 0; 601 | overflow: visible; 602 | line-height: inherit; 603 | word-wrap: normal; 604 | background-color: transparent; 605 | border: 0; 606 | } 607 | 608 | .markdown-body pre code::before, 609 | .markdown-body pre code::after { 610 | content: normal; 611 | } 612 | 613 | .markdown-body .pl-0 { 614 | padding-left: 0 !important; 615 | } 616 | 617 | .markdown-body .pl-1 { 618 | padding-left: 3px !important; 619 | } 620 | 621 | .markdown-body .pl-2 { 622 | padding-left: 6px !important; 623 | } 624 | 625 | .markdown-body .pl-3 { 626 | padding-left: 12px !important; 627 | } 628 | 629 | .markdown-body .pl-4 { 630 | padding-left: 24px !important; 631 | } 632 | 633 | .markdown-body .pl-5 { 634 | padding-left: 36px !important; 635 | } 636 | 637 | .markdown-body .pl-6 { 638 | padding-left: 48px !important; 639 | } 640 | 641 | .markdown-body .full-commit .btn-outline:not(:disabled):hover { 642 | color: #4078c0; 643 | border: 1px solid #4078c0; 644 | } 645 | 646 | .markdown-body kbd { 647 | display: inline-block; 648 | padding: 3px 5px; 649 | font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; 650 | line-height: 10px; 651 | color: #555; 652 | vertical-align: middle; 653 | background-color: #fcfcfc; 654 | border: solid 1px #ccc; 655 | border-bottom-color: #bbb; 656 | border-radius: 3px; 657 | box-shadow: inset 0 -1px 0 #bbb; 658 | } 659 | 660 | .markdown-body :checked+.radio-label { 661 | position: relative; 662 | z-index: 1; 663 | border-color: #4078c0; 664 | } 665 | 666 | .markdown-body .task-list-item { 667 | list-style-type: none; 668 | } 669 | 670 | .markdown-body .task-list-item+.task-list-item { 671 | margin-top: 3px; 672 | } 673 | 674 | .markdown-body .task-list-item input { 675 | margin: 0 0.2em 0.25em -1.6em; 676 | vertical-align: middle; 677 | } 678 | 679 | .markdown-body hr { 680 | border-bottom-color: #eee; 681 | } -------------------------------------------------------------------------------- /docs/static/css/reset.scss: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ 2 | 3 | /** 4 | * 1. Set default font family to sans-serif. 5 | * 2. Prevent iOS and IE text size adjust after device orientation change, 6 | * without disabling user zoom. 7 | */ 8 | 9 | *{ 10 | margin: 0; 11 | padding: 0; 12 | border: 0px; 13 | } 14 | 15 | html { 16 | font-family: sans-serif; /* 1 */ 17 | -ms-text-size-adjust: 100%; /* 2 */ 18 | -webkit-text-size-adjust: 100%; /* 2 */ 19 | height: 100%; 20 | } 21 | 22 | /** 23 | * Remove default margin. 24 | */ 25 | 26 | body { 27 | margin: 0; 28 | height: 100%; 29 | 30 | } 31 | 32 | /* HTML5 display definitions 33 | ========================================================================== */ 34 | 35 | /** 36 | * Correct `block` display not defined for any HTML5 element in IE 8/9. 37 | * Correct `block` display not defined for `details` or `summary` in IE 10/11 38 | * and Firefox. 39 | * Correct `block` display not defined for `main` in IE 11. 40 | */ 41 | 42 | article, 43 | aside, 44 | details, 45 | figcaption, 46 | figure, 47 | footer, 48 | header, 49 | main, 50 | menu, 51 | nav, 52 | section, 53 | summary { 54 | display: block; 55 | } 56 | 57 | /** 58 | * 1. Correct `inline-block` display not defined in IE 8/9. 59 | * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. 60 | */ 61 | 62 | audio, 63 | canvas, 64 | progress, 65 | video { 66 | display: inline-block; /* 1 */ 67 | vertical-align: baseline; /* 2 */ 68 | } 69 | 70 | /** 71 | * Prevent modern browsers from displaying `audio` without controls. 72 | * Remove excess height in iOS 5 devices. 73 | */ 74 | 75 | audio:not([controls]) { 76 | display: none; 77 | height: 0; 78 | } 79 | 80 | /** 81 | * Address `[hidden]` styling not present in IE 8/9/10. 82 | * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. 83 | */ 84 | 85 | [hidden], 86 | template { 87 | display: none; 88 | } 89 | 90 | /* Links 91 | ========================================================================== */ 92 | 93 | /** 94 | * Remove the gray background color from active links in IE 10. 95 | */ 96 | 97 | a { 98 | background-color: transparent; 99 | } 100 | 101 | /** 102 | * Improve readability of focused elements when they are also in an 103 | * active/hover state. 104 | */ 105 | 106 | a:active, 107 | a:hover { 108 | outline: 0; 109 | } 110 | 111 | /* Text-level semantics 112 | ========================================================================== */ 113 | 114 | /** 115 | * Address styling not present in IE 8/9/10/11, Safari, and Chrome. 116 | */ 117 | 118 | abbr[title] { 119 | border-bottom: 1px dotted; 120 | } 121 | 122 | /** 123 | * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. 124 | */ 125 | 126 | b, 127 | strong { 128 | font-weight: bold; 129 | } 130 | 131 | /** 132 | * Address styling not present in Safari and Chrome. 133 | */ 134 | 135 | dfn { 136 | font-style: italic; 137 | } 138 | 139 | /** 140 | * Address variable `h1` font-size and margin within `section` and `article` 141 | * contexts in Firefox 4+, Safari, and Chrome. 142 | */ 143 | 144 | h1 { 145 | font-size: 2em; 146 | margin: 0.67em 0; 147 | } 148 | 149 | /** 150 | * Address styling not present in IE 8/9. 151 | */ 152 | 153 | mark { 154 | background: #ff0; 155 | color: #000; 156 | } 157 | 158 | /** 159 | * Address inconsistent and variable font size in all browsers. 160 | */ 161 | 162 | small { 163 | font-size: 80%; 164 | } 165 | 166 | /** 167 | * Prevent `sub` and `sup` affecting `line-height` in all browsers. 168 | */ 169 | 170 | sub, 171 | sup { 172 | font-size: 75%; 173 | line-height: 0; 174 | position: relative; 175 | vertical-align: baseline; 176 | } 177 | 178 | sup { 179 | top: -0.5em; 180 | } 181 | 182 | sub { 183 | bottom: -0.25em; 184 | } 185 | 186 | /* Embedded content 187 | ========================================================================== */ 188 | 189 | /** 190 | * Remove border when inside `a` element in IE 8/9/10. 191 | */ 192 | 193 | img { 194 | border: 0; 195 | } 196 | 197 | /** 198 | * Correct overflow not hidden in IE 9/10/11. 199 | */ 200 | 201 | svg:not(:root) { 202 | overflow: hidden; 203 | } 204 | 205 | /* Grouping content 206 | ========================================================================== */ 207 | 208 | /** 209 | * Address margin not present in IE 8/9 and Safari. 210 | */ 211 | 212 | figure { 213 | margin: 1em 40px; 214 | } 215 | 216 | /** 217 | * Address differences between Firefox and other browsers. 218 | */ 219 | 220 | hr { 221 | box-sizing: content-box; 222 | height: 0; 223 | } 224 | 225 | /** 226 | * Contain overflow in all browsers. 227 | */ 228 | 229 | pre { 230 | overflow: auto; 231 | } 232 | 233 | /** 234 | * Address odd `em`-unit font size rendering in all browsers. 235 | */ 236 | 237 | code, 238 | kbd, 239 | pre, 240 | samp { 241 | font-family: monospace, monospace; 242 | font-size: 1em; 243 | } 244 | 245 | /* Forms 246 | ========================================================================== */ 247 | 248 | /** 249 | * Known limitation: by default, Chrome and Safari on OS X allow very limited 250 | * styling of `select`, unless a `border` property is set. 251 | */ 252 | 253 | /** 254 | * 1. Correct color not being inherited. 255 | * Known issue: affects color of disabled elements. 256 | * 2. Correct font properties not being inherited. 257 | * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. 258 | */ 259 | 260 | button, 261 | input, 262 | optgroup, 263 | select, 264 | textarea { 265 | color: inherit; /* 1 */ 266 | font: inherit; /* 2 */ 267 | margin: 0; /* 3 */ 268 | } 269 | 270 | /** 271 | * Address `overflow` set to `hidden` in IE 8/9/10/11. 272 | */ 273 | 274 | button { 275 | overflow: visible; 276 | } 277 | 278 | /** 279 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 280 | * All other form control elements do not inherit `text-transform` values. 281 | * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. 282 | * Correct `select` style inheritance in Firefox. 283 | */ 284 | 285 | button, 286 | select { 287 | text-transform: none; 288 | } 289 | 290 | /** 291 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 292 | * and `video` controls. 293 | * 2. Correct inability to style clickable `input` types in iOS. 294 | * 3. Improve usability and consistency of cursor style between image-type 295 | * `input` and others. 296 | */ 297 | 298 | button, 299 | html input[type="button"], /* 1 */ 300 | input[type="reset"], 301 | input[type="submit"] { 302 | -webkit-appearance: button; /* 2 */ 303 | cursor: pointer; /* 3 */ 304 | } 305 | 306 | /** 307 | * Re-set default cursor for disabled elements. 308 | */ 309 | 310 | button[disabled], 311 | html input[disabled] { 312 | cursor: default; 313 | } 314 | 315 | /** 316 | * Remove inner padding and border in Firefox 4+. 317 | */ 318 | 319 | button::-moz-focus-inner, 320 | input::-moz-focus-inner { 321 | border: 0; 322 | padding: 0; 323 | } 324 | 325 | /** 326 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in 327 | * the UA stylesheet. 328 | */ 329 | 330 | input { 331 | line-height: normal; 332 | } 333 | 334 | /** 335 | * It's recommended that you don't attempt to style these elements. 336 | * Firefox's implementation doesn't respect box-sizing, padding, or width. 337 | * 338 | * 1. Address box sizing set to `content-box` in IE 8/9/10. 339 | * 2. Remove excess padding in IE 8/9/10. 340 | */ 341 | 342 | input[type="checkbox"], 343 | input[type="radio"] { 344 | box-sizing: border-box; /* 1 */ 345 | padding: 0; /* 2 */ 346 | } 347 | 348 | /** 349 | * Fix the cursor style for Chrome's increment/decrement buttons. For certain 350 | * `font-size` values of the `input`, it causes the cursor style of the 351 | * decrement button to change from `default` to `text`. 352 | */ 353 | 354 | input[type="number"]::-webkit-inner-spin-button, 355 | input[type="number"]::-webkit-outer-spin-button { 356 | height: auto; 357 | } 358 | 359 | /** 360 | * 1. Address `appearance` set to `searchfield` in Safari and Chrome. 361 | * 2. Address `box-sizing` set to `border-box` in Safari and Chrome. 362 | */ 363 | 364 | input[type="search"] { 365 | -webkit-appearance: textfield; /* 1 */ 366 | box-sizing: content-box; /* 2 */ 367 | } 368 | 369 | /** 370 | * Remove inner padding and search cancel button in Safari and Chrome on OS X. 371 | * Safari (but not Chrome) clips the cancel button when the search input has 372 | * padding (and `textfield` appearance). 373 | */ 374 | 375 | input[type="search"]::-webkit-search-cancel-button, 376 | input[type="search"]::-webkit-search-decoration { 377 | -webkit-appearance: none; 378 | } 379 | 380 | /** 381 | * Define consistent border, margin, and padding. 382 | */ 383 | 384 | fieldset { 385 | border: 1px solid #c0c0c0; 386 | margin: 0 2px; 387 | padding: 0.35em 0.625em 0.75em; 388 | } 389 | 390 | /** 391 | * 1. Correct `color` not being inherited in IE 8/9/10/11. 392 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 393 | */ 394 | 395 | legend { 396 | border: 0; /* 1 */ 397 | padding: 0; /* 2 */ 398 | } 399 | 400 | /** 401 | * Remove default vertical scrollbar in IE 8/9/10/11. 402 | */ 403 | 404 | textarea { 405 | overflow: auto; 406 | } 407 | 408 | /** 409 | * Don't inherit the `font-weight` (applied by a rule above). 410 | * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. 411 | */ 412 | 413 | optgroup { 414 | font-weight: bold; 415 | } 416 | 417 | /* Tables 418 | ========================================================================== */ 419 | 420 | /** 421 | * Remove most spacing between table cells. 422 | */ 423 | 424 | table { 425 | border-collapse: collapse; 426 | border-spacing: 0; 427 | } 428 | 429 | td, 430 | th { 431 | padding: 0; 432 | } 433 | .clearfix { 434 | overflow: hidden; 435 | _zoom: 1; 436 | } -------------------------------------------------------------------------------- /docs/static/js/manifest.b26844df2548cfeeb839.js: -------------------------------------------------------------------------------- 1 | !function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var n=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var i,u,f,s=0,l=[];s textLength) { 67 | startPos = textLength; 68 | } 69 | if (endPos > textLength) { 70 | endPos = textLength; 71 | } 72 | if (startPos < 0) { 73 | startPos = textLength + startPos; 74 | } 75 | if (endPos < 0) { 76 | endPos = textLength + endPos; 77 | } 78 | if (textDom.createTextRange) { 79 | // IE Support 80 | var range = textDom.createTextRange(); 81 | range.moveStart("character", -textLength); 82 | range.moveEnd("character", -textLength); 83 | range.moveStart("character", startPos); 84 | range.moveEnd("character", endPos); 85 | range.select(); 86 | } else { 87 | // Firefox support 88 | textDom.setSelectionRange(startPos, endPos); 89 | textDom.focus(); 90 | } 91 | } 92 | } 93 | 94 | /** 95 | * 在光标后插入文本 96 | * 参数: 97 | * textDom [JavaScript DOM String] 当前对象 98 | * value [String] 要插入的文本 99 | */ 100 | function insertAfterText(textDom, value) { 101 | var selectRange; 102 | if (document.selection) { 103 | // IE Support 104 | textDom.focus(); 105 | selectRange = document.selection.createRange(); 106 | selectRange.text = value; 107 | textDom.focus(); 108 | } else if (textDom.selectionStart || textDom.selectionStart == '0') { 109 | // Firefox support 110 | var startPos = textDom.selectionStart; 111 | var endPos = textDom.selectionEnd; 112 | var scrollTop = textDom.scrollTop; 113 | textDom.value = textDom.value.substring(0, startPos) + value + textDom.value.substring(endPos, textDom.value.length); 114 | textDom.focus(); 115 | textDom.selectionStart = startPos + value.length; 116 | textDom.selectionEnd = startPos + value.length; 117 | textDom.scrollTop = scrollTop; 118 | } else { 119 | textDom.value += value; 120 | textDom.focus(); 121 | } 122 | } 123 | 124 | module.exports = { 125 | getCursortPosition, 126 | setCaretPosition, 127 | getSelectText, 128 | setSelectText, 129 | insertAfterText 130 | }; -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | vue-mdeditor 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-mdeditor", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "ovenslove <1905997838@qq.com>", 6 | "private": true, 7 | "scripts": { 8 | "dev": "node build/dev-server.js", 9 | "build": "node build/build.js" 10 | }, 11 | "dependencies": { 12 | "vue": "^2.2.2", 13 | "vue-router": "^2.2.0", 14 | "vue-scroll": "^2.0.2" 15 | }, 16 | "devDependencies": { 17 | "autoprefixer": "^6.7.2", 18 | "babel-core": "^6.22.1", 19 | "babel-loader": "^6.2.10", 20 | "babel-plugin-transform-runtime": "^6.22.0", 21 | "babel-preset-env": "^1.2.1", 22 | "babel-preset-stage-2": "^6.22.0", 23 | "babel-register": "^6.22.0", 24 | "chalk": "^1.1.3", 25 | "connect-history-api-fallback": "^1.3.0", 26 | "copy-webpack-plugin": "^4.0.1", 27 | "css-loader": "^0.26.1", 28 | "eventsource-polyfill": "^0.9.6", 29 | "express": "^4.14.1", 30 | "extract-text-webpack-plugin": "^2.0.0", 31 | "file-loader": "^0.10.0", 32 | "friendly-errors-webpack-plugin": "^1.1.3", 33 | "function-bind": "^1.1.0", 34 | "html-webpack-plugin": "^2.28.0", 35 | "http-proxy-middleware": "^0.17.3", 36 | "jade": "^1.11.0", 37 | "marked": "^0.3.6", 38 | "node-sass": "^4.5.1", 39 | "opn": "^4.0.2", 40 | "optimize-css-assets-webpack-plugin": "^1.3.0", 41 | "ora": "^1.1.0", 42 | "pug": "^2.0.0-beta11", 43 | "pug-loader": "^2.3.0", 44 | "rimraf": "^2.6.0", 45 | "sass-loader": "^6.0.3", 46 | "semver": "^5.3.0", 47 | "url-loader": "^0.5.7", 48 | "vue-loader": "^11.1.4", 49 | "vue-style-loader": "^2.0.0", 50 | "vue-template-compiler": "^2.2.4", 51 | "webpack": "^2.2.1", 52 | "webpack-bundle-analyzer": ">=3.3.2", 53 | "webpack-dev-middleware": "^1.10.0", 54 | "webpack-hot-middleware": "^2.16.1", 55 | "webpack-merge": "^2.6.1" 56 | }, 57 | "engines": { 58 | "node": ">= 4.0.0", 59 | "npm": ">= 3.0.0" 60 | }, 61 | "browserslist": [ 62 | "> 1%", 63 | "last 2 versions", 64 | "not ie <= 8" 65 | ] 66 | } 67 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 28 | -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ovenslove/vue-mdEditor/5e0706d5bb74c533dff7f6d777d68bebd86c29da/src/assets/logo.png -------------------------------------------------------------------------------- /src/components/index.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 64 | 65 | -------------------------------------------------------------------------------- /src/components/markdown.vue: -------------------------------------------------------------------------------- 1 | 40 | 41 | 281 | 282 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | 7 | Vue.config.productionTip = false 8 | 9 | /* eslint-disable no-new */ 10 | new Vue({ 11 | el: '#app', 12 | router, 13 | template: '', 14 | components: { App } 15 | }) 16 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import Index from '@/components/index' 4 | 5 | Vue.use(Router) 6 | 7 | export default new Router({ 8 | routes: [{ 9 | path: '/', 10 | name: 'index', 11 | component: Index 12 | }] 13 | }) -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ovenslove/vue-mdEditor/5e0706d5bb74c533dff7f6d777d68bebd86c29da/static/.gitkeep -------------------------------------------------------------------------------- /static/css/atom-one-dark.min.css: -------------------------------------------------------------------------------- 1 | .hljs{display:block;overflow-x:auto;padding:0.5em;color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-keyword,.hljs-formula{color:#c678dd}.hljs-section,.hljs-name,.hljs-selector-tag,.hljs-deletion,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-string,.hljs-regexp,.hljs-addition,.hljs-attribute,.hljs-meta-string{color:#98c379}.hljs-built_in,.hljs-class .hljs-title{color:#e6c07b}.hljs-attr,.hljs-variable,.hljs-template-variable,.hljs-type,.hljs-selector-class,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-number{color:#d19a66}.hljs-symbol,.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-title{color:#61aeee}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.hljs-link{text-decoration:underline} -------------------------------------------------------------------------------- /static/css/github-markdown.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: octicons-link; 3 | src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); 4 | } 5 | 6 | .markdown-body { 7 | -ms-text-size-adjust: 100%; 8 | -webkit-text-size-adjust: 100%; 9 | line-height: 1.5; 10 | color: #333; 11 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; 12 | font-size: 16px; 13 | line-height: 1.5; 14 | word-wrap: break-word; 15 | } 16 | 17 | .markdown-body .pl-c { 18 | color: #969896; 19 | } 20 | 21 | .markdown-body .pl-c1, 22 | .markdown-body .pl-s .pl-v { 23 | color: #0086b3; 24 | } 25 | 26 | .markdown-body .pl-e, 27 | .markdown-body .pl-en { 28 | color: #795da3; 29 | } 30 | 31 | .markdown-body .pl-smi, 32 | .markdown-body .pl-s .pl-s1 { 33 | color: #333; 34 | } 35 | 36 | .markdown-body .pl-ent { 37 | color: #63a35c; 38 | } 39 | 40 | .markdown-body .pl-k { 41 | color: #a71d5d; 42 | } 43 | 44 | .markdown-body .pl-s, 45 | .markdown-body .pl-pds, 46 | .markdown-body .pl-s .pl-pse .pl-s1, 47 | .markdown-body .pl-sr, 48 | .markdown-body .pl-sr .pl-cce, 49 | .markdown-body .pl-sr .pl-sre, 50 | .markdown-body .pl-sr .pl-sra { 51 | color: #183691; 52 | } 53 | 54 | .markdown-body .pl-v { 55 | color: #ed6a43; 56 | } 57 | 58 | .markdown-body .pl-id { 59 | color: #b52a1d; 60 | } 61 | 62 | .markdown-body .pl-ii { 63 | color: #f8f8f8; 64 | background-color: #b52a1d; 65 | } 66 | 67 | .markdown-body .pl-sr .pl-cce { 68 | font-weight: bold; 69 | color: #63a35c; 70 | } 71 | 72 | .markdown-body .pl-ml { 73 | color: #693a17; 74 | } 75 | 76 | .markdown-body .pl-mh, 77 | .markdown-body .pl-mh .pl-en, 78 | .markdown-body .pl-ms { 79 | font-weight: bold; 80 | color: #1d3e81; 81 | } 82 | 83 | .markdown-body .pl-mq { 84 | color: #008080; 85 | } 86 | 87 | .markdown-body .pl-mi { 88 | font-style: italic; 89 | color: #333; 90 | } 91 | 92 | .markdown-body .pl-mb { 93 | font-weight: bold; 94 | color: #333; 95 | } 96 | 97 | .markdown-body .pl-md { 98 | color: #bd2c00; 99 | background-color: #ffecec; 100 | } 101 | 102 | .markdown-body .pl-mi1 { 103 | color: #55a532; 104 | background-color: #eaffea; 105 | } 106 | 107 | .markdown-body .pl-mdr { 108 | font-weight: bold; 109 | color: #795da3; 110 | } 111 | 112 | .markdown-body .pl-mo { 113 | color: #1d3e81; 114 | } 115 | 116 | .markdown-body .octicon { 117 | display: inline-block; 118 | vertical-align: text-top; 119 | fill: currentColor; 120 | } 121 | 122 | .markdown-body a { 123 | background-color: transparent; 124 | -webkit-text-decoration-skip: objects; 125 | } 126 | 127 | .markdown-body a:active, 128 | .markdown-body a:hover { 129 | outline-width: 0; 130 | } 131 | 132 | .markdown-body strong { 133 | font-weight: inherit; 134 | } 135 | 136 | .markdown-body strong { 137 | font-weight: bolder; 138 | } 139 | 140 | .markdown-body h1 { 141 | font-size: 2em; 142 | margin: 0.67em 0; 143 | } 144 | 145 | .markdown-body img { 146 | border-style: none; 147 | } 148 | 149 | .markdown-body svg:not(:root) { 150 | overflow: hidden; 151 | } 152 | 153 | .markdown-body code, 154 | .markdown-body kbd, 155 | .markdown-body pre { 156 | font-family: monospace, monospace; 157 | font-size: 1em; 158 | } 159 | 160 | .markdown-body hr { 161 | box-sizing: content-box; 162 | height: 0; 163 | overflow: visible; 164 | } 165 | 166 | .markdown-body input { 167 | font: inherit; 168 | margin: 0; 169 | } 170 | 171 | .markdown-body input { 172 | overflow: visible; 173 | } 174 | 175 | .markdown-body [type="checkbox"] { 176 | box-sizing: border-box; 177 | padding: 0; 178 | } 179 | 180 | .markdown-body * { 181 | box-sizing: border-box; 182 | } 183 | 184 | .markdown-body input { 185 | font-family: inherit; 186 | font-size: inherit; 187 | line-height: inherit; 188 | } 189 | 190 | .markdown-body a { 191 | color: #4078c0; 192 | text-decoration: none; 193 | } 194 | 195 | .markdown-body a:hover, 196 | .markdown-body a:active { 197 | text-decoration: underline; 198 | } 199 | 200 | .markdown-body strong { 201 | font-weight: 600; 202 | } 203 | 204 | .markdown-body hr { 205 | height: 0; 206 | margin: 15px 0; 207 | overflow: hidden; 208 | background: transparent; 209 | border: 0; 210 | border-bottom: 1px solid #ddd; 211 | } 212 | 213 | .markdown-body hr::before { 214 | display: table; 215 | content: ""; 216 | } 217 | 218 | .markdown-body hr::after { 219 | display: table; 220 | clear: both; 221 | content: ""; 222 | } 223 | 224 | .markdown-body table { 225 | border-spacing: 0; 226 | border-collapse: collapse; 227 | } 228 | 229 | .markdown-body td, 230 | .markdown-body th { 231 | padding: 0; 232 | } 233 | 234 | .markdown-body h1, 235 | .markdown-body h2, 236 | .markdown-body h3, 237 | .markdown-body h4, 238 | .markdown-body h5, 239 | .markdown-body h6 { 240 | margin-top: 0; 241 | margin-bottom: 0; 242 | } 243 | 244 | .markdown-body h1 { 245 | font-size: 32px; 246 | font-weight: 600; 247 | } 248 | 249 | .markdown-body h2 { 250 | font-size: 24px; 251 | font-weight: 600; 252 | } 253 | 254 | .markdown-body h3 { 255 | font-size: 20px; 256 | font-weight: 600; 257 | } 258 | 259 | .markdown-body h4 { 260 | font-size: 16px; 261 | font-weight: 600; 262 | } 263 | 264 | .markdown-body h5 { 265 | font-size: 14px; 266 | font-weight: 600; 267 | } 268 | 269 | .markdown-body h6 { 270 | font-size: 12px; 271 | font-weight: 600; 272 | } 273 | 274 | .markdown-body p { 275 | margin-top: 0; 276 | margin-bottom: 10px; 277 | } 278 | 279 | .markdown-body blockquote { 280 | margin: 0; 281 | } 282 | 283 | .markdown-body ul, 284 | .markdown-body ol { 285 | padding-left: 0; 286 | margin-top: 0; 287 | margin-bottom: 0; 288 | } 289 | 290 | .markdown-body ol ol, 291 | .markdown-body ul ol { 292 | list-style-type: lower-roman; 293 | } 294 | 295 | .markdown-body ul ul ol, 296 | .markdown-body ul ol ol, 297 | .markdown-body ol ul ol, 298 | .markdown-body ol ol ol { 299 | list-style-type: lower-alpha; 300 | } 301 | 302 | .markdown-body dd { 303 | margin-left: 0; 304 | } 305 | 306 | .markdown-body code { 307 | font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; 308 | font-size: 12px; 309 | } 310 | 311 | .markdown-body pre { 312 | margin-top: 0; 313 | margin-bottom: 0; 314 | font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; 315 | } 316 | 317 | .markdown-body .octicon { 318 | vertical-align: text-bottom; 319 | } 320 | 321 | .markdown-body input { 322 | -webkit-font-feature-settings: "liga" 0; 323 | font-feature-settings: "liga" 0; 324 | } 325 | 326 | .markdown-body::before { 327 | display: table; 328 | content: ""; 329 | } 330 | 331 | .markdown-body::after { 332 | display: table; 333 | clear: both; 334 | content: ""; 335 | } 336 | 337 | .markdown-body>*:first-child { 338 | margin-top: 0 !important; 339 | } 340 | 341 | .markdown-body>*:last-child { 342 | margin-bottom: 0 !important; 343 | } 344 | 345 | .markdown-body a:not([href]) { 346 | color: inherit; 347 | text-decoration: none; 348 | } 349 | 350 | .markdown-body .anchor { 351 | float: left; 352 | padding-right: 4px; 353 | margin-left: -20px; 354 | line-height: 1; 355 | } 356 | 357 | .markdown-body .anchor:focus { 358 | outline: none; 359 | } 360 | 361 | .markdown-body p, 362 | .markdown-body blockquote, 363 | .markdown-body ul, 364 | .markdown-body ol, 365 | .markdown-body dl, 366 | .markdown-body table, 367 | .markdown-body pre { 368 | margin-top: 0; 369 | margin-bottom: 16px; 370 | } 371 | 372 | .markdown-body hr { 373 | height: 0.25em; 374 | padding: 0; 375 | margin: 24px 0; 376 | background-color: #e7e7e7; 377 | border: 0; 378 | } 379 | 380 | .markdown-body blockquote { 381 | padding: 0 1em; 382 | color: #777; 383 | border-left: 0.25em solid #ddd; 384 | } 385 | 386 | .markdown-body blockquote>:first-child { 387 | margin-top: 0; 388 | } 389 | 390 | .markdown-body blockquote>:last-child { 391 | margin-bottom: 0; 392 | } 393 | 394 | .markdown-body kbd { 395 | display: inline-block; 396 | padding: 3px 5px; 397 | font-size: 11px; 398 | line-height: 10px; 399 | color: #555; 400 | vertical-align: middle; 401 | background-color: #fcfcfc; 402 | border: solid 1px #ccc; 403 | border-bottom-color: #bbb; 404 | border-radius: 3px; 405 | box-shadow: inset 0 -1px 0 #bbb; 406 | } 407 | 408 | .markdown-body h1, 409 | .markdown-body h2, 410 | .markdown-body h3, 411 | .markdown-body h4, 412 | .markdown-body h5, 413 | .markdown-body h6 { 414 | margin-top: 24px; 415 | margin-bottom: 16px; 416 | font-weight: 600; 417 | line-height: 1.25; 418 | } 419 | 420 | .markdown-body h1 .octicon-link, 421 | .markdown-body h2 .octicon-link, 422 | .markdown-body h3 .octicon-link, 423 | .markdown-body h4 .octicon-link, 424 | .markdown-body h5 .octicon-link, 425 | .markdown-body h6 .octicon-link { 426 | color: #000; 427 | vertical-align: middle; 428 | visibility: hidden; 429 | } 430 | 431 | .markdown-body h1:hover .anchor, 432 | .markdown-body h2:hover .anchor, 433 | .markdown-body h3:hover .anchor, 434 | .markdown-body h4:hover .anchor, 435 | .markdown-body h5:hover .anchor, 436 | .markdown-body h6:hover .anchor { 437 | text-decoration: none; 438 | } 439 | 440 | .markdown-body h1:hover .anchor .octicon-link, 441 | .markdown-body h2:hover .anchor .octicon-link, 442 | .markdown-body h3:hover .anchor .octicon-link, 443 | .markdown-body h4:hover .anchor .octicon-link, 444 | .markdown-body h5:hover .anchor .octicon-link, 445 | .markdown-body h6:hover .anchor .octicon-link { 446 | visibility: visible; 447 | } 448 | 449 | .markdown-body h1 { 450 | padding-bottom: 0.3em; 451 | font-size: 2em; 452 | border-bottom: 1px solid #eee; 453 | } 454 | 455 | .markdown-body h2 { 456 | padding-bottom: 0.3em; 457 | font-size: 1.5em; 458 | border-bottom: 1px solid #eee; 459 | } 460 | 461 | .markdown-body h3 { 462 | font-size: 1.25em; 463 | } 464 | 465 | .markdown-body h4 { 466 | font-size: 1em; 467 | } 468 | 469 | .markdown-body h5 { 470 | font-size: 0.875em; 471 | } 472 | 473 | .markdown-body h6 { 474 | font-size: 0.85em; 475 | color: #777; 476 | } 477 | 478 | .markdown-body ul, 479 | .markdown-body ol { 480 | padding-left: 2em; 481 | } 482 | 483 | .markdown-body ul ul, 484 | .markdown-body ul ol, 485 | .markdown-body ol ol, 486 | .markdown-body ol ul { 487 | margin-top: 0; 488 | margin-bottom: 0; 489 | } 490 | 491 | .markdown-body li>p { 492 | margin-top: 16px; 493 | } 494 | 495 | .markdown-body li+li { 496 | margin-top: 0.25em; 497 | } 498 | 499 | .markdown-body dl { 500 | padding: 0; 501 | } 502 | 503 | .markdown-body dl dt { 504 | padding: 0; 505 | margin-top: 16px; 506 | font-size: 1em; 507 | font-style: italic; 508 | font-weight: bold; 509 | } 510 | 511 | .markdown-body dl dd { 512 | padding: 0 16px; 513 | margin-bottom: 16px; 514 | } 515 | 516 | .markdown-body table { 517 | display: block; 518 | width: 100%; 519 | overflow: auto; 520 | } 521 | 522 | .markdown-body table th { 523 | font-weight: bold; 524 | } 525 | 526 | .markdown-body table th, 527 | .markdown-body table td { 528 | padding: 6px 13px; 529 | border: 1px solid #ddd; 530 | } 531 | 532 | .markdown-body table tr { 533 | background-color: #fff; 534 | border-top: 1px solid #ccc; 535 | } 536 | 537 | .markdown-body table tr:nth-child(2n) { 538 | background-color: #f8f8f8; 539 | } 540 | 541 | .markdown-body img { 542 | max-width: 100%; 543 | box-sizing: content-box; 544 | background-color: #fff; 545 | } 546 | 547 | .markdown-body code { 548 | padding: 0; 549 | padding-top: 0.2em; 550 | padding-bottom: 0.2em; 551 | margin: 0; 552 | font-size: 85%; 553 | background-color: rgba(0,0,0,0.04); 554 | border-radius: 3px; 555 | } 556 | 557 | .markdown-body code::before, 558 | .markdown-body code::after { 559 | letter-spacing: -0.2em; 560 | content: "\00a0"; 561 | } 562 | 563 | .markdown-body pre { 564 | word-wrap: normal; 565 | } 566 | 567 | .markdown-body pre>code { 568 | padding: 0; 569 | margin: 0; 570 | font-size: 100%; 571 | word-break: normal; 572 | white-space: pre; 573 | background: transparent; 574 | border: 0; 575 | } 576 | 577 | .markdown-body .highlight { 578 | margin-bottom: 16px; 579 | } 580 | 581 | .markdown-body .highlight pre { 582 | margin-bottom: 0; 583 | word-break: normal; 584 | } 585 | 586 | .markdown-body .highlight pre, 587 | .markdown-body pre { 588 | padding: 16px; 589 | overflow: auto; 590 | font-size: 85%; 591 | line-height: 1.45; 592 | background-color: #f7f7f7; 593 | border-radius: 3px; 594 | } 595 | 596 | .markdown-body pre code { 597 | display: inline; 598 | max-width: auto; 599 | padding: 0; 600 | margin: 0; 601 | overflow: visible; 602 | line-height: inherit; 603 | word-wrap: normal; 604 | background-color: transparent; 605 | border: 0; 606 | } 607 | 608 | .markdown-body pre code::before, 609 | .markdown-body pre code::after { 610 | content: normal; 611 | } 612 | 613 | .markdown-body .pl-0 { 614 | padding-left: 0 !important; 615 | } 616 | 617 | .markdown-body .pl-1 { 618 | padding-left: 3px !important; 619 | } 620 | 621 | .markdown-body .pl-2 { 622 | padding-left: 6px !important; 623 | } 624 | 625 | .markdown-body .pl-3 { 626 | padding-left: 12px !important; 627 | } 628 | 629 | .markdown-body .pl-4 { 630 | padding-left: 24px !important; 631 | } 632 | 633 | .markdown-body .pl-5 { 634 | padding-left: 36px !important; 635 | } 636 | 637 | .markdown-body .pl-6 { 638 | padding-left: 48px !important; 639 | } 640 | 641 | .markdown-body .full-commit .btn-outline:not(:disabled):hover { 642 | color: #4078c0; 643 | border: 1px solid #4078c0; 644 | } 645 | 646 | .markdown-body kbd { 647 | display: inline-block; 648 | padding: 3px 5px; 649 | font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; 650 | line-height: 10px; 651 | color: #555; 652 | vertical-align: middle; 653 | background-color: #fcfcfc; 654 | border: solid 1px #ccc; 655 | border-bottom-color: #bbb; 656 | border-radius: 3px; 657 | box-shadow: inset 0 -1px 0 #bbb; 658 | } 659 | 660 | .markdown-body :checked+.radio-label { 661 | position: relative; 662 | z-index: 1; 663 | border-color: #4078c0; 664 | } 665 | 666 | .markdown-body .task-list-item { 667 | list-style-type: none; 668 | } 669 | 670 | .markdown-body .task-list-item+.task-list-item { 671 | margin-top: 3px; 672 | } 673 | 674 | .markdown-body .task-list-item input { 675 | margin: 0 0.2em 0.25em -1.6em; 676 | vertical-align: middle; 677 | } 678 | 679 | .markdown-body hr { 680 | border-bottom-color: #eee; 681 | } -------------------------------------------------------------------------------- /static/css/reset.scss: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ 2 | 3 | /** 4 | * 1. Set default font family to sans-serif. 5 | * 2. Prevent iOS and IE text size adjust after device orientation change, 6 | * without disabling user zoom. 7 | */ 8 | 9 | *{ 10 | margin: 0; 11 | padding: 0; 12 | border: 0px; 13 | } 14 | 15 | html { 16 | font-family: sans-serif; /* 1 */ 17 | -ms-text-size-adjust: 100%; /* 2 */ 18 | -webkit-text-size-adjust: 100%; /* 2 */ 19 | height: 100%; 20 | } 21 | 22 | /** 23 | * Remove default margin. 24 | */ 25 | 26 | body { 27 | margin: 0; 28 | height: 100%; 29 | 30 | } 31 | 32 | /* HTML5 display definitions 33 | ========================================================================== */ 34 | 35 | /** 36 | * Correct `block` display not defined for any HTML5 element in IE 8/9. 37 | * Correct `block` display not defined for `details` or `summary` in IE 10/11 38 | * and Firefox. 39 | * Correct `block` display not defined for `main` in IE 11. 40 | */ 41 | 42 | article, 43 | aside, 44 | details, 45 | figcaption, 46 | figure, 47 | footer, 48 | header, 49 | main, 50 | menu, 51 | nav, 52 | section, 53 | summary { 54 | display: block; 55 | } 56 | 57 | /** 58 | * 1. Correct `inline-block` display not defined in IE 8/9. 59 | * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. 60 | */ 61 | 62 | audio, 63 | canvas, 64 | progress, 65 | video { 66 | display: inline-block; /* 1 */ 67 | vertical-align: baseline; /* 2 */ 68 | } 69 | 70 | /** 71 | * Prevent modern browsers from displaying `audio` without controls. 72 | * Remove excess height in iOS 5 devices. 73 | */ 74 | 75 | audio:not([controls]) { 76 | display: none; 77 | height: 0; 78 | } 79 | 80 | /** 81 | * Address `[hidden]` styling not present in IE 8/9/10. 82 | * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. 83 | */ 84 | 85 | [hidden], 86 | template { 87 | display: none; 88 | } 89 | 90 | /* Links 91 | ========================================================================== */ 92 | 93 | /** 94 | * Remove the gray background color from active links in IE 10. 95 | */ 96 | 97 | a { 98 | background-color: transparent; 99 | } 100 | 101 | /** 102 | * Improve readability of focused elements when they are also in an 103 | * active/hover state. 104 | */ 105 | 106 | a:active, 107 | a:hover { 108 | outline: 0; 109 | } 110 | 111 | /* Text-level semantics 112 | ========================================================================== */ 113 | 114 | /** 115 | * Address styling not present in IE 8/9/10/11, Safari, and Chrome. 116 | */ 117 | 118 | abbr[title] { 119 | border-bottom: 1px dotted; 120 | } 121 | 122 | /** 123 | * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. 124 | */ 125 | 126 | b, 127 | strong { 128 | font-weight: bold; 129 | } 130 | 131 | /** 132 | * Address styling not present in Safari and Chrome. 133 | */ 134 | 135 | dfn { 136 | font-style: italic; 137 | } 138 | 139 | /** 140 | * Address variable `h1` font-size and margin within `section` and `article` 141 | * contexts in Firefox 4+, Safari, and Chrome. 142 | */ 143 | 144 | h1 { 145 | font-size: 2em; 146 | margin: 0.67em 0; 147 | } 148 | 149 | /** 150 | * Address styling not present in IE 8/9. 151 | */ 152 | 153 | mark { 154 | background: #ff0; 155 | color: #000; 156 | } 157 | 158 | /** 159 | * Address inconsistent and variable font size in all browsers. 160 | */ 161 | 162 | small { 163 | font-size: 80%; 164 | } 165 | 166 | /** 167 | * Prevent `sub` and `sup` affecting `line-height` in all browsers. 168 | */ 169 | 170 | sub, 171 | sup { 172 | font-size: 75%; 173 | line-height: 0; 174 | position: relative; 175 | vertical-align: baseline; 176 | } 177 | 178 | sup { 179 | top: -0.5em; 180 | } 181 | 182 | sub { 183 | bottom: -0.25em; 184 | } 185 | 186 | /* Embedded content 187 | ========================================================================== */ 188 | 189 | /** 190 | * Remove border when inside `a` element in IE 8/9/10. 191 | */ 192 | 193 | img { 194 | border: 0; 195 | } 196 | 197 | /** 198 | * Correct overflow not hidden in IE 9/10/11. 199 | */ 200 | 201 | svg:not(:root) { 202 | overflow: hidden; 203 | } 204 | 205 | /* Grouping content 206 | ========================================================================== */ 207 | 208 | /** 209 | * Address margin not present in IE 8/9 and Safari. 210 | */ 211 | 212 | figure { 213 | margin: 1em 40px; 214 | } 215 | 216 | /** 217 | * Address differences between Firefox and other browsers. 218 | */ 219 | 220 | hr { 221 | box-sizing: content-box; 222 | height: 0; 223 | } 224 | 225 | /** 226 | * Contain overflow in all browsers. 227 | */ 228 | 229 | pre { 230 | overflow: auto; 231 | } 232 | 233 | /** 234 | * Address odd `em`-unit font size rendering in all browsers. 235 | */ 236 | 237 | code, 238 | kbd, 239 | pre, 240 | samp { 241 | font-family: monospace, monospace; 242 | font-size: 1em; 243 | } 244 | 245 | /* Forms 246 | ========================================================================== */ 247 | 248 | /** 249 | * Known limitation: by default, Chrome and Safari on OS X allow very limited 250 | * styling of `select`, unless a `border` property is set. 251 | */ 252 | 253 | /** 254 | * 1. Correct color not being inherited. 255 | * Known issue: affects color of disabled elements. 256 | * 2. Correct font properties not being inherited. 257 | * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. 258 | */ 259 | 260 | button, 261 | input, 262 | optgroup, 263 | select, 264 | textarea { 265 | color: inherit; /* 1 */ 266 | font: inherit; /* 2 */ 267 | margin: 0; /* 3 */ 268 | } 269 | 270 | /** 271 | * Address `overflow` set to `hidden` in IE 8/9/10/11. 272 | */ 273 | 274 | button { 275 | overflow: visible; 276 | } 277 | 278 | /** 279 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 280 | * All other form control elements do not inherit `text-transform` values. 281 | * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. 282 | * Correct `select` style inheritance in Firefox. 283 | */ 284 | 285 | button, 286 | select { 287 | text-transform: none; 288 | } 289 | 290 | /** 291 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 292 | * and `video` controls. 293 | * 2. Correct inability to style clickable `input` types in iOS. 294 | * 3. Improve usability and consistency of cursor style between image-type 295 | * `input` and others. 296 | */ 297 | 298 | button, 299 | html input[type="button"], /* 1 */ 300 | input[type="reset"], 301 | input[type="submit"] { 302 | -webkit-appearance: button; /* 2 */ 303 | cursor: pointer; /* 3 */ 304 | } 305 | 306 | /** 307 | * Re-set default cursor for disabled elements. 308 | */ 309 | 310 | button[disabled], 311 | html input[disabled] { 312 | cursor: default; 313 | } 314 | 315 | /** 316 | * Remove inner padding and border in Firefox 4+. 317 | */ 318 | 319 | button::-moz-focus-inner, 320 | input::-moz-focus-inner { 321 | border: 0; 322 | padding: 0; 323 | } 324 | 325 | /** 326 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in 327 | * the UA stylesheet. 328 | */ 329 | 330 | input { 331 | line-height: normal; 332 | } 333 | 334 | /** 335 | * It's recommended that you don't attempt to style these elements. 336 | * Firefox's implementation doesn't respect box-sizing, padding, or width. 337 | * 338 | * 1. Address box sizing set to `content-box` in IE 8/9/10. 339 | * 2. Remove excess padding in IE 8/9/10. 340 | */ 341 | 342 | input[type="checkbox"], 343 | input[type="radio"] { 344 | box-sizing: border-box; /* 1 */ 345 | padding: 0; /* 2 */ 346 | } 347 | 348 | /** 349 | * Fix the cursor style for Chrome's increment/decrement buttons. For certain 350 | * `font-size` values of the `input`, it causes the cursor style of the 351 | * decrement button to change from `default` to `text`. 352 | */ 353 | 354 | input[type="number"]::-webkit-inner-spin-button, 355 | input[type="number"]::-webkit-outer-spin-button { 356 | height: auto; 357 | } 358 | 359 | /** 360 | * 1. Address `appearance` set to `searchfield` in Safari and Chrome. 361 | * 2. Address `box-sizing` set to `border-box` in Safari and Chrome. 362 | */ 363 | 364 | input[type="search"] { 365 | -webkit-appearance: textfield; /* 1 */ 366 | box-sizing: content-box; /* 2 */ 367 | } 368 | 369 | /** 370 | * Remove inner padding and search cancel button in Safari and Chrome on OS X. 371 | * Safari (but not Chrome) clips the cancel button when the search input has 372 | * padding (and `textfield` appearance). 373 | */ 374 | 375 | input[type="search"]::-webkit-search-cancel-button, 376 | input[type="search"]::-webkit-search-decoration { 377 | -webkit-appearance: none; 378 | } 379 | 380 | /** 381 | * Define consistent border, margin, and padding. 382 | */ 383 | 384 | fieldset { 385 | border: 1px solid #c0c0c0; 386 | margin: 0 2px; 387 | padding: 0.35em 0.625em 0.75em; 388 | } 389 | 390 | /** 391 | * 1. Correct `color` not being inherited in IE 8/9/10/11. 392 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 393 | */ 394 | 395 | legend { 396 | border: 0; /* 1 */ 397 | padding: 0; /* 2 */ 398 | } 399 | 400 | /** 401 | * Remove default vertical scrollbar in IE 8/9/10/11. 402 | */ 403 | 404 | textarea { 405 | overflow: auto; 406 | } 407 | 408 | /** 409 | * Don't inherit the `font-weight` (applied by a rule above). 410 | * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. 411 | */ 412 | 413 | optgroup { 414 | font-weight: bold; 415 | } 416 | 417 | /* Tables 418 | ========================================================================== */ 419 | 420 | /** 421 | * Remove most spacing between table cells. 422 | */ 423 | 424 | table { 425 | border-collapse: collapse; 426 | border-spacing: 0; 427 | } 428 | 429 | td, 430 | th { 431 | padding: 0; 432 | } 433 | .clearfix { 434 | overflow: hidden; 435 | _zoom: 1; 436 | } -------------------------------------------------------------------------------- /static/js/rangeFn.js: -------------------------------------------------------------------------------- 1 | // 获取光标位置 2 | function getCursortPosition(textDom) { 3 | var cursorPos = 0; 4 | if (document.selection) { 5 | // IE Support 6 | textDom.focus(); 7 | var selectRange = document.selection.createRange(); 8 | selectRange.moveStart('character', -textDom.value.length); 9 | cursorPos = selectRange.text.length; 10 | } else if (textDom.selectionStart || textDom.selectionStart == '0') { 11 | // Firefox support 12 | cursorPos = textDom.selectionStart; 13 | } 14 | return cursorPos; 15 | } 16 | 17 | // 设置光标位置 18 | function setCaretPosition(textDom, pos) { 19 | if (textDom.setSelectionRange) { 20 | // IE Support 21 | textDom.focus(); 22 | textDom.setSelectionRange(pos, pos); 23 | } else if (textDom.createTextRange) { 24 | // Firefox support 25 | var range = textDom.createTextRange(); 26 | range.collapse(true); 27 | range.moveEnd('character', pos); 28 | range.moveStart('character', pos); 29 | range.select(); 30 | } 31 | } 32 | // 获取选中文字 33 | function getSelectText() { 34 | var userSelection, text; 35 | if (window.getSelection) { 36 | // Firefox support 37 | userSelection = window.getSelection(); 38 | } else if (document.selection) { 39 | // IE Support 40 | userSelection = document.selection.createRange(); 41 | } 42 | if (!(text = userSelection.text)) { 43 | text = userSelection; 44 | } 45 | return text; 46 | } 47 | 48 | /** 49 | * 选中特定范围的文本 50 | * 参数: 51 | * textDom [JavaScript DOM String] 当前对象 52 | * startPos [Int] 起始位置 53 | * endPos [Int] 终点位置 54 | */ 55 | function setSelectText(textDom, startPos, endPos) { 56 | var startPos = parseInt(startPos), 57 | endPos = parseInt(endPos), 58 | textLength = textDom.value.length; 59 | if (textLength) { 60 | if (!startPos) { 61 | startPos = 0; 62 | } 63 | if (!endPos) { 64 | endPos = textLength; 65 | } 66 | if (startPos > textLength) { 67 | startPos = textLength; 68 | } 69 | if (endPos > textLength) { 70 | endPos = textLength; 71 | } 72 | if (startPos < 0) { 73 | startPos = textLength + startPos; 74 | } 75 | if (endPos < 0) { 76 | endPos = textLength + endPos; 77 | } 78 | if (textDom.createTextRange) { 79 | // IE Support 80 | var range = textDom.createTextRange(); 81 | range.moveStart("character", -textLength); 82 | range.moveEnd("character", -textLength); 83 | range.moveStart("character", startPos); 84 | range.moveEnd("character", endPos); 85 | range.select(); 86 | } else { 87 | // Firefox support 88 | textDom.setSelectionRange(startPos, endPos); 89 | textDom.focus(); 90 | } 91 | } 92 | } 93 | 94 | /** 95 | * 在光标后插入文本 96 | * 参数: 97 | * textDom [JavaScript DOM String] 当前对象 98 | * value [String] 要插入的文本 99 | */ 100 | function insertAfterText(textDom, value) { 101 | var selectRange; 102 | if (document.selection) { 103 | // IE Support 104 | textDom.focus(); 105 | selectRange = document.selection.createRange(); 106 | selectRange.text = value; 107 | textDom.focus(); 108 | } else if (textDom.selectionStart || textDom.selectionStart == '0') { 109 | // Firefox support 110 | var startPos = textDom.selectionStart; 111 | var endPos = textDom.selectionEnd; 112 | var scrollTop = textDom.scrollTop; 113 | textDom.value = textDom.value.substring(0, startPos) + value + textDom.value.substring(endPos, textDom.value.length); 114 | textDom.focus(); 115 | textDom.selectionStart = startPos + value.length; 116 | textDom.selectionEnd = startPos + value.length; 117 | textDom.scrollTop = scrollTop; 118 | } else { 119 | textDom.value += value; 120 | textDom.focus(); 121 | } 122 | } 123 | 124 | module.exports = { 125 | getCursortPosition, 126 | setCaretPosition, 127 | getSelectText, 128 | setSelectText, 129 | insertAfterText 130 | }; --------------------------------------------------------------------------------