Compare commits
No commits in common. "v2.2.0" and "master" have entirely different histories.
14
.babelrc
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
["env", { "modules": false }],
|
||||||
|
"stage-2"
|
||||||
|
],
|
||||||
|
"plugins": ["transform-runtime"],
|
||||||
|
"comments": false,
|
||||||
|
"env": {
|
||||||
|
"test": {
|
||||||
|
"presets": ["env", "stage-2"],
|
||||||
|
"plugins": ["transform-es2015-modules-commonjs", "dynamic-import-node"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
9
.dockerignore
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
node_modules
|
||||||
|
.git
|
||||||
|
dist
|
||||||
|
.history
|
||||||
|
images
|
||||||
|
docs
|
||||||
|
Dockerfile
|
||||||
|
README.md
|
||||||
|
build.sh
|
9
.editorconfig
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
3
.eslintignore
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
build/*.js
|
||||||
|
config/*.js
|
||||||
|
src/libs/*.js
|
44
.eslintrc.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
// http://eslint.org/docs/user-guide/configuring
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
parser: 'babel-eslint',
|
||||||
|
parserOptions: {
|
||||||
|
sourceType: 'module'
|
||||||
|
},
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
},
|
||||||
|
extends: 'airbnb-base',
|
||||||
|
// required to lint *.vue files
|
||||||
|
plugins: [
|
||||||
|
'html'
|
||||||
|
],
|
||||||
|
globals: {
|
||||||
|
"NODE_ENV": false,
|
||||||
|
"VERSION": false
|
||||||
|
},
|
||||||
|
// check if imports actually resolve
|
||||||
|
'settings': {
|
||||||
|
'import/resolver': {
|
||||||
|
'webpack': {
|
||||||
|
'config': 'build/webpack.base.conf.js'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// add your custom rules here
|
||||||
|
'rules': {
|
||||||
|
'no-param-reassign': [2, { 'props': false }],
|
||||||
|
// don't require .vue extension when importing
|
||||||
|
'import/extensions': ['error', 'always', {
|
||||||
|
'js': 'never',
|
||||||
|
'vue': 'never'
|
||||||
|
}],
|
||||||
|
// allow optionalDependencies
|
||||||
|
'import/no-extraneous-dependencies': ['error', {
|
||||||
|
'optionalDependencies': ['test/unit/index.js']
|
||||||
|
}],
|
||||||
|
// allow debugger during development
|
||||||
|
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0
|
||||||
|
}
|
||||||
|
}
|
16
.gitignore
vendored
@ -1,6 +1,10 @@
|
|||||||
chrome-app*
|
.DS_Store
|
||||||
.project
|
node_modules/
|
||||||
.settings
|
dist/
|
||||||
node_modules
|
.history
|
||||||
Thumbs.db
|
.idea
|
||||||
public/res/bower-libs
|
npm-debug.log*
|
||||||
|
.vscode
|
||||||
|
stackedit_v4
|
||||||
|
chrome-app/*.zip
|
||||||
|
/test/unit/coverage/
|
||||||
|
8
.postcssrc.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// https://github.com/michael-ciniawsky/postcss-load-config
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
"plugins": {
|
||||||
|
// to edit target browsers: use "browserlist" field in package.json
|
||||||
|
"autoprefixer": {}
|
||||||
|
}
|
||||||
|
}
|
7
.stylelintrc
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"processors": ["stylelint-processor-html"],
|
||||||
|
"extends": "stylelint-config-standard",
|
||||||
|
"rules": {
|
||||||
|
"no-empty-source": null
|
||||||
|
}
|
||||||
|
}
|
22
.travis.yml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
language: node_js
|
||||||
|
|
||||||
|
node_js:
|
||||||
|
- "12"
|
||||||
|
|
||||||
|
services:
|
||||||
|
- docker
|
||||||
|
|
||||||
|
before_deploy:
|
||||||
|
# Run docker build
|
||||||
|
- docker build -t benweet/stackedit .
|
||||||
|
# Install Helm
|
||||||
|
- curl -SL -o /tmp/get_helm.sh https://git.io/get_helm.sh
|
||||||
|
- chmod 700 /tmp/get_helm.sh
|
||||||
|
- /tmp/get_helm.sh
|
||||||
|
- helm init --client-only
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
provider: script
|
||||||
|
script: bash build/deploy.sh
|
||||||
|
on:
|
||||||
|
tags: true
|
16
Dockerfile
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
FROM mafgwo/wkhtmltopdf-nodejs:11.15.0
|
||||||
|
|
||||||
|
WORKDIR /opt/stackedit
|
||||||
|
|
||||||
|
COPY package*json /opt/stackedit/
|
||||||
|
COPY gulpfile.js /opt/stackedit/
|
||||||
|
|
||||||
|
RUN npm install --unsafe-perm \
|
||||||
|
&& npm cache clean --force
|
||||||
|
COPY . /opt/stackedit
|
||||||
|
ENV NODE_ENV production
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
EXPOSE 8080
|
||||||
|
|
||||||
|
CMD [ "node", "." ]
|
294
Gruntfile.js
@ -1,294 +0,0 @@
|
|||||||
module.exports = function(grunt) {
|
|
||||||
|
|
||||||
grunt.loadNpmTasks('grunt-contrib-requirejs');
|
|
||||||
grunt.loadNpmTasks('grunt-contrib-less');
|
|
||||||
grunt.loadNpmTasks('grunt-string-replace');
|
|
||||||
grunt.loadNpmTasks('grunt-contrib-copy');
|
|
||||||
grunt.loadNpmTasks('grunt-bower-requirejs');
|
|
||||||
grunt.loadNpmTasks('grunt-bump');
|
|
||||||
grunt.loadNpmTasks('grunt-shell');
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Configuration
|
|
||||||
*/
|
|
||||||
grunt.initConfig({
|
|
||||||
pkg: grunt.file.readJSON('package.json'),
|
|
||||||
requirejs: {
|
|
||||||
compile: {
|
|
||||||
options: {
|
|
||||||
baseUrl: "public/res",
|
|
||||||
name: "main",
|
|
||||||
out: "public/res-min/main.js",
|
|
||||||
mainConfigFile: 'public/res/main.js',
|
|
||||||
optimize: "uglify2",
|
|
||||||
inlineText: true,
|
|
||||||
uglify2: {
|
|
||||||
output: {
|
|
||||||
beautify: true,
|
|
||||||
indent_level: 1,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
excludeShallow: [
|
|
||||||
'css/css-builder',
|
|
||||||
'less/lessc-server',
|
|
||||||
'less/lessc'
|
|
||||||
],
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
less: {
|
|
||||||
compile: {
|
|
||||||
files: [
|
|
||||||
{
|
|
||||||
expand: true,
|
|
||||||
cwd: 'public/res/themes',
|
|
||||||
src: [
|
|
||||||
'*.less'
|
|
||||||
],
|
|
||||||
dest: 'public/res-min/themes',
|
|
||||||
ext: '.css',
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
compress: {
|
|
||||||
options: {
|
|
||||||
compress: true,
|
|
||||||
paths: 'public/res/styles'
|
|
||||||
},
|
|
||||||
files: [
|
|
||||||
{
|
|
||||||
expand: true,
|
|
||||||
cwd: 'public/res-min/themes',
|
|
||||||
src: [
|
|
||||||
'*.css'
|
|
||||||
],
|
|
||||||
dest: 'public/res-min/themes',
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'string-replace': {
|
|
||||||
'css-import': {
|
|
||||||
files: {
|
|
||||||
'./': 'public/res-min/themes/*.css',
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
replacements: [
|
|
||||||
{
|
|
||||||
pattern: /@import /g,
|
|
||||||
replacement: '@import (less) '
|
|
||||||
},
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'font-parameters': {
|
|
||||||
files: {
|
|
||||||
'./': 'public/res-min/themes/*.css',
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
replacements: [
|
|
||||||
{
|
|
||||||
pattern: /(font\/fontello\.\w+)\?\w+/g,
|
|
||||||
replacement: '$1'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'config': {
|
|
||||||
files: {
|
|
||||||
'public/res/config.js': 'public/res/config.js'
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
replacements: [
|
|
||||||
{
|
|
||||||
pattern: /(var VERSION = ).*/,
|
|
||||||
replacement: 'var VERSION = "<%= pkg.version %>";'
|
|
||||||
},
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'cache-manifest': {
|
|
||||||
files: {
|
|
||||||
'public/cache.manifest': 'public/cache.manifest'
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
replacements: [
|
|
||||||
{
|
|
||||||
pattern: /(#Date ).*/,
|
|
||||||
replacement: '$1<%= grunt.template.today() %>'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
pattern: /(#DynamicResourcesBegin\n)[\s\S]*(\n#DynamicResourcesEnd)/,
|
|
||||||
replacement: '$1<%= resources %>$2'
|
|
||||||
},
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
copy: {
|
|
||||||
resources: {
|
|
||||||
files: [
|
|
||||||
// Fonts
|
|
||||||
{
|
|
||||||
expand: true,
|
|
||||||
cwd: 'public/res/font',
|
|
||||||
src: [
|
|
||||||
'**'
|
|
||||||
],
|
|
||||||
dest: 'public/res-min/font/'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
expand: true,
|
|
||||||
cwd: 'public/res/libs/fontello/font',
|
|
||||||
src: [
|
|
||||||
'**'
|
|
||||||
],
|
|
||||||
dest: 'public/res-min/font/'
|
|
||||||
},
|
|
||||||
// Images
|
|
||||||
{
|
|
||||||
expand: true,
|
|
||||||
cwd: 'public/res/img',
|
|
||||||
src: [
|
|
||||||
'**'
|
|
||||||
],
|
|
||||||
dest: 'public/res-min/img/'
|
|
||||||
},
|
|
||||||
// Libraries
|
|
||||||
{
|
|
||||||
expand: true,
|
|
||||||
cwd: 'public/res/bower-libs/requirejs',
|
|
||||||
src: [
|
|
||||||
'require.js'
|
|
||||||
],
|
|
||||||
dest: 'public/res-min/'
|
|
||||||
},
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// Inject bower dependencies into RequireJS configuration
|
|
||||||
bower: {
|
|
||||||
target: {
|
|
||||||
rjsConfig: 'public/res/main.js'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
bump: {
|
|
||||||
options: {
|
|
||||||
files: [
|
|
||||||
'package.json',
|
|
||||||
'bower.json'
|
|
||||||
],
|
|
||||||
updateConfigs: [
|
|
||||||
'pkg'
|
|
||||||
],
|
|
||||||
commitFiles: [
|
|
||||||
'-a'
|
|
||||||
],
|
|
||||||
pushTo: 'origin'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
shell: {
|
|
||||||
deploy: {
|
|
||||||
options: {
|
|
||||||
stdout: true,
|
|
||||||
stderr: true,
|
|
||||||
failOnError: true
|
|
||||||
},
|
|
||||||
command: [
|
|
||||||
//'git branch -f gh-pages master',
|
|
||||||
'git push origin dev master'
|
|
||||||
].join('&&')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Clean
|
|
||||||
*/
|
|
||||||
grunt.registerTask('clean', function() {
|
|
||||||
|
|
||||||
// Remove public/res-min folder
|
|
||||||
grunt.file['delete']('public/res-min');
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Build JavaScript
|
|
||||||
*/
|
|
||||||
grunt.registerTask('build-js', function() {
|
|
||||||
|
|
||||||
// Run r.js optimization
|
|
||||||
grunt.task.run('requirejs');
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Build CSS
|
|
||||||
*/
|
|
||||||
grunt.registerTask('build-css', function() {
|
|
||||||
|
|
||||||
// First compile less files
|
|
||||||
grunt.task.run('less:compile');
|
|
||||||
// Then force evaluation of CSS imports
|
|
||||||
grunt.task.run('string-replace:css-import');
|
|
||||||
// Run less another time with CSS evaluation and compression
|
|
||||||
grunt.task.run('less:compress');
|
|
||||||
// Remove fontello checksum arguments
|
|
||||||
grunt.task.run('string-replace:font-parameters');
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Resources
|
|
||||||
*/
|
|
||||||
grunt.registerTask('build-res', function() {
|
|
||||||
|
|
||||||
// Copy some resources (images, fonts...)
|
|
||||||
grunt.task.run('copy:resources');
|
|
||||||
|
|
||||||
// List resources and inject them in cache.manifest
|
|
||||||
var resFolderList = [
|
|
||||||
'public/res-min',
|
|
||||||
'public/libs/dictionaries',
|
|
||||||
'public/libs/MathJax/extensions',
|
|
||||||
'public/libs/MathJax/fonts/HTML-CSS/TeX/woff',
|
|
||||||
'public/libs/MathJax/jax/output/HTML-CSS/fonts/TeX',
|
|
||||||
'public/libs/MathJax/jax/output/HTML-CSS/fonts/STIX'
|
|
||||||
];
|
|
||||||
grunt.task.run('list-res:' + resFolderList.join(':'));
|
|
||||||
grunt.task.run('string-replace:cache-manifest');
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
grunt.registerTask('list-res', function() {
|
|
||||||
var resourceList = [];
|
|
||||||
grunt.util.recurse(arguments, function(arg) {
|
|
||||||
grunt.log.writeln('Listing resources: ' + arg);
|
|
||||||
grunt.file.recurse(arg, function(abspath) {
|
|
||||||
resourceList.push(abspath.replace(/^public\//, ''));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
grunt.config.set('resources', resourceList.join('\n'));
|
|
||||||
});
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Default task
|
|
||||||
*/
|
|
||||||
grunt.registerTask('default', function() {
|
|
||||||
grunt.task.run('clean');
|
|
||||||
grunt.task.run('build-js');
|
|
||||||
grunt.task.run('build-css');
|
|
||||||
grunt.task.run('build-res');
|
|
||||||
});
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* Deploy task
|
|
||||||
*/
|
|
||||||
grunt.registerTask('deploy', function() {
|
|
||||||
grunt.task.run('bump-only');
|
|
||||||
grunt.task.run('string-replace:config');
|
|
||||||
grunt.task.run('default');
|
|
||||||
grunt.task.run('bump-commit');
|
|
||||||
grunt.task.run('shell');
|
|
||||||
});
|
|
||||||
};
|
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
Apache License
|
Apache License
|
||||||
Version 2.0, January 2004
|
Version 2.0, January 2004
|
||||||
http://www.apache.org/licenses/
|
http://www.apache.org/licenses/
|
||||||
@ -179,7 +178,7 @@
|
|||||||
APPENDIX: How to apply the Apache License to your work.
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
To apply the Apache License to your work, attach the following
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
boilerplate notice, with the fields enclosed by brackets "{}"
|
||||||
replaced with your own identifying information. (Don't include
|
replaced with your own identifying information. (Don't include
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
comment syntax for the file format. We also recommend that a
|
comment syntax for the file format. We also recommend that a
|
||||||
@ -187,7 +186,7 @@
|
|||||||
same "printed page" as the copyright notice for easier
|
same "printed page" as the copyright notice for easier
|
||||||
identification within third-party archives.
|
identification within third-party archives.
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
Copyright {yyyy} {name of copyright owner}
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
@ -1,4 +0,0 @@
|
|||||||
StackEdit - The Markdown editor powered by PageDown.
|
|
||||||
|
|
||||||
Copyright 2013 Benoit Schweblin (http://www.benoitschweblin.com)
|
|
||||||
Licensed under an Apache License (http://www.apache.org/licenses/LICENSE-2.0)
|
|
219
README.md
@ -1,50 +1,191 @@
|
|||||||
StackEdit
|
<h1 align="center" style="text-align:center;">
|
||||||
=========
|
<img src="chrome-app/icon-512.png" width="128" />
|
||||||
|
<br />
|
||||||
|
StackEdit中文版
|
||||||
|
</h1>
|
||||||
|
<p align="center">
|
||||||
|
<strong>笔记利器,在线Markdown编辑器。</strong><br>
|
||||||
|
项目clone自<a href="https://gitee.com/mafgwo/stackedit" target="_blank" title="豆萁">豆萁/stackedit</a>,如果你喜欢该项目,请过去点一下Star,您的肯定是作者最大的动力!
|
||||||
|
</p>
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://stackedit.cn/">https://stackedit.cn</a>
|
||||||
|
</p>
|
||||||
|
<p align="center">
|
||||||
|
<a target="_blank" href="https://www.apache.org/licenses/LICENSE-2.0.txt">
|
||||||
|
<img src="https://img.shields.io/:license-Apache2-blue.svg" alt="Apache 2" />
|
||||||
|
</a>
|
||||||
|
<a target="_blank" href="https://hub.docker.com/r/mafgwo/stackedit">
|
||||||
|
<img src="https://img.shields.io/docker/pulls/mafgwo/stackedit.svg" alt="Docker Pulls" />
|
||||||
|
</a>
|
||||||
|
<a target="_blank" href='https://gitee.com/mafgwo/stackedit/stargazers'>
|
||||||
|
<img src='https://gitee.com/mafgwo/stackedit/badge/star.svg' alt='gitee star'/>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
<br/>
|
||||||
|
<hr />
|
||||||
|
1 笔记支持Gitee、GitHub、Gitea等Git仓库存储。<br>
|
||||||
|
2 支持直接上传图片,也支持多种外部图床(GitHub、Gitea、SM.MS、自定义图床)粘贴或拖拽上传。<br>
|
||||||
|
3 编辑区域支持选择主题或自定义,总有你喜欢的主题。<br>
|
||||||
|
4 支持历史版本管理,不用担心编辑覆盖后无法回滚。<br>
|
||||||
|
5 支持ChatGPT辅助写作。<br>
|
||||||
|
6 支持KaTeX数学表达式、Mermaid UML图、乐谱等扩展。
|
||||||
|
<hr />
|
||||||
|
|
||||||
StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.
|
## 说明
|
||||||
|
|
||||||
> **NOTE:**
|
本项目为本人clone修改自用,如果你也喜欢,请至原作者处获取及交流。
|
||||||
>
|
|
||||||
> - Documents are stored in the [browser's local storage][1], which means they are not shared between different browsers/computers. Furthermore, clearing your browser's data may delete all your local documents.
|
|
||||||
> - Full access to Dropbox or Google Drive is required to be able to import any document in StackEdit. Imported documents are downloaded in your browser and are not transmitted to a server.
|
|
||||||
|
|
||||||
### StackEdit can:
|
## 截图
|
||||||
|
|
||||||
- Manage multiple Markdown documents online or offline
|
|
||||||
- Export your documents in Markdown or HTML and format it using a template
|
|
||||||
- Synchronize your Markdown documents in the Cloud
|
|
||||||
- Edit existing Markdown documents from Google Drive, Dropbox and your local hard drive
|
|
||||||
- Post your Markdown document on Blogger/Blogspot, WordPress, Tumblr
|
|
||||||
- Publish your Markdown document on GitHub, Gist, Google Drive, Dropbox or any SSH server
|
|
||||||
- Share a link to a Markdown document that renders it in a nice viewer
|
|
||||||
- Show statistics about your document
|
|
||||||
- Convert HTML to Markdown
|
|
||||||
|
|
||||||
### Features:
|
**亮暗主题切换、编辑主题切换**
|
||||||
|

|
||||||
|
|
||||||
- Real-time HTML preview with Scroll Link feature to bind editor and preview scrollbars
|
**支持的文档空间**
|
||||||
- Markdown Extra support and Prettify/Highlight.js syntax highlighting
|

|
||||||
- LaTeX mathematical expressions using MathJax
|
|
||||||
- WYSIWYG control buttons
|
|
||||||
- Configurable layout
|
|
||||||
- Theming support with multiple themes available
|
|
||||||
- A la carte extensions
|
|
||||||
- Offline editing
|
|
||||||
- Online synchronization using Google Drive and Dropbox
|
|
||||||
- One click publish on Blogger, Dropbox, Gist, GitHub, Google Drive, SSH server, Tumblr, WordPress
|
|
||||||
|
|
||||||
### Documentation:
|
**拖拽粘贴上传图片**
|
||||||
|

|
||||||
|
|
||||||
- [Welcome document][2]
|
**支持文档搜索**
|
||||||
- [Developer guide][3]
|

|
||||||
- [Theming guide][4]
|
|
||||||
|
|
||||||
|
**ChatGPT集成协助写作**
|
||||||
|

|
||||||
|
|
||||||
> **NOTE:** This page has been written and published with [StackEdit][5].
|
## 相比国外开源版本的区别:
|
||||||
|
|
||||||
|
- 修复了Github授权登录问题
|
||||||
|
- 支持了Gitee仓库(2022-05-25)
|
||||||
|
- 支持了Gitea仓库(2022-05-25)
|
||||||
|
- 汉化(2022-06-01)
|
||||||
|
- 主文档空间从GoogleDrive切换为Gitee(2022-06-04)
|
||||||
|
- 支持SM.MS图床粘贴/拖拽图片自动上传(2022-07-01)
|
||||||
|
- 支持Gitea图床粘贴/拖拽图片自动上传(2022-07-02)
|
||||||
|
- 支持自定义图床粘贴/拖拽图片自动上传(2022-07-04)
|
||||||
|
- 支持GitHub图床粘贴/拖拽图片自动上传(2022-07-31)
|
||||||
|
- 支持了右上角一键切换主题,补全了深色主题的样式(2022-08-07)
|
||||||
|
- 编辑与预览区域样式优化(2022-08-10)
|
||||||
|
- 左边栏文件资源管理支持搜索文件(2022-08-17)
|
||||||
|
- 支持[TOC]目录(2022-09-04)
|
||||||
|
- 发布支持填写提交信息[针对Gitee、GitHub、Gitea、Gitlab](2022-09-10)
|
||||||
|
- 支持文档空间关闭自动同步[针对Gitee、GitHub、Gitea、Gitlab],关闭后可自定义提交信息(2022-09-23)
|
||||||
|
- Gitea支持后端配置指定应用ID和Secret(2022-10-03)
|
||||||
|
- 支持编辑区域选择主题样式(2022-10-06)
|
||||||
|
- 支持图片直接存储到当前文档空间(2022-10-29)
|
||||||
|
- 支持MD文档之间链接跳转(2022-11-20)
|
||||||
|
- 支持预览区域选择主题样式(2022-12-04)
|
||||||
|
- Gitlab的支持优化(2023-02-23)
|
||||||
|
- 导出HTML、PDF支持带预览主题导出(2023-02-26)
|
||||||
|
- 支持分享文档(2023-03-30)
|
||||||
|
- 支持ChatGPT生成内容(2023-04-10)
|
||||||
|
- GitLab授权接口调整(2023-08-26)
|
||||||
|
- 主文档空间支持GitHub登录(2023-10-19)
|
||||||
|
|
||||||
[1]: https://developer.mozilla.org/en-US/docs/Web/Guide/DOM/Storage#localStorage
|
## 国外开源版本弊端:
|
||||||
[2]: https://github.com/benweet/stackedit/blob/master/WELCOME.md#welcome-to-stackedit---welcome "Welcome document"
|
|
||||||
[3]: https://github.com/benweet/stackedit/blob/master/doc/developer-guide.md#developer-guide "Developer guide"
|
- 作者已经不维护了或很少维护了
|
||||||
[4]: https://github.com/benweet/stackedit/blob/master/doc/theming.md#stackedit-theming-guide "Theming guide"
|
- 不支持国内常用Gitee
|
||||||
[5]: http://benweet.github.io/stackedit/ "StackEdit"
|
- 强依赖GoogleDrive,而Google Drive在国内不能正常访问
|
||||||
|
|
||||||
|
## 部署说明
|
||||||
|
|
||||||
|
> 建议docker-compose方式部署,其他部署方式如遇到问题欢迎提issue。
|
||||||
|
|
||||||
|
docker官方仓库下载太慢可以使用阿里云的镜像仓库,镜像仓库地址:registry.cn-hangzhou.aliyuncs.com/mafgwo/stackedit:【版本号】
|
||||||
|
|
||||||
|
`docker-compose.yml`如下:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: "3.7"
|
||||||
|
services:
|
||||||
|
stackedit:
|
||||||
|
image: mafgwo/stackedit:【docker中央仓库找到最新版本】
|
||||||
|
container_name: stackedit
|
||||||
|
environment:
|
||||||
|
- LISTENING_PORT=8080
|
||||||
|
- ROOT_URL=/
|
||||||
|
- USER_BUCKET_NAME=root
|
||||||
|
- DROPBOX_APP_KEY=【不需要支持则删掉】
|
||||||
|
- DROPBOX_APP_KEY_FULL=【不需要支持则删掉】
|
||||||
|
- GITHUB_CLIENT_ID=【不需要支持则删掉】
|
||||||
|
- GITHUB_CLIENT_SECRET=【不需要支持则删掉】
|
||||||
|
- GITEE_CLIENT_ID=【不需要支持则删掉】
|
||||||
|
- GITEE_CLIENT_SECRET=【不需要支持则删掉】
|
||||||
|
- GOOGLE_CLIENT_ID=【不需要支持则删掉】
|
||||||
|
- GOOGLE_API_KEY=【不需要支持则删掉】
|
||||||
|
- GITEA_CLIENT_ID=【不需要支持则删掉】
|
||||||
|
- GITEA_CLIENT_SECRET=【不需要支持则删掉】
|
||||||
|
- GITEA_URL=【不需要支持则删掉】
|
||||||
|
- GITLAB_CLIENT_ID=【不需要支持则删掉】
|
||||||
|
- GITLAB_CLIENT_SECRET=【不需要支持则删掉】
|
||||||
|
- GITLAB_URL=【不需要支持则删掉】
|
||||||
|
ports:
|
||||||
|
- 8080:8080/tcp
|
||||||
|
network_mode: bridge
|
||||||
|
restart: always
|
||||||
|
```
|
||||||
|
|
||||||
|
docker-compose方式的启动或停止命令
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 在 docker-compose.yml 文件目录下 启动命令
|
||||||
|
docker-compose up -d
|
||||||
|
# 在 docker-compose.yml 文件目录下 停止命令
|
||||||
|
docker-compose down
|
||||||
|
# 更新镜像只需要修改docker-compose.yml中镜像版本执行再停止、启动命令即可
|
||||||
|
```
|
||||||
|
|
||||||
|
或者可以直接通过Docker命名直接启动,命令如下:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -itd --name stackedit \
|
||||||
|
-p 8080:8080 \
|
||||||
|
-e LISTENING_PORT=8080 \
|
||||||
|
-e ROOT_URL=/ \
|
||||||
|
-e USER_BUCKET_NAME=root \
|
||||||
|
-e DROPBOX_APP_KEY=【不需要支持则删掉】 \
|
||||||
|
-e DROPBOX_APP_KEY_FULL=【不需要支持则删掉】 \
|
||||||
|
-e GITHUB_CLIENT_ID=【不需要支持则删掉】 \
|
||||||
|
-e GITHUB_CLIENT_SECRET=【不需要支持则删掉】 \
|
||||||
|
-e GITEE_CLIENT_ID=【不需要支持则删掉】 \
|
||||||
|
-e GITEE_CLIENT_SECRET=【不需要支持则删掉】 \
|
||||||
|
-e GOOGLE_CLIENT_ID=【不需要支持则删掉】 \
|
||||||
|
-e GOOGLE_API_KEY=【不需要支持则删掉】 \
|
||||||
|
-e GITEA_CLIENT_ID=【不需要支持则删掉】 \
|
||||||
|
-e GITEA_CLIENT_SECRET=【不需要支持则删掉】 \
|
||||||
|
-e GITEA_URL=【不需要支持则删掉】 \
|
||||||
|
-e GITLAB_CLIENT_ID=【不需要支持则删掉】 \
|
||||||
|
-e GITLAB_CLIENT_SECRET=【不需要支持则删掉】 \
|
||||||
|
-e GITLAB_URL=【不需要支持则删掉】 \
|
||||||
|
mafgwo/stackedit:【docker中央仓库找到最新版本】
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## 如何创建三方平台应用
|
||||||
|
|
||||||
|
> 部署时,如果需要支持Gitee或GitHub,则需要自行到对应三方平台创建应用,获取到应用ID和秘钥,替换到以上的环境变量中,再启动应用。
|
||||||
|
|
||||||
|
- Gitee的环境变量:GITEE_CLIENT_ID、GITEE_CLIENT_SECRET,**[如何创建Gitee应用](./docs/部署之Gitee应用创建.md)**
|
||||||
|
- GitHub的环境变量:GITHUB_CLIENT_ID、GITEE_CLIENT_SECRET,**[如何创建GitHub应用](./docs/部署之GitHub应用创建.md)**
|
||||||
|
- Gitea可选择性配置环境变量(未配置则在关联时前端指定,有配置则仅允许配置的应用信息):GITEA_CLIENT_ID、GITEA_CLIENT_SECRET、GITEA_URL,**[如何创建Gitea应用](./docs/部署之Gitea应用创建.md)**
|
||||||
|
- Gitlab可选择性配置环境变量(未配置则在关联时前端指定,有配置则仅允许配置的应用信息):GITLAB_CLIENT_ID、GITLAB_CLIENT_SECRET、GITLAB_URL **如何创建Gitlab应用(待补充文档)**
|
||||||
|
|
||||||
|
(特别说明:自建的Gitea、Gitlab要能接入stackedit必须支持跨域)
|
||||||
|
|
||||||
|
## 编译与运行
|
||||||
|
|
||||||
|
> 编译运行的nodejs版本选择11.15.0版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 安装依赖
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# serve with hot reload at localhost:8080
|
||||||
|
npm start
|
||||||
|
|
||||||
|
# build for production with minification
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# build for production and view the bundle analyzer report
|
||||||
|
npm run build --report
|
||||||
|
```
|
||||||
|
35
bower.json
@ -1,35 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "stackedit",
|
|
||||||
"version": "2.2.0",
|
|
||||||
"description": "StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.",
|
|
||||||
"dependencies": {
|
|
||||||
"bootstrap": "3.0.0",
|
|
||||||
"jquery": "2.0.3",
|
|
||||||
"underscore": "1.5.1",
|
|
||||||
"requirejs": "~2.1.8",
|
|
||||||
"require-css": "~0.0.7",
|
|
||||||
"require-less": "~0.0.7",
|
|
||||||
"mousetrap": "~1.4.4",
|
|
||||||
"jgrowl": "~1.2.10",
|
|
||||||
"google-code-prettify": "~1.0.0",
|
|
||||||
"highlightjs": "~7.3.0",
|
|
||||||
"jquery-ui": "~1.10.3",
|
|
||||||
"FileSaver": "*",
|
|
||||||
"stacktrace": "~0.5.3",
|
|
||||||
"requirejs-text": "~2.0.10",
|
|
||||||
"bootstrap-tour": "~0.6.0",
|
|
||||||
"ace": "#51b7cb67a63998c9c0b7d089a85c60e032a7cc17",
|
|
||||||
"pagedown-ace": "git@github.com:benweet/pagedown-ace.git#7805f240f343b5b2a05a5b9c0d4a3f5091e7a49b",
|
|
||||||
"pagedown-extra": "git@github.com:jmcmanus/pagedown-extra.git#ae1547d1662e07d6530137bd3dff3a6e6c8aec3b",
|
|
||||||
"crel": "git@github.com:KoryNunn/crel.git#8dbda04b129fc0aec01a2a080d1cab26816e11c1",
|
|
||||||
"waitForImages": "git@github.com:alexanderdickson/waitForImages.git#~1.4.2",
|
|
||||||
"to-markdown": "git@github.com:benweet/to-markdown.git#jquery",
|
|
||||||
"Typo.js": "git@github.com:cfinke/Typo.js.git",
|
|
||||||
"xregexp": "d06eff50f87d81d2dd3afc1e854784c38b17bcc4",
|
|
||||||
"yaml.js": "git@github.com:jeremyfa/yaml.js.git#~0.1.4",
|
|
||||||
"lz-string": "git@github.com:pieroxy/lz-string.git"
|
|
||||||
},
|
|
||||||
"resolutions": {
|
|
||||||
"jquery": "2.0.3"
|
|
||||||
}
|
|
||||||
}
|
|
37
build.sh
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 检查参数是否提供版本号
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "请提供版本号作为参数"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 定义版本号变量
|
||||||
|
VERSION="$1"
|
||||||
|
IMAGE_NAME="mafgwo/stackedit"
|
||||||
|
|
||||||
|
# 构建 Docker 镜像
|
||||||
|
build_image() {
|
||||||
|
docker build -t "$IMAGE_NAME" .
|
||||||
|
}
|
||||||
|
|
||||||
|
# 标记 Docker 镜像
|
||||||
|
tag_image() {
|
||||||
|
docker tag "$IMAGE_NAME" "$IMAGE_NAME:$VERSION"
|
||||||
|
docker tag "$IMAGE_NAME" "registry.cn-hangzhou.aliyuncs.com/$IMAGE_NAME:$VERSION"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 推送 Docker 镜像
|
||||||
|
push_image() {
|
||||||
|
docker push "$IMAGE_NAME"
|
||||||
|
docker push "registry.cn-hangzhou.aliyuncs.com/$IMAGE_NAME"
|
||||||
|
docker push "$IMAGE_NAME:$VERSION"
|
||||||
|
docker push "registry.cn-hangzhou.aliyuncs.com/$IMAGE_NAME:$VERSION"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 执行构建、标记和推送
|
||||||
|
build_image
|
||||||
|
tag_image
|
||||||
|
push_image
|
||||||
|
|
||||||
|
echo "操作完成"
|
35
build/build.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
require('./check-versions')()
|
||||||
|
|
||||||
|
process.env.NODE_ENV = 'production'
|
||||||
|
|
||||||
|
var ora = require('ora')
|
||||||
|
var rm = require('rimraf')
|
||||||
|
var path = require('path')
|
||||||
|
var chalk = require('chalk')
|
||||||
|
var webpack = require('webpack')
|
||||||
|
var config = require('../config')
|
||||||
|
var webpackConfig = require('./webpack.prod.conf')
|
||||||
|
|
||||||
|
var spinner = ora('building for production...')
|
||||||
|
spinner.start()
|
||||||
|
|
||||||
|
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
|
||||||
|
if (err) throw err
|
||||||
|
webpack(webpackConfig, function (err, stats) {
|
||||||
|
spinner.stop()
|
||||||
|
if (err) throw err
|
||||||
|
process.stdout.write(stats.toString({
|
||||||
|
colors: true,
|
||||||
|
modules: false,
|
||||||
|
children: false,
|
||||||
|
chunks: false,
|
||||||
|
chunkModules: false
|
||||||
|
}) + '\n\n')
|
||||||
|
|
||||||
|
console.log(chalk.cyan(' Build complete.\n'))
|
||||||
|
console.log(chalk.yellow(
|
||||||
|
' Tip: built files are meant to be served over an HTTP server.\n' +
|
||||||
|
' Opening index.html over file:// won\'t work.\n'
|
||||||
|
))
|
||||||
|
})
|
||||||
|
})
|
48
build/check-versions.js
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
var chalk = require('chalk')
|
||||||
|
var semver = require('semver')
|
||||||
|
var packageConfig = require('../package.json')
|
||||||
|
var shell = require('shelljs')
|
||||||
|
function exec (cmd) {
|
||||||
|
return require('child_process').execSync(cmd).toString().trim()
|
||||||
|
}
|
||||||
|
|
||||||
|
var versionRequirements = [
|
||||||
|
{
|
||||||
|
name: 'node',
|
||||||
|
currentVersion: semver.clean(process.version),
|
||||||
|
versionRequirement: packageConfig.engines.node
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
if (shell.which('npm')) {
|
||||||
|
versionRequirements.push({
|
||||||
|
name: 'npm',
|
||||||
|
currentVersion: exec('npm --version'),
|
||||||
|
versionRequirement: packageConfig.engines.npm
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = function () {
|
||||||
|
var warnings = []
|
||||||
|
for (var i = 0; i < versionRequirements.length; i++) {
|
||||||
|
var mod = versionRequirements[i]
|
||||||
|
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
|
||||||
|
warnings.push(mod.name + ': ' +
|
||||||
|
chalk.red(mod.currentVersion) + ' should be ' +
|
||||||
|
chalk.green(mod.versionRequirement)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (warnings.length) {
|
||||||
|
console.log('')
|
||||||
|
console.log(chalk.yellow('To use this template, you must update following to modules:'))
|
||||||
|
console.log()
|
||||||
|
for (var i = 0; i < warnings.length; i++) {
|
||||||
|
var warning = warnings[i]
|
||||||
|
console.log(' ' + warning)
|
||||||
|
}
|
||||||
|
console.log()
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
}
|
24
build/deploy.sh
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Tag and push docker image
|
||||||
|
docker login -u benweet -p "$DOCKER_PASSWORD"
|
||||||
|
docker tag benweet/stackedit "benweet/stackedit:$TRAVIS_TAG"
|
||||||
|
docker push benweet/stackedit:$TRAVIS_TAG
|
||||||
|
docker tag benweet/stackedit:$TRAVIS_TAG benweet/stackedit:latest
|
||||||
|
docker push benweet/stackedit:latest
|
||||||
|
|
||||||
|
# Build the chart
|
||||||
|
cd "$TRAVIS_BUILD_DIR"
|
||||||
|
npm run chart
|
||||||
|
|
||||||
|
# Add chart to helm repository
|
||||||
|
git clone --branch master "https://benweet:$GITHUB_TOKEN@github.com/benweet/stackedit-charts.git" /tmp/charts
|
||||||
|
cd /tmp/charts
|
||||||
|
helm package "$TRAVIS_BUILD_DIR/dist/stackedit"
|
||||||
|
helm repo index --url https://benweet.github.io/stackedit-charts/ .
|
||||||
|
git config user.name "Benoit Schweblin"
|
||||||
|
git config user.email "benoit.schweblin@gmail.com"
|
||||||
|
git add .
|
||||||
|
git commit -m "Added $TRAVIS_TAG"
|
||||||
|
git push origin master
|
9
build/dev-client.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
require('eventsource-polyfill')
|
||||||
|
var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')
|
||||||
|
|
||||||
|
hotClient.subscribe(function (event) {
|
||||||
|
if (event.action === 'reload') {
|
||||||
|
window.location.reload()
|
||||||
|
}
|
||||||
|
})
|
94
build/dev-server.js
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
require('./check-versions')()
|
||||||
|
|
||||||
|
var config = require('../config')
|
||||||
|
Object.keys(config.dev.env).forEach((key) => {
|
||||||
|
if (!process.env[key]) {
|
||||||
|
process.env[key] = JSON.parse(config.dev.env[key]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var opn = require('opn')
|
||||||
|
var path = require('path')
|
||||||
|
var express = require('express')
|
||||||
|
var webpack = require('webpack')
|
||||||
|
var proxyMiddleware = require('http-proxy-middleware')
|
||||||
|
var webpackConfig = require('./webpack.dev.conf')
|
||||||
|
|
||||||
|
// default port where dev server listens for incoming traffic
|
||||||
|
var port = process.env.PORT || config.dev.port
|
||||||
|
// automatically open browser, if not set will be false
|
||||||
|
var autoOpenBrowser = !!config.dev.autoOpenBrowser
|
||||||
|
// Define HTTP proxies to your custom API backend
|
||||||
|
// https://github.com/chimurai/http-proxy-middleware
|
||||||
|
var proxyTable = config.dev.proxyTable
|
||||||
|
|
||||||
|
var app = express()
|
||||||
|
var compiler = webpack(webpackConfig)
|
||||||
|
|
||||||
|
// StackEdit custom middlewares
|
||||||
|
require('../server')(app);
|
||||||
|
|
||||||
|
var devMiddleware = require('webpack-dev-middleware')(compiler, {
|
||||||
|
publicPath: webpackConfig.output.publicPath,
|
||||||
|
quiet: true
|
||||||
|
})
|
||||||
|
|
||||||
|
var hotMiddleware = require('webpack-hot-middleware')(compiler, {
|
||||||
|
log: () => {}
|
||||||
|
})
|
||||||
|
// force page reload when html-webpack-plugin template changes
|
||||||
|
compiler.plugin('compilation', function (compilation) {
|
||||||
|
compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
|
||||||
|
hotMiddleware.publish({ action: 'reload' })
|
||||||
|
cb()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
// proxy api requests
|
||||||
|
Object.keys(proxyTable).forEach(function (context) {
|
||||||
|
var options = proxyTable[context]
|
||||||
|
if (typeof options === 'string') {
|
||||||
|
options = { target: options }
|
||||||
|
}
|
||||||
|
app.use(proxyMiddleware(options.filter || context, options))
|
||||||
|
})
|
||||||
|
|
||||||
|
// handle fallback for HTML5 history API
|
||||||
|
app.use(require('connect-history-api-fallback')())
|
||||||
|
|
||||||
|
// serve webpack bundle output
|
||||||
|
app.use(devMiddleware)
|
||||||
|
|
||||||
|
// enable hot-reload and state-preserving
|
||||||
|
// compilation error display
|
||||||
|
app.use(hotMiddleware)
|
||||||
|
|
||||||
|
// serve pure static assets
|
||||||
|
var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory)
|
||||||
|
app.use(staticPath, express.static('./static'))
|
||||||
|
|
||||||
|
var uri = 'http://localhost:' + port
|
||||||
|
|
||||||
|
var _resolve
|
||||||
|
var readyPromise = new Promise(resolve => {
|
||||||
|
_resolve = resolve
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log('> Starting dev server...')
|
||||||
|
devMiddleware.waitUntilValid(() => {
|
||||||
|
console.log('> Listening at ' + uri + '\n')
|
||||||
|
// when env is testing, don't need open it
|
||||||
|
if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') {
|
||||||
|
opn(uri)
|
||||||
|
}
|
||||||
|
_resolve()
|
||||||
|
})
|
||||||
|
|
||||||
|
var server = app.listen(port)
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
ready: readyPromise,
|
||||||
|
close: () => {
|
||||||
|
server.close()
|
||||||
|
}
|
||||||
|
}
|
71
build/utils.js
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
var path = require('path')
|
||||||
|
var config = require('../config')
|
||||||
|
var ExtractTextPlugin = require('extract-text-webpack-plugin')
|
||||||
|
|
||||||
|
exports.assetsPath = function (_path) {
|
||||||
|
var assetsSubDirectory = process.env.NODE_ENV === 'production'
|
||||||
|
? config.build.assetsSubDirectory
|
||||||
|
: config.dev.assetsSubDirectory
|
||||||
|
return path.posix.join(assetsSubDirectory, _path)
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.cssLoaders = function (options) {
|
||||||
|
options = options || {}
|
||||||
|
|
||||||
|
var cssLoader = {
|
||||||
|
loader: 'css-loader',
|
||||||
|
options: {
|
||||||
|
minimize: process.env.NODE_ENV === 'production',
|
||||||
|
sourceMap: options.sourceMap
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// generate loader string to be used with extract text plugin
|
||||||
|
function generateLoaders (loader, loaderOptions) {
|
||||||
|
var loaders = [cssLoader]
|
||||||
|
if (loader) {
|
||||||
|
loaders.push({
|
||||||
|
loader: loader + '-loader',
|
||||||
|
options: Object.assign({}, loaderOptions, {
|
||||||
|
sourceMap: options.sourceMap
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract CSS when that option is specified
|
||||||
|
// (which is the case during production build)
|
||||||
|
if (options.extract) {
|
||||||
|
return ExtractTextPlugin.extract({
|
||||||
|
use: loaders,
|
||||||
|
fallback: 'vue-style-loader'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
return ['vue-style-loader'].concat(loaders)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
|
||||||
|
return {
|
||||||
|
css: generateLoaders(),
|
||||||
|
postcss: generateLoaders(),
|
||||||
|
less: generateLoaders('less'),
|
||||||
|
sass: generateLoaders('sass', { indentedSyntax: true }),
|
||||||
|
scss: generateLoaders('sass'),
|
||||||
|
stylus: generateLoaders('stylus'),
|
||||||
|
styl: generateLoaders('stylus')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate loaders for standalone style files (outside of .vue)
|
||||||
|
exports.styleLoaders = function (options) {
|
||||||
|
var output = []
|
||||||
|
var loaders = exports.cssLoaders(options)
|
||||||
|
for (var extension in loaders) {
|
||||||
|
var loader = loaders[extension]
|
||||||
|
output.push({
|
||||||
|
test: new RegExp('\\.' + extension + '$'),
|
||||||
|
use: loader
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return output
|
||||||
|
}
|
12
build/vue-loader.conf.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
var utils = require('./utils')
|
||||||
|
var config = require('../config')
|
||||||
|
var isProduction = process.env.NODE_ENV === 'production'
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
loaders: utils.cssLoaders({
|
||||||
|
sourceMap: isProduction
|
||||||
|
? config.build.productionSourceMap
|
||||||
|
: config.dev.cssSourceMap,
|
||||||
|
extract: isProduction
|
||||||
|
})
|
||||||
|
}
|
109
build/webpack.base.conf.js
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
var path = require('path')
|
||||||
|
var webpack = require('webpack')
|
||||||
|
var utils = require('./utils')
|
||||||
|
var config = require('../config')
|
||||||
|
var VueLoaderPlugin = require('vue-loader/lib/plugin')
|
||||||
|
var vueLoaderConfig = require('./vue-loader.conf')
|
||||||
|
var StylelintPlugin = require('stylelint-webpack-plugin')
|
||||||
|
|
||||||
|
function resolve (dir) {
|
||||||
|
return path.join(__dirname, '..', dir)
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
entry: {
|
||||||
|
app: './src/'
|
||||||
|
},
|
||||||
|
node: {
|
||||||
|
// For mermaid
|
||||||
|
fs: 'empty' // jison generated code requires 'fs'
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
path: config.build.assetsRoot,
|
||||||
|
filename: '[name].js',
|
||||||
|
publicPath: process.env.NODE_ENV === 'production'
|
||||||
|
? config.build.assetsPublicPath
|
||||||
|
: config.dev.assetsPublicPath
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
extensions: ['.js', '.vue', '.json'],
|
||||||
|
alias: {
|
||||||
|
'@': resolve('src')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.(js|vue)$/,
|
||||||
|
loader: 'eslint-loader',
|
||||||
|
enforce: 'pre',
|
||||||
|
include: [resolve('src'), resolve('test')],
|
||||||
|
options: {
|
||||||
|
formatter: require('eslint-friendly-formatter')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.vue$/,
|
||||||
|
loader: 'vue-loader',
|
||||||
|
options: vueLoaderConfig
|
||||||
|
},
|
||||||
|
// We can't pass graphlibrary to babel
|
||||||
|
{
|
||||||
|
test: /\.js$/,
|
||||||
|
loader: 'string-replace-loader',
|
||||||
|
include: [
|
||||||
|
resolve('node_modules/graphlibrary')
|
||||||
|
],
|
||||||
|
options: {
|
||||||
|
search: '^\\s*(?:let|const) ',
|
||||||
|
replace: 'var ',
|
||||||
|
flags: 'gm'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.js$/,
|
||||||
|
loader: 'babel-loader',
|
||||||
|
include: [
|
||||||
|
resolve('src'),
|
||||||
|
resolve('test'),
|
||||||
|
resolve('node_modules/mermaid')
|
||||||
|
],
|
||||||
|
exclude: [
|
||||||
|
resolve('node_modules/mermaid/src/diagrams/class/parser'),
|
||||||
|
resolve('node_modules/mermaid/src/diagrams/flowchart/parser'),
|
||||||
|
resolve('node_modules/mermaid/src/diagrams/gantt/parser'),
|
||||||
|
resolve('node_modules/mermaid/src/diagrams/git/parser'),
|
||||||
|
resolve('node_modules/mermaid/src/diagrams/sequence/parser')
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
|
||||||
|
loader: 'url-loader',
|
||||||
|
options: {
|
||||||
|
limit: 10000,
|
||||||
|
name: utils.assetsPath('img/[name].[hash:7].[ext]')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.(ttf|eot|otf|woff2?)(\?.*)?$/,
|
||||||
|
loader: 'file-loader',
|
||||||
|
options: {
|
||||||
|
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.(md|yml|html)$/,
|
||||||
|
loader: 'raw-loader'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new VueLoaderPlugin(),
|
||||||
|
new StylelintPlugin({
|
||||||
|
files: ['**/*.vue', '**/*.scss']
|
||||||
|
}),
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
VERSION: JSON.stringify(require('../package.json').version)
|
||||||
|
})
|
||||||
|
]
|
||||||
|
}
|
35
build/webpack.dev.conf.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
var utils = require('./utils')
|
||||||
|
var webpack = require('webpack')
|
||||||
|
var config = require('../config')
|
||||||
|
var merge = require('webpack-merge')
|
||||||
|
var baseWebpackConfig = require('./webpack.base.conf')
|
||||||
|
var HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||||
|
var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
|
||||||
|
|
||||||
|
// add hot-reload related code to entry chunks
|
||||||
|
Object.keys(baseWebpackConfig.entry).forEach(function (name) {
|
||||||
|
baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name])
|
||||||
|
})
|
||||||
|
|
||||||
|
module.exports = merge(baseWebpackConfig, {
|
||||||
|
module: {
|
||||||
|
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap })
|
||||||
|
},
|
||||||
|
// cheap-module-eval-source-map is faster for development
|
||||||
|
devtool: 'source-map',
|
||||||
|
plugins: [
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
NODE_ENV: config.dev.env.NODE_ENV
|
||||||
|
}),
|
||||||
|
// https://github.com/glenjamin/webpack-hot-middleware#installation--usage
|
||||||
|
new webpack.HotModuleReplacementPlugin(),
|
||||||
|
new webpack.NoEmitOnErrorsPlugin(),
|
||||||
|
// https://github.com/ampedandwired/html-webpack-plugin
|
||||||
|
new HtmlWebpackPlugin({
|
||||||
|
filename: 'index.html',
|
||||||
|
template: 'index.html',
|
||||||
|
inject: true
|
||||||
|
}),
|
||||||
|
new FriendlyErrorsPlugin()
|
||||||
|
]
|
||||||
|
})
|
154
build/webpack.prod.conf.js
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
var path = require('path')
|
||||||
|
var utils = require('./utils')
|
||||||
|
var webpack = require('webpack')
|
||||||
|
var config = require('../config')
|
||||||
|
var merge = require('webpack-merge')
|
||||||
|
var baseWebpackConfig = require('./webpack.base.conf')
|
||||||
|
var CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||||
|
var HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||||
|
var ExtractTextPlugin = require('extract-text-webpack-plugin')
|
||||||
|
var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
|
||||||
|
var OfflinePlugin = require('offline-plugin');
|
||||||
|
var WebpackPwaManifest = require('webpack-pwa-manifest')
|
||||||
|
var FaviconsWebpackPlugin = require('favicons-webpack-plugin')
|
||||||
|
|
||||||
|
function resolve (dir) {
|
||||||
|
return path.join(__dirname, '..', dir)
|
||||||
|
}
|
||||||
|
|
||||||
|
var env = config.build.env
|
||||||
|
|
||||||
|
var webpackConfig = merge(baseWebpackConfig, {
|
||||||
|
module: {
|
||||||
|
rules: utils.styleLoaders({
|
||||||
|
sourceMap: config.build.productionSourceMap,
|
||||||
|
extract: true
|
||||||
|
})
|
||||||
|
},
|
||||||
|
devtool: config.build.productionSourceMap ? '#source-map' : false,
|
||||||
|
output: {
|
||||||
|
path: config.build.assetsRoot,
|
||||||
|
filename: utils.assetsPath('js/[name].[chunkhash].js'),
|
||||||
|
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
// http://vuejs.github.io/vue-loader/en/workflow/production.html
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
NODE_ENV: env.NODE_ENV,
|
||||||
|
GOOGLE_CLIENT_ID: env.GOOGLE_CLIENT_ID,
|
||||||
|
GITHUB_CLIENT_ID: env.GITHUB_CLIENT_ID
|
||||||
|
}),
|
||||||
|
new webpack.optimize.UglifyJsPlugin({
|
||||||
|
compress: {
|
||||||
|
warnings: false
|
||||||
|
},
|
||||||
|
sourceMap: true
|
||||||
|
}),
|
||||||
|
// extract css into its own file
|
||||||
|
new ExtractTextPlugin({
|
||||||
|
filename: utils.assetsPath('css/[name].[contenthash].css')
|
||||||
|
}),
|
||||||
|
// Compress extracted CSS. We are using this plugin so that possible
|
||||||
|
// duplicated CSS from different components can be deduped.
|
||||||
|
new OptimizeCSSPlugin({
|
||||||
|
cssProcessorOptions: {
|
||||||
|
safe: true
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
// generate dist index.html with correct asset hash for caching.
|
||||||
|
// you can customize output by editing /index.html
|
||||||
|
// see https://github.com/ampedandwired/html-webpack-plugin
|
||||||
|
new HtmlWebpackPlugin({
|
||||||
|
filename: config.build.index,
|
||||||
|
template: 'index.html',
|
||||||
|
inject: true,
|
||||||
|
minify: {
|
||||||
|
removeComments: true,
|
||||||
|
collapseWhitespace: true,
|
||||||
|
removeAttributeQuotes: true
|
||||||
|
// more options:
|
||||||
|
// https://github.com/kangax/html-minifier#options-quick-reference
|
||||||
|
},
|
||||||
|
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
|
||||||
|
chunksSortMode: 'dependency'
|
||||||
|
}),
|
||||||
|
// split vendor js into its own file
|
||||||
|
new webpack.optimize.CommonsChunkPlugin({
|
||||||
|
name: 'vendor',
|
||||||
|
minChunks: function (module, count) {
|
||||||
|
// any required modules inside node_modules are extracted to vendor
|
||||||
|
return (
|
||||||
|
module.resource &&
|
||||||
|
/\.js$/.test(module.resource) &&
|
||||||
|
module.resource.indexOf(
|
||||||
|
path.join(__dirname, '../node_modules')
|
||||||
|
) === 0
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
// extract webpack runtime and module manifest to its own file in order to
|
||||||
|
// prevent vendor hash from being updated whenever app bundle is updated
|
||||||
|
new webpack.optimize.CommonsChunkPlugin({
|
||||||
|
name: 'manifest',
|
||||||
|
chunks: ['vendor']
|
||||||
|
}),
|
||||||
|
// copy custom static assets
|
||||||
|
new CopyWebpackPlugin([
|
||||||
|
{
|
||||||
|
from: path.resolve(__dirname, '../static'),
|
||||||
|
to: config.build.assetsSubDirectory,
|
||||||
|
ignore: ['.*']
|
||||||
|
}
|
||||||
|
]),
|
||||||
|
new FaviconsWebpackPlugin({
|
||||||
|
logo: resolve('src/assets/favicon.png'),
|
||||||
|
title: 'StackEdit',
|
||||||
|
}),
|
||||||
|
new WebpackPwaManifest({
|
||||||
|
name: 'StackEdit',
|
||||||
|
description: 'Full-featured, open-source Markdown editor',
|
||||||
|
display: 'standalone',
|
||||||
|
orientation: 'any',
|
||||||
|
start_url: 'app',
|
||||||
|
background_color: '#ffffff',
|
||||||
|
crossorigin: 'use-credentials',
|
||||||
|
icons: [{
|
||||||
|
src: resolve('src/assets/favicon.png'),
|
||||||
|
sizes: [96, 128, 192, 256, 384, 512]
|
||||||
|
}]
|
||||||
|
}),
|
||||||
|
new OfflinePlugin({
|
||||||
|
ServiceWorker: {
|
||||||
|
events: true
|
||||||
|
},
|
||||||
|
AppCache: true,
|
||||||
|
excludes: ['**/.*', '**/*.map', '**/index.html', '**/static/oauth2/callback.html', '**/icons-*/*.png', '**/static/fonts/KaTeX_*'],
|
||||||
|
externals: ['/', '/app', '/oauth2/callback']
|
||||||
|
}),
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
if (config.build.productionGzip) {
|
||||||
|
var CompressionWebpackPlugin = require('compression-webpack-plugin')
|
||||||
|
|
||||||
|
webpackConfig.plugins.push(
|
||||||
|
new CompressionWebpackPlugin({
|
||||||
|
asset: '[path].gz[query]',
|
||||||
|
algorithm: 'gzip',
|
||||||
|
test: new RegExp(
|
||||||
|
'\\.(' +
|
||||||
|
config.build.productionGzipExtensions.join('|') +
|
||||||
|
')$'
|
||||||
|
),
|
||||||
|
threshold: 10240,
|
||||||
|
minRatio: 0.8
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config.build.bundleAnalyzerReport) {
|
||||||
|
var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
|
||||||
|
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = webpackConfig
|
56
build/webpack.style.conf.js
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
var path = require('path')
|
||||||
|
var utils = require('./utils')
|
||||||
|
var webpack = require('webpack')
|
||||||
|
var utils = require('./utils')
|
||||||
|
var config = require('../config')
|
||||||
|
var vueLoaderConfig = require('./vue-loader.conf')
|
||||||
|
var StylelintPlugin = require('stylelint-webpack-plugin')
|
||||||
|
var ExtractTextPlugin = require('extract-text-webpack-plugin')
|
||||||
|
var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
|
||||||
|
|
||||||
|
function resolve (dir) {
|
||||||
|
return path.join(__dirname, '..', dir)
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
entry: {
|
||||||
|
style: './src/styles/'
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [{
|
||||||
|
test: /\.(ttf|eot|otf|woff2?)(\?.*)?$/,
|
||||||
|
loader: 'file-loader',
|
||||||
|
options: {
|
||||||
|
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
.concat(utils.styleLoaders({
|
||||||
|
sourceMap: config.build.productionSourceMap,
|
||||||
|
extract: true
|
||||||
|
})),
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
path: config.build.assetsRoot,
|
||||||
|
filename: '[name].js',
|
||||||
|
publicPath: config.build.assetsPublicPath
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new webpack.optimize.UglifyJsPlugin({
|
||||||
|
compress: {
|
||||||
|
warnings: false
|
||||||
|
},
|
||||||
|
sourceMap: true
|
||||||
|
}),
|
||||||
|
// extract css into its own file
|
||||||
|
new ExtractTextPlugin({
|
||||||
|
filename: '[name].css',
|
||||||
|
}),
|
||||||
|
// Compress extracted CSS. We are using this plugin so that possible
|
||||||
|
// duplicated CSS from different components can be deduped.
|
||||||
|
new OptimizeCSSPlugin({
|
||||||
|
cssProcessorOptions: {
|
||||||
|
safe: true
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
]
|
||||||
|
}
|
22
chart/.helmignore
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
5
chart/Chart.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
appVersion: vSTACKEDIT_VERSION
|
||||||
|
description: In-browser Markdown editor
|
||||||
|
name: stackedit
|
||||||
|
version: STACKEDIT_VERSION
|
21
chart/templates/NOTES.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
1. Get the application URL by running these commands:
|
||||||
|
{{- if .Values.ingress.enabled }}
|
||||||
|
{{- range $host := .Values.ingress.hosts }}
|
||||||
|
{{- range .paths }}
|
||||||
|
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else if contains "NodePort" .Values.service.type }}
|
||||||
|
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "stackedit.fullname" . }})
|
||||||
|
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||||
|
echo http://$NODE_IP:$NODE_PORT
|
||||||
|
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||||
|
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||||
|
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "stackedit.fullname" . }}'
|
||||||
|
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "stackedit.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||||
|
echo http://$SERVICE_IP:{{ .Values.service.port }}
|
||||||
|
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||||
|
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "stackedit.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||||
|
echo "Visit http://127.0.0.1:8080 to use your application"
|
||||||
|
kubectl port-forward $POD_NAME 8080:80
|
||||||
|
{{- end }}
|
45
chart/templates/_helpers.tpl
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "stackedit.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "stackedit.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride -}}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "stackedit.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "stackedit.labels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "stackedit.name" . }}
|
||||||
|
helm.sh/chart: {{ include "stackedit.chart" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end -}}
|
87
chart/templates/deployment.yaml
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "stackedit.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{ include "stackedit.labels" . | indent 4 }}
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.replicaCount }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: {{ include "stackedit.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ include "stackedit.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ .Chart.Name }}
|
||||||
|
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /run
|
||||||
|
name: run-volume
|
||||||
|
- mountPath: /tmp
|
||||||
|
name: tmp-volume
|
||||||
|
env:
|
||||||
|
- name: PORT
|
||||||
|
value: "80"
|
||||||
|
- name: PAYPAL_RECEIVER_EMAIL
|
||||||
|
value: {{ .Values.paypalReceiverEmail }}
|
||||||
|
- name: AWS_ACCESS_KEY_ID
|
||||||
|
value: {{ .Values.awsAccessKeyId }}
|
||||||
|
- name: AWS_SECRET_ACCESS_KEY
|
||||||
|
value: {{ .Values.awsSecretAccessKey }}
|
||||||
|
- name: DROPBOX_APP_KEY
|
||||||
|
value: {{ .Values.dropboxAppKey }}
|
||||||
|
- name: DROPBOX_APP_KEY_FULL
|
||||||
|
value: {{ .Values.dropboxAppKeyFull }}
|
||||||
|
- name: GOOGLE_CLIENT_ID
|
||||||
|
value: {{ .Values.googleClientId }}
|
||||||
|
- name: GOOGLE_API_KEY
|
||||||
|
value: {{ .Values.googleApiKey }}
|
||||||
|
- name: GITHUB_CLIENT_ID
|
||||||
|
value: {{ .Values.githubClientId }}
|
||||||
|
- name: GITHUB_CLIENT_SECRET
|
||||||
|
value: {{ .Values.githubClientSecret }}
|
||||||
|
- name: WORDPRESS_CLIENT_ID
|
||||||
|
value: {{ .Values.wordpressClientId }}
|
||||||
|
- name: WORDPRESS_SECRET
|
||||||
|
value: {{ .Values.wordpressSecret }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: 80
|
||||||
|
protocol: TCP
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: http
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: http
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.resources | nindent 12 }}
|
||||||
|
volumes:
|
||||||
|
- name: run-volume
|
||||||
|
emptyDir: {}
|
||||||
|
- name: tmp-volume
|
||||||
|
emptyDir: {}
|
||||||
|
{{- with .Values.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
39
chart/templates/ingress.yaml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{{- if .Values.ingress.enabled -}}
|
||||||
|
{{- $fullName := include "stackedit.fullname" . -}}
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ $fullName }}
|
||||||
|
labels:
|
||||||
|
{{ include "stackedit.labels" . | indent 4 }}
|
||||||
|
{{- with .Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- range .Values.ingress.tls }}
|
||||||
|
- hosts:
|
||||||
|
{{- range .hosts }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ .host | quote }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
{{- range .paths }}
|
||||||
|
- path: {{ . }}
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: {{ $fullName }}
|
||||||
|
port:
|
||||||
|
name: http
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
16
chart/templates/service.yaml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "stackedit.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{ include "stackedit.labels" . | indent 4 }}
|
||||||
|
spec:
|
||||||
|
type: {{ .Values.service.type }}
|
||||||
|
ports:
|
||||||
|
- port: {{ .Values.service.port }}
|
||||||
|
targetPort: http
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: {{ include "stackedit.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
15
chart/templates/tests/test-connection.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: "{{ include "stackedit.fullname" . }}-test-connection"
|
||||||
|
labels:
|
||||||
|
{{ include "stackedit.labels" . | indent 4 }}
|
||||||
|
annotations:
|
||||||
|
"helm.sh/hook": test-success
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: wget
|
||||||
|
image: busybox
|
||||||
|
command: ['wget']
|
||||||
|
args: ['{{ include "stackedit.fullname" . }}:{{ .Values.service.port }}']
|
||||||
|
restartPolicy: Never
|
71
chart/values.yaml
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
# Default values for stackedit.
|
||||||
|
# This is a YAML-formatted file.
|
||||||
|
# Declare variables to be passed into your templates.
|
||||||
|
|
||||||
|
dropboxAppKey: ""
|
||||||
|
dropboxAppKeyFull: ""
|
||||||
|
googleClientId: ""
|
||||||
|
googleApiKey: ""
|
||||||
|
githubClientId: ""
|
||||||
|
githubClientSecret: ""
|
||||||
|
giteeClientId: ""
|
||||||
|
giteeClientSecret: ""
|
||||||
|
wordpressClientId: ""
|
||||||
|
wordpressSecret: ""
|
||||||
|
paypalReceiverEmail: ""
|
||||||
|
awsAccessKeyId: ""
|
||||||
|
awsSecretAccessKey: ""
|
||||||
|
giteaClientId: ""
|
||||||
|
giteaClientSecret: ""
|
||||||
|
giteaUrl: ""
|
||||||
|
gitlabClientId: ""
|
||||||
|
gitlabUrl: ""
|
||||||
|
|
||||||
|
replicaCount: 1
|
||||||
|
|
||||||
|
image:
|
||||||
|
repository: benweet/stackedit
|
||||||
|
tag: vSTACKEDIT_VERSION
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
imagePullSecrets: []
|
||||||
|
nameOverride: ""
|
||||||
|
fullnameOverride: ""
|
||||||
|
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 80
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
||||||
|
annotations:
|
||||||
|
# kubernetes.io/ingress.class: nginx
|
||||||
|
# certmanager.k8s.io/issuer: letsencrypt-prod
|
||||||
|
# certmanager.k8s.io/acme-challenge-type: http01
|
||||||
|
hosts: []
|
||||||
|
# - host: stackedit.example.com
|
||||||
|
# paths:
|
||||||
|
# - /
|
||||||
|
|
||||||
|
tls: []
|
||||||
|
# - secretName: stackedit-tls
|
||||||
|
# hosts:
|
||||||
|
# - stackedit.example.com
|
||||||
|
|
||||||
|
resources: {}
|
||||||
|
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||||
|
# choice for the user. This also increases chances charts run on environments with little
|
||||||
|
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||||
|
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||||
|
# limits:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
# requests:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
|
||||||
|
nodeSelector: {}
|
||||||
|
|
||||||
|
tolerations: []
|
||||||
|
|
||||||
|
affinity: {}
|
BIN
chrome-app/icon-128.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
chrome-app/icon-16.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
chrome-app/icon-256.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
chrome-app/icon-32.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
chrome-app/icon-512.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
chrome-app/icon-64.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
28
chrome-app/manifest.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"name": "StackEdit中文版",
|
||||||
|
"description": "支持Gitee仓库/粘贴图片自动上传的浏览器内 Markdown 编辑器",
|
||||||
|
"version": "5.15.17",
|
||||||
|
"manifest_version": 2,
|
||||||
|
"container": "GITEE",
|
||||||
|
"api_console_project_id": "241271498917",
|
||||||
|
"icons": {
|
||||||
|
"16": "icon-16.png",
|
||||||
|
"32": "icon-32.png",
|
||||||
|
"64": "icon-64.png",
|
||||||
|
"128": "icon-128.png",
|
||||||
|
"256": "icon-256.png",
|
||||||
|
"512": "icon-512.png"
|
||||||
|
},
|
||||||
|
"app": {
|
||||||
|
"urls": [
|
||||||
|
"https://md.jonylee.top/"
|
||||||
|
],
|
||||||
|
"launch": {
|
||||||
|
"web_url": "https://md.jonylee.top/app"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"offline_enabled": true,
|
||||||
|
"permissions": [
|
||||||
|
"unlimitedStorage"
|
||||||
|
]
|
||||||
|
}
|
18
config/dev.env.js
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
var merge = require('webpack-merge')
|
||||||
|
var prodEnv = require('./prod.env')
|
||||||
|
|
||||||
|
module.exports = merge(prodEnv, {
|
||||||
|
NODE_ENV: '"development"',
|
||||||
|
// 以下配置是开发临时用的配置 随时可能失效 请替换为自己的
|
||||||
|
GITHUB_CLIENT_ID: '"845b8f75df48f2ee0563"',
|
||||||
|
GITHUB_CLIENT_SECRET: '"80df676597abded1450926861965cc3f9bead6a0"',
|
||||||
|
GITEE_CLIENT_ID: '"925ba7c78b85dec984f7877e4aca5cab10ae333c6d68e761bdb0b9dfb8f55672"',
|
||||||
|
GITEE_CLIENT_SECRET: '"f05731066e42d307339dc8ebbb037a103881dafc7207a359a393b87749f1c562"',
|
||||||
|
CLIENT_ID: '"thF3qCGLN39OtafjGnqHyj6n02WwE6xD"',
|
||||||
|
// GITEA_CLIENT_ID: '"fe30f8f9-b1e8-4531-8f72-c1a5d3912805"',
|
||||||
|
// GITEA_CLIENT_SECRET: '"lus7oMnb3H6M1hsChndphArE20Txr7erwJLf7SDBQWTw"',
|
||||||
|
// GITEA_URL: '"https://gitea.test.com"',
|
||||||
|
GITLAB_CLIENT_ID: '"074cd5103c62dea0f479dac861039656ac80935e304c8113a02cc64c629496ae"',
|
||||||
|
GITLAB_CLIENT_SECRET: '"6f406f24216b686d55d28313dec1913c2a8e599afdb08380d5e8ce838e16e41e"',
|
||||||
|
GITLAB_URL: '"http://gitlab.qicoder.com"',
|
||||||
|
})
|
39
config/index.js
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// see http://vuejs-templates.github.io/webpack for documentation.
|
||||||
|
var path = require('path')
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
build: {
|
||||||
|
env: require('./prod.env'),
|
||||||
|
index: path.resolve(__dirname, '../dist/index.html'),
|
||||||
|
assetsRoot: path.resolve(__dirname, '../dist'),
|
||||||
|
assetsSubDirectory: 'static',
|
||||||
|
assetsPublicPath: '/',
|
||||||
|
productionSourceMap: true,
|
||||||
|
// Gzip off by default as many popular static hosts such as
|
||||||
|
// Surge or Netlify already gzip all static assets for you.
|
||||||
|
// Before setting to `true`, make sure to:
|
||||||
|
// npm install --save-dev compression-webpack-plugin
|
||||||
|
productionGzip: false,
|
||||||
|
productionGzipExtensions: ['js', 'css'],
|
||||||
|
// Run the build command with an extra argument to
|
||||||
|
// View the bundle analyzer report after build finishes:
|
||||||
|
// `npm run build --report`
|
||||||
|
// Set to `true` or `false` to always turn it on or off
|
||||||
|
bundleAnalyzerReport: process.env.npm_config_report
|
||||||
|
},
|
||||||
|
dev: {
|
||||||
|
env: require('./dev.env'),
|
||||||
|
port: 80,
|
||||||
|
autoOpenBrowser: false,
|
||||||
|
assetsSubDirectory: 'static',
|
||||||
|
assetsPublicPath: '/',
|
||||||
|
proxyTable: {},
|
||||||
|
// CSS Sourcemaps off by default because relative paths are "buggy"
|
||||||
|
// with this option, according to the CSS-Loader README
|
||||||
|
// (https://github.com/webpack/css-loader#sourcemaps)
|
||||||
|
// In our experience, they generally work as expected,
|
||||||
|
// just be aware of this issue when enabling this option.
|
||||||
|
// cssSourceMap: false
|
||||||
|
cssSourceMap: true
|
||||||
|
}
|
||||||
|
}
|
3
config/prod.env.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
module.exports = {
|
||||||
|
NODE_ENV: '"production"'
|
||||||
|
}
|
@ -1,243 +0,0 @@
|
|||||||
Developer guide
|
|
||||||
===============
|
|
||||||
|
|
||||||
Getting started
|
|
||||||
---------------
|
|
||||||
|
|
||||||
#### Pre-requisites
|
|
||||||
|
|
||||||
- [Git][1]
|
|
||||||
- [node.js/npm][2]
|
|
||||||
- [Grunt][3]
|
|
||||||
- [Bower][4]
|
|
||||||
|
|
||||||
#### Before debugging
|
|
||||||
|
|
||||||
- Download development tools:
|
|
||||||
|
|
||||||
npm install
|
|
||||||
|
|
||||||
- Download dependencies:
|
|
||||||
|
|
||||||
bower install
|
|
||||||
|
|
||||||
- To serve **StackEdit** in http://localhost/stackedit, add something like this in `httpd.conf`:
|
|
||||||
|
|
||||||
Alias /stackedit /Users/benweet/workspace/stackedit
|
|
||||||
|
|
||||||
<Directory /Users/benweet/workspace/stackedit>
|
|
||||||
Options Indexes FollowSymLinks MultiViews
|
|
||||||
AllowOverride None
|
|
||||||
Order allow,deny
|
|
||||||
Allow from all
|
|
||||||
</Directory>
|
|
||||||
|
|
||||||
- Open Chrome without application cache:
|
|
||||||
|
|
||||||
chrome --disable-application-cache
|
|
||||||
|
|
||||||
- Run **StackEdit** in debug mode (serve original files instead of minified):
|
|
||||||
|
|
||||||
http://localhost/stackedit/?debug
|
|
||||||
|
|
||||||
#### Add new dependencies
|
|
||||||
|
|
||||||
**NOTE:** StackEdit uses [RequireJS][6] for asynchronous module definition ([AMD][7]).
|
|
||||||
|
|
||||||
- Install new dependencies using [Bower][4]:
|
|
||||||
|
|
||||||
bower install <library> --save
|
|
||||||
|
|
||||||
- Add the new dependency to [RequireJS][6] configuration file (`main.js`):
|
|
||||||
|
|
||||||
grunt bower
|
|
||||||
|
|
||||||
#### Build/minify
|
|
||||||
|
|
||||||
grunt
|
|
||||||
|
|
||||||
|
|
||||||
Architecture
|
|
||||||
------------
|
|
||||||
|
|
||||||
![Architecture diagram][5]
|
|
||||||
|
|
||||||
|
|
||||||
----------
|
|
||||||
|
|
||||||
|
|
||||||
### core
|
|
||||||
|
|
||||||
The `core` module is responsible for:
|
|
||||||
|
|
||||||
- creating the [UI Layout][10],
|
|
||||||
- creating the [PageDown][11] editor,
|
|
||||||
- loading/saving the settings,
|
|
||||||
- running periodic tasks,
|
|
||||||
- detecting the user activity,
|
|
||||||
- checking the offline status.
|
|
||||||
|
|
||||||
**Attributes:**
|
|
||||||
|
|
||||||
- `isOffline`: indicates the offline status of the application.
|
|
||||||
|
|
||||||
**Methods:**
|
|
||||||
|
|
||||||
- `onReady(callback)`: sets a callback to be called when all modules have been loaded and the DOM is ready.
|
|
||||||
> **NOTE:** This is preferred over [jQuery's `.ready()`][12] because it ensures that all AMD modules are loaded by [RequireJS][13]).
|
|
||||||
|
|
||||||
- `runPeriodically(callback)`: sets a callback to be called every second.
|
|
||||||
> **NOTE:** The callback will not run if the user is inactive or in StackEdit Viewer. User is considered inactive after 5 minutes of inactivity (mouse or keyboard).
|
|
||||||
|
|
||||||
- `setOffline()`: can be called by any other modules when a network timeout occurs for instance.
|
|
||||||
> **NOTE:** the offline status is also set by detecting the window `offline` event. `core.isOffline` is automatically set to `false` when the network is recovered.
|
|
||||||
|
|
||||||
- `initEditor(fileDesc)`: creates or refreshes the [PageDown][14] editor with a given [`FileDescriptor`][15] object.
|
|
||||||
|
|
||||||
|
|
||||||
----------
|
|
||||||
|
|
||||||
|
|
||||||
### fileMgr
|
|
||||||
|
|
||||||
The `fileMgr` module is responsible for:
|
|
||||||
|
|
||||||
- creating and deleting local files
|
|
||||||
- switching from one file to another
|
|
||||||
|
|
||||||
**Attributes:**
|
|
||||||
|
|
||||||
- `currentFile`: the [`FileDescriptor`][16] object that is currently edited.
|
|
||||||
|
|
||||||
**Methods:**
|
|
||||||
|
|
||||||
- `createFile(title, content)`: creates a [`FileDescriptor`][17] object, add it in the [`fileSystem`][18] map and returns it.
|
|
||||||
- `deleteFile(fileDesc)`: deletes a [`FileDescriptor`][19] object from the [`fileSystem`][20] map.
|
|
||||||
- `selectFile(fileDesc)`: selects a [`FileDescriptor`][21] object for editing.
|
|
||||||
|
|
||||||
|
|
||||||
#### FileDescriptor
|
|
||||||
|
|
||||||
The `FileDescriptor` class represents a local file. A `FileDescriptor` object has the following properties:
|
|
||||||
|
|
||||||
- `fileIndex`: the unique string index of the file in the file system
|
|
||||||
- `title`: the title of the document
|
|
||||||
- `content`: the content of the document
|
|
||||||
- `syncLocations`: a map containing all the associated [`syncAttributes`][22] objects with their `syncIndex` as a key
|
|
||||||
- `publishLocations`: a map containing all the associated [`publishAttributes`][23] objects with their `publishIndex` as a key
|
|
||||||
|
|
||||||
And the following methods:
|
|
||||||
|
|
||||||
- `addSyncLocation(syncAttributes)`: associates a [`syncAttributes`][24] object with the file
|
|
||||||
- `removeSyncLocation(syncAttributes)`: unassociates a [`syncAttributes`][25] object with the file
|
|
||||||
- `addPublishLocation(publishAttributes)`: associates a [`publishAttributes`][26] object with the file
|
|
||||||
- `removePublishLocation(publishAttributes)`: unassociates a [`publishAttributes`][27] object with the file
|
|
||||||
|
|
||||||
#### fileSystem
|
|
||||||
|
|
||||||
The `fileSystem` module is a map containing all the [`FileDescriptor`][28] objects with their `fileIndex` as a key.
|
|
||||||
|
|
||||||
|
|
||||||
----------
|
|
||||||
|
|
||||||
|
|
||||||
### synchronizer
|
|
||||||
|
|
||||||
The `synchronizer` module is responsible for:
|
|
||||||
|
|
||||||
- creating a new local file from a sync location (import)
|
|
||||||
- creating a new sync location from a local file (export)
|
|
||||||
- running 2 ways synchronization (upload and download) for all sync locations
|
|
||||||
|
|
||||||
#### synchronizer's providers
|
|
||||||
|
|
||||||
A [`provider`][29] module can be associated with the `synchronizer` module if it implements the following functions:
|
|
||||||
|
|
||||||
- `importFiles()`: downloads one or multiple files and create local files associated with the sync locations
|
|
||||||
- `exportFile()`: uploads a local file to a new sync location
|
|
||||||
- `syncDown()`: performs a download of all the changes operated on all sync locations
|
|
||||||
- `syncUp()`: performs an upload of a change to a sync location
|
|
||||||
|
|
||||||
#### syncAttributes
|
|
||||||
|
|
||||||
A `syncAttributes` object is an object that describes a sync location. Attributes differ from one provider to another except for the following:
|
|
||||||
|
|
||||||
- `syncIndex`: the unique string index of the publish location
|
|
||||||
- `provider`: the [`provider`][30] module that handles the sync location
|
|
||||||
|
|
||||||
|
|
||||||
----------
|
|
||||||
|
|
||||||
|
|
||||||
### publisher
|
|
||||||
|
|
||||||
The `publisher` module is responsible for:
|
|
||||||
|
|
||||||
- creating new publish locations
|
|
||||||
- updating existing publish locations
|
|
||||||
|
|
||||||
#### publisher's providers
|
|
||||||
|
|
||||||
A [`provider`][31] module can be associated with the `publisher` module if it implements the following functions:
|
|
||||||
|
|
||||||
- `newPublishAttributes()`: returns a new [`publishAttributes`][32] object in order to create a new publish location
|
|
||||||
- `publish()`: performs publishing of one publish location
|
|
||||||
|
|
||||||
#### publishAttributes
|
|
||||||
|
|
||||||
A `publishAttributes` object is an object that describes a publish location. Attributes differ from one provider to another except for the following:
|
|
||||||
|
|
||||||
- `publishIndex`: the unique string index of the publish location
|
|
||||||
- `provider`: the [`provider`][33] module that handles the publish location
|
|
||||||
- `format`: the publishing format for the publish location. It can be:
|
|
||||||
- `markdown` for Markdown format
|
|
||||||
- `html` for HTML format
|
|
||||||
- `template` for template format
|
|
||||||
|
|
||||||
|
|
||||||
----------
|
|
||||||
|
|
||||||
|
|
||||||
### provider
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
> Written with [StackEdit](http://benweet.github.io/stackedit/).
|
|
||||||
|
|
||||||
|
|
||||||
[1]: http://git-scm.com/
|
|
||||||
[2]: http://nodejs.org/
|
|
||||||
[3]: http://gruntjs.com/
|
|
||||||
[4]: http://bower.io/
|
|
||||||
[5]: http://benweet.github.io/stackedit/doc/img/architecture.png "Architecture diagram"
|
|
||||||
[6]: http://requirejs.org/ "RequireJS"
|
|
||||||
[7]: http://en.wikipedia.org/wiki/Asynchronous_module_definition "Asynchronous module definition"
|
|
||||||
[8]: http://jquery.com/
|
|
||||||
[9]: http://underscorejs.org/
|
|
||||||
[10]: http://layout.jquery-dev.net/ "UI Layout"
|
|
||||||
[11]: https://code.google.com/p/pagedown/ "PageDown"
|
|
||||||
[12]: http://api.jquery.com/ready/
|
|
||||||
[13]: http://requirejs.org/ "RequireJS"
|
|
||||||
[14]: https://code.google.com/p/pagedown/ "PageDown"
|
|
||||||
[15]: #filedescriptor
|
|
||||||
[16]: #filedescriptor
|
|
||||||
[17]: #filedescriptor
|
|
||||||
[18]: #filesystem
|
|
||||||
[19]: #filedescriptor
|
|
||||||
[20]: #filesystem
|
|
||||||
[21]: #filedescriptor
|
|
||||||
[22]: #syncattributes
|
|
||||||
[23]: #publishattributes
|
|
||||||
[24]: #syncattributes
|
|
||||||
[25]: #syncattributes
|
|
||||||
[26]: #publishattributes
|
|
||||||
[27]: #publishattributes
|
|
||||||
[28]: #filedescriptor
|
|
||||||
[29]: #provider
|
|
||||||
[30]: #provider
|
|
||||||
[31]: #provider
|
|
||||||
[32]: #publishattributes
|
|
||||||
[33]: #provider
|
|
Before Width: | Height: | Size: 30 KiB |
@ -1,34 +0,0 @@
|
|||||||
StackEdit theming guide
|
|
||||||
=======================
|
|
||||||
|
|
||||||
In **StackEdit**, a theme is pretty much a [LESS][1] file that overrides the default look and feel.
|
|
||||||
|
|
||||||
### Create your special theme very quickly by following these steps
|
|
||||||
|
|
||||||
1. Fork **StackEdit** on [GitHub][2] and clone the repository localy.
|
|
||||||
|
|
||||||
2. Install the development tools as described in the [Developer guide][3].
|
|
||||||
|
|
||||||
3. In `res/themes`, create a LESS file, just like the other themes.
|
|
||||||
|
|
||||||
> You can put images in `res/img`.
|
|
||||||
|
|
||||||
4. Add an entry in `THEME_LIST` at the end of `config.js` with the filename as a key and the name of your theme as a value.
|
|
||||||
|
|
||||||
> **Example:** `"cool": "The coolest ever"`
|
|
||||||
|
|
||||||
5. Run the application on your machine using the `?debug` flag. Basically:
|
|
||||||
|
|
||||||
http://localhost/stackedit/?debug
|
|
||||||
|
|
||||||
6. Go to `Settings -> Editor -> Theme` and select your theme. Check that everything is fine.
|
|
||||||
|
|
||||||
7. Commit, push, create a pull request and wait for publishing.
|
|
||||||
|
|
||||||
|
|
||||||
> Written with [StackEdit](http://benweet.github.io/stackedit/).
|
|
||||||
|
|
||||||
|
|
||||||
[1]: http://lesscss.org/
|
|
||||||
[2]: https://github.com/benweet/stackedit
|
|
||||||
[3]: https://github.com/benweet/stackedit/blob/master/doc/developer-guide.md#getting-started
|
|
10
docs/大文档导出PDF方式.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# 大文档导出PDF方式说明
|
||||||
|
> 由于大文档导出PDF,需要消费非常多的服务器资源,而且很容易导致导出超时,故导出PDF的MD文档过大时,可以使用 **[wkhtmltopdf](https://wkhtmltopdf.org/downloads.html)** 工具导出。
|
||||||
|
|
||||||
|
# 操作步骤
|
||||||
|
- 先在 **[StackEdit中文版](https://stackedit.cn/app)** 中使用 `导出为HTML` 功能导出MD文档,导出后可以得到一个HTML文档。
|
||||||
|
- 到 **[wkhtmltopdf](https://wkhtmltopdf.org/downloads.html)** 官网下载安装程序。
|
||||||
|
- 使用 wkhtmltopdf 的导出PDF的命令 `wkhtmltopdf [GLOBAL OPTION]... [OBJECT]... <output file>` 把HTML导出为PDF,如简单的导出命令:`wkhtmltopdf test.html test.pdf`,具体的 `GLOBAL OPTION` 参数说明可以通过 `wkhtmltopdf -H` 查看帮助文档。
|
||||||
|
|
||||||
|
|
||||||
|
|
20
docs/部署之GitHub应用创建.md
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# GitHub应用配置说明
|
||||||
|
|
||||||
|
> StackEdit中文版部署如果需要支持GitHub,则需要到GitHub创建一个应用,并复制其中的clientId和clientSecret填充到环境变量 GITHUB_CLIENT_ID 和 GITHUB_CLIENT_SECRET 中。
|
||||||
|
|
||||||
|
|
||||||
|
# 如何创建GitHub应用
|
||||||
|
|
||||||
|
按下面图的指示创建
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
35
docs/部署之Gitea应用创建.md
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# Gitea应用配置说明
|
||||||
|
|
||||||
|
> StackEdit中文版支持Gitea,则需要到Gitea创建一个应用,在StackEdit中文版绑定Gitea账号的时候填入。
|
||||||
|
|
||||||
|
|
||||||
|
# 如何创建Gitea应用
|
||||||
|
|
||||||
|
按下面图的指示创建
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
创建成功后即可看到应用ID 和 应用秘钥。
|
||||||
|
|
||||||
|
# Gitea跨域问题
|
||||||
|
|
||||||
|
由于StackEdit中文版是从浏览器直接访问Gitea接口,故个人部署的Gitea需要支持跨域,至于如何支持跨域,请参考官方文档:https://docs.gitea.io/en-us/config-cheat-sheet/#cors-cors (官方跨域的支持好像存在问题,我个人包括很多网友通过这个配置支持跨域都失败了,如果你也失败了,可以试试用nginx代理实现跨域)
|
||||||
|
|
||||||
|
nginx配置实现跨域的配置如下:
|
||||||
|
|
||||||
|
```
|
||||||
|
add_header Access-Control-Allow-Headers *;
|
||||||
|
add_header Access-Control-Allow-Origin $http_origin;
|
||||||
|
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
|
||||||
|
|
||||||
|
if ($request_method = 'OPTIONS') {
|
||||||
|
return 204;
|
||||||
|
}
|
||||||
|
```
|
19
docs/部署之Gitee应用创建.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Gitee应用配置说明
|
||||||
|
|
||||||
|
> StackEdit中文版部署如果需要支持Gitee,则需要到Gitee创建一个应用,并复制其中的clientId和clientSecret填充到环境变量 GITEE_CLIENT_ID 和 GITEE_CLIENT_SECRET 中。
|
||||||
|
|
||||||
|
|
||||||
|
# 如何创建Gitee应用
|
||||||
|
|
||||||
|
按下面图的指示创建
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
创建成功后即可看到client id 和 client secret。
|
20
gulpfile.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
const path = require('path');
|
||||||
|
const gulp = require('gulp');
|
||||||
|
const concat = require('gulp-concat');
|
||||||
|
|
||||||
|
const prismScripts = [
|
||||||
|
'prismjs/components/prism-core',
|
||||||
|
'prismjs/components/prism-markup',
|
||||||
|
'prismjs/components/prism-clike',
|
||||||
|
'prismjs/components/prism-c',
|
||||||
|
'prismjs/components/prism-javascript',
|
||||||
|
'prismjs/components/prism-css',
|
||||||
|
'prismjs/components/prism-ruby',
|
||||||
|
'prismjs/components/prism-cpp',
|
||||||
|
].map(require.resolve);
|
||||||
|
prismScripts.push(
|
||||||
|
path.join(path.dirname(require.resolve('prismjs/components/prism-core')), 'prism-!(*.min).js'));
|
||||||
|
|
||||||
|
gulp.task('build-prism', () => gulp.src(prismScripts)
|
||||||
|
.pipe(concat('prism.js'))
|
||||||
|
.pipe(gulp.dest(path.dirname(require.resolve('prismjs')))));
|
BIN
images/chatgpt.gif
Normal file
After Width: | Height: | Size: 175 KiB |
BIN
images/dark.png
Normal file
After Width: | Height: | Size: 793 KiB |
BIN
images/fileSearch.png
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
images/gitea/gitea01.png
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
images/gitea/gitea02.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
images/gitea/gitea03.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
images/gitea/gitea04.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
images/gitee/gitee01.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
images/gitee/gitee02.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
images/gitee/gitee03.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
images/gitee/gitee04.png
Normal file
After Width: | Height: | Size: 121 KiB |
BIN
images/github/github01.png
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
images/github/github02.png
Normal file
After Width: | Height: | Size: 81 KiB |
BIN
images/github/github03.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
images/github/github04.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
images/github/github05.png
Normal file
After Width: | Height: | Size: 109 KiB |
BIN
images/imageBed.png
Normal file
After Width: | Height: | Size: 339 KiB |
BIN
images/light.png
Normal file
After Width: | Height: | Size: 726 KiB |
BIN
images/qq.jpeg
Normal file
After Width: | Height: | Size: 87 KiB |
BIN
images/search.gif
Normal file
After Width: | Height: | Size: 360 KiB |
BIN
images/theme.gif
Normal file
After Width: | Height: | Size: 937 KiB |
BIN
images/uploadimg.gif
Normal file
After Width: | Height: | Size: 761 KiB |
BIN
images/workspace.png
Normal file
After Width: | Height: | Size: 195 KiB |
Before Width: | Height: | Size: 639 B |
Before Width: | Height: | Size: 272 B |
Before Width: | Height: | Size: 320 B |
Before Width: | Height: | Size: 447 B |
Before Width: | Height: | Size: 536 B |
Before Width: | Height: | Size: 1.9 KiB |
@ -1,125 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="800"
|
|
||||||
height="200"
|
|
||||||
id="svg2"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.48.2 r9819"
|
|
||||||
sodipodi:docname="stackedit-promo.svg"
|
|
||||||
inkscape:export-filename="/Users/g550003/workspace/stackedit/img/stackedit-promo.png"
|
|
||||||
inkscape:export-xdpi="54"
|
|
||||||
inkscape:export-ydpi="54">
|
|
||||||
<defs
|
|
||||||
id="defs4" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="0.70710678"
|
|
||||||
inkscape:cx="681.08785"
|
|
||||||
inkscape:cy="-71.421139"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:window-width="1680"
|
|
||||||
inkscape:window-height="918"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="0"
|
|
||||||
inkscape:window-maximized="1">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid3000"
|
|
||||||
empspacing="5"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
|
||||||
id="metadata7">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
transform="translate(0,-852.36217)">
|
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-size:144px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Corbel;-inkscape-font-specification:Corbel"
|
|
||||||
x="221.88937"
|
|
||||||
y="1021.7139"
|
|
||||||
id="text2991"
|
|
||||||
sodipodi:linespacing="125%"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan2993"
|
|
||||||
x="221.88937"
|
|
||||||
y="1021.7139">stack<tspan
|
|
||||||
style="font-size:144px;font-weight:bold;-inkscape-font-specification:Corbel Bold"
|
|
||||||
id="tspan2995">edit</tspan></tspan></text>
|
|
||||||
<g
|
|
||||||
id="g3013"
|
|
||||||
transform="matrix(5.4895348,0,0,5.4895348,-409.28558,-4529.9871)">
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3001"
|
|
||||||
d="m 80,998.86217 0,12.00003 28,0 0,-12.00003"
|
|
||||||
style="fill:none;stroke:#626265;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3789"
|
|
||||||
d="m 84,1005.8622 18,0"
|
|
||||||
style="fill:none;stroke:#6c6c70;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3791"
|
|
||||||
d="m 84,1001.8622 16,0"
|
|
||||||
style="fill:none;stroke:#95785b;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3793"
|
|
||||||
d="m 84,997.86217 8,0"
|
|
||||||
style="fill:none;stroke:#bc8e48;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3795"
|
|
||||||
d="m 84,993.86217 20,0"
|
|
||||||
style="fill:none;stroke:#d38b28;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3797"
|
|
||||||
d="m 84,989.86217 14,0"
|
|
||||||
style="fill:none;stroke:#fd8a07;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3799"
|
|
||||||
d="m 84,985.86217 20,0"
|
|
||||||
style="fill:none;stroke:#fe7a15;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.7 KiB |
@ -1,115 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="32"
|
|
||||||
height="32"
|
|
||||||
id="svg2"
|
|
||||||
version="1.1"
|
|
||||||
inkscape:version="0.48.4 r9939"
|
|
||||||
sodipodi:docname="stackedit.svg"
|
|
||||||
inkscape:export-filename="C:\Documents and Settings\g550003\Mes documents\Mes images\stackedit-96.png"
|
|
||||||
inkscape:export-xdpi="270"
|
|
||||||
inkscape:export-ydpi="270">
|
|
||||||
<defs
|
|
||||||
id="defs4" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="6.9921875"
|
|
||||||
inkscape:cx="92.512694"
|
|
||||||
inkscape:cy="-9.5071361"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
showgrid="true"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="1143"
|
|
||||||
inkscape:window-x="-4"
|
|
||||||
inkscape:window-y="-4"
|
|
||||||
inkscape:window-maximized="1">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid3000"
|
|
||||||
empspacing="5"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
|
||||||
id="metadata7">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
transform="translate(0,-1020.3622)">
|
|
||||||
<path
|
|
||||||
style="fill:none;stroke:#626265;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
|
||||||
d="M 2,0 2,12 30,12 30,0"
|
|
||||||
id="path3001"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
transform="translate(0,1036.3622)"
|
|
||||||
sodipodi:nodetypes="cccc" />
|
|
||||||
<path
|
|
||||||
style="fill:none;stroke:#6c6c70;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
|
||||||
d="m 6,23 18,0"
|
|
||||||
id="path3789"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
transform="translate(0,1020.3622)"
|
|
||||||
sodipodi:nodetypes="cc" />
|
|
||||||
<path
|
|
||||||
style="fill:none;stroke:#95785b;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
|
||||||
d="m 6,19 16,0"
|
|
||||||
id="path3791"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
transform="translate(0,1020.3622)"
|
|
||||||
sodipodi:nodetypes="cc" />
|
|
||||||
<path
|
|
||||||
style="fill:none;stroke:#bc8e48;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
|
||||||
d="m 6,15 8,0"
|
|
||||||
id="path3793"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
transform="translate(0,1020.3622)"
|
|
||||||
sodipodi:nodetypes="cc" />
|
|
||||||
<path
|
|
||||||
style="fill:none;stroke:#d38b28;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
|
||||||
d="m 6,11 20,0"
|
|
||||||
id="path3795"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
transform="translate(0,1020.3622)"
|
|
||||||
sodipodi:nodetypes="cc" />
|
|
||||||
<path
|
|
||||||
style="fill:none;stroke:#fd8a07;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
|
||||||
d="M 6,7 20,7"
|
|
||||||
id="path3797"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
transform="translate(0,1020.3622)"
|
|
||||||
sodipodi:nodetypes="cc" />
|
|
||||||
<path
|
|
||||||
style="fill:none;stroke:#fe7a15;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
|
||||||
d="M 6,3 26,3"
|
|
||||||
id="path3799"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
transform="translate(0,1020.3622)" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.1 KiB |
31
index.html
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Markdown编辑器-JonyLee的设计导航</title>
|
||||||
|
<link rel="canonical" href="https://md.jonylee.top">
|
||||||
|
<meta name="description" content="StackEdit中文版,免费,开源,功能全面的Markdown编辑器。">
|
||||||
|
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1">
|
||||||
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<!-- built files will be auto injected -->
|
||||||
|
<!-- baidu统计 -->
|
||||||
|
<script>
|
||||||
|
var _hmt = _hmt || [];
|
||||||
|
(function() {
|
||||||
|
var hm = document.createElement("script");
|
||||||
|
hm.src = "https://hm.baidu.com/hm.js?dad4b4383b13eedea1ab45ee323df1c3";
|
||||||
|
var s = document.getElementsByTagName("script")[0];
|
||||||
|
s.parentNode.insertBefore(hm, s);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
<!-- baidu统计结束 -->
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
27
index.js
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
const env = require('./config/prod.env');
|
||||||
|
|
||||||
|
Object.keys(env).forEach((key) => {
|
||||||
|
if (!process.env[key]) {
|
||||||
|
process.env[key] = JSON.parse(env[key]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const http = require('http');
|
||||||
|
const express = require('express');
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
|
||||||
|
require('./server')(app);
|
||||||
|
|
||||||
|
const port = parseInt(process.env.PORT || 8080, 10);
|
||||||
|
const httpServer = http.createServer(app);
|
||||||
|
httpServer.listen(port, null, () => {
|
||||||
|
console.log(`HTTP server started: http://localhost:${port}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Handle graceful shutdown
|
||||||
|
process.on('SIGTERM', () => {
|
||||||
|
httpServer.close(() => {
|
||||||
|
process.exit(0);
|
||||||
|
});
|
||||||
|
});
|
22028
package-lock.json
generated
Normal file
159
package.json
@ -1,36 +1,141 @@
|
|||||||
{
|
{
|
||||||
"name": "stackedit",
|
"name": "stackedit",
|
||||||
"version": "2.2.0",
|
"version": "5.15.21",
|
||||||
"description": "StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.",
|
"description": "免费, 开源, 功能齐全的 Markdown 编辑器",
|
||||||
"main": "res/main.js",
|
"author": "Benoit Schweblin, 豆萁",
|
||||||
"directories": {
|
"license": "Apache-2.0",
|
||||||
"doc": "doc"
|
"bugs": {
|
||||||
|
"url": "https://github.com/mafgwo/stackedit/issues"
|
||||||
|
},
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"postinstall": "gulp build-prism",
|
||||||
|
"start": "node build/dev-server.js",
|
||||||
|
"build": "node build/build.js && npm run build-style",
|
||||||
|
"build-style": "webpack --config build/webpack.style.conf.js",
|
||||||
|
"lint": "eslint --ext .js,.vue src server",
|
||||||
|
"unit": "jest --config test/unit/jest.conf.js --runInBand",
|
||||||
|
"unit-with-coverage": "jest --config test/unit/jest.conf.js --runInBand --coverage",
|
||||||
|
"test": "npm run lint && npm run unit",
|
||||||
|
"preversion": "npm run test",
|
||||||
|
"postversion": "git push origin master --tags && npm publish",
|
||||||
|
"patch": "npm version patch -m \"Tag v%s\"",
|
||||||
|
"minor": "npm version minor -m \"Tag v%s\"",
|
||||||
|
"major": "npm version major -m \"Tag v%s\"",
|
||||||
|
"chart": "mkdir -p dist && rm -rf dist/stackedit && cp -r chart dist/stackedit && sed -i.bak -e s/STACKEDIT_VERSION/$npm_package_version/g dist/stackedit/*.yaml && rm dist/stackedit/*.yaml.bak"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"express": "3.x"
|
"@vue/test-utils": "^1.0.0-beta.16",
|
||||||
|
"abcjs": "^5.2.0",
|
||||||
|
"babel-runtime": "^6.26.0",
|
||||||
|
"bezier-easing": "^1.1.0",
|
||||||
|
"body-parser": "^1.18.2",
|
||||||
|
"clipboard": "^1.7.1",
|
||||||
|
"compression": "^1.7.0",
|
||||||
|
"diff-match-patch": "^1.0.0",
|
||||||
|
"file-saver": "^1.3.8",
|
||||||
|
"handlebars": "^4.0.10",
|
||||||
|
"indexeddbshim": "^3.6.2",
|
||||||
|
"js-yaml": "^3.11.0",
|
||||||
|
"katex": "^0.16.2",
|
||||||
|
"markdown-it": "^8.4.1",
|
||||||
|
"markdown-it-abbr": "^1.0.4",
|
||||||
|
"markdown-it-deflist": "^2.0.2",
|
||||||
|
"markdown-it-emoji": "^1.3.0",
|
||||||
|
"markdown-it-footnote": "^3.0.1",
|
||||||
|
"markdown-it-imsize": "^2.0.1",
|
||||||
|
"markdown-it-mark": "^2.0.0",
|
||||||
|
"markdown-it-pandoc-renderer": "1.1.3",
|
||||||
|
"markdown-it-sub": "^1.0.0",
|
||||||
|
"markdown-it-sup": "^1.0.0",
|
||||||
|
"mermaid": "^8.9.2",
|
||||||
|
"mousetrap": "^1.6.1",
|
||||||
|
"normalize-scss": "^7.0.1",
|
||||||
|
"prismjs": "^1.6.0",
|
||||||
|
"request": "^2.85.0",
|
||||||
|
"serve-static": "^1.13.2",
|
||||||
|
"tmp": "^0.0.33",
|
||||||
|
"turndown": "^7.1.1",
|
||||||
|
"vue": "^2.5.16",
|
||||||
|
"vuex": "^3.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"grunt": "~0.4.1",
|
"autoprefixer": "^6.7.2",
|
||||||
"grunt-contrib-requirejs": "~0.4.1",
|
"babel-core": "^6.26.3",
|
||||||
"grunt-contrib-less": "~0.7.0",
|
"babel-eslint": "^8.2.3",
|
||||||
"grunt-string-replace": "~0.2.4",
|
"babel-jest": "^21.0.2",
|
||||||
"grunt-contrib-copy": "~0.4.1",
|
"babel-loader": "^7.1.4",
|
||||||
"bower": "~1.2.5",
|
"babel-plugin-dynamic-import-node": "^1.2.0",
|
||||||
"grunt-bower-requirejs": "~0.7.1",
|
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
|
||||||
"grunt-bower-task": "~0.3.1",
|
"babel-plugin-transform-runtime": "^6.23.0",
|
||||||
"grunt-bump": "0.0.11",
|
"babel-polyfill": "^6.23.0",
|
||||||
"grunt-shell": "~0.3.1"
|
"babel-preset-env": "^1.7.0",
|
||||||
|
"babel-preset-stage-2": "^6.22.0",
|
||||||
|
"babel-register": "^6.22.0",
|
||||||
|
"chalk": "^1.1.3",
|
||||||
|
"connect-history-api-fallback": "^1.3.0",
|
||||||
|
"copy-webpack-plugin": "^4.5.1",
|
||||||
|
"css-loader": "^0.28.11",
|
||||||
|
"eslint": "^4.19.1",
|
||||||
|
"eslint-config-airbnb-base": "^12.1.0",
|
||||||
|
"eslint-friendly-formatter": "^4.0.1",
|
||||||
|
"eslint-import-resolver-webpack": "^0.9.0",
|
||||||
|
"eslint-loader": "^2.0.0",
|
||||||
|
"eslint-plugin-html": "^4.0.3",
|
||||||
|
"eslint-plugin-import": "^2.11.0",
|
||||||
|
"eventsource-polyfill": "^0.9.6",
|
||||||
|
"express": "^4.16.3",
|
||||||
|
"extract-text-webpack-plugin": "^2.0.0",
|
||||||
|
"favicons-webpack-plugin": "^0.0.9",
|
||||||
|
"file-loader": "^1.1.11",
|
||||||
|
"friendly-errors-webpack-plugin": "^1.7.0",
|
||||||
|
"gulp": "^4.0.2",
|
||||||
|
"gulp-concat": "^2.6.1",
|
||||||
|
"html-webpack-plugin": "^3.2.0",
|
||||||
|
"http-proxy-middleware": "^0.18.0",
|
||||||
|
"identity-obj-proxy": "^3.0.0",
|
||||||
|
"ignore-loader": "^0.1.2",
|
||||||
|
"jest": "^23.0.0",
|
||||||
|
"jest-raw-loader": "^1.0.1",
|
||||||
|
"jest-serializer-vue": "^0.3.0",
|
||||||
|
"js-md5": "^0.7.3",
|
||||||
|
"node-sass": "^4.0.0",
|
||||||
|
"npm-bump": "^0.0.23",
|
||||||
|
"offline-plugin": "^5.0.3",
|
||||||
|
"opn": "^4.0.2",
|
||||||
|
"optimize-css-assets-webpack-plugin": "^1.3.2",
|
||||||
|
"ora": "^1.2.0",
|
||||||
|
"raw-loader": "^0.5.1",
|
||||||
|
"replace-in-file": "^4.1.0",
|
||||||
|
"rimraf": "^2.6.0",
|
||||||
|
"sass-loader": "^7.0.1",
|
||||||
|
"semver": "^5.5.0",
|
||||||
|
"shelljs": "^0.8.1",
|
||||||
|
"string-replace-loader": "^2.1.1",
|
||||||
|
"stylelint": "^9.2.0",
|
||||||
|
"stylelint-config-standard": "^16.0.0",
|
||||||
|
"stylelint-processor-html": "^1.0.0",
|
||||||
|
"stylelint-webpack-plugin": "^0.10.4",
|
||||||
|
"url-loader": "^1.0.1",
|
||||||
|
"vue-jest": "^1.0.2",
|
||||||
|
"vue-loader": "^15.0.9",
|
||||||
|
"vue-style-loader": "^4.1.0",
|
||||||
|
"vue-template-compiler": "^2.5.16",
|
||||||
|
"webpack": "^2.6.1",
|
||||||
|
"webpack-bundle-analyzer": "^3.3.2",
|
||||||
|
"webpack-dev-middleware": "^1.10.0",
|
||||||
|
"webpack-hot-middleware": "^2.18.0",
|
||||||
|
"webpack-merge": "^4.1.2",
|
||||||
|
"webpack-pwa-manifest": "^3.7.1",
|
||||||
|
"worker-loader": "^1.1.1"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"engines": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"node": ">= 8.0.0",
|
||||||
|
"npm": ">= 5.0.0"
|
||||||
},
|
},
|
||||||
"repository": {
|
"browserslist": [
|
||||||
"type": "git",
|
"> 1%",
|
||||||
"url": "git://github.com/benweet/stackedit.git"
|
"last 2 versions",
|
||||||
},
|
"not ie <= 10"
|
||||||
"author": "Benoit Schweblin",
|
]
|
||||||
"license": "Apache License",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/benweet/stackedit/issues"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,241 +0,0 @@
|
|||||||
|
|
||||||
Welcome to StackEdit! {#welcome}
|
|
||||||
=====================
|
|
||||||
|
|
||||||
|
|
||||||
Hello, I am your first Markdown document within **StackEdit**[^stackedit]. Don't delete me, I can be helpful. I can be recovered anyway in the `Utils` tab of the <i class="icon-cog"></i> `Settings` dialog.
|
|
||||||
|
|
||||||
----------
|
|
||||||
|
|
||||||
|
|
||||||
Documents
|
|
||||||
---------
|
|
||||||
|
|
||||||
**StackEdit** stores your documents in your browser local storage, which means all your documents are automatically saved locally and are accessible offline.
|
|
||||||
|
|
||||||
> **NOTE:** This also means that your documents are not shared between different browsers or computers and that clearing your browser's data may **delete all of them!**
|
|
||||||
|
|
||||||
#### <i class="icon-file"></i> Create a document
|
|
||||||
|
|
||||||
You can create a new document by clicking the <i class="icon-file"></i> button in the navigation bar. This will switch from the current document to the new one.
|
|
||||||
|
|
||||||
#### <i class="icon-folder-open"></i> Switch to another document
|
|
||||||
|
|
||||||
You can list all your local documents and switch from one to another by clicking the <i class="icon-folder-open"></i> button in the navigation bar.
|
|
||||||
|
|
||||||
#### <i class="icon-pencil"></i> Rename a document
|
|
||||||
|
|
||||||
You can rename the current document by clicking the document title in the navigation bar.
|
|
||||||
|
|
||||||
#### <i class="icon-trash"></i> Delete a document
|
|
||||||
|
|
||||||
You can delete the current document by clicking the <i class="icon-trash"></i> button in the navigation bar.
|
|
||||||
|
|
||||||
#### <i class="icon-hdd"></i> Save a document
|
|
||||||
|
|
||||||
You can save the current document to a file using the <i class="icon-hdd"></i> `Save as...` sub-menu.
|
|
||||||
|
|
||||||
> **NOTE:** See [<i class="icon-share"></i> Publish a document](#publish-a-document) section for a description of the different outputs.
|
|
||||||
|
|
||||||
|
|
||||||
----------
|
|
||||||
|
|
||||||
|
|
||||||
Synchronization
|
|
||||||
---------------
|
|
||||||
|
|
||||||
**StackEdit** can be combined with **Google Drive** and **Dropbox** to have your documents centralized in the *Cloud*. The synchronization mechanism will take care of uploading your modifications or downloading the latest version of your documents.
|
|
||||||
|
|
||||||
> **NOTE:** Full access to **Google Drive** or **Dropbox** is required to be able to import any document in StackEdit. Imported documents are downloaded in your browser and are not transmitted to a server.
|
|
||||||
|
|
||||||
#### <i class="icon-download"></i> Import a document
|
|
||||||
|
|
||||||
You can import a document from the *Cloud* by going to the <i class="icon-provider-gdrive"></i> `Google Drive` or the <i class="icon-provider-dropbox"></i> `Dropbox` sub-menu and by clicking `Import from...`. Once imported, your document will be automatically synchronized with the **Google Drive** / **Dropbox** file.
|
|
||||||
|
|
||||||
#### <i class="icon-upload"></i> Export a document
|
|
||||||
|
|
||||||
You can export any document by going to the <i class="icon-provider-gdrive"></i> `Google Drive` or the <i class="icon-provider-dropbox"></i> `Dropbox` sub-menu and by clicking `Export to...`. Even if your document is already synchronized with **Google Drive** or **Dropbox**, you can export it to a another location. **StackEdit** can synchronize one document with multiple locations.
|
|
||||||
|
|
||||||
#### <i class="icon-refresh"></i> Synchronize a document
|
|
||||||
|
|
||||||
Once your document is linked to a **Google Drive** or a **Dropbox** file, **StackEdit** will periodically (every 3 minutes) synchronize it by downloading/uploading any modification. Any conflict will be detected, and a local copy of your document will be created as a backup if necessary.
|
|
||||||
|
|
||||||
If you just have modified your document and you want to force the synchronization, click the <i class="icon-refresh"></i> button in the navigation bar.
|
|
||||||
|
|
||||||
> **NOTE:** The <i class="icon-refresh"></i> button is disabled when:
|
|
||||||
>
|
|
||||||
> - you are offline,
|
|
||||||
> - or the document is not synchronized with any location,
|
|
||||||
> - or the document has not been modified since the last synchronization.
|
|
||||||
|
|
||||||
#### <i class="icon-refresh"></i> Manage document synchronization
|
|
||||||
|
|
||||||
Since one document can be synchronized with multiple locations, you can list and manage synchronized locations by clicking <i class="icon-refresh"></i> `Manage synchronization` in the <i class="icon-provider-stackedit"></i> menu. This will open a dialog box allowing you to add or remove synchronization links that are associated to your document.
|
|
||||||
|
|
||||||
> **NOTE:** If you delete the file from **Google Drive** or from **Dropbox**, the document will no longer be synchronized with that location.
|
|
||||||
|
|
||||||
----------
|
|
||||||
|
|
||||||
|
|
||||||
Publication
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Once you are happy with your document, you can publish it on different websites directly from **StackEdit**. As for now, **StackEdit** can publish on **Blogger**, **Dropbox**, **Gist**, **GitHub**, **Google Drive**, **Tumblr**, **WordPress** and on any SSH server.
|
|
||||||
|
|
||||||
#### <i class="icon-share"></i> Publish a document
|
|
||||||
|
|
||||||
You can publish your document by going to the <i class="icon-share"></i> `Publish on` sub-menu and by choosing a website. In the dialog box, you can choose the publication format:
|
|
||||||
|
|
||||||
- Markdown, to publish the Markdown text on a website that can interpret it (**GitHub** for instance),
|
|
||||||
- HTML, to publish the document converted into HTML (on a blog for instance),
|
|
||||||
- Template, to have a full control of the output.
|
|
||||||
|
|
||||||
> **NOTE:** The default template is a simple webpage wrapping your document in HTML format. You can customize it in the `Services` tab of the <i class="icon-cog"></i> `Settings` dialog.
|
|
||||||
|
|
||||||
#### <i class="icon-share"></i> Update a publication
|
|
||||||
|
|
||||||
After publishing, **StackEdit** will keep your document linked to that publish location so that you can update it easily. Once you have modified your document and you want to update your publication, click on the <i class="icon-share"></i> button in the navigation bar.
|
|
||||||
|
|
||||||
> **NOTE:** The <i class="icon-share"></i> button is disabled when:
|
|
||||||
>
|
|
||||||
> - you are offline,
|
|
||||||
> - or the document has not been published anywhere.
|
|
||||||
|
|
||||||
#### <i class="icon-share"></i> Manage document publication
|
|
||||||
|
|
||||||
Since one document can be published on multiple locations, you can list and manage publish locations by clicking <i class="icon-share"></i> `Manage publication` in the <i class="icon-provider-stackedit"></i> menu. This will open a dialog box allowing you to remove publication links that are associated to your document.
|
|
||||||
|
|
||||||
> **NOTE:** In some cases, if you remove the file from the website or the post from the blog, the document will no longer be published on that location.
|
|
||||||
|
|
||||||
----------
|
|
||||||
|
|
||||||
|
|
||||||
Markdown Extra
|
|
||||||
--------------
|
|
||||||
|
|
||||||
**StackEdit** supports **Markdown Extra**, which extends **Markdown** syntax with some nice features.
|
|
||||||
|
|
||||||
> **NOTE:** You can disable any **Markdown Extra** feature in the `Extensions` tab of the <i class="icon-cog"></i> `Settings` dialog.
|
|
||||||
|
|
||||||
|
|
||||||
### Tables
|
|
||||||
|
|
||||||
**Markdown Extra** has a special syntax for tables:
|
|
||||||
|
|
||||||
Item | Value
|
|
||||||
--------- | -----
|
|
||||||
Computer | \$1600
|
|
||||||
Phone | \$12
|
|
||||||
Pipe | \$1
|
|
||||||
|
|
||||||
You can specify column alignment with one or two colons:
|
|
||||||
|
|
||||||
| Item | Value | Qty |
|
|
||||||
| :-------- | ------:| :--: |
|
|
||||||
| Computer | \$1600 | 5 |
|
|
||||||
| Phone | \$12 | 12 |
|
|
||||||
| Pipe | \$1 | 234 |
|
|
||||||
|
|
||||||
|
|
||||||
### Definition Lists
|
|
||||||
|
|
||||||
**Markdown Extra** has a special syntax for definition lists too:
|
|
||||||
|
|
||||||
Term 1
|
|
||||||
Term 2
|
|
||||||
: Definition A
|
|
||||||
: Definition B
|
|
||||||
|
|
||||||
Term 3
|
|
||||||
|
|
||||||
: Definition C
|
|
||||||
|
|
||||||
: Definition D
|
|
||||||
|
|
||||||
> part of definition D
|
|
||||||
|
|
||||||
|
|
||||||
### Fenced code blocks
|
|
||||||
|
|
||||||
GitHub's fenced code blocks are also supported with **Prettify** syntax highlighting:
|
|
||||||
|
|
||||||
```
|
|
||||||
// Foo
|
|
||||||
var bar = 0;
|
|
||||||
```
|
|
||||||
|
|
||||||
> **NOTE:** To use **Highlight.js** instead of **Prettify**, just configure the `Markdown Extra` extension in the <i class="icon-cog"></i> `Settings` dialog.
|
|
||||||
|
|
||||||
|
|
||||||
### Special Attributes
|
|
||||||
|
|
||||||
With **Markdown Extra**, you can specify `class` and `id` attributes on headers and fenced code blocks just like this:
|
|
||||||
|
|
||||||
##### Header example {#my-header}
|
|
||||||
|
|
||||||
``` {#my-id .my-class}
|
|
||||||
var foo = bar;
|
|
||||||
```
|
|
||||||
|
|
||||||
Then you can create cross-references like this: [beginning of the document](#welcome).
|
|
||||||
|
|
||||||
|
|
||||||
### Footnotes
|
|
||||||
|
|
||||||
You can create footnotes like this[^footnote].
|
|
||||||
|
|
||||||
[^footnote]: Here is the *text* of the **footnote**.
|
|
||||||
|
|
||||||
|
|
||||||
### SmartyPants
|
|
||||||
|
|
||||||
SmartyPants converts ASCII punctuation characters into "smart" typographic punctuation HTML entities. For example:
|
|
||||||
|
|
||||||
| | ASCII | HTML |
|
|
||||||
------------------|------------------------------------------|-------------------------------------
|
|
||||||
| Single backticks | `'Isn't this fun?'` | ‘Isn’t this fun?’ |
|
|
||||||
| Quotes | `"Isn't this fun?"` | “Isn’t this fun?” |
|
|
||||||
| Dashes | `-- is an en-dash and --- is an em-dash` | – is an en-dash and — is an em-dash |
|
|
||||||
|
|
||||||
|
|
||||||
### Table of contents
|
|
||||||
|
|
||||||
You can insert a table of contents using the marker `[TOC]`:
|
|
||||||
|
|
||||||
[TOC]
|
|
||||||
|
|
||||||
|
|
||||||
### MathJax
|
|
||||||
|
|
||||||
You can render *LaTeX* mathematical expressions using **MathJax**, as on [math.stackexchange.com][1]:
|
|
||||||
|
|
||||||
The *Gamma function* satisfying $\Gamma(n) = (n-1)!\quad\forall
|
|
||||||
n\in\mathbb N$ is via through the Euler integral
|
|
||||||
|
|
||||||
$$
|
|
||||||
\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.
|
|
||||||
$$
|
|
||||||
|
|
||||||
> **NOTE:** When exporting, make sure you include MathJax to render mathematical expression correctly. Your page/template should include something like:
|
|
||||||
|
|
||||||
```
|
|
||||||
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script>
|
|
||||||
```
|
|
||||||
|
|
||||||
> **NOTE:** You can find more information:
|
|
||||||
>
|
|
||||||
> - about **Markdown** syntax [here][2],
|
|
||||||
> - about **Markdown Extra** extension [here][3],
|
|
||||||
> - about **Prettify** syntax highlighting [here][4],
|
|
||||||
> - about **Highlight.js** syntax highlighting [here][5].
|
|
||||||
|
|
||||||
Written with [StackEdit](https://stackedit.io/).
|
|
||||||
|
|
||||||
[^stackedit]: StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.
|
|
||||||
|
|
||||||
|
|
||||||
[1]: http://math.stackexchange.com/
|
|
||||||
[2]: http://daringfireball.net/projects/markdown/syntax "Markdown"
|
|
||||||
[3]: https://github.com/jmcmanus/pagedown-extra "Pagedown Extra"
|
|
||||||
[4]: https://code.google.com/p/google-code-prettify/
|
|
||||||
[5]: http://softwaremaniacs.org/soft/highlight/en/
|
|
@ -1,392 +0,0 @@
|
|||||||
CACHE MANIFEST
|
|
||||||
#Date Wed Oct 16 2013 00:12:59
|
|
||||||
|
|
||||||
CACHE:
|
|
||||||
index.html
|
|
||||||
viewer.html
|
|
||||||
res/worker.js
|
|
||||||
libs/MathJax/MathJax.js?config=TeX-AMS_HTML
|
|
||||||
libs/MathJax/config/Safe.js
|
|
||||||
libs/MathJax/config/TeX-AMS_HTML.js
|
|
||||||
libs/MathJax/images/CloseX-31.png
|
|
||||||
libs/MathJax/images/MenuArrow-15.png
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/jax.js
|
|
||||||
|
|
||||||
#DynamicResourcesBegin
|
|
||||||
res-min/font/cursive_standard-webfont.eot
|
|
||||||
res-min/font/cursive_standard-webfont.svg
|
|
||||||
res-min/font/cursive_standard-webfont.ttf
|
|
||||||
res-min/font/cursive_standard-webfont.woff
|
|
||||||
res-min/font/fontello.eot
|
|
||||||
res-min/font/fontello.svg
|
|
||||||
res-min/font/fontello.ttf
|
|
||||||
res-min/font/fontello.woff
|
|
||||||
res-min/img/glyphicons-halflings-white.png
|
|
||||||
res-min/img/glyphicons-halflings.png
|
|
||||||
res-min/img/icons.png
|
|
||||||
res-min/img/icons2x.png
|
|
||||||
res-min/img/loader-blue-gray.gif
|
|
||||||
res-min/img/loader-blue-gray2x.gif
|
|
||||||
res-min/img/loader-default.gif
|
|
||||||
res-min/img/loader-default2x.gif
|
|
||||||
res-min/img/loader-night.gif
|
|
||||||
res-min/img/loader-night2x.gif
|
|
||||||
res-min/img/loader-school.gif
|
|
||||||
res-min/img/loader-school2x.gif
|
|
||||||
res-min/img/school-line.png
|
|
||||||
res-min/img/stackedit-32.ico
|
|
||||||
res-min/img/stackedit-64.png
|
|
||||||
res-min/img/stackedit-promo.png
|
|
||||||
res-min/main.js
|
|
||||||
res-min/require.js
|
|
||||||
res-min/themes/blue-gray.css
|
|
||||||
res-min/themes/default.css
|
|
||||||
res-min/themes/night.css
|
|
||||||
res-min/themes/school.css
|
|
||||||
libs/dictionaries/de_DE.aff.lz
|
|
||||||
libs/dictionaries/de_DE.dic.lz
|
|
||||||
libs/dictionaries/en_US.aff.lz
|
|
||||||
libs/dictionaries/en_US.dic.lz
|
|
||||||
libs/dictionaries/es_ES.aff.lz
|
|
||||||
libs/dictionaries/es_ES.dic.lz
|
|
||||||
libs/dictionaries/fr_FR.aff.lz
|
|
||||||
libs/dictionaries/fr_FR.dic.lz
|
|
||||||
libs/MathJax/extensions/FontWarnings.js
|
|
||||||
libs/MathJax/extensions/HTML-CSS/handle-floats.js
|
|
||||||
libs/MathJax/extensions/HelpDialog.js
|
|
||||||
libs/MathJax/extensions/MathEvents.js
|
|
||||||
libs/MathJax/extensions/MathMenu.js
|
|
||||||
libs/MathJax/extensions/MathZoom.js
|
|
||||||
libs/MathJax/extensions/Safe.js
|
|
||||||
libs/MathJax/extensions/TeX/AMScd.js
|
|
||||||
libs/MathJax/extensions/TeX/AMSmath.js
|
|
||||||
libs/MathJax/extensions/TeX/AMSsymbols.js
|
|
||||||
libs/MathJax/extensions/TeX/HTML.js
|
|
||||||
libs/MathJax/extensions/TeX/action.js
|
|
||||||
libs/MathJax/extensions/TeX/autobold.js
|
|
||||||
libs/MathJax/extensions/TeX/autoload-all.js
|
|
||||||
libs/MathJax/extensions/TeX/bbox.js
|
|
||||||
libs/MathJax/extensions/TeX/begingroup.js
|
|
||||||
libs/MathJax/extensions/TeX/boldsymbol.js
|
|
||||||
libs/MathJax/extensions/TeX/cancel.js
|
|
||||||
libs/MathJax/extensions/TeX/color.js
|
|
||||||
libs/MathJax/extensions/TeX/enclose.js
|
|
||||||
libs/MathJax/extensions/TeX/extpfeil.js
|
|
||||||
libs/MathJax/extensions/TeX/mathchoice.js
|
|
||||||
libs/MathJax/extensions/TeX/mhchem.js
|
|
||||||
libs/MathJax/extensions/TeX/newcommand.js
|
|
||||||
libs/MathJax/extensions/TeX/noErrors.js
|
|
||||||
libs/MathJax/extensions/TeX/noUndefined.js
|
|
||||||
libs/MathJax/extensions/TeX/unicode.js
|
|
||||||
libs/MathJax/extensions/TeX/verb.js
|
|
||||||
libs/MathJax/extensions/asciimath2jax.js
|
|
||||||
libs/MathJax/extensions/jsMath2jax.js
|
|
||||||
libs/MathJax/extensions/mml2jax.js
|
|
||||||
libs/MathJax/extensions/tex2jax.js
|
|
||||||
libs/MathJax/extensions/toMathML.js
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_AMS-Regular.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Caligraphic-Bold.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Caligraphic-Regular.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Fraktur-Bold.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Fraktur-Regular.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Main-Bold.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Main-Italic.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Main-Regular.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Math-BoldItalic.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Math-Italic.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Math-Regular.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Bold.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Italic.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_SansSerif-Regular.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Script-Regular.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size1-Regular.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size2-Regular.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size3-Regular.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size4-Regular.woff
|
|
||||||
libs/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Typewriter-Regular.woff
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/Arrows.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/BBBold.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/BoxDrawing.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/CombDiacritMarks.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/Dingbats.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/EnclosedAlphanum.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/GeneralPunctuation.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/GeometricShapes.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/GreekAndCoptic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/Latin1Supplement.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/LatinExtendedA.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/LetterlikeSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/MathOperators.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/MiscMathSymbolsB.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/MiscSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/MiscTechnical.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/PUA.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/SpacingModLetters.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/SuppMathOperators.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Caligraphic/Bold/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Caligraphic/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Bold/BasicLatin.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Bold/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Bold/Other.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Bold/PUA.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Regular/BasicLatin.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Regular/Other.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Regular/PUA.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Greek/Bold/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Greek/BoldItalic/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Greek/Italic/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Greek/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/Arrows.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/CombDiacritMarks.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/CombDiactForSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/GeneralPunctuation.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/GeometricShapes.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/Latin1Supplement.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/LatinExtendedA.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/LatinExtendedB.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/LetterlikeSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/MathOperators.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/MiscMathSymbolsA.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/MiscSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/MiscTechnical.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/SpacingModLetters.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/SuppMathOperators.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/SupplementalArrowsA.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Italic/CombDiacritMarks.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Italic/GeneralPunctuation.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Italic/Latin1Supplement.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Italic/LetterlikeSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Italic/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/CombDiacritMarks.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/GeometricShapes.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/MiscSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/SpacingModLetters.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Math/BoldItalic/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Math/Italic/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Bold/BasicLatin.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Bold/CombDiacritMarks.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Bold/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Bold/Other.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Italic/BasicLatin.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Italic/CombDiacritMarks.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Italic/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Italic/Other.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Regular/BasicLatin.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Regular/CombDiacritMarks.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Regular/Other.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Script/Regular/BasicLatin.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Script/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Script/Regular/Other.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Size1/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Size2/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Size3/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Size4/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Typewriter/Regular/BasicLatin.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Typewriter/Regular/CombDiacritMarks.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Typewriter/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/Typewriter/Regular/Other.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/WinChrome/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/WinIE6/Regular/AMS.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/WinIE6/Regular/Bold.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/WinIE6/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/fontdata-extra.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/TeX/fontdata.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/AlphaPresentForms.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/Arrows.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/BBBold.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/BoldFraktur.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/BoxDrawing.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/CombDiacritMarks.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/CombDiactForSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/ControlPictures.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/CurrencySymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/Cyrillic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/EnclosedAlphanum.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/GeneralPunctuation.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/GeometricShapes.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/GreekAndCoptic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/GreekBold.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/GreekSSBold.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/IPAExtensions.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/Latin1Supplement.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/LatinExtendedA.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/LatinExtendedAdditional.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/LatinExtendedB.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/LatinExtendedD.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/LetterlikeSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/MathBold.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/MathOperators.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/MathSSBold.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/MiscMathSymbolsA.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/MiscMathSymbolsB.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/MiscSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/MiscTechnical.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/NumberForms.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/PhoneticExtensions.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/SpacingModLetters.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/SuperAndSubscripts.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/SuppMathOperators.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/AlphaPresentForms.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/BasicLatin.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/BoxDrawing.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/CombDiactForSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/ControlPictures.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/CurrencySymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/Cyrillic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/EnclosedAlphanum.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/GeneralPunctuation.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/GreekAndCoptic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/GreekBoldItalic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/GreekSSBoldItalic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/IPAExtensions.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/Latin1Supplement.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/LatinExtendedA.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/LatinExtendedAdditional.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/LatinExtendedB.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/LetterlikeSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/MathBoldItalic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/MathBoldScript.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/MathOperators.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/MathSSItalicBold.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/SpacingModLetters.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/AlphaPresentForms.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/BoxDrawing.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/CombDiactForSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/ControlPictures.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/CurrencySymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/Cyrillic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/EnclosedAlphanum.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/GeneralPunctuation.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/GreekAndCoptic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/GreekItalic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/IPAExtensions.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/Latin1Supplement.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/LatinExtendedA.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/LatinExtendedAdditional.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/LatinExtendedB.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/LetterlikeSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/MathItalic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/MathOperators.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/MathSSItalic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/MathScript.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/SpacingModLetters.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/ij.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/AlphaPresentForms.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/Arrows.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/BBBold.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/BlockElements.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/BoldFraktur.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/BoxDrawing.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/CJK.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/CombDiacritMarks.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/CombDiactForSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/ControlPictures.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/CurrencySymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/Cyrillic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/Dingbats.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/EnclosedAlphanum.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/Fraktur.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GeneralPunctuation.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GeometricShapes.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GreekAndCoptic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GreekBold.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GreekBoldItalic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GreekItalic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GreekSSBold.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GreekSSBoldItalic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/Hiragana.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/IPAExtensions.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/Latin1Supplement.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/LatinExtendedA.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/LatinExtendedAdditional.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/LatinExtendedB.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/LatinExtendedD.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/LetterlikeSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathBold.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathBoldItalic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathBoldScript.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathItalic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathOperators.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathSS.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathSSBold.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathSSItalic.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathSSItalicBold.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathScript.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathTT.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MiscMathSymbolsA.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MiscMathSymbolsB.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MiscSymbols.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MiscSymbolsAndArrows.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MiscTechnical.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/NumberForms.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/PhoneticExtensions.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/SpacingModLetters.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/Specials.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/SuperAndSubscripts.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/SuppMathOperators.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/SupplementalArrowsA.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/SupplementalArrowsB.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/ij.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsD/Bold/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsD/Regular/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsD/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsSm/Bold/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsSm/Regular/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsSm/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUp/Bold/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUp/Regular/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUp/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUpD/Bold/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUpD/Regular/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUpD/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUpSm/Bold/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUpSm/Regular/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUpSm/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Bold/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Bold/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Bold/PrivateUse.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/BoldItalic/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/BoldItalic/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/BoldItalic/PrivateUse.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Italic/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Italic/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Italic/PrivateUse.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Regular/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Regular/PrivateUse.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeFiveSym/Regular/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeFiveSym/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeFourSym/Bold/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeFourSym/Regular/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeFourSym/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeOneSym/Bold/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeOneSym/Bold/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeOneSym/Regular/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeOneSym/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeThreeSym/Bold/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeThreeSym/Regular/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeThreeSym/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeTwoSym/Bold/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeTwoSym/Regular/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeTwoSym/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/Variants/Bold/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/Variants/Bold/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/Variants/Regular/All.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/Variants/Regular/Main.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/fontdata-1.0.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/fontdata-beta.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/fontdata-extra.js
|
|
||||||
libs/MathJax/jax/output/HTML-CSS/fonts/STIX/fontdata.js
|
|
||||||
#DynamicResourcesEnd
|
|
||||||
|
|
||||||
NETWORK:
|
|
||||||
*
|
|
@ -1 +0,0 @@
|
|||||||
google-site-verification: google4971b5a4d775691a.html
|
|
@ -1,11 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<script src="../libs/dropbox.min.js"></script>
|
|
||||||
<script type="text/javascript">
|
|
||||||
Dropbox.AuthDriver.Popup.oauthReceiver();
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,16 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html manifest="cache.manifest">
|
|
||||||
<head>
|
|
||||||
<script type="text/javascript">
|
|
||||||
|
|
||||||
var redirectUrl = location.href.substring(0, location.href.indexOf("html/gdrive-action.html"));
|
|
||||||
var state = decodeURI((/state=(.+?)(&|$)/
|
|
||||||
.exec(location.search) || [ , null ])[1]);
|
|
||||||
if(state) {
|
|
||||||
localStorage["gdrive.state"] = state;
|
|
||||||
}
|
|
||||||
window.location.replace(redirectUrl);
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
</html>
|
|
@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<script type="text/javascript">
|
|
||||||
function getParameter(name) {
|
|
||||||
var regex = new RegExp(name + "=(.+?)(&|$)");
|
|
||||||
try {
|
|
||||||
return decodeURI(regex.exec(location.search)[1]);
|
|
||||||
} catch (e) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var client_id = getParameter("client_id");
|
|
||||||
var code = getParameter("code");
|
|
||||||
if (client_id) {
|
|
||||||
window.location.href = "https://github.com/login/oauth/authorize?client_id="
|
|
||||||
+ client_id + "&scope=repo,gist";
|
|
||||||
} else {
|
|
||||||
if (code) {
|
|
||||||
localStorage["githubCode"] = code;
|
|
||||||
}
|
|
||||||
window.close();
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
</html>
|
|
@ -1,26 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<script type="text/javascript">
|
|
||||||
function getParameter(name) {
|
|
||||||
var regex = new RegExp(name + "=(.+?)(&|$)");
|
|
||||||
try {
|
|
||||||
return decodeURI(regex.exec(location.search)[1]);
|
|
||||||
} catch (e) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var oauth_token = getParameter("oauth_token");
|
|
||||||
var oauth_verifier = getParameter("oauth_verifier");
|
|
||||||
if (oauth_token && !oauth_verifier) {
|
|
||||||
window.location.href = "http://www.tumblr.com/oauth/authorize?oauth_token="
|
|
||||||
+ oauth_token;
|
|
||||||
} else {
|
|
||||||
if (oauth_verifier) {
|
|
||||||
localStorage["tumblrVerifier"] = oauth_verifier;
|
|
||||||
}
|
|
||||||
window.close();
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
</html>
|
|
@ -1,27 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<script type="text/javascript">
|
|
||||||
function getParameter(name) {
|
|
||||||
var regex = new RegExp(name + "=(.+?)(&|$)");
|
|
||||||
try {
|
|
||||||
return decodeURI(regex.exec(location.search)[1]);
|
|
||||||
} catch (e) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var client_id = getParameter("client_id");
|
|
||||||
var code = getParameter("code");
|
|
||||||
if (client_id) {
|
|
||||||
var redirectURI = location.href.substring(0, location.href.indexOf("?"));
|
|
||||||
window.location.href = "https://public-api.wordpress.com/oauth2/authorize?response_type=code&client_id="
|
|
||||||
+ client_id + "&redirect_uri=" + redirectURI;
|
|
||||||
} else {
|
|
||||||
if (code) {
|
|
||||||
localStorage["wordpressCode"] = code;
|
|
||||||
}
|
|
||||||
window.close();
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
</html>
|
|
@ -1,32 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html manifest="cache.manifest">
|
|
||||||
<head>
|
|
||||||
<title>StackEdit - Markdown editor</title>
|
|
||||||
<link rel="canonical" href="http://benweet.github.io/stackedit/">
|
|
||||||
<link rel="icon" href="res-min/img/stackedit-32.ico" type="image/x-icon">
|
|
||||||
<link rel="shortcut icon" href="res-min/img/stackedit-32.ico"
|
|
||||||
type="image/x-icon">
|
|
||||||
<meta name="description"
|
|
||||||
content="StackEdit is a free, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.">
|
|
||||||
<meta name="author" content="Benoit Schweblin">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<meta name="msvalidate.01" content="5E47EE6F67B069C17E3CDD418351A612" />
|
|
||||||
<script>
|
|
||||||
// Use http://.../?debug to serve original JavaScript files instead of minified
|
|
||||||
var baseDir = 'res';
|
|
||||||
if(!/(\?|&)debug($|&)/.test(location.search)) {
|
|
||||||
baseDir += '-min';
|
|
||||||
}
|
|
||||||
var require = {
|
|
||||||
baseUrl: baseDir,
|
|
||||||
deps: [
|
|
||||||
'main'
|
|
||||||
]
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<script src="res-min/require.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|