├── example
├── .nojekyll
├── README.md
├── index.html
└── docsify-footer-enh.js
├── .prettierrc
├── src
├── index.js
└── plugin-footer.js
├── README.md
├── .editorconfig
├── package.json
├── .vscode
└── settings.json
├── .npmignore
├── .gitignore
└── LICENSE
/example/.nojekyll:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/example/README.md:
--------------------------------------------------------------------------------
1 | # Footer Plugin for Docsify
2 |
3 | ## Example
4 |
5 | Text
6 | Text
7 |
8 | 1. More Text
9 | 2. More Text
10 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | # Prettier configuration
2 |
3 | printWidth: 140
4 | singleQuote: true
5 | tabWidth: 2
6 | useTabs: false
7 |
8 | # js and ts rules:
9 | arrowParens: avoid
10 |
11 | # jsx and tsx rules:
12 | jsxBracketSameLine: false
13 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import { install } from './plugin-footer';
2 |
3 | // if (!window.$docsify) {
4 | // window.$docsify = {}
5 | // }
6 | window.$docsify = window.$docsify || {};
7 | window.$docsify.plugins = (window.$docsify.plugins || []).concat(install);
8 |
--------------------------------------------------------------------------------
/src/plugin-footer.js:
--------------------------------------------------------------------------------
1 | export function install(hook, vm) {
2 | let userOptions = vm.config.footer;
3 |
4 | let copy = vm.config.footer && vm.config.footer.copy ? vm.config.footer.copy : '© 2019.';
5 | let auth =
6 | vm.config.footer && vm.config.footer.auth
7 | ? vm.config.footer.auth
8 | : 'Published with docsify.';
9 | let style = vm.config.footer && vm.config.footer.style ? `style="${vm.config.footer.style}"` : '';
10 | let clazz = vm.config.footer && vm.config.footer.class ? `class="${vm.config.footer.class}"` : '';
11 | let pre = vm.config.footer && vm.config.footer.pre ? `${vm.config.footer.pre}` : '';
12 |
13 | var footer = `${pre}`;
14 |
15 | hook.afterEach(function (html) {
16 | return html + footer;
17 | });
18 | }
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # docsify-footer
2 |
3 | Footer Enhancement plugin for [Docsify](https://docsify.js.org), based on [Docsify example](https://docsify.js.org/#/write-a-plugin?id=example).
4 |
5 | ## Install
6 |
7 | 1. Then insert script plugin into Docsify document (index.html)
8 |
9 | ```html
10 |
11 | ```
12 |
13 | 2. Add configuration
14 |
15 | ```html
16 |
27 | ```
28 |
29 | | Config Option | Description |
30 | | :------------ | :------------------------ |
31 | | copy | Copyright text to display |
32 | | auth | Author text |
33 | | style | Footer CSS inline style |
34 | | class | Footer Classes to include |
35 | | pre | Html pre footer text |
36 |
37 | ## Example
38 |
39 | 1. Run `npm run build`
40 | 1. Run `npm run example`
41 | 1. Go to [http://localhost:3000/]()
42 |
43 | ## License
44 |
45 | [Apache License](LICENSE)
46 |
47 | ## TODO
48 |
49 | - Waiting for recommendations.
50 |
--------------------------------------------------------------------------------
/example/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Document
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | Loading...
15 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent
2 | # coding styles between different editors and IDEs
3 | # https://editorconfig.org/
4 | # By EJA
5 |
6 | #
7 | # Plugin for Eclipse:
8 | # http://editorconfig-eclipse.github.io/repository/
9 | #
10 | # Kate / KWrite nativ supported
11 | #
12 | # Note++ : Download plugin from configuration
13 | #
14 | # Vim : https://github.com/editorconfig/editorconfig-vim#readme
15 | # Opensuse: zypper in editorconfig vim-plugin-editorconfig
16 | #
17 | # Sublime: https://github.com/sindresorhus/editorconfig-sublime#readme
18 | # Install from Package Control: https://packagecontrol.io/
19 |
20 | root = true
21 |
22 | # Root config
23 | [*]
24 | charset = utf-8
25 | end_of_line = lf
26 | indent_style = space
27 | indent_size = 4
28 | insert_final_newline = true
29 | trim_trailing_whitespace = true
30 |
31 | [*.md]
32 | trim_trailing_whitespace = false
33 |
34 | # Config for Java & XML
35 | [*.{java,xml}]
36 | indent_size = 4
37 |
38 | # Config for HTML & CSS
39 | [*.{htm,html,css,scss}]
40 | indent_size = 2
41 |
42 | # Config for JS & TS
43 | [*.{ts,tsx,js,jsx}]
44 | indent_size = 2
45 |
46 | # Config for YML & JSON
47 | [*.{yaml,yml,json}]
48 | indent_size = 2
49 |
50 | # Config for Python
51 | [*.py]
52 | indent_size = 4
53 |
54 | # Tab indentation (no size specified)
55 | [Makefile]
56 | indent_style = tab
57 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "docsify-footer-enh",
3 | "version": "0.1.0",
4 | "description": "A simple Footer plugin for Docsify",
5 | "main": "src",
6 | "files": [
7 | "src",
8 | "dist",
9 | "README.md"
10 | ],
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/erickjx/docsify-footer-enh.git"
14 | },
15 | "author": "Erick JA",
16 | "license": "Apache-2.0",
17 | "bugs": {
18 | "url": "https://github.com/erickjx/docsify-footer-enh/issues"
19 | },
20 | "homepage": "https://github.com/erickjx/docsify-footer-enh#readme",
21 | "dependencies": {},
22 | "devDependencies": {
23 | "docsify-cli": "4.4.4",
24 | "license-checker": "latest",
25 | "npm-check-updates": "latest",
26 | "prettier": "3.3.3",
27 | "webpack": "5.95.0",
28 | "webpack-cli": "5.1.4"
29 | },
30 | "directories": {
31 | "example": "example"
32 | },
33 | "scripts": {
34 | "build": "npm run build:dev && npm run build:prod",
35 | "build:dev": "webpack ./src/index.js -o ./dist/ --output-filename docsify-footer-enh.js --mode=development && webpack ./src/index.js -o ./example/ --output-filename docsify-footer-enh.js --mode=development",
36 | "build:prod": "webpack ./src/index.js -o ./dist/ --output-filename docsify-footer-enh.min.js --mode=production",
37 | "prettier:format": "npx prettier --write \"{,src/**/,example/**/}*.{md,json,js,ts,html,css,scss,yml}\"",
38 | "prettier:check": "npx prettier --list-different \"{,src/**/,example/**/}*.{md,json,js,ts,html,css,scss,yml}\" ",
39 | "example": "npm run build && npx docsify serve example --open",
40 | "lic-chk": "npx license-checker",
41 | "lib-chk": "npx ncu",
42 | "lib-chk-up": "npx ncu -u"
43 | },
44 | "keywords": [
45 | "Docsify",
46 | "Footer"
47 | ]
48 | }
49 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "workbench.colorCustomizations": {
3 | "activityBar.background": "#2f7c47",
4 | "activityBar.activeBackground": "#2f7c47",
5 | "activityBar.activeBorder": "#422c74",
6 | "activityBar.foreground": "#e7e7e7",
7 | "activityBar.inactiveForeground": "#e7e7e799",
8 | "activityBarBadge.background": "#422c74",
9 | "activityBarBadge.foreground": "#e7e7e7",
10 | "titleBar.activeBackground": "#215732",
11 | "titleBar.inactiveBackground": "#21573299",
12 | "titleBar.activeForeground": "#e7e7e7",
13 | "titleBar.inactiveForeground": "#e7e7e799",
14 | "statusBar.background": "#215732",
15 | "statusBarItem.hoverBackground": "#2f7c47",
16 | "statusBar.foreground": "#e7e7e7",
17 | "commandCenter.border": "#e7e7e799",
18 | "sash.hoverBorder": "#2f7c47",
19 | "statusBarItem.remoteBackground": "#215732",
20 | "statusBarItem.remoteForeground": "#e7e7e7"
21 | },
22 | "peacock.color": "#215732",
23 | "files.exclude": {
24 | "**/.git": true,
25 | "**/.gradle": true,
26 | "**/.idea": true,
27 | "**/.mvn": true,
28 | "**/.svn": true,
29 | "**/.hg": true,
30 | "**/.DS_Store": true,
31 | "**/build": true,
32 | "**/target": true,
33 | "**/tmp": true,
34 | "**/.settings": true,
35 | },
36 | "search.exclude": {
37 | "**/node": true,
38 | "**/node_modules": true,
39 | "**/bower_components": true,
40 | "**/build": true,
41 | "**/target": true,
42 | "**/tmp": true,
43 | "**/.settings": true,
44 | },
45 | "files.watcherExclude": {
46 | "**/.git/objects/**": true,
47 | "**/.git/subtree-cache/**": true,
48 | "**/node_modules/*/**": true,
49 | "**/.gradle": true,
50 | "**/build": true,
51 | "**/target": true,
52 | "**/tmp": true,
53 | "**/.settings": true,
54 | },
55 | "java.configuration.updateBuildConfiguration": "automatic",
56 | "explorer.compactFolders": false
57 | }
58 |
--------------------------------------------------------------------------------
/example/docsify-footer-enh.js:
--------------------------------------------------------------------------------
1 | /*
2 | * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
3 | * This devtool is neither made for production nor for readable output files.
4 | * It uses "eval()" calls to create a separate source file in the browser devtools.
5 | * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
6 | * or disable the default devtool with "devtool: false".
7 | * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
8 | */
9 | /******/ (() => { // webpackBootstrap
10 | /******/ "use strict";
11 | /******/ var __webpack_modules__ = ({
12 |
13 | /***/ "./src/index.js":
14 | /*!**********************!*\
15 | !*** ./src/index.js ***!
16 | \**********************/
17 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
18 |
19 | eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _plugin_footer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./plugin-footer */ \"./src/plugin-footer.js\");\n\n\n// if (!window.$docsify) {\n// window.$docsify = {}\n// }\nwindow.$docsify = window.$docsify || {};\nwindow.$docsify.plugins = (window.$docsify.plugins || []).concat(_plugin_footer__WEBPACK_IMPORTED_MODULE_0__.install);\n\n\n//# sourceURL=webpack://docsify-footer-enh/./src/index.js?");
20 |
21 | /***/ }),
22 |
23 | /***/ "./src/plugin-footer.js":
24 | /*!******************************!*\
25 | !*** ./src/plugin-footer.js ***!
26 | \******************************/
27 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28 |
29 | eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ install: () => (/* binding */ install)\n/* harmony export */ });\nfunction install(hook, vm) {\n let userOptions = vm.config.footer;\n\n let copy = vm.config.footer && vm.config.footer.copy ? vm.config.footer.copy : '© 2019.';\n let auth =\n vm.config.footer && vm.config.footer.auth\n ? vm.config.footer.auth\n : 'Published with docsify.';\n let style = vm.config.footer && vm.config.footer.style ? `style=\"${vm.config.footer.style}\"` : '';\n let clazz = vm.config.footer && vm.config.footer.class ? `class=\"${vm.config.footer.class}\"` : '';\n let pre = vm.config.footer && vm.config.footer.pre ? `${vm.config.footer.pre}` : '';\n\n var footer = `${pre}`;\n\n hook.afterEach(function (html) {\n return html + footer;\n });\n}\n\n\n//# sourceURL=webpack://docsify-footer-enh/./src/plugin-footer.js?");
30 |
31 | /***/ })
32 |
33 | /******/ });
34 | /************************************************************************/
35 | /******/ // The module cache
36 | /******/ var __webpack_module_cache__ = {};
37 | /******/
38 | /******/ // The require function
39 | /******/ function __webpack_require__(moduleId) {
40 | /******/ // Check if module is in cache
41 | /******/ var cachedModule = __webpack_module_cache__[moduleId];
42 | /******/ if (cachedModule !== undefined) {
43 | /******/ return cachedModule.exports;
44 | /******/ }
45 | /******/ // Create a new module (and put it into the cache)
46 | /******/ var module = __webpack_module_cache__[moduleId] = {
47 | /******/ // no module.id needed
48 | /******/ // no module.loaded needed
49 | /******/ exports: {}
50 | /******/ };
51 | /******/
52 | /******/ // Execute the module function
53 | /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
54 | /******/
55 | /******/ // Return the exports of the module
56 | /******/ return module.exports;
57 | /******/ }
58 | /******/
59 | /************************************************************************/
60 | /******/ /* webpack/runtime/define property getters */
61 | /******/ (() => {
62 | /******/ // define getter functions for harmony exports
63 | /******/ __webpack_require__.d = (exports, definition) => {
64 | /******/ for(var key in definition) {
65 | /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
66 | /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
67 | /******/ }
68 | /******/ }
69 | /******/ };
70 | /******/ })();
71 | /******/
72 | /******/ /* webpack/runtime/hasOwnProperty shorthand */
73 | /******/ (() => {
74 | /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
75 | /******/ })();
76 | /******/
77 | /******/ /* webpack/runtime/make namespace object */
78 | /******/ (() => {
79 | /******/ // define __esModule on exports
80 | /******/ __webpack_require__.r = (exports) => {
81 | /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
82 | /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
83 | /******/ }
84 | /******/ Object.defineProperty(exports, '__esModule', { value: true });
85 | /******/ };
86 | /******/ })();
87 | /******/
88 | /************************************************************************/
89 | /******/
90 | /******/ // startup
91 | /******/ // Load entry module and return exports
92 | /******/ // This entry module can't be inlined because the eval devtool is used.
93 | /******/ var __webpack_exports__ = __webpack_require__("./src/index.js");
94 | /******/
95 | /******/ })()
96 | ;
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | package-lock.json
2 | /node_modules
3 | /dist
4 | .npmignore
5 |
6 | ### Backup ###
7 | *.bak
8 | *.gho
9 | *.ori
10 | *.orig
11 | *.tmp
12 |
13 | ### Compressed ###
14 | *.7z
15 | *.deb
16 | *.gz
17 | *.pkg
18 | *.rar
19 | *.rpm
20 | *.sit
21 | *.sitx
22 | *.tar
23 | *.zip
24 | *.zipx
25 | *.tgz
26 |
27 | ### Git ###
28 | # Created by git for backups. To disable backups in Git:
29 | # $ git config --global mergetool.keepBackup false
30 |
31 | # Created by git when using merge tools for conflicts
32 | *.BACKUP.*
33 | *.BASE.*
34 | *.LOCAL.*
35 | *.REMOTE.*
36 | *_BACKUP_*.txt
37 | *_BASE_*.txt
38 | *_LOCAL_*.txt
39 | *_REMOTE_*.txt
40 |
41 | ### Kate ###
42 | # Swap Files #
43 | .*.kate-swp
44 | .swp.*
45 |
46 | ### Linux ###
47 | *~
48 |
49 | # temporary files which can be created if a process still has a handle open of a deleted file
50 | .fuse_hidden*
51 |
52 | # KDE directory preferences
53 | .directory
54 |
55 | # Linux trash folder which might appear on any partition or disk
56 | .Trash-*
57 |
58 | # .nfs files are created when an open file is removed but is still being accessed
59 | .nfs*
60 |
61 | ### macOS ###
62 | # General
63 | .DS_Store
64 | .AppleDouble
65 | .LSOverride
66 |
67 | # Icon must end with two \r
68 | Icon
69 |
70 | # Thumbnails
71 | ._*
72 |
73 | # Files that might appear in the root of a volume
74 | .DocumentRevisions-V100
75 | .fseventsd
76 | .Spotlight-V100
77 | .TemporaryItems
78 | .Trashes
79 | .VolumeIcon.icns
80 | .com.apple.timemachine.donotpresent
81 |
82 | # Directories potentially created on remote AFP share
83 | .AppleDB
84 | .AppleDesktop
85 | Network Trash Folder
86 | Temporary Items
87 | .apdisk
88 |
89 | ### Node ###
90 | # Logs
91 | logs
92 | *.log
93 | npm-debug.log*
94 | yarn-debug.log*
95 | yarn-error.log*
96 | lerna-debug.log*
97 |
98 | # Diagnostic reports (https://nodejs.org/api/report.html)
99 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
100 |
101 | # Runtime data
102 | pids
103 | *.pid
104 | *.seed
105 | *.pid.lock
106 |
107 | # Directory for instrumented libs generated by jscoverage/JSCover
108 | lib-cov
109 |
110 | # Coverage directory used by tools like istanbul
111 | coverage
112 | *.lcov
113 |
114 | # nyc test coverage
115 | .nyc_output
116 |
117 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
118 | .grunt
119 |
120 | # Bower dependency directory (https://bower.io/)
121 | bower_components
122 |
123 | # node-waf configuration
124 | .lock-wscript
125 |
126 | # Compiled binary addons (https://nodejs.org/api/addons.html)
127 | build/Release
128 |
129 | # Dependency directories
130 | node_modules/
131 | jspm_packages/
132 |
133 | # TypeScript v1 declaration files
134 | typings/
135 |
136 | # TypeScript cache
137 | *.tsbuildinfo
138 |
139 | # Optional npm cache directory
140 | .npm
141 |
142 | # Optional eslint cache
143 | .eslintcache
144 |
145 | # Optional REPL history
146 | .node_repl_history
147 |
148 | # Output of 'npm pack'
149 |
150 | # Yarn Integrity file
151 | .yarn-integrity
152 |
153 | # dotenv environment variables file
154 | .env
155 | .env.test
156 |
157 | # parcel-bundler cache (https://parceljs.org/)
158 | .cache
159 |
160 | # next.js build output
161 | .next
162 |
163 | # nuxt.js build output
164 | .nuxt
165 |
166 | # react / gatsby
167 | public/
168 |
169 | # vuepress build output
170 | .vuepress/dist
171 |
172 | # Serverless directories
173 | .serverless/
174 |
175 | # FuseBox cache
176 | .fusebox/
177 |
178 | # DynamoDB Local files
179 | .dynamodb/
180 |
181 | ### NotepadPP ###
182 | # Notepad++ backups #
183 |
184 | ### SublimeText ###
185 | # Cache files for Sublime Text
186 | *.tmlanguage.cache
187 | *.tmPreferences.cache
188 | *.stTheme.cache
189 |
190 | # Workspace files are user-specific
191 | *.sublime-workspace
192 |
193 | # Project files should be checked into the repository, unless a significant
194 | # proportion of contributors will probably not be using Sublime Text
195 | # *.sublime-project
196 |
197 | # SFTP configuration file
198 | sftp-config.json
199 |
200 | # Package control specific files
201 | Package Control.last-run
202 | Package Control.ca-list
203 | Package Control.ca-bundle
204 | Package Control.system-ca-bundle
205 | Package Control.cache/
206 | Package Control.ca-certs/
207 | Package Control.merged-ca-bundle
208 | Package Control.user-ca-bundle
209 | oscrypto-ca-bundle.crt
210 | bh_unicode_properties.cache
211 |
212 | # Sublime-github package stores a github token in this file
213 | # https://packagecontrol.io/packages/sublime-github
214 | GitHub.sublime-settings
215 |
216 | ### Vim ###
217 | # Swap
218 | [._]*.s[a-v][a-z]
219 | [._]*.sw[a-p]
220 | [._]s[a-rt-v][a-z]
221 | [._]ss[a-gi-z]
222 | [._]sw[a-p]
223 |
224 | # Session
225 | Session.vim
226 | Sessionx.vim
227 |
228 | # Temporary
229 | .netrwhist
230 | # Auto-generated tag files
231 | tags
232 | # Persistent undo
233 | [._]*.un~
234 |
235 | ### VisualStudioCode ###
236 | .vscode/*
237 | !.vscode/settings.json
238 | !.vscode/tasks.json
239 | !.vscode/launch.json
240 | !.vscode/extensions.json
241 |
242 | ### VisualStudioCode Patch ###
243 | # Ignore all local history of files
244 | .history
245 |
246 | ### Windows ###
247 | # Windows thumbnail cache files
248 | Thumbs.db
249 | Thumbs.db:encryptable
250 | ehthumbs.db
251 | ehthumbs_vista.db
252 |
253 | # Dump file
254 | *.stackdump
255 |
256 | # Folder config file
257 | [Dd]esktop.ini
258 |
259 | # Recycle Bin used on file shares
260 | $RECYCLE.BIN/
261 |
262 | # Windows Installer files
263 | *.cab
264 | *.msi
265 | *.msix
266 | *.msm
267 | *.msp
268 |
269 | # Windows shortcuts
270 | *.lnk
271 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Extras
3 | package-lock.json
4 | /node_modules
5 | /dist
6 |
7 | # Created by https://www.toptal.com/developers/gitignore/api/git,vim,kate,node,linux,macos,backup,windows,notepadpp,compressed,sublimetext,visualstudiocode
8 | # Edit at https://www.toptal.com/developers/gitignore?templates=git,vim,kate,node,linux,macos,backup,windows,notepadpp,compressed,sublimetext,visualstudiocode
9 |
10 | ### Backup ###
11 | *.bak
12 | *.gho
13 | *.ori
14 | *.orig
15 | *.tmp
16 |
17 | ### Compressed ###
18 | *.7z
19 | *.deb
20 | *.gz
21 | *.pkg
22 | *.rar
23 | *.rpm
24 | *.sit
25 | *.sitx
26 | *.tar
27 | *.zip
28 | *.zipx
29 | *.tgz
30 |
31 | ### Git ###
32 | # Created by git for backups. To disable backups in Git:
33 | # $ git config --global mergetool.keepBackup false
34 |
35 | # Created by git when using merge tools for conflicts
36 | *.BACKUP.*
37 | *.BASE.*
38 | *.LOCAL.*
39 | *.REMOTE.*
40 | *_BACKUP_*.txt
41 | *_BASE_*.txt
42 | *_LOCAL_*.txt
43 | *_REMOTE_*.txt
44 |
45 | ### Kate ###
46 | # Swap Files #
47 | .*.kate-swp
48 | .swp.*
49 |
50 | ### Linux ###
51 | *~
52 |
53 | # temporary files which can be created if a process still has a handle open of a deleted file
54 | .fuse_hidden*
55 |
56 | # KDE directory preferences
57 | .directory
58 |
59 | # Linux trash folder which might appear on any partition or disk
60 | .Trash-*
61 |
62 | # .nfs files are created when an open file is removed but is still being accessed
63 | .nfs*
64 |
65 | ### macOS ###
66 | # General
67 | .DS_Store
68 | .AppleDouble
69 | .LSOverride
70 |
71 | # Icon must end with two \r
72 | Icon
73 |
74 | # Thumbnails
75 | ._*
76 |
77 | # Files that might appear in the root of a volume
78 | .DocumentRevisions-V100
79 | .fseventsd
80 | .Spotlight-V100
81 | .TemporaryItems
82 | .Trashes
83 | .VolumeIcon.icns
84 | .com.apple.timemachine.donotpresent
85 |
86 | # Directories potentially created on remote AFP share
87 | .AppleDB
88 | .AppleDesktop
89 | Network Trash Folder
90 | Temporary Items
91 | .apdisk
92 |
93 | ### Node ###
94 | # Logs
95 | logs
96 | *.log
97 | npm-debug.log*
98 | yarn-debug.log*
99 | yarn-error.log*
100 | lerna-debug.log*
101 |
102 | # Diagnostic reports (https://nodejs.org/api/report.html)
103 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
104 |
105 | # Runtime data
106 | pids
107 | *.pid
108 | *.seed
109 | *.pid.lock
110 |
111 | # Directory for instrumented libs generated by jscoverage/JSCover
112 | lib-cov
113 |
114 | # Coverage directory used by tools like istanbul
115 | coverage
116 | *.lcov
117 |
118 | # nyc test coverage
119 | .nyc_output
120 |
121 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
122 | .grunt
123 |
124 | # Bower dependency directory (https://bower.io/)
125 | bower_components
126 |
127 | # node-waf configuration
128 | .lock-wscript
129 |
130 | # Compiled binary addons (https://nodejs.org/api/addons.html)
131 | build/Release
132 |
133 | # Dependency directories
134 | node_modules/
135 | jspm_packages/
136 |
137 | # TypeScript v1 declaration files
138 | typings/
139 |
140 | # TypeScript cache
141 | *.tsbuildinfo
142 |
143 | # Optional npm cache directory
144 | .npm
145 |
146 | # Optional eslint cache
147 | .eslintcache
148 |
149 | # Microbundle cache
150 | .rpt2_cache/
151 | .rts2_cache_cjs/
152 | .rts2_cache_es/
153 | .rts2_cache_umd/
154 |
155 | # Optional REPL history
156 | .node_repl_history
157 |
158 | # Output of 'npm pack'
159 |
160 | # Yarn Integrity file
161 | .yarn-integrity
162 |
163 | # dotenv environment variables file
164 | .env
165 | .env.test
166 |
167 | # parcel-bundler cache (https://parceljs.org/)
168 | .cache
169 |
170 | # Next.js build output
171 | .next
172 |
173 | # Nuxt.js build / generate output
174 | .nuxt
175 | dist
176 |
177 | # Gatsby files
178 | .cache/
179 | # Comment in the public line in if your project uses Gatsby and not Next.js
180 | # https://nextjs.org/blog/next-9-1#public-directory-support
181 | # public
182 |
183 | # vuepress build output
184 | .vuepress/dist
185 |
186 | # Serverless directories
187 | .serverless/
188 |
189 | # FuseBox cache
190 | .fusebox/
191 |
192 | # DynamoDB Local files
193 | .dynamodb/
194 |
195 | # TernJS port file
196 | .tern-port
197 |
198 | # Stores VSCode versions used for testing VSCode extensions
199 | .vscode-test
200 |
201 | ### NotepadPP ###
202 | # Notepad++ backups #
203 |
204 | ### SublimeText ###
205 | # Cache files for Sublime Text
206 | *.tmlanguage.cache
207 | *.tmPreferences.cache
208 | *.stTheme.cache
209 |
210 | # Workspace files are user-specific
211 | *.sublime-workspace
212 |
213 | # Project files should be checked into the repository, unless a significant
214 | # proportion of contributors will probably not be using Sublime Text
215 | # *.sublime-project
216 |
217 | # SFTP configuration file
218 | sftp-config.json
219 |
220 | # Package control specific files
221 | Package Control.last-run
222 | Package Control.ca-list
223 | Package Control.ca-bundle
224 | Package Control.system-ca-bundle
225 | Package Control.cache/
226 | Package Control.ca-certs/
227 | Package Control.merged-ca-bundle
228 | Package Control.user-ca-bundle
229 | oscrypto-ca-bundle.crt
230 | bh_unicode_properties.cache
231 |
232 | # Sublime-github package stores a github token in this file
233 | # https://packagecontrol.io/packages/sublime-github
234 | GitHub.sublime-settings
235 |
236 | ### Vim ###
237 | # Swap
238 | [._]*.s[a-v][a-z]
239 | !*.svg # comment out if you don't need vector files
240 | [._]*.sw[a-p]
241 | [._]s[a-rt-v][a-z]
242 | [._]ss[a-gi-z]
243 | [._]sw[a-p]
244 |
245 | # Session
246 | Session.vim
247 | Sessionx.vim
248 |
249 | # Temporary
250 | .netrwhist
251 | # Auto-generated tag files
252 | tags
253 | # Persistent undo
254 | [._]*.un~
255 |
256 | ### VisualStudioCode ###
257 | .vscode/*
258 | !.vscode/settings.json
259 | !.vscode/tasks.json
260 | !.vscode/launch.json
261 | !.vscode/extensions.json
262 | *.code-workspace
263 |
264 | ### VisualStudioCode Patch ###
265 | # Ignore all local history of files
266 | .history
267 |
268 | ### Windows ###
269 | # Windows thumbnail cache files
270 | Thumbs.db
271 | Thumbs.db:encryptable
272 | ehthumbs.db
273 | ehthumbs_vista.db
274 |
275 | # Dump file
276 | *.stackdump
277 |
278 | # Folder config file
279 | [Dd]esktop.ini
280 |
281 | # Recycle Bin used on file shares
282 | $RECYCLE.BIN/
283 |
284 | # Windows Installer files
285 | *.cab
286 | *.msi
287 | *.msix
288 | *.msm
289 | *.msp
290 |
291 | # Windows shortcuts
292 | *.lnk
293 |
294 | # End of https://www.toptal.com/developers/gitignore/api/git,vim,kate,node,linux,macos,backup,windows,notepadpp,compressed,sublimetext,visualstudiocode
295 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------