Compare commits
No commits in common. "master" and "v2.2.1" have entirely different histories.
14
.babelrc
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"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"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
node_modules
|
|
||||||
.git
|
|
||||||
dist
|
|
||||||
.history
|
|
||||||
images
|
|
||||||
docs
|
|
||||||
Dockerfile
|
|
||||||
README.md
|
|
||||||
build.sh
|
|
@ -1,9 +0,0 @@
|
|||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
charset = utf-8
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
end_of_line = lf
|
|
||||||
insert_final_newline = true
|
|
||||||
trim_trailing_whitespace = true
|
|
@ -1,3 +0,0 @@
|
|||||||
build/*.js
|
|
||||||
config/*.js
|
|
||||||
src/libs/*.js
|
|
44
.eslintrc.js
@ -1,44 +0,0 @@
|
|||||||
// 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,10 +1,6 @@
|
|||||||
.DS_Store
|
chrome-app*
|
||||||
node_modules/
|
.project
|
||||||
dist/
|
.settings
|
||||||
.history
|
node_modules
|
||||||
.idea
|
Thumbs.db
|
||||||
npm-debug.log*
|
public/res/bower-libs
|
||||||
.vscode
|
|
||||||
stackedit_v4
|
|
||||||
chrome-app/*.zip
|
|
||||||
/test/unit/coverage/
|
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
// https://github.com/michael-ciniawsky/postcss-load-config
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
"plugins": {
|
|
||||||
// to edit target browsers: use "browserlist" field in package.json
|
|
||||||
"autoprefixer": {}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"processors": ["stylelint-processor-html"],
|
|
||||||
"extends": "stylelint-config-standard",
|
|
||||||
"rules": {
|
|
||||||
"no-empty-source": null
|
|
||||||
}
|
|
||||||
}
|
|
22
.travis.yml
@ -1,22 +0,0 @@
|
|||||||
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
@ -1,16 +0,0 @@
|
|||||||
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", "." ]
|
|
279
Gruntfile.js
Normal file
@ -0,0 +1,279 @@
|
|||||||
|
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');
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* 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'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* 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');
|
||||||
|
});
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* Tag task
|
||||||
|
*/
|
||||||
|
grunt.registerTask('tag', function() {
|
||||||
|
grunt.task.run('bump-only');
|
||||||
|
grunt.task.run('string-replace:config');
|
||||||
|
grunt.task.run('default');
|
||||||
|
grunt.task.run('bump-commit');
|
||||||
|
});
|
||||||
|
};
|
4
LICENSE.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
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)
|
217
README.md
@ -1,191 +1,50 @@
|
|||||||
<h1 align="center" style="text-align:center;">
|
StackEdit
|
||||||
<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.
|
||||||
|
|
||||||
本项目为本人clone修改自用,如果你也喜欢,请至原作者处获取及交流。
|
> **NOTE:**
|
||||||
|
>
|
||||||
|
> - 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:
|
||||||

|
|
||||||
|
|
||||||
**ChatGPT集成协助写作**
|
- [Welcome document][2]
|
||||||

|
- [Developer guide][3]
|
||||||
|
- [Theming guide][4]
|
||||||
|
|
||||||
## 相比国外开源版本的区别:
|
|
||||||
|
|
||||||
- 修复了Github授权登录问题
|
> **NOTE:** This page has been written and published with [StackEdit][5].
|
||||||
- 支持了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
|
||||||
- 不支持国内常用Gitee
|
[2]: https://github.com/benweet/stackedit/blob/master/WELCOME.md#welcome-to-stackedit---welcome "Welcome document"
|
||||||
- 强依赖GoogleDrive,而Google Drive在国内不能正常访问
|
[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"
|
||||||
## 部署说明
|
[5]: http://benweet.github.io/stackedit/ "StackEdit"
|
||||||
|
|
||||||
> 建议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
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "stackedit",
|
||||||
|
"version": "2.2.1",
|
||||||
|
"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
@ -1,37 +0,0 @@
|
|||||||
#!/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 "操作完成"
|
|
@ -1,35 +0,0 @@
|
|||||||
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'
|
|
||||||
))
|
|
||||||
})
|
|
||||||
})
|
|
@ -1,48 +0,0 @@
|
|||||||
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)
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
#!/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
|
|
@ -1,9 +0,0 @@
|
|||||||
/* 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()
|
|
||||||
}
|
|
||||||
})
|
|
@ -1,94 +0,0 @@
|
|||||||
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()
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,71 +0,0 @@
|
|||||||
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
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
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
|
|
||||||
})
|
|
||||||
}
|
|
@ -1,109 +0,0 @@
|
|||||||
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)
|
|
||||||
})
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,35 +0,0 @@
|
|||||||
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()
|
|
||||||
]
|
|
||||||
})
|
|
@ -1,154 +0,0 @@
|
|||||||
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
|
|
@ -1,56 +0,0 @@
|
|||||||
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
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
# 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/
|
|
@ -1,5 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
appVersion: vSTACKEDIT_VERSION
|
|
||||||
description: In-browser Markdown editor
|
|
||||||
name: stackedit
|
|
||||||
version: STACKEDIT_VERSION
|
|
@ -1,21 +0,0 @@
|
|||||||
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 }}
|
|
@ -1,45 +0,0 @@
|
|||||||
{{/* 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 -}}
|
|
@ -1,87 +0,0 @@
|
|||||||
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 }}
|
|
@ -1,39 +0,0 @@
|
|||||||
{{- 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 }}
|
|
@ -1,16 +0,0 @@
|
|||||||
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 }}
|
|
@ -1,15 +0,0 @@
|
|||||||
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
|
|
@ -1,71 +0,0 @@
|
|||||||
# 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: {}
|
|
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 7.6 KiB |
@ -1,28 +0,0 @@
|
|||||||
{
|
|
||||||
"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"
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
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"',
|
|
||||||
})
|
|
@ -1,39 +0,0 @@
|
|||||||
// 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
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
NODE_ENV: '"production"'
|
|
||||||
}
|
|
236
doc/developer-guide.md
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
- Serve **StackEdit** at `http://localhost/`:
|
||||||
|
|
||||||
|
(PORT=80 && node server.js)
|
||||||
|
|
||||||
|
- Run Chrome without application cache:
|
||||||
|
|
||||||
|
chrome --disable-application-cache
|
||||||
|
|
||||||
|
- Run **StackEdit** in debug mode (serve original files instead of minified):
|
||||||
|
|
||||||
|
http://localhost/?debug
|
||||||
|
|
||||||
|
#### Add new dependencies
|
||||||
|
|
||||||
|
**NOTE:** StackEdit uses [RequireJS][5] for asynchronous module definition ([AMD][6]).
|
||||||
|
|
||||||
|
- Install new dependencies using [Bower][7]:
|
||||||
|
|
||||||
|
bower install <library> --save
|
||||||
|
|
||||||
|
- Add the new dependency to [RequireJS][8] configuration file (`main.js`):
|
||||||
|
|
||||||
|
grunt bower
|
||||||
|
|
||||||
|
#### Build/minify
|
||||||
|
|
||||||
|
grunt
|
||||||
|
|
||||||
|
|
||||||
|
Architecture
|
||||||
|
------------
|
||||||
|
|
||||||
|
![Architecture diagram][9]
|
||||||
|
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
|
||||||
|
### core
|
||||||
|
|
||||||
|
The `core` module is responsible for:
|
||||||
|
|
||||||
|
- creating the [UI Layout][10], the [ACE][11] editor and the [PageDown][12] 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()`][13] because it ensures that all AMD modules are loaded by [RequireJS][14]).
|
||||||
|
|
||||||
|
- `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][15] editor with a given [`FileDescriptor`][16] object.
|
||||||
|
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
|
||||||
|
### fileMgr
|
||||||
|
|
||||||
|
The `fileMgr` module is responsible for:
|
||||||
|
|
||||||
|
- creating and deleting local files
|
||||||
|
- switching from one file to another
|
||||||
|
|
||||||
|
**Attributes:**
|
||||||
|
|
||||||
|
- `currentFile`: the [`FileDescriptor`][17] object that is currently edited.
|
||||||
|
|
||||||
|
**Methods:**
|
||||||
|
|
||||||
|
- `createFile(title, content)`: creates a [`FileDescriptor`][18] object, add it in the [`fileSystem`][19] map and returns it.
|
||||||
|
- `deleteFile(fileDesc)`: deletes a [`FileDescriptor`][20] object from the [`fileSystem`][21] map.
|
||||||
|
- `selectFile(fileDesc)`: selects a [`FileDescriptor`][22] 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`][23] objects with their `syncIndex` as a key
|
||||||
|
- `publishLocations`: a map containing all the associated [`publishAttributes`][24] objects with their `publishIndex` as a key
|
||||||
|
|
||||||
|
And the following methods:
|
||||||
|
|
||||||
|
- `addSyncLocation(syncAttributes)`: associates a [`syncAttributes`][25] object with the file
|
||||||
|
- `removeSyncLocation(syncAttributes)`: unassociates a [`syncAttributes`][26] object with the file
|
||||||
|
- `addPublishLocation(publishAttributes)`: associates a [`publishAttributes`][27] object with the file
|
||||||
|
- `removePublishLocation(publishAttributes)`: unassociates a [`publishAttributes`][28] object with the file
|
||||||
|
|
||||||
|
#### fileSystem
|
||||||
|
|
||||||
|
The `fileSystem` module is a map containing all the [`FileDescriptor`][29] 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`][30] 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`][31] 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`][32] module can be associated with the `publisher` module if it implements the following functions:
|
||||||
|
|
||||||
|
- `newPublishAttributes()`: returns a new [`publishAttributes`][33] 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`][34] 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
|
||||||
|
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
|
||||||
|
### eventMgr
|
||||||
|
|
||||||
|
The `eventMgr` module is responsible for receiving and dispatching events in **StackEdit**.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
> Written with [StackEdit](https://stackedit.io/).
|
||||||
|
|
||||||
|
|
||||||
|
[1]: http://git-scm.com/
|
||||||
|
[2]: http://nodejs.org/
|
||||||
|
[3]: http://gruntjs.com/
|
||||||
|
[4]: http://bower.io/
|
||||||
|
[5]: http://requirejs.org/ "RequireJS"
|
||||||
|
[6]: http://en.wikipedia.org/wiki/Asynchronous_module_definition "Asynchronous module definition"
|
||||||
|
[7]: http://bower.io/
|
||||||
|
[8]: http://requirejs.org/ "RequireJS"
|
||||||
|
[9]: http://benweet.github.io/stackedit/doc/img/architecture.png "Architecture diagram"
|
||||||
|
[10]: http://layout.jquery-dev.net/ "UI Layout"
|
||||||
|
[11]: http://ace.c9.io
|
||||||
|
[12]: https://code.google.com/p/pagedown/ "PageDown"
|
||||||
|
[13]: http://api.jquery.com/ready/
|
||||||
|
[14]: http://requirejs.org/ "RequireJS"
|
||||||
|
[15]: https://code.google.com/p/pagedown/ "PageDown"
|
||||||
|
[16]: #filedescriptor
|
||||||
|
[17]: #filedescriptor
|
||||||
|
[18]: #filedescriptor
|
||||||
|
[19]: #filesystem
|
||||||
|
[20]: #filedescriptor
|
||||||
|
[21]: #filesystem
|
||||||
|
[22]: #filedescriptor
|
||||||
|
[23]: #syncattributes
|
||||||
|
[24]: #publishattributes
|
||||||
|
[25]: #syncattributes
|
||||||
|
[26]: #syncattributes
|
||||||
|
[27]: #publishattributes
|
||||||
|
[28]: #publishattributes
|
||||||
|
[29]: #filedescriptor
|
||||||
|
[30]: #provider
|
||||||
|
[31]: #provider
|
||||||
|
[32]: #provider
|
||||||
|
[33]: #publishattributes
|
||||||
|
[34]: #provider
|
BIN
doc/img/architecture.png
Normal file
After Width: | Height: | Size: 30 KiB |
34
doc/theming.md
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
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
|
@ -1,10 +0,0 @@
|
|||||||
# 大文档导出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` 查看帮助文档。
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
|||||||
# GitHub应用配置说明
|
|
||||||
|
|
||||||
> StackEdit中文版部署如果需要支持GitHub,则需要到GitHub创建一个应用,并复制其中的clientId和clientSecret填充到环境变量 GITHUB_CLIENT_ID 和 GITHUB_CLIENT_SECRET 中。
|
|
||||||
|
|
||||||
|
|
||||||
# 如何创建GitHub应用
|
|
||||||
|
|
||||||
按下面图的指示创建
|
|
||||||
|
|
||||||
|
|
||||||

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

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

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

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

|
|
||||||
|
|
@ -1,35 +0,0 @@
|
|||||||
# 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;
|
|
||||||
}
|
|
||||||
```
|
|
@ -1,19 +0,0 @@
|
|||||||
# Gitee应用配置说明
|
|
||||||
|
|
||||||
> StackEdit中文版部署如果需要支持Gitee,则需要到Gitee创建一个应用,并复制其中的clientId和clientSecret填充到环境变量 GITEE_CLIENT_ID 和 GITEE_CLIENT_SECRET 中。
|
|
||||||
|
|
||||||
|
|
||||||
# 如何创建Gitee应用
|
|
||||||
|
|
||||||
按下面图的指示创建
|
|
||||||
|
|
||||||
|
|
||||||

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

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

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

|
|
||||||
|
|
||||||
创建成功后即可看到client id 和 client secret。
|
|
20
gulpfile.js
@ -1,20 +0,0 @@
|
|||||||
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')))));
|
|
Before Width: | Height: | Size: 175 KiB |
BIN
images/dark.png
Before Width: | Height: | Size: 793 KiB |
Before Width: | Height: | Size: 102 KiB |
Before Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 121 KiB |
Before Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 109 KiB |
Before Width: | Height: | Size: 339 KiB |
BIN
images/light.png
Before Width: | Height: | Size: 726 KiB |
BIN
images/qq.jpeg
Before Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 360 KiB |
BIN
images/theme.gif
Before Width: | Height: | Size: 937 KiB |
Before Width: | Height: | Size: 761 KiB |
Before Width: | Height: | Size: 195 KiB |
BIN
img/stackedit-128.png
Normal file
After Width: | Height: | Size: 639 B |
BIN
img/stackedit-16.png
Normal file
After Width: | Height: | Size: 272 B |
BIN
img/stackedit-32.png
Normal file
After Width: | Height: | Size: 320 B |
BIN
img/stackedit-64.png
Normal file
After Width: | Height: | Size: 447 B |
BIN
img/stackedit-96.png
Normal file
After Width: | Height: | Size: 536 B |
BIN
img/stackedit-promo-small.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
125
img/stackedit-promo.svg
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
<?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>
|
After Width: | Height: | Size: 4.7 KiB |
115
img/stackedit.svg
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
<?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>
|
After Width: | Height: | Size: 4.1 KiB |
31
index.html
@ -1,31 +0,0 @@
|
|||||||
<!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
@ -1,27 +0,0 @@
|
|||||||
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
159
package.json
@ -1,141 +1,36 @@
|
|||||||
{
|
{
|
||||||
"name": "stackedit",
|
"name": "stackedit",
|
||||||
"version": "5.15.21",
|
"version": "2.2.1",
|
||||||
"description": "免费, 开源, 功能齐全的 Markdown 编辑器",
|
"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.",
|
||||||
"author": "Benoit Schweblin, 豆萁",
|
"main": "res/main.js",
|
||||||
"license": "Apache-2.0",
|
"directories": {
|
||||||
"bugs": {
|
"doc": "doc"
|
||||||
"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": {
|
||||||
"@vue/test-utils": "^1.0.0-beta.16",
|
"express": "3.x",
|
||||||
"abcjs": "^5.2.0",
|
"ejs": "~0.8.4"
|
||||||
"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": {
|
||||||
"autoprefixer": "^6.7.2",
|
"grunt": "~0.4.1",
|
||||||
"babel-core": "^6.26.3",
|
"grunt-contrib-requirejs": "~0.4.1",
|
||||||
"babel-eslint": "^8.2.3",
|
"grunt-contrib-less": "~0.7.0",
|
||||||
"babel-jest": "^21.0.2",
|
"grunt-string-replace": "~0.2.4",
|
||||||
"babel-loader": "^7.1.4",
|
"grunt-contrib-copy": "~0.4.1",
|
||||||
"babel-plugin-dynamic-import-node": "^1.2.0",
|
"bower": "~1.2.5",
|
||||||
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
|
"grunt-bower-requirejs": "~0.7.1",
|
||||||
"babel-plugin-transform-runtime": "^6.23.0",
|
"grunt-bower-task": "~0.3.1",
|
||||||
"babel-polyfill": "^6.23.0",
|
"grunt-bump": "0.0.11"
|
||||||
"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"
|
|
||||||
},
|
},
|
||||||
"engines": {
|
"scripts": {
|
||||||
"node": ">= 8.0.0",
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
"npm": ">= 5.0.0"
|
|
||||||
},
|
},
|
||||||
"browserslist": [
|
"repository": {
|
||||||
"> 1%",
|
"type": "git",
|
||||||
"last 2 versions",
|
"url": "git://github.com/benweet/stackedit.git"
|
||||||
"not ie <= 10"
|
},
|
||||||
]
|
"author": "Benoit Schweblin",
|
||||||
|
"license": "Apache License",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/benweet/stackedit/issues"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
390
public/cache.manifest
Normal file
@ -0,0 +1,390 @@
|
|||||||
|
CACHE MANIFEST
|
||||||
|
#Date Sun Oct 20 2013 15:41:56
|
||||||
|
|
||||||
|
CACHE:
|
||||||
|
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
public/google4971b5a4d775691a.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
google-site-verification: google4971b5a4d775691a.html
|
11
public/html/dropbox-oauth-receiver.html
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<!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>
|
16
public/html/gdrive-action.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<!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>
|
26
public/html/github-oauth-client.html
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<!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>
|
26
public/html/tumblr-oauth-client.html
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<!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>
|
27
public/html/wordpress-oauth-client.html
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<!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>
|
6
public/libs/MathJax/.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
.DS_Store
|
||||||
|
docs/build/html-mathjax-site
|
||||||
|
config/local/*.js
|
||||||
|
!config/local/local.js
|
||||||
|
unpacked/config/local/*.js
|
||||||
|
!unpacked/config/local/local.js
|
5
LICENSE → public/libs/MathJax/LICENSE
vendored
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
Apache License
|
Apache License
|
||||||
Version 2.0, January 2004
|
Version 2.0, January 2004
|
||||||
http://www.apache.org/licenses/
|
http://www.apache.org/licenses/
|
||||||
@ -178,7 +179,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
|
||||||
@ -186,7 +187,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.
|