├── .babelrc
├── .gitignore
├── README.md
├── README_ZH-CN.md
├── docs
├── favicon.ico
├── index.html
├── logo.png
├── main.9a93404d7b68575f32de.js
├── main.9a93404d7b68575f32de.js.map
└── sw.js
├── favicon.ico
├── img
├── favicon.ico
├── favicon.png
└── logo.png
├── index.html
├── index.tpl
├── package.json
├── src
├── App.vue
├── components
│ ├── inputer.vue
│ ├── lineNumber.vue
│ ├── navBar.vue
│ ├── navBarItems
│ │ ├── bold.vue
│ │ ├── chrome.vue
│ │ ├── code.vue
│ │ ├── emoji.vue
│ │ ├── fullscreen.vue
│ │ ├── github.vue
│ │ ├── headline.vue
│ │ ├── image.vue
│ │ ├── italic.vue
│ │ ├── link.vue
│ │ ├── list.vue
│ │ ├── menu.vue
│ │ ├── preview.vue
│ │ ├── question.vue
│ │ ├── quote.vue
│ │ ├── strikethrough.vue
│ │ ├── table.vue
│ │ ├── tasks.vue
│ │ ├── theme.vue
│ │ └── underline.vue
│ ├── outputer.vue
│ └── sideMenu.vue
├── containers
│ └── navBar.vue
├── emoji.js
├── emoji.json
├── full.json
├── main.js
├── markdownConf.js
└── utils
│ └── insertContent.js
├── static
└── markdown.less
├── vuex
├── readme.js
├── readme_zh.js
└── store.js
├── webpack.config.js
└── yarn.lock
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | ["env", { "modules": false }]
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | dist/
4 | npm-debug.log
5 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 | 
5 |
6 |
7 | > :lollipop::lollipop::lollipop: **wow, Such a beautiful and powerful markdown editor**
8 |
9 |
10 | > :gem::gem::gem: **Download [Chrome extension](https://chrome.google.com/webstore/detail/silkdown/kojpddcdcddckmdnimmodeaejonfefee)**
11 |
12 | > [以中文查看](./README_ZH-CN.md)
13 |
14 | ## Features
15 |
16 | - Real-time HTML preview
17 |
18 | - Markdown Extra/GitHub Flavored Markdown support
19 |
20 | - Todo lists support
21 |
22 | - Unicode Emoji support :kissing_heart: :dart:
23 |
24 | - Smart layout
25 |
26 | - Offline editing
27 |
28 | - Save HTML file support
29 |
30 | - Save markdown file support
31 |
32 | - Theme day/night support
33 |
34 | - Fullscreen preview/edit support
35 |
36 |
37 | ## ToDos
38 |
39 | - [ ] Google Drive support
40 |
41 | - [ ] qiniu cloud Support
42 |
43 | ## Preview
44 |
45 | 
46 |
47 | 
48 |
49 | 
50 |
51 | ## Run and Build
52 |
53 | ```shell
54 | git clone https://github.com/huruji/SilkDown.git
55 |
56 | cd SilkDown & yarn
57 |
58 | yarn run dev
59 |
60 | // or
61 |
62 | yarn run build
63 | ```
64 |
65 | ## How to contribute
66 |
67 | you can open [issues](https://github.com/huruji/SilkDown/issues/new) or make [pull requests](https://github.com/huruji/SilkDown/pulls), just enjoy!
68 |
69 | ## Contact
70 | - **:e-mail: E-mail**: huruji3@foxmail.com
71 |
72 | - **wechat**
73 |
74 | 
75 |
76 | ## Thanks
77 | This project is based on [markcook](https://github.com/jrainlau/markcook),thanks for [jrainlau](https://github.com/jrainlau)'s work.
78 |
79 | ## License
80 | MIT
--------------------------------------------------------------------------------
/README_ZH-CN.md:
--------------------------------------------------------------------------------
1 |
2 | 
3 |
4 | 
5 |
6 |
7 | > :lollipop::lollipop::lollipop: **wow, Such a beautiful and powerful markdown editor**
8 |
9 |
10 | > :gem::gem::gem: **下载 [Chrome 插件](https://chrome.google.com/webstore/detail/silkdown/kojpddcdcddckmdnimmodeaejonfefee) [备用地址](http://oiwfsj4xe.bkt.clouddn.com/SilkDown.1.1.1.crx)**
11 |
12 |
13 | ## 特性
14 |
15 | - 实时预览
16 |
17 | - 支持 Gtihub markdown 特性
18 |
19 | - 支持 todo lists
20 |
21 | - 支持 unicode 表情:kissing_heart: :dart:
22 |
23 | - 优美的布局
24 |
25 | - 离线编辑
26 |
27 | - 支持保存为 HTML 文件
28 |
29 | - 支持保存为 markdown 文件
30 |
31 | - 支持白天/夜间两种主题
32 |
33 | - 支持全屏阅览/编辑
34 |
35 |
36 | ## ToDos
37 |
38 | - [ ] 支持 Google Drive
39 |
40 | - [ ] 支持七牛云
41 |
42 | ## 效果预览
43 |
44 | 
45 |
46 | 
47 |
48 | 
49 |
50 | ## Run and Build
51 |
52 | ```shell
53 | git clone https://github.com/huruji/SilkDown.git
54 |
55 | cd SilkDown & yarn
56 |
57 | yarn run dev
58 |
59 | // or
60 |
61 | yarn run build
62 | ```
63 |
64 | ## How to contribute
65 |
66 | 欢迎你提出[issues](https://github.com/huruji/SilkDown/issues/new) 或者直接提[pull requests](https://github.com/huruji/SilkDown/pulls)。
67 |
68 | ## 联系我
69 | - **:e-mail: E-mail**: huruji3@foxmail.com
70 |
71 | - **微信**
72 |
73 | 
74 |
75 | ## 感谢
76 | 这个项目是基于项目[markcook](https://github.com/jrainlau/markcook)开发的,感谢[jrainlau](https://github.com/jrainlau)所做的工作.
77 |
78 | ## License
79 | MIT
--------------------------------------------------------------------------------
/docs/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huruji/SilkDown/8ff30345d2bc75519e8428592478a73e6d1778ab/docs/favicon.ico
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | SilkDown
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/docs/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huruji/SilkDown/8ff30345d2bc75519e8428592478a73e6d1778ab/docs/logo.png
--------------------------------------------------------------------------------
/docs/sw.js:
--------------------------------------------------------------------------------
1 | var __wpo = {"assets":{"main":["./logo.png?a89eef68f2e9882a51e235c65498ef4e","./main.9a93404d7b68575f32de.js","./","./favicon.ico","https://cdn.bootcss.com/font-awesome/4.6.3/css/font-awesome.min.css","https://cdn.bootcss.com/highlight.js/9.7.0/styles/atom-one-dark.min.css"],"additional":[],"optional":[]},"externals":["https://cdn.bootcss.com/font-awesome/4.6.3/css/font-awesome.min.css","https://cdn.bootcss.com/highlight.js/9.7.0/styles/atom-one-dark.min.css"],"hashesMap":{"1dd7ba86e7c46efae42ff589f91a4f98a032007f":"./logo.png?a89eef68f2e9882a51e235c65498ef4e","2977cbcf69711acf27da677b0ff433515ef1bc3c":"./main.9a93404d7b68575f32de.js","65f7c516bc0d93d866f5cf1728203e8683ed1a27":"./","2b9cc8d95c670e52b5eb65f19ea8d6653993ea2c":"./favicon.ico"},"strategy":"changed","responseStrategy":"cache-first","version":"2018-5-15 22:05:29","name":"webpack-offline","pluginVersion":"4.9.0","relativePaths":true};
2 |
3 | !function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var t={};n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=0)}([function(e,n,t){"use strict";function r(e,n){return caches.match(e,{cacheName:n}).then(function(t){return a()?t:c(t).then(function(t){return caches.open(n).then(function(n){return n.put(e,t)}).then(function(){return t})})}).catch(function(){})}function o(e,n){return e+(-1!==e.indexOf("?")?"&":"?")+"__uncache="+encodeURIComponent(n)}function i(e){return"navigate"===e.mode||e.headers.get("Upgrade-Insecure-Requests")||-1!==(e.headers.get("Accept")||"").indexOf("text/html")}function a(e){return!e||!e.redirected||!e.ok||"opaqueredirect"===e.type}function c(e){return a(e)?Promise.resolve(e):("body"in e?Promise.resolve(e.body):e.blob()).then(function(n){return new Response(n,{headers:e.headers,status:e.status})})}function u(e){return Object.keys(e).reduce(function(n,t){return n[t]=e[t],n},{})}function s(e,n){console.groupCollapsed("[SW]:",e),n.forEach(function(e){console.log("Asset:",e)}),console.groupEnd()}if(function(){var e=ExtendableEvent.prototype.waitUntil,n=FetchEvent.prototype.respondWith,t=new WeakMap;ExtendableEvent.prototype.waitUntil=function(n){var r=this,o=t.get(r);return o?void o.push(Promise.resolve(n)):(o=[Promise.resolve(n)],t.set(r,o),e.call(r,Promise.resolve().then(function e(){var n=o.length;return Promise.all(o.map(function(e){return e.catch(function(){})})).then(function(){return o.length!=n?e():(t.delete(r),Promise.all(o))})})))},FetchEvent.prototype.respondWith=function(e){return this.waitUntil(e),n.call(this,e)}}(),void 0===f)var f=!1;!function(e,n){function t(){if(!E.additional.length)return Promise.resolve();f&&console.log("[SW]:","Caching additional");var e=void 0;return e="changed"===W?l("additional"):a("additional"),e.catch(function(e){console.error("[SW]:","Cache section `additional` failed to load")})}function a(n){var t=E[n];return caches.open(A).then(function(n){return O(n,t,{bust:e.version,request:e.prefetchRequest})}).then(function(){s("Cached assets: "+n,t)}).catch(function(e){throw console.error(e),e})}function l(n){return d().then(function(t){if(!t)return a(n);var r=t[0],o=t[1],i=t[2],c=i.hashmap,u=i.version;if(!i.hashmap||u===e.version)return a(n);var f=Object.keys(c).map(function(e){return c[e]}),l=o.map(function(e){var n=new URL(e.url);return n.search="",n.hash="",n.toString()}),h=E[n],d=[],p=h.filter(function(e){return-1===l.indexOf(e)||-1===f.indexOf(e)});Object.keys(_).forEach(function(e){var n=_[e];if(-1!==h.indexOf(n)&&-1===p.indexOf(n)&&-1===d.indexOf(n)){var t=c[e];t&&-1!==l.indexOf(t)?d.push([t,n]):p.push(n)}}),s("Changed assets: "+n,p),s("Moved assets: "+n,d);var v=Promise.all(d.map(function(e){return r.match(e[0]).then(function(n){return[e[1],n]})}));return caches.open(A).then(function(n){var t=v.then(function(e){return Promise.all(e.map(function(e){return n.put(e[0],e[1])}))});return Promise.all([t,O(n,p,{bust:e.version,request:e.prefetchRequest})])})})}function h(){return caches.keys().then(function(e){var n=e.map(function(e){if(0===e.indexOf(M)&&0!==e.indexOf(A))return console.log("[SW]:","Delete cache:",e),caches.delete(e)});return Promise.all(n)})}function d(){return caches.keys().then(function(e){for(var n=e.length,t=void 0;n--&&(t=e[n],0!==t.indexOf(M)););if(t){var r=void 0;return caches.open(t).then(function(e){return r=e,e.match(new URL(T,location).toString())}).then(function(e){if(e)return Promise.all([r,r.keys(),e.json()])})}})}function p(){return caches.open(A).then(function(n){var t=new Response(JSON.stringify({version:e.version,hashmap:_}));return n.put(new URL(T,location).toString(),t)})}function v(e,n,t){return m(e),r(t,A).then(function(r){return r?(f&&console.log("[SW]:","URL ["+t+"]("+n+") from cache"),r):fetch(e.request).then(function(r){return r.ok?(f&&console.log("[SW]:","URL ["+n+"] from network"),t===n&&function(){var t=r.clone(),o=caches.open(A).then(function(e){return e.put(n,t)}).then(function(){console.log("[SW]:","Cache asset: "+n)});e.waitUntil(o)}(),r):(f&&console.log("[SW]:","URL ["+n+"] wrong response: ["+r.status+"] "+r.type),r)})})}function g(e,n,t){return P(e).then(function(e){if(e.ok)return f&&console.log("[SW]:","URL ["+n+"] from network"),e;throw new Error("Response is not ok")}).catch(function(){return f&&console.log("[SW]:","URL ["+n+"] from cache if possible"),r(t,A)})}function m(e){if(L&&"function"==typeof L.map&&e.preloadResponse&&"navigate"===e.request.mode){var n=L.map(new URL(e.request.url),e.request);n&&w(n,e)}}function w(e,n){var t=new URL(e,location),r=n.preloadResponse;J.set(r,{url:t,response:r});var o=function(){return J.has(r)},i=r.then(function(e){if(e&&o()){var n=e.clone();return caches.open(I).then(function(e){if(o())return e.put(t,n).then(function(){if(!o())return caches.open(I).then(function(e){return e.delete(t)})})})}});n.waitUntil(i)}function y(e){if(J){var n=void 0,t=void 0;return J.forEach(function(r,o){r.url.href===e.href&&(n=r.response,t=o)}),n?(J.delete(t),n):void 0}}function R(e){var n=new URL(e.request.url);if(self.registration.navigationPreload&&L&&L.test&&L.test(n,e.request)){var t=y(n),o=e.request;return t?(e.waitUntil(caches.open(I).then(function(e){return e.delete(o)})),t):r(o,I).then(function(n){return n&&e.waitUntil(caches.open(I).then(function(e){return e.delete(o)})),n||fetch(e.request)})}}function x(e){return e.catch(function(){}).then(function(e){var n=e&&e.ok,t=e&&"opaqueredirect"===e.type;return n||t&&!G?e:(f&&console.log("[SW]:","Loading navigation fallback ["+D+"] from cache"),r(D,A))})}function O(e,n,t){var r=!1!==t.allowLoaders,i=t&&t.bust,a=t.request||{credentials:"omit",mode:"cors"};return Promise.all(n.map(function(e){return i&&(e=o(e,i)),fetch(e,a).then(c)})).then(function(o){if(o.some(function(e){return!e.ok}))return Promise.reject(new Error("Wrong response status"));var i=[],a=o.map(function(t,o){return r&&i.push(U(n[o],t)),e.put(n[o],t)});return i.length?function(){var r=u(t);r.allowLoaders=!1;var o=a;a=Promise.all(i).then(function(t){var i=[].concat.apply([],t);return n.length&&(o=o.concat(O(e,i,r))),Promise.all(o)})}():a=Promise.all(a),a})}function U(e,n){var t=Object.keys(j).map(function(t){if(-1!==j[t].indexOf(e)&&b[t])return b[t](n.clone())}).filter(function(e){return!!e});return Promise.all(t).then(function(e){return[].concat.apply([],e)})}function k(e){var n=e.url,t=new URL(n),r=void 0;r=i(e)?"navigate":t.origin===location.origin?"same-origin":"cross-origin";for(var o=0;o
2 |
3 |
4 |
5 |
6 | SilkDown
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/index.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | SilkDown
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "SilkDown",
3 | "description": "",
4 | "author": "",
5 | "scripts": {
6 | "dev": "webpack-dev-server --inline --hot",
7 | "build": "cross-env NODE_ENV=production webpack --progress --hide-modules",
8 | "build:watch": "cross-env NODE_ENV=production webpack --watch",
9 | "start": "http-server ./docs -c no-cache"
10 | },
11 | "dependencies": {
12 | "highlight.js": "^9.12.0",
13 | "markdown-it": "^8.4.1",
14 | "markdown-it-checkbox": "^1.1.0",
15 | "markdown-it-emoji": "^1.4.0",
16 | "marked": "^0.3.6",
17 | "twemoji": "^2.5.1",
18 | "vue": "^2.4.2"
19 | },
20 | "devDependencies": {
21 | "babel-core": "^6.26.0",
22 | "babel-loader": "^7.1.1",
23 | "babel-preset-env": "^1.6.0",
24 | "clean-webpack-plugin": "^0.1.16",
25 | "copy-webpack-plugin": "^4.0.1",
26 | "cross-env": "^5.0.5",
27 | "css-loader": "^0.28.4",
28 | "file-loader": "^0.11.2",
29 | "html-webpack-plugin": "^2.30.1",
30 | "less": "^2.7.2",
31 | "less-loader": "^4.0.5",
32 | "offline-plugin": "^4.8.3",
33 | "vue-loader": "^12.1.0",
34 | "vue-template-compiler": "^2.4.2",
35 | "vuex": "^2.3.1",
36 | "webpack": "^3.5.5",
37 | "webpack-dev-server": "^2.7.1"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
10 |
11 |
12 |
13 |
42 |
43 |
126 |
--------------------------------------------------------------------------------
/src/components/inputer.vue:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
58 |
59 |
--------------------------------------------------------------------------------
/src/components/lineNumber.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
13 |
23 |
24 |
--------------------------------------------------------------------------------
/src/components/navBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
86 |
87 |
88 |
194 |
195 |
--------------------------------------------------------------------------------
/src/components/navBarItems/bold.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/chrome.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/code.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
28 |
--------------------------------------------------------------------------------
/src/components/navBarItems/emoji.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
14 |
15 |
16 |
17 |
18 | {{emojiPage +"/" + emojiPageNum}}
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
101 |
102 |
--------------------------------------------------------------------------------
/src/components/navBarItems/fullscreen.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/github.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/headline.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/image.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/italic.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/link.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/list.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/menu.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/preview.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/question.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/quote.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/strikethrough.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/table.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/tasks.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/theme.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/navBarItems/underline.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/outputer.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
28 |
29 |
--------------------------------------------------------------------------------
/src/components/sideMenu.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | -
9 | {{ articleList[i - 1].content.split('\n')[0] }}
10 |
11 |
12 |
13 |
14 |
33 |
34 |
35 |
36 |
37 |
38 |
98 |
99 |
--------------------------------------------------------------------------------
/src/containers/navBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
26 |
27 |
28 |
80 |
81 |
--------------------------------------------------------------------------------
/src/emoji.js:
--------------------------------------------------------------------------------
1 | export default{
2 | people:[
3 | ":smile:",
4 | ":laughing:",
5 | ":blush:",
6 | ":smiley:",
7 | ":relaxed:",
8 | ":smirk:",
9 | ":heart_eyes:",
10 | ":kissing_heart:",
11 | ":kissing_closed_eyes:",
12 | ":flushed:",
13 | ":relieved:",
14 | ":grin:",
15 | ":wink:",
16 | ":stuck_out_tongue_winking_eye:",
17 | ":stuck_out_tongue_closed_eyes:",
18 | ":grinning:",
19 | ":kissing:",
20 | ":kissing_smiling_eyes:",
21 | ":stuck_out_tongue:",
22 | ":sleeping:",
23 | ":worried:",
24 | ":frowning:",
25 | ":anguished:",
26 | ":open_mouth:",
27 | ":grimacing:",
28 | ":confused:",
29 | ":hushed:",
30 | ":expressionless:",
31 | ":unamused:",
32 | ":sweat_smile:",
33 | ":sweat:",
34 | ":disappointed_relieved:",
35 | ":weary:",
36 | ":confounded:",
37 | ":cold_sweat:",
38 | ":persevere:",
39 | ":cry:",
40 | ":sob:",
41 | ":joy:",
42 | ":astonished:",
43 | ":scream:",
44 | ":tired_face:",
45 | ":angry:",
46 | ":rage:",
47 | ":triumph:",
48 | ":sleepy:",
49 | ":yum:",
50 | ":mask:",
51 | ":sunglasses:",
52 | ":dizzy_face:",
53 | ":imp:",
54 | ":neutral_face:",
55 | ":no_mouth:",
56 | ":innocent:",
57 | ":heart:",
58 | ":broken_heart:",
59 | ":heartbeat:",
60 | ":heartpulse:",
61 | ":two_hearts:",
62 | ":revolving_hearts:",
63 | ":cupid:",
64 | ":sparkling_heart:",
65 | ":sparkles:",
66 | ":dizzy:",
67 | ":exclamation:",
68 | ":question:",
69 | ":zzz:",
70 | ":dash:",
71 | ":sweat_drops:",
72 | ":notes:",
73 | ":musical_note:",
74 | ":fire:",
75 | ":+1:",
76 | ":-1:",
77 | ":ok_hand:",
78 | ":fist_raised:",
79 | ":v:",
80 | ":wave:",
81 | ":hand:",
82 | ":open_hands:",
83 | ":point_up:",
84 | ":point_down:",
85 | ":point_left:",
86 | ":point_right:",
87 | ":raised_hands:",
88 | ":pray:",
89 | ":point_up_2:",
90 | ":clap:",
91 | ":muscle:",
92 | ":running_man:",
93 | ":couple:",
94 | ":family_man_woman_boy:",
95 | ":couple_with_heart_woman_man:",
96 | ":smiley_cat:",
97 | ":smile_cat:",
98 | ":heart_eyes_cat:",
99 | ":kissing_cat:",
100 | ":smirk_cat:",
101 | ":scream_cat:",
102 | ":crying_cat_face:",
103 | ":joy_cat:",
104 | ":pouting_cat:",
105 | ":see_no_evil:",
106 | ":hear_no_evil:",
107 | ":speak_no_evil:",
108 | ":feet:",
109 | ":lips:",
110 | ":kiss:",
111 | ],
112 | nature:[
113 | ":sunny:",
114 | ":umbrella:",
115 | ":cloud:",
116 | ":snowflake:",
117 | ":snowman:",
118 | ":zap:",
119 | ":cyclone:",
120 | ":foggy:",
121 | ":ocean:",
122 | ":sun_with_face:",
123 | ":cat:",
124 | ":dog:",
125 | ":mouse:",
126 | ":hamster:",
127 | ":rabbit:",
128 | ":wolf:",
129 | ":frog:",
130 | ":tiger:",
131 | ":koala:",
132 | ":bear:",
133 | ":pig:",
134 | ":pig_nose:",
135 | ":cow:",
136 | ":boar:",
137 | ":monkey_face:",
138 | ":monkey:",
139 | ":horse:",
140 | ":racehorse:",
141 | ":camel:",
142 | ":sheep:",
143 | ":elephant:",
144 | ":panda_face:",
145 | ":snake:",
146 | ":bird:",
147 | ":baby_chick:",
148 | ":hatching_chick:",
149 | ":chicken:",
150 | ":penguin:",
151 | ":turtle:",
152 | ":bug:",
153 | ":bee:",
154 | ":ant:",
155 | ":beetle:",
156 | ":snail:",
157 | ":octopus:",
158 | ":tropical_fish:",
159 | ":fish:",
160 | ":whale:",
161 | ":whale2:",
162 | ":dolphin:",
163 | ":cow2:",
164 | ":ram:",
165 | ":rat:",
166 | ":water_buffalo:",
167 | ":tiger2:",
168 | ":dragon:",
169 | ":goat:",
170 | ":rooster:",
171 | ":ox:",
172 | ":dragon_face:",
173 | ":blowfish:"
174 | ],
175 | object: [
176 | ":bamboo:",
177 | ":gift_heart:",
178 | ":dolls:",
179 | ":school_satchel:",
180 | ":mortar_board:",
181 | ":flags:",
182 | ":fireworks:",
183 | ":wind_chime:",
184 | ":rice_scene:",
185 | ":ghost:",
186 | ":christmas_tree:",
187 | ":gift:",
188 | ":bell:",
189 | ":no_bell:",
190 | ":tada:",
191 | ":confetti_ball:",
192 | ":balloon:",
193 | ":crystal_ball:",
194 | ":cd:",
195 | ":dvd:",
196 | ":floppy_disk:",
197 | ":camera:",
198 | ":video_camera:",
199 | ":movie_camera:",
200 | ":computer:",
201 | ":tv:",
202 | ":iphone:",
203 | ":phone:",
204 | ":telephone_receiver:",
205 | ":pager:",
206 | ":fax:",
207 | ":minidisc:",
208 | ":vhs:",
209 | ":sound:",
210 | ":speaker:",
211 | ":mute:",
212 | ":loudspeaker:",
213 | ":hourglass_flowing_sand:",
214 | ":alarm_clock:",
215 | ":watch:",
216 | ":radio:",
217 | ":satellite:",
218 | ":loop:",
219 | ":mag:",
220 | ":mag_right:",
221 | ":unlock:",
222 | ":lock:",
223 | ":lock_with_ink_pen:",
224 | ":closed_lock_with_key:",
225 | ":key:",
226 | ":bulb:",
227 | ":flashlight:",
228 | ":high_brightness:",
229 | ":low_brightness:",
230 | ":electric_plug:",
231 | ":battery:",
232 | ":calling:",
233 | ":email:",
234 | ":mailbox:",
235 | ":postbox:",
236 | ":bath:",
237 | ":bathtub:",
238 | ":shower:",
239 | ":toilet:",
240 | ":wrench:",
241 | ":nut_and_bolt:",
242 | ":hammer:",
243 | ":seat:",
244 | ":moneybag:",
245 | ":yen:",
246 | ":dollar:",
247 | ":pound:",
248 | ":euro:",
249 | ":credit_card:",
250 | ":money_with_wings:",
251 | ":inbox_tray:",
252 | ":outbox_tray:",
253 | ":incoming_envelope:",
254 | ":postal_horn:",
255 | ":mailbox_closed:",
256 | ":mailbox_with_mail:",
257 | ":door:",
258 | ":smoking:",
259 | ":bomb:",
260 | ":gun:",
261 | ":hocho:",
262 | ":pill:",
263 | ":syringe:",
264 | ":page_facing_up:",
265 | ":page_with_curl:",
266 | ":bookmark_tabs:",
267 | ":bar_chart:",
268 | ":chart_with_upwards_trend:",
269 | ":chart_with_downwards_trend:",
270 | ":scroll:",
271 | ":scroll:",
272 | ":clipboard:",
273 | ":calendar:",
274 | ":card_index:",
275 | ":file_folder:",
276 | ":open_file_folder:",
277 | ":scissors:",
278 | ":pushpin:",
279 | ":paperclip:",
280 | ":black_nib:",
281 | ":pencil2:",
282 | ":straight_ruler:",
283 | ":triangular_ruler:",
284 | ":closed_book:",
285 | ":green_book:",
286 | ":blue_book:",
287 | ":orange_book:",
288 | ":notebook:",
289 | ":notebook_with_decorative_cover:",
290 | ":ledger:",
291 | ":books:",
292 | ":bookmark:",
293 | ":name_badge:",
294 | ":microscope:",
295 | ":telescope:",
296 | ":newspaper:",
297 | ":football:",
298 | ":basketball:",
299 | ":soccer:",
300 | ":baseball:",
301 | ":tennis:",
302 | ":8ball:",
303 | ":rugby_football:",
304 | ":bowling:",
305 | ":golf:",
306 | ":mountain_biking_man:",
307 | ":biking_man:",
308 | ":horse_racing:",
309 | ":snowboarder:",
310 | ":swimming_man:",
311 | ":surfing_man:",
312 | ":ski:",
313 | ":spades:",
314 | ":hearts:",
315 | ":clubs:",
316 | ":diamonds:",
317 | ":gem:",
318 | ":ring:",
319 | ":trophy:",
320 | ":musical_score:",
321 | ":violin:",
322 | ":space_invader:",
323 | ":video_game:",
324 | ":black_joker:",
325 | ":flower_playing_cards:",
326 | ":game_die:",
327 | ":dart:",
328 | ":clapper:",
329 | ":memo:",
330 | ":art:",
331 | ":microphone:",
332 | ":headphones:",
333 | ":trumpet:",
334 | ":saxophone:",
335 | ":guitar:",
336 | ":mans_shoe:",
337 | ":sandal:",
338 | ":high_heel:",
339 | ":lipstick:",
340 | ":boot:",
341 | ":shirt:",
342 | ":necktie:",
343 | ":womans_clothes:",
344 | ":dress:",
345 | ":running_shirt_with_sash:",
346 | ":jeans:",
347 | ":bikini:",
348 | ":bikini:",
349 | ":ribbon:",
350 | ":tophat:",
351 | ":crown:",
352 | ":womans_hat:",
353 | ":briefcase:",
354 | ":handbag:",
355 | ":pouch:",
356 | ":purse:",
357 | ":eyeglasses:",
358 | ":fishing_pole_and_fish:",
359 | ":coffee:",
360 | ":tea:",
361 | ":sake:",
362 | ":baby_bottle:",
363 | ":beer:",
364 | ":dango:",
365 | ":birthday:",
366 | ":cookie:",
367 | ":candy:",
368 | ":lollipop:"
369 | ],
370 | place: [
371 | ":house:",
372 | ":house_with_garden:",
373 | ":school:",
374 | ":office:",
375 | ":post_office:",
376 | ":hospital:",
377 | ":bank:",
378 | ":convenience_store:",
379 | ":love_hotel:",
380 | ":hotel:",
381 | ":wedding:",
382 | ":church:",
383 | ":department_store:",
384 | ":european_post_office:",
385 | ":city_sunrise:",
386 | ":city_sunset:",
387 | ":japanese_castle:",
388 | ":european_castle:",
389 | ":tent:",
390 | ":factory:",
391 | ":tokyo_tower:",
392 | ":japan:",
393 | ":mount_fuji:",
394 | ":sunrise_over_mountains:",
395 | ":sunrise:",
396 | ":stars:",
397 | ":statue_of_liberty:",
398 | ":bridge_at_night:",
399 | ":carousel_horse:",
400 | ":rainbow:",
401 | ":ferris_wheel:",
402 | ":fountain:",
403 | ":roller_coaster:",
404 | ":ship:",
405 | ":speedboat:",
406 | ":boat:",
407 | ":rowing_man:",
408 | ":anchor:",
409 | ":rocket:",
410 | ":airplane:",
411 | ":helicopter:",
412 | ":steam_locomotive:",
413 | ":tram:",
414 | ":mountain_railway:",
415 | ":bike:",
416 | ":aerial_tramway:",
417 | ":suspension_railway:",
418 | ":mountain_cableway:",
419 | ":tractor:",
420 | ":blue_car:",
421 | ":oncoming_automobile:",
422 | ":car:",
423 | ":taxi:",
424 | ":oncoming_taxi:",
425 | ":articulated_lorry:",
426 | ":bus:",
427 | ":oncoming_bus:",
428 | ":rotating_light:",
429 | ":police_car:",
430 | ":oncoming_police_car:",
431 | ":fire_engine:",
432 | ":ambulance:",
433 | ":minibus:",
434 | ":truck:",
435 | ":train:",
436 | ":station:",
437 | ":train2:",
438 | ":bullettrain_front:",
439 | ":bullettrain_side:",
440 | ":light_rail:",
441 | ":monorail:",
442 | ":railway_car:",
443 | ":trolleybus:",
444 | ":ticket:",
445 | ":fuelpump:",
446 | ":vertical_traffic_light:",
447 | ":traffic_light:",
448 | ":warning:",
449 | ":construction:",
450 | ":beginner:",
451 | ":atm:",
452 | ":slot_machine:",
453 | ":busstop:",
454 | ":barber:",
455 | ":hotsprings:",
456 | ":checkered_flag:",
457 | ":crossed_flags:",
458 | ":performing_arts:",
459 | ":round_pushpin:",
460 | ":triangular_flag_on_post:",
461 | ":jp:",
462 | ":kr:",
463 | ":cn:",
464 | ":us:",
465 | ":fr:",
466 | ":es:",
467 | ":it:",
468 | ":ru:",
469 | ":gb:",
470 | ":de:"
471 | ],
472 | symbol: [
473 | ":1234:",
474 | ":symbols:",
475 | ":arrow_backward:",
476 | ":arrow_down:",
477 | ":arrow_forward:",
478 | ":arrow_left:",
479 | ":abcd:",
480 | ":vs:",
481 | ":chart:",
482 | ":link:",
483 | ":heart_decoration:",
484 | ":vibration_mode:",
485 | ":100:"
486 | ]
487 | }
--------------------------------------------------------------------------------
/src/emoji.json:
--------------------------------------------------------------------------------
1 | {
2 | // people
3 | ":smile:": "\u1F601"
4 | }
--------------------------------------------------------------------------------
/src/full.json:
--------------------------------------------------------------------------------
1 | {
2 | "100": "💯",
3 | "1234": "🔢",
4 | "grinning": "😀",
5 | "smiley": "😃",
6 | "smile": "😄",
7 | "grin": "😁",
8 | "laughing": "😆",
9 | "satisfied": "😆",
10 | "sweat_smile": "😅",
11 | "joy": "😂",
12 | "rofl": "🤣",
13 | "relaxed": "☺️",
14 | "blush": "😊",
15 | "innocent": "😇",
16 | "slightly_smiling_face": "🙂",
17 | "upside_down_face": "🙃",
18 | "wink": "😉",
19 | "relieved": "😌",
20 | "heart_eyes": "😍",
21 | "kissing_heart": "😘",
22 | "kissing": "😗",
23 | "kissing_smiling_eyes": "😙",
24 | "kissing_closed_eyes": "😚",
25 | "yum": "😋",
26 | "stuck_out_tongue_winking_eye": "😜",
27 | "stuck_out_tongue_closed_eyes": "😝",
28 | "stuck_out_tongue": "😛",
29 | "money_mouth_face": "🤑",
30 | "hugs": "🤗",
31 | "nerd_face": "🤓",
32 | "sunglasses": "😎",
33 | "clown_face": "🤡",
34 | "cowboy_hat_face": "🤠",
35 | "smirk": "😏",
36 | "unamused": "😒",
37 | "disappointed": "😞",
38 | "pensive": "😔",
39 | "worried": "😟",
40 | "confused": "😕",
41 | "slightly_frowning_face": "🙁",
42 | "frowning_face": "☹️",
43 | "persevere": "😣",
44 | "confounded": "😖",
45 | "tired_face": "😫",
46 | "weary": "😩",
47 | "triumph": "😤",
48 | "angry": "😠",
49 | "rage": "😡",
50 | "pout": "😡",
51 | "no_mouth": "😶",
52 | "neutral_face": "😐",
53 | "expressionless": "😑",
54 | "hushed": "😯",
55 | "frowning": "😦",
56 | "anguished": "😧",
57 | "open_mouth": "😮",
58 | "astonished": "😲",
59 | "dizzy_face": "😵",
60 | "flushed": "😳",
61 | "scream": "😱",
62 | "fearful": "😨",
63 | "cold_sweat": "😰",
64 | "cry": "😢",
65 | "disappointed_relieved": "😥",
66 | "drooling_face": "🤤",
67 | "sob": "😭",
68 | "sweat": "😓",
69 | "sleepy": "😪",
70 | "sleeping": "😴",
71 | "roll_eyes": "🙄",
72 | "thinking": "🤔",
73 | "lying_face": "🤥",
74 | "grimacing": "😬",
75 | "zipper_mouth_face": "🤐",
76 | "nauseated_face": "🤢",
77 | "sneezing_face": "🤧",
78 | "mask": "😷",
79 | "face_with_thermometer": "🤒",
80 | "face_with_head_bandage": "🤕",
81 | "smiling_imp": "😈",
82 | "imp": "👿",
83 | "japanese_ogre": "👹",
84 | "japanese_goblin": "👺",
85 | "hankey": "💩",
86 | "poop": "💩",
87 | "shit": "💩",
88 | "ghost": "👻",
89 | "skull": "💀",
90 | "skull_and_crossbones": "☠️",
91 | "alien": "👽",
92 | "space_invader": "👾",
93 | "robot": "🤖",
94 | "jack_o_lantern": "🎃",
95 | "smiley_cat": "😺",
96 | "smile_cat": "😸",
97 | "joy_cat": "😹",
98 | "heart_eyes_cat": "😻",
99 | "smirk_cat": "😼",
100 | "kissing_cat": "😽",
101 | "scream_cat": "🙀",
102 | "crying_cat_face": "😿",
103 | "pouting_cat": "😾",
104 | "open_hands": "👐",
105 | "raised_hands": "🙌",
106 | "clap": "👏",
107 | "pray": "🙏",
108 | "handshake": "🤝",
109 | "+1": "👍",
110 | "thumbsup": "👍",
111 | "-1": "👎",
112 | "thumbsdown": "👎",
113 | "fist_oncoming": "👊",
114 | "facepunch": "👊",
115 | "punch": "👊",
116 | "fist_raised": "✊",
117 | "fist": "✊",
118 | "fist_left": "🤛",
119 | "fist_right": "🤜",
120 | "crossed_fingers": "🤞",
121 | "v": "✌️",
122 | "metal": "🤘",
123 | "ok_hand": "👌",
124 | "point_left": "👈",
125 | "point_right": "👉",
126 | "point_up_2": "👆",
127 | "point_down": "👇",
128 | "point_up": "☝️",
129 | "hand": "✋",
130 | "raised_hand": "✋",
131 | "raised_back_of_hand": "🤚",
132 | "raised_hand_with_fingers_splayed": "🖐",
133 | "vulcan_salute": "🖖",
134 | "wave": "👋",
135 | "call_me_hand": "🤙",
136 | "muscle": "💪",
137 | "middle_finger": "🖕",
138 | "fu": "🖕",
139 | "writing_hand": "✍️",
140 | "selfie": "🤳",
141 | "nail_care": "💅",
142 | "ring": "💍",
143 | "lipstick": "💄",
144 | "kiss": "💋",
145 | "lips": "👄",
146 | "tongue": "👅",
147 | "ear": "👂",
148 | "nose": "👃",
149 | "footprints": "👣",
150 | "eye": "👁",
151 | "eyes": "👀",
152 | "speaking_head": "🗣",
153 | "bust_in_silhouette": "👤",
154 | "busts_in_silhouette": "👥",
155 | "baby": "👶",
156 | "boy": "👦",
157 | "girl": "👧",
158 | "man": "👨",
159 | "woman": "👩",
160 | "blonde_woman": "👱♀",
161 | "blonde_man": "👱",
162 | "person_with_blond_hair": "👱",
163 | "older_man": "👴",
164 | "older_woman": "👵",
165 | "man_with_gua_pi_mao": "👲",
166 | "woman_with_turban": "👳♀",
167 | "man_with_turban": "👳",
168 | "policewoman": "👮♀",
169 | "policeman": "👮",
170 | "cop": "👮",
171 | "construction_worker_woman": "👷♀",
172 | "construction_worker_man": "👷",
173 | "construction_worker": "👷",
174 | "guardswoman": "💂♀",
175 | "guardsman": "💂",
176 | "female_detective": "🕵️♀️",
177 | "male_detective": "🕵",
178 | "detective": "🕵",
179 | "woman_health_worker": "👩⚕",
180 | "man_health_worker": "👨⚕",
181 | "woman_farmer": "👩🌾",
182 | "man_farmer": "👨🌾",
183 | "woman_cook": "👩🍳",
184 | "man_cook": "👨🍳",
185 | "woman_student": "👩🎓",
186 | "man_student": "👨🎓",
187 | "woman_singer": "👩🎤",
188 | "man_singer": "👨🎤",
189 | "woman_teacher": "👩🏫",
190 | "man_teacher": "👨🏫",
191 | "woman_factory_worker": "👩🏭",
192 | "man_factory_worker": "👨🏭",
193 | "woman_technologist": "👩💻",
194 | "man_technologist": "👨💻",
195 | "woman_office_worker": "👩💼",
196 | "man_office_worker": "👨💼",
197 | "woman_mechanic": "👩🔧",
198 | "man_mechanic": "👨🔧",
199 | "woman_scientist": "👩🔬",
200 | "man_scientist": "👨🔬",
201 | "woman_artist": "👩🎨",
202 | "man_artist": "👨🎨",
203 | "woman_firefighter": "👩🚒",
204 | "man_firefighter": "👨🚒",
205 | "woman_pilot": "👩✈",
206 | "man_pilot": "👨✈",
207 | "woman_astronaut": "👩🚀",
208 | "man_astronaut": "👨🚀",
209 | "woman_judge": "👩⚖",
210 | "man_judge": "👨⚖",
211 | "mrs_claus": "🤶",
212 | "santa": "🎅",
213 | "princess": "👸",
214 | "prince": "🤴",
215 | "bride_with_veil": "👰",
216 | "man_in_tuxedo": "🤵",
217 | "angel": "👼",
218 | "pregnant_woman": "🤰",
219 | "bowing_woman": "🙇♀",
220 | "bowing_man": "🙇",
221 | "bow": "🙇",
222 | "tipping_hand_woman": "💁",
223 | "information_desk_person": "💁",
224 | "sassy_woman": "💁",
225 | "tipping_hand_man": "💁♂",
226 | "sassy_man": "💁♂",
227 | "no_good_woman": "🙅",
228 | "no_good": "🙅",
229 | "ng_woman": "🙅",
230 | "no_good_man": "🙅♂",
231 | "ng_man": "🙅♂",
232 | "ok_woman": "🙆",
233 | "ok_man": "🙆♂",
234 | "raising_hand_woman": "🙋",
235 | "raising_hand": "🙋",
236 | "raising_hand_man": "🙋♂",
237 | "woman_facepalming": "🤦♀",
238 | "man_facepalming": "🤦♂",
239 | "woman_shrugging": "🤷♀",
240 | "man_shrugging": "🤷♂",
241 | "pouting_woman": "🙎",
242 | "person_with_pouting_face": "🙎",
243 | "pouting_man": "🙎♂",
244 | "frowning_woman": "🙍",
245 | "person_frowning": "🙍",
246 | "frowning_man": "🙍♂",
247 | "haircut_woman": "💇",
248 | "haircut": "💇",
249 | "haircut_man": "💇♂",
250 | "massage_woman": "💆",
251 | "massage": "💆",
252 | "massage_man": "💆♂",
253 | "business_suit_levitating": "🕴",
254 | "dancer": "💃",
255 | "man_dancing": "🕺",
256 | "dancing_women": "👯",
257 | "dancers": "👯",
258 | "dancing_men": "👯♂",
259 | "walking_woman": "🚶♀",
260 | "walking_man": "🚶",
261 | "walking": "🚶",
262 | "running_woman": "🏃♀",
263 | "running_man": "🏃",
264 | "runner": "🏃",
265 | "running": "🏃",
266 | "couple": "👫",
267 | "two_women_holding_hands": "👭",
268 | "two_men_holding_hands": "👬",
269 | "couple_with_heart_woman_man": "💑",
270 | "couple_with_heart": "💑",
271 | "couple_with_heart_woman_woman": "👩❤️👩",
272 | "couple_with_heart_man_man": "👨❤️👨",
273 | "couplekiss_man_woman": "💏",
274 | "couplekiss_woman_woman": "👩❤️💋👩",
275 | "couplekiss_man_man": "👨❤️💋👨",
276 | "family_man_woman_boy": "👪",
277 | "family": "👪",
278 | "family_man_woman_girl": "👨👩👧",
279 | "family_man_woman_girl_boy": "👨👩👧👦",
280 | "family_man_woman_boy_boy": "👨👩👦👦",
281 | "family_man_woman_girl_girl": "👨👩👧👧",
282 | "family_woman_woman_boy": "👩👩👦",
283 | "family_woman_woman_girl": "👩👩👧",
284 | "family_woman_woman_girl_boy": "👩👩👧👦",
285 | "family_woman_woman_boy_boy": "👩👩👦👦",
286 | "family_woman_woman_girl_girl": "👩👩👧👧",
287 | "family_man_man_boy": "👨👨👦",
288 | "family_man_man_girl": "👨👨👧",
289 | "family_man_man_girl_boy": "👨👨👧👦",
290 | "family_man_man_boy_boy": "👨👨👦👦",
291 | "family_man_man_girl_girl": "👨👨👧👧",
292 | "family_woman_boy": "👩👦",
293 | "family_woman_girl": "👩👧",
294 | "family_woman_girl_boy": "👩👧👦",
295 | "family_woman_boy_boy": "👩👦👦",
296 | "family_woman_girl_girl": "👩👧👧",
297 | "family_man_boy": "👨👦",
298 | "family_man_girl": "👨👧",
299 | "family_man_girl_boy": "👨👧👦",
300 | "family_man_boy_boy": "👨👦👦",
301 | "family_man_girl_girl": "👨👧👧",
302 | "womans_clothes": "👚",
303 | "shirt": "👕",
304 | "tshirt": "👕",
305 | "jeans": "👖",
306 | "necktie": "👔",
307 | "dress": "👗",
308 | "bikini": "👙",
309 | "kimono": "👘",
310 | "high_heel": "👠",
311 | "sandal": "👡",
312 | "boot": "👢",
313 | "mans_shoe": "👞",
314 | "shoe": "👞",
315 | "athletic_shoe": "👟",
316 | "womans_hat": "👒",
317 | "tophat": "🎩",
318 | "mortar_board": "🎓",
319 | "crown": "👑",
320 | "rescue_worker_helmet": "⛑",
321 | "school_satchel": "🎒",
322 | "pouch": "👝",
323 | "purse": "👛",
324 | "handbag": "👜",
325 | "briefcase": "💼",
326 | "eyeglasses": "👓",
327 | "dark_sunglasses": "🕶",
328 | "closed_umbrella": "🌂",
329 | "open_umbrella": "☂️",
330 | "dog": "🐶",
331 | "cat": "🐱",
332 | "mouse": "🐭",
333 | "hamster": "🐹",
334 | "rabbit": "🐰",
335 | "fox_face": "🦊",
336 | "bear": "🐻",
337 | "panda_face": "🐼",
338 | "koala": "🐨",
339 | "tiger": "🐯",
340 | "lion": "🦁",
341 | "cow": "🐮",
342 | "pig": "🐷",
343 | "pig_nose": "🐽",
344 | "frog": "🐸",
345 | "monkey_face": "🐵",
346 | "see_no_evil": "🙈",
347 | "hear_no_evil": "🙉",
348 | "speak_no_evil": "🙊",
349 | "monkey": "🐒",
350 | "chicken": "🐔",
351 | "penguin": "🐧",
352 | "bird": "🐦",
353 | "baby_chick": "🐤",
354 | "hatching_chick": "🐣",
355 | "hatched_chick": "🐥",
356 | "duck": "🦆",
357 | "eagle": "🦅",
358 | "owl": "🦉",
359 | "bat": "🦇",
360 | "wolf": "🐺",
361 | "boar": "🐗",
362 | "horse": "🐴",
363 | "unicorn": "🦄",
364 | "bee": "🐝",
365 | "honeybee": "🐝",
366 | "bug": "🐛",
367 | "butterfly": "🦋",
368 | "snail": "🐌",
369 | "shell": "🐚",
370 | "beetle": "🐞",
371 | "ant": "🐜",
372 | "spider": "🕷",
373 | "spider_web": "🕸",
374 | "turtle": "🐢",
375 | "snake": "🐍",
376 | "lizard": "🦎",
377 | "scorpion": "🦂",
378 | "crab": "🦀",
379 | "squid": "🦑",
380 | "octopus": "🐙",
381 | "shrimp": "🦐",
382 | "tropical_fish": "🐠",
383 | "fish": "🐟",
384 | "blowfish": "🐡",
385 | "dolphin": "🐬",
386 | "flipper": "🐬",
387 | "shark": "🦈",
388 | "whale": "🐳",
389 | "whale2": "🐋",
390 | "crocodile": "🐊",
391 | "leopard": "🐆",
392 | "tiger2": "🐅",
393 | "water_buffalo": "🐃",
394 | "ox": "🐂",
395 | "cow2": "🐄",
396 | "deer": "🦌",
397 | "dromedary_camel": "🐪",
398 | "camel": "🐫",
399 | "elephant": "🐘",
400 | "rhinoceros": "🦏",
401 | "gorilla": "🦍",
402 | "racehorse": "🐎",
403 | "pig2": "🐖",
404 | "goat": "🐐",
405 | "ram": "🐏",
406 | "sheep": "🐑",
407 | "dog2": "🐕",
408 | "poodle": "🐩",
409 | "cat2": "🐈",
410 | "rooster": "🐓",
411 | "turkey": "🦃",
412 | "dove": "🕊",
413 | "rabbit2": "🐇",
414 | "mouse2": "🐁",
415 | "rat": "🐀",
416 | "chipmunk": "🐿",
417 | "feet": "🐾",
418 | "paw_prints": "🐾",
419 | "dragon": "🐉",
420 | "dragon_face": "🐲",
421 | "cactus": "🌵",
422 | "christmas_tree": "🎄",
423 | "evergreen_tree": "🌲",
424 | "deciduous_tree": "🌳",
425 | "palm_tree": "🌴",
426 | "seedling": "🌱",
427 | "herb": "🌿",
428 | "shamrock": "☘️",
429 | "four_leaf_clover": "🍀",
430 | "bamboo": "🎍",
431 | "tanabata_tree": "🎋",
432 | "leaves": "🍃",
433 | "fallen_leaf": "🍂",
434 | "maple_leaf": "🍁",
435 | "mushroom": "🍄",
436 | "ear_of_rice": "🌾",
437 | "bouquet": "💐",
438 | "tulip": "🌷",
439 | "rose": "🌹",
440 | "wilted_flower": "🥀",
441 | "sunflower": "🌻",
442 | "blossom": "🌼",
443 | "cherry_blossom": "🌸",
444 | "hibiscus": "🌺",
445 | "earth_americas": "🌎",
446 | "earth_africa": "🌍",
447 | "earth_asia": "🌏",
448 | "full_moon": "🌕",
449 | "waning_gibbous_moon": "🌖",
450 | "last_quarter_moon": "🌗",
451 | "waning_crescent_moon": "🌘",
452 | "new_moon": "🌑",
453 | "waxing_crescent_moon": "🌒",
454 | "first_quarter_moon": "🌓",
455 | "moon": "🌔",
456 | "waxing_gibbous_moon": "🌔",
457 | "new_moon_with_face": "🌚",
458 | "full_moon_with_face": "🌝",
459 | "sun_with_face": "🌞",
460 | "first_quarter_moon_with_face": "🌛",
461 | "last_quarter_moon_with_face": "🌜",
462 | "crescent_moon": "🌙",
463 | "dizzy": "💫",
464 | "star": "⭐️",
465 | "star2": "🌟",
466 | "sparkles": "✨",
467 | "zap": "⚡️",
468 | "fire": "🔥",
469 | "boom": "💥",
470 | "collision": "💥",
471 | "comet": "☄",
472 | "sunny": "☀️",
473 | "sun_behind_small_cloud": "🌤",
474 | "partly_sunny": "⛅️",
475 | "sun_behind_large_cloud": "🌥",
476 | "sun_behind_rain_cloud": "🌦",
477 | "rainbow": "🌈",
478 | "cloud": "☁️",
479 | "cloud_with_rain": "🌧",
480 | "cloud_with_lightning_and_rain": "⛈",
481 | "cloud_with_lightning": "🌩",
482 | "cloud_with_snow": "🌨",
483 | "snowman_with_snow": "☃️",
484 | "snowman": "⛄️",
485 | "snowflake": "❄️",
486 | "wind_face": "🌬",
487 | "dash": "💨",
488 | "tornado": "🌪",
489 | "fog": "🌫",
490 | "ocean": "🌊",
491 | "droplet": "💧",
492 | "sweat_drops": "💦",
493 | "umbrella": "☔️",
494 | "green_apple": "🍏",
495 | "apple": "🍎",
496 | "pear": "🍐",
497 | "tangerine": "🍊",
498 | "orange": "🍊",
499 | "mandarin": "🍊",
500 | "lemon": "🍋",
501 | "banana": "🍌",
502 | "watermelon": "🍉",
503 | "grapes": "🍇",
504 | "strawberry": "🍓",
505 | "melon": "🍈",
506 | "cherries": "🍒",
507 | "peach": "🍑",
508 | "pineapple": "🍍",
509 | "kiwi_fruit": "🥝",
510 | "avocado": "🥑",
511 | "tomato": "🍅",
512 | "eggplant": "🍆",
513 | "cucumber": "🥒",
514 | "carrot": "🥕",
515 | "corn": "🌽",
516 | "hot_pepper": "🌶",
517 | "potato": "🥔",
518 | "sweet_potato": "🍠",
519 | "chestnut": "🌰",
520 | "peanuts": "🥜",
521 | "honey_pot": "🍯",
522 | "croissant": "🥐",
523 | "bread": "🍞",
524 | "baguette_bread": "🥖",
525 | "cheese": "🧀",
526 | "egg": "🥚",
527 | "fried_egg": "🍳",
528 | "bacon": "🥓",
529 | "pancakes": "🥞",
530 | "fried_shrimp": "🍤",
531 | "poultry_leg": "🍗",
532 | "meat_on_bone": "🍖",
533 | "pizza": "🍕",
534 | "hotdog": "🌭",
535 | "hamburger": "🍔",
536 | "fries": "🍟",
537 | "stuffed_flatbread": "🥙",
538 | "taco": "🌮",
539 | "burrito": "🌯",
540 | "green_salad": "🥗",
541 | "shallow_pan_of_food": "🥘",
542 | "spaghetti": "🍝",
543 | "ramen": "🍜",
544 | "stew": "🍲",
545 | "fish_cake": "🍥",
546 | "sushi": "🍣",
547 | "bento": "🍱",
548 | "curry": "🍛",
549 | "rice": "🍚",
550 | "rice_ball": "🍙",
551 | "rice_cracker": "🍘",
552 | "oden": "🍢",
553 | "dango": "🍡",
554 | "shaved_ice": "🍧",
555 | "ice_cream": "🍨",
556 | "icecream": "🍦",
557 | "cake": "🍰",
558 | "birthday": "🎂",
559 | "custard": "🍮",
560 | "lollipop": "🍭",
561 | "candy": "🍬",
562 | "chocolate_bar": "🍫",
563 | "popcorn": "🍿",
564 | "doughnut": "🍩",
565 | "cookie": "🍪",
566 | "milk_glass": "🥛",
567 | "baby_bottle": "🍼",
568 | "coffee": "☕️",
569 | "tea": "🍵",
570 | "sake": "🍶",
571 | "beer": "🍺",
572 | "beers": "🍻",
573 | "clinking_glasses": "🥂",
574 | "wine_glass": "🍷",
575 | "tumbler_glass": "🥃",
576 | "cocktail": "🍸",
577 | "tropical_drink": "🍹",
578 | "champagne": "🍾",
579 | "spoon": "🥄",
580 | "fork_and_knife": "🍴",
581 | "plate_with_cutlery": "🍽",
582 | "soccer": "⚽️",
583 | "basketball": "🏀",
584 | "football": "🏈",
585 | "baseball": "⚾️",
586 | "tennis": "🎾",
587 | "volleyball": "🏐",
588 | "rugby_football": "🏉",
589 | "8ball": "🎱",
590 | "ping_pong": "🏓",
591 | "badminton": "🏸",
592 | "goal_net": "🥅",
593 | "ice_hockey": "🏒",
594 | "field_hockey": "🏑",
595 | "cricket": "🏏",
596 | "golf": "⛳️",
597 | "bow_and_arrow": "🏹",
598 | "fishing_pole_and_fish": "🎣",
599 | "boxing_glove": "🥊",
600 | "martial_arts_uniform": "🥋",
601 | "ice_skate": "⛸",
602 | "ski": "🎿",
603 | "skier": "⛷",
604 | "snowboarder": "🏂",
605 | "weight_lifting_woman": "🏋️♀️",
606 | "weight_lifting_man": "🏋",
607 | "person_fencing": "🤺",
608 | "women_wrestling": "🤼♀",
609 | "men_wrestling": "🤼♂",
610 | "woman_cartwheeling": "🤸♀",
611 | "man_cartwheeling": "🤸♂",
612 | "basketball_woman": "⛹️♀️",
613 | "basketball_man": "⛹",
614 | "woman_playing_handball": "🤾♀",
615 | "man_playing_handball": "🤾♂",
616 | "golfing_woman": "🏌️♀️",
617 | "golfing_man": "🏌",
618 | "surfing_woman": "🏄♀",
619 | "surfing_man": "🏄",
620 | "surfer": "🏄",
621 | "swimming_woman": "🏊♀",
622 | "swimming_man": "🏊",
623 | "swimmer": "🏊",
624 | "woman_playing_water_polo": "🤽♀",
625 | "man_playing_water_polo": "🤽♂",
626 | "rowing_woman": "🚣♀",
627 | "rowing_man": "🚣",
628 | "rowboat": "🚣",
629 | "horse_racing": "🏇",
630 | "biking_woman": "🚴♀",
631 | "biking_man": "🚴",
632 | "bicyclist": "🚴",
633 | "mountain_biking_woman": "🚵♀",
634 | "mountain_biking_man": "🚵",
635 | "mountain_bicyclist": "🚵",
636 | "running_shirt_with_sash": "🎽",
637 | "medal_sports": "🏅",
638 | "medal_military": "🎖",
639 | "1st_place_medal": "🥇",
640 | "2nd_place_medal": "🥈",
641 | "3rd_place_medal": "🥉",
642 | "trophy": "🏆",
643 | "rosette": "🏵",
644 | "reminder_ribbon": "🎗",
645 | "ticket": "🎫",
646 | "tickets": "🎟",
647 | "circus_tent": "🎪",
648 | "woman_juggling": "🤹♀",
649 | "man_juggling": "🤹♂",
650 | "performing_arts": "🎭",
651 | "art": "🎨",
652 | "clapper": "🎬",
653 | "microphone": "🎤",
654 | "headphones": "🎧",
655 | "musical_score": "🎼",
656 | "musical_keyboard": "🎹",
657 | "drum": "🥁",
658 | "saxophone": "🎷",
659 | "trumpet": "🎺",
660 | "guitar": "🎸",
661 | "violin": "🎻",
662 | "game_die": "🎲",
663 | "dart": "🎯",
664 | "bowling": "🎳",
665 | "video_game": "🎮",
666 | "slot_machine": "🎰",
667 | "car": "🚗",
668 | "red_car": "🚗",
669 | "taxi": "🚕",
670 | "blue_car": "🚙",
671 | "bus": "🚌",
672 | "trolleybus": "🚎",
673 | "racing_car": "🏎",
674 | "police_car": "🚓",
675 | "ambulance": "🚑",
676 | "fire_engine": "🚒",
677 | "minibus": "🚐",
678 | "truck": "🚚",
679 | "articulated_lorry": "🚛",
680 | "tractor": "🚜",
681 | "kick_scooter": "🛴",
682 | "bike": "🚲",
683 | "motor_scooter": "🛵",
684 | "motorcycle": "🏍",
685 | "rotating_light": "🚨",
686 | "oncoming_police_car": "🚔",
687 | "oncoming_bus": "🚍",
688 | "oncoming_automobile": "🚘",
689 | "oncoming_taxi": "🚖",
690 | "aerial_tramway": "🚡",
691 | "mountain_cableway": "🚠",
692 | "suspension_railway": "🚟",
693 | "railway_car": "🚃",
694 | "train": "🚋",
695 | "mountain_railway": "🚞",
696 | "monorail": "🚝",
697 | "bullettrain_side": "🚄",
698 | "bullettrain_front": "🚅",
699 | "light_rail": "🚈",
700 | "steam_locomotive": "🚂",
701 | "train2": "🚆",
702 | "metro": "🚇",
703 | "tram": "🚊",
704 | "station": "🚉",
705 | "helicopter": "🚁",
706 | "small_airplane": "🛩",
707 | "airplane": "✈️",
708 | "flight_departure": "🛫",
709 | "flight_arrival": "🛬",
710 | "rocket": "🚀",
711 | "artificial_satellite": "🛰",
712 | "seat": "💺",
713 | "canoe": "🛶",
714 | "boat": "⛵️",
715 | "sailboat": "⛵️",
716 | "motor_boat": "🛥",
717 | "speedboat": "🚤",
718 | "passenger_ship": "🛳",
719 | "ferry": "⛴",
720 | "ship": "🚢",
721 | "anchor": "⚓️",
722 | "construction": "🚧",
723 | "fuelpump": "⛽️",
724 | "busstop": "🚏",
725 | "vertical_traffic_light": "🚦",
726 | "traffic_light": "🚥",
727 | "world_map": "🗺",
728 | "moyai": "🗿",
729 | "statue_of_liberty": "🗽",
730 | "fountain": "⛲️",
731 | "tokyo_tower": "🗼",
732 | "european_castle": "🏰",
733 | "japanese_castle": "🏯",
734 | "stadium": "🏟",
735 | "ferris_wheel": "🎡",
736 | "roller_coaster": "🎢",
737 | "carousel_horse": "🎠",
738 | "parasol_on_ground": "⛱",
739 | "beach_umbrella": "🏖",
740 | "desert_island": "🏝",
741 | "mountain": "⛰",
742 | "mountain_snow": "🏔",
743 | "mount_fuji": "🗻",
744 | "volcano": "🌋",
745 | "desert": "🏜",
746 | "camping": "🏕",
747 | "tent": "⛺️",
748 | "railway_track": "🛤",
749 | "motorway": "🛣",
750 | "building_construction": "🏗",
751 | "factory": "🏭",
752 | "house": "🏠",
753 | "house_with_garden": "🏡",
754 | "houses": "🏘",
755 | "derelict_house": "🏚",
756 | "office": "🏢",
757 | "department_store": "🏬",
758 | "post_office": "🏣",
759 | "european_post_office": "🏤",
760 | "hospital": "🏥",
761 | "bank": "🏦",
762 | "hotel": "🏨",
763 | "convenience_store": "🏪",
764 | "school": "🏫",
765 | "love_hotel": "🏩",
766 | "wedding": "💒",
767 | "classical_building": "🏛",
768 | "church": "⛪️",
769 | "mosque": "🕌",
770 | "synagogue": "🕍",
771 | "kaaba": "🕋",
772 | "shinto_shrine": "⛩",
773 | "japan": "🗾",
774 | "rice_scene": "🎑",
775 | "national_park": "🏞",
776 | "sunrise": "🌅",
777 | "sunrise_over_mountains": "🌄",
778 | "stars": "🌠",
779 | "sparkler": "🎇",
780 | "fireworks": "🎆",
781 | "city_sunrise": "🌇",
782 | "city_sunset": "🌆",
783 | "cityscape": "🏙",
784 | "night_with_stars": "🌃",
785 | "milky_way": "🌌",
786 | "bridge_at_night": "🌉",
787 | "foggy": "🌁",
788 | "watch": "⌚️",
789 | "iphone": "📱",
790 | "calling": "📲",
791 | "computer": "💻",
792 | "keyboard": "⌨️",
793 | "desktop_computer": "🖥",
794 | "printer": "🖨",
795 | "computer_mouse": "🖱",
796 | "trackball": "🖲",
797 | "joystick": "🕹",
798 | "clamp": "🗜",
799 | "minidisc": "💽",
800 | "floppy_disk": "💾",
801 | "cd": "💿",
802 | "dvd": "📀",
803 | "vhs": "📼",
804 | "camera": "📷",
805 | "camera_flash": "📸",
806 | "video_camera": "📹",
807 | "movie_camera": "🎥",
808 | "film_projector": "📽",
809 | "film_strip": "🎞",
810 | "telephone_receiver": "📞",
811 | "phone": "☎️",
812 | "telephone": "☎️",
813 | "pager": "📟",
814 | "fax": "📠",
815 | "tv": "📺",
816 | "radio": "📻",
817 | "studio_microphone": "🎙",
818 | "level_slider": "🎚",
819 | "control_knobs": "🎛",
820 | "stopwatch": "⏱",
821 | "timer_clock": "⏲",
822 | "alarm_clock": "⏰",
823 | "mantelpiece_clock": "🕰",
824 | "hourglass": "⌛️",
825 | "hourglass_flowing_sand": "⏳",
826 | "satellite": "📡",
827 | "battery": "🔋",
828 | "electric_plug": "🔌",
829 | "bulb": "💡",
830 | "flashlight": "🔦",
831 | "candle": "🕯",
832 | "wastebasket": "🗑",
833 | "oil_drum": "🛢",
834 | "money_with_wings": "💸",
835 | "dollar": "💵",
836 | "yen": "💴",
837 | "euro": "💶",
838 | "pound": "💷",
839 | "moneybag": "💰",
840 | "credit_card": "💳",
841 | "gem": "💎",
842 | "balance_scale": "⚖️",
843 | "wrench": "🔧",
844 | "hammer": "🔨",
845 | "hammer_and_pick": "⚒",
846 | "hammer_and_wrench": "🛠",
847 | "pick": "⛏",
848 | "nut_and_bolt": "🔩",
849 | "gear": "⚙️",
850 | "chains": "⛓",
851 | "gun": "🔫",
852 | "bomb": "💣",
853 | "hocho": "🔪",
854 | "knife": "🔪",
855 | "dagger": "🗡",
856 | "crossed_swords": "⚔️",
857 | "shield": "🛡",
858 | "smoking": "🚬",
859 | "coffin": "⚰️",
860 | "funeral_urn": "⚱️",
861 | "amphora": "🏺",
862 | "crystal_ball": "🔮",
863 | "prayer_beads": "📿",
864 | "barber": "💈",
865 | "alembic": "⚗️",
866 | "telescope": "🔭",
867 | "microscope": "🔬",
868 | "hole": "🕳",
869 | "pill": "💊",
870 | "syringe": "💉",
871 | "thermometer": "🌡",
872 | "toilet": "🚽",
873 | "potable_water": "🚰",
874 | "shower": "🚿",
875 | "bathtub": "🛁",
876 | "bath": "🛀",
877 | "bellhop_bell": "🛎",
878 | "key": "🔑",
879 | "old_key": "🗝",
880 | "door": "🚪",
881 | "couch_and_lamp": "🛋",
882 | "bed": "🛏",
883 | "sleeping_bed": "🛌",
884 | "framed_picture": "🖼",
885 | "shopping": "🛍",
886 | "shopping_cart": "🛒",
887 | "gift": "🎁",
888 | "balloon": "🎈",
889 | "flags": "🎏",
890 | "ribbon": "🎀",
891 | "confetti_ball": "🎊",
892 | "tada": "🎉",
893 | "dolls": "🎎",
894 | "izakaya_lantern": "🏮",
895 | "lantern": "🏮",
896 | "wind_chime": "🎐",
897 | "email": "✉️",
898 | "envelope": "✉️",
899 | "envelope_with_arrow": "📩",
900 | "incoming_envelope": "📨",
901 | "e-mail": "📧",
902 | "love_letter": "💌",
903 | "inbox_tray": "📥",
904 | "outbox_tray": "📤",
905 | "package": "📦",
906 | "label": "🏷",
907 | "mailbox_closed": "📪",
908 | "mailbox": "📫",
909 | "mailbox_with_mail": "📬",
910 | "mailbox_with_no_mail": "📭",
911 | "postbox": "📮",
912 | "postal_horn": "📯",
913 | "scroll": "📜",
914 | "page_with_curl": "📃",
915 | "page_facing_up": "📄",
916 | "bookmark_tabs": "📑",
917 | "bar_chart": "📊",
918 | "chart_with_upwards_trend": "📈",
919 | "chart_with_downwards_trend": "📉",
920 | "spiral_notepad": "🗒",
921 | "spiral_calendar": "🗓",
922 | "calendar": "📆",
923 | "date": "📅",
924 | "card_index": "📇",
925 | "card_file_box": "🗃",
926 | "ballot_box": "🗳",
927 | "file_cabinet": "🗄",
928 | "clipboard": "📋",
929 | "file_folder": "📁",
930 | "open_file_folder": "📂",
931 | "card_index_dividers": "🗂",
932 | "newspaper_roll": "🗞",
933 | "newspaper": "📰",
934 | "notebook": "📓",
935 | "notebook_with_decorative_cover": "📔",
936 | "ledger": "📒",
937 | "closed_book": "📕",
938 | "green_book": "📗",
939 | "blue_book": "📘",
940 | "orange_book": "📙",
941 | "books": "📚",
942 | "book": "📖",
943 | "open_book": "📖",
944 | "bookmark": "🔖",
945 | "link": "🔗",
946 | "paperclip": "📎",
947 | "paperclips": "🖇",
948 | "triangular_ruler": "📐",
949 | "straight_ruler": "📏",
950 | "pushpin": "📌",
951 | "round_pushpin": "📍",
952 | "scissors": "✂️",
953 | "pen": "🖊",
954 | "fountain_pen": "🖋",
955 | "black_nib": "✒️",
956 | "paintbrush": "🖌",
957 | "crayon": "🖍",
958 | "memo": "📝",
959 | "pencil": "📝",
960 | "pencil2": "✏️",
961 | "mag": "🔍",
962 | "mag_right": "🔎",
963 | "lock_with_ink_pen": "🔏",
964 | "closed_lock_with_key": "🔐",
965 | "lock": "🔒",
966 | "unlock": "🔓",
967 | "heart": "❤️",
968 | "yellow_heart": "💛",
969 | "green_heart": "💚",
970 | "blue_heart": "💙",
971 | "purple_heart": "💜",
972 | "black_heart": "🖤",
973 | "broken_heart": "💔",
974 | "heavy_heart_exclamation": "❣️",
975 | "two_hearts": "💕",
976 | "revolving_hearts": "💞",
977 | "heartbeat": "💓",
978 | "heartpulse": "💗",
979 | "sparkling_heart": "💖",
980 | "cupid": "💘",
981 | "gift_heart": "💝",
982 | "heart_decoration": "💟",
983 | "peace_symbol": "☮️",
984 | "latin_cross": "✝️",
985 | "star_and_crescent": "☪️",
986 | "om": "🕉",
987 | "wheel_of_dharma": "☸️",
988 | "star_of_david": "✡️",
989 | "six_pointed_star": "🔯",
990 | "menorah": "🕎",
991 | "yin_yang": "☯️",
992 | "orthodox_cross": "☦️",
993 | "place_of_worship": "🛐",
994 | "ophiuchus": "⛎",
995 | "aries": "♈️",
996 | "taurus": "♉️",
997 | "gemini": "♊️",
998 | "cancer": "♋️",
999 | "leo": "♌️",
1000 | "virgo": "♍️",
1001 | "libra": "♎️",
1002 | "scorpius": "♏️",
1003 | "sagittarius": "♐️",
1004 | "capricorn": "♑️",
1005 | "aquarius": "♒️",
1006 | "pisces": "♓️",
1007 | "id": "🆔",
1008 | "atom_symbol": "⚛️",
1009 | "accept": "🉑",
1010 | "radioactive": "☢️",
1011 | "biohazard": "☣️",
1012 | "mobile_phone_off": "📴",
1013 | "vibration_mode": "📳",
1014 | "eight_pointed_black_star": "✴️",
1015 | "vs": "🆚",
1016 | "white_flower": "💮",
1017 | "ideograph_advantage": "🉐",
1018 | "secret": "㊙️",
1019 | "congratulations": "㊗️",
1020 | "u6e80": "🈵",
1021 | "a": "🅰️",
1022 | "b": "🅱️",
1023 | "ab": "🆎",
1024 | "cl": "🆑",
1025 | "o2": "🅾️",
1026 | "sos": "🆘",
1027 | "x": "❌",
1028 | "o": "⭕️",
1029 | "stop_sign": "🛑",
1030 | "no_entry": "⛔️",
1031 | "name_badge": "📛",
1032 | "no_entry_sign": "🚫",
1033 | "anger": "💢",
1034 | "hotsprings": "♨️",
1035 | "no_pedestrians": "🚷",
1036 | "do_not_litter": "🚯",
1037 | "no_bicycles": "🚳",
1038 | "non-potable_water": "🚱",
1039 | "underage": "🔞",
1040 | "no_mobile_phones": "📵",
1041 | "no_smoking": "🚭",
1042 | "exclamation": "❗️",
1043 | "heavy_exclamation_mark": "❗️",
1044 | "grey_exclamation": "❕",
1045 | "question": "❓",
1046 | "grey_question": "❔",
1047 | "bangbang": "‼️",
1048 | "interrobang": "⁉️",
1049 | "low_brightness": "🔅",
1050 | "high_brightness": "🔆",
1051 | "part_alternation_mark": "〽️",
1052 | "warning": "⚠️",
1053 | "children_crossing": "🚸",
1054 | "trident": "🔱",
1055 | "fleur_de_lis": "⚜️",
1056 | "beginner": "🔰",
1057 | "recycle": "♻️",
1058 | "white_check_mark": "✅",
1059 | "chart": "💹",
1060 | "sparkle": "❇️",
1061 | "eight_spoked_asterisk": "✳️",
1062 | "negative_squared_cross_mark": "❎",
1063 | "globe_with_meridians": "🌐",
1064 | "diamond_shape_with_a_dot_inside": "💠",
1065 | "m": "Ⓜ️",
1066 | "cyclone": "🌀",
1067 | "zzz": "💤",
1068 | "atm": "🏧",
1069 | "wc": "🚾",
1070 | "wheelchair": "♿️",
1071 | "parking": "🅿️",
1072 | "sa": "🈂️",
1073 | "passport_control": "🛂",
1074 | "customs": "🛃",
1075 | "baggage_claim": "🛄",
1076 | "left_luggage": "🛅",
1077 | "mens": "🚹",
1078 | "womens": "🚺",
1079 | "baby_symbol": "🚼",
1080 | "restroom": "🚻",
1081 | "put_litter_in_its_place": "🚮",
1082 | "cinema": "🎦",
1083 | "signal_strength": "📶",
1084 | "koko": "🈁",
1085 | "symbols": "🔣",
1086 | "information_source": "ℹ️",
1087 | "abc": "🔤",
1088 | "abcd": "🔡",
1089 | "capital_abcd": "🔠",
1090 | "ng": "🆖",
1091 | "ok": "🆗",
1092 | "up": "🆙",
1093 | "cool": "🆒",
1094 | "new": "🆕",
1095 | "free": "🆓",
1096 | "zero": "0️⃣",
1097 | "one": "1️⃣",
1098 | "two": "2️⃣",
1099 | "three": "3️⃣",
1100 | "four": "4️⃣",
1101 | "five": "5️⃣",
1102 | "six": "6️⃣",
1103 | "seven": "7️⃣",
1104 | "eight": "8️⃣",
1105 | "nine": "9️⃣",
1106 | "keycap_ten": "🔟",
1107 | "hash": "#️⃣",
1108 | "asterisk": "*️⃣",
1109 | "arrow_forward": "▶️",
1110 | "pause_button": "⏸",
1111 | "play_or_pause_button": "⏯",
1112 | "stop_button": "⏹",
1113 | "record_button": "⏺",
1114 | "next_track_button": "⏭",
1115 | "previous_track_button": "⏮",
1116 | "fast_forward": "⏩",
1117 | "rewind": "⏪",
1118 | "arrow_double_up": "⏫",
1119 | "arrow_double_down": "⏬",
1120 | "arrow_backward": "◀️",
1121 | "arrow_up_small": "🔼",
1122 | "arrow_down_small": "🔽",
1123 | "arrow_right": "➡️",
1124 | "arrow_left": "⬅️",
1125 | "arrow_up": "⬆️",
1126 | "arrow_down": "⬇️",
1127 | "arrow_upper_right": "↗️",
1128 | "arrow_lower_right": "↘️",
1129 | "arrow_lower_left": "↙️",
1130 | "arrow_upper_left": "↖️",
1131 | "arrow_up_down": "↕️",
1132 | "left_right_arrow": "↔️",
1133 | "arrow_right_hook": "↪️",
1134 | "leftwards_arrow_with_hook": "↩️",
1135 | "arrow_heading_up": "⤴️",
1136 | "arrow_heading_down": "⤵️",
1137 | "twisted_rightwards_arrows": "🔀",
1138 | "repeat": "🔁",
1139 | "repeat_one": "🔂",
1140 | "arrows_counterclockwise": "🔄",
1141 | "arrows_clockwise": "🔃",
1142 | "musical_note": "🎵",
1143 | "notes": "🎶",
1144 | "heavy_plus_sign": "➕",
1145 | "heavy_minus_sign": "➖",
1146 | "heavy_division_sign": "➗",
1147 | "heavy_multiplication_x": "✖️",
1148 | "heavy_dollar_sign": "💲",
1149 | "currency_exchange": "💱",
1150 | "tm": "™️",
1151 | "copyright": "©️",
1152 | "registered": "®️",
1153 | "wavy_dash": "〰️",
1154 | "curly_loop": "➰",
1155 | "loop": "➿",
1156 | "end": "🔚",
1157 | "back": "🔙",
1158 | "on": "🔛",
1159 | "top": "🔝",
1160 | "soon": "🔜",
1161 | "heavy_check_mark": "✔️",
1162 | "ballot_box_with_check": "☑️",
1163 | "radio_button": "🔘",
1164 | "white_circle": "⚪️",
1165 | "black_circle": "⚫️",
1166 | "red_circle": "🔴",
1167 | "large_blue_circle": "🔵",
1168 | "small_red_triangle": "🔺",
1169 | "small_red_triangle_down": "🔻",
1170 | "small_orange_diamond": "🔸",
1171 | "small_blue_diamond": "🔹",
1172 | "large_orange_diamond": "🔶",
1173 | "large_blue_diamond": "🔷",
1174 | "white_square_button": "🔳",
1175 | "black_square_button": "🔲",
1176 | "black_small_square": "▪️",
1177 | "white_small_square": "▫️",
1178 | "black_medium_small_square": "◾️",
1179 | "white_medium_small_square": "◽️",
1180 | "black_medium_square": "◼️",
1181 | "white_medium_square": "◻️",
1182 | "black_large_square": "⬛️",
1183 | "white_large_square": "⬜️",
1184 | "speaker": "🔈",
1185 | "mute": "🔇",
1186 | "sound": "🔉",
1187 | "loud_sound": "🔊",
1188 | "bell": "🔔",
1189 | "no_bell": "🔕",
1190 | "mega": "📣",
1191 | "loudspeaker": "📢",
1192 | "eye_speech_bubble": "👁🗨",
1193 | "speech_balloon": "💬",
1194 | "thought_balloon": "💭",
1195 | "right_anger_bubble": "🗯",
1196 | "spades": "♠️",
1197 | "clubs": "♣️",
1198 | "hearts": "♥️",
1199 | "diamonds": "♦️",
1200 | "black_joker": "🃏",
1201 | "flower_playing_cards": "🎴",
1202 | "mahjong": "🀄️",
1203 | "clock1": "🕐",
1204 | "clock2": "🕑",
1205 | "clock3": "🕒",
1206 | "clock4": "🕓",
1207 | "clock5": "🕔",
1208 | "clock6": "🕕",
1209 | "clock7": "🕖",
1210 | "clock8": "🕗",
1211 | "clock9": "🕘",
1212 | "clock10": "🕙",
1213 | "clock11": "🕚",
1214 | "clock12": "🕛",
1215 | "clock130": "🕜",
1216 | "clock230": "🕝",
1217 | "clock330": "🕞",
1218 | "clock430": "🕟",
1219 | "clock530": "🕠",
1220 | "clock630": "🕡",
1221 | "clock730": "🕢",
1222 | "clock830": "🕣",
1223 | "clock930": "🕤",
1224 | "clock1030": "🕥",
1225 | "clock1130": "🕦",
1226 | "clock1230": "🕧",
1227 | "white_flag": "🏳️",
1228 | "black_flag": "🏴",
1229 | "checkered_flag": "🏁",
1230 | "triangular_flag_on_post": "🚩",
1231 | "rainbow_flag": "🏳️🌈",
1232 | "afghanistan": "🇦🇫",
1233 | "aland_islands": "🇦🇽",
1234 | "albania": "🇦🇱",
1235 | "algeria": "🇩🇿",
1236 | "american_samoa": "🇦🇸",
1237 | "andorra": "🇦🇩",
1238 | "angola": "🇦🇴",
1239 | "anguilla": "🇦🇮",
1240 | "antarctica": "🇦🇶",
1241 | "antigua_barbuda": "🇦🇬",
1242 | "argentina": "🇦🇷",
1243 | "armenia": "🇦🇲",
1244 | "aruba": "🇦🇼",
1245 | "australia": "🇦🇺",
1246 | "austria": "🇦🇹",
1247 | "azerbaijan": "🇦🇿",
1248 | "bahamas": "🇧🇸",
1249 | "bahrain": "🇧🇭",
1250 | "bangladesh": "🇧🇩",
1251 | "barbados": "🇧🇧",
1252 | "belarus": "🇧🇾",
1253 | "belgium": "🇧🇪",
1254 | "belize": "🇧🇿",
1255 | "benin": "🇧🇯",
1256 | "bermuda": "🇧🇲",
1257 | "bhutan": "🇧🇹",
1258 | "bolivia": "🇧🇴",
1259 | "caribbean_netherlands": "🇧🇶",
1260 | "bosnia_herzegovina": "🇧🇦",
1261 | "botswana": "🇧🇼",
1262 | "brazil": "🇧🇷",
1263 | "british_indian_ocean_territory": "🇮🇴",
1264 | "british_virgin_islands": "🇻🇬",
1265 | "brunei": "🇧🇳",
1266 | "bulgaria": "🇧🇬",
1267 | "burkina_faso": "🇧🇫",
1268 | "burundi": "🇧🇮",
1269 | "cape_verde": "🇨🇻",
1270 | "cambodia": "🇰🇭",
1271 | "cameroon": "🇨🇲",
1272 | "canada": "🇨🇦",
1273 | "canary_islands": "🇮🇨",
1274 | "cayman_islands": "🇰🇾",
1275 | "central_african_republic": "🇨🇫",
1276 | "chad": "🇹🇩",
1277 | "chile": "🇨🇱",
1278 | "cn": "🇨🇳",
1279 | "christmas_island": "🇨🇽",
1280 | "cocos_islands": "🇨🇨",
1281 | "colombia": "🇨🇴",
1282 | "comoros": "🇰🇲",
1283 | "congo_brazzaville": "🇨🇬",
1284 | "congo_kinshasa": "🇨🇩",
1285 | "cook_islands": "🇨🇰",
1286 | "costa_rica": "🇨🇷",
1287 | "cote_divoire": "🇨🇮",
1288 | "croatia": "🇭🇷",
1289 | "cuba": "🇨🇺",
1290 | "curacao": "🇨🇼",
1291 | "cyprus": "🇨🇾",
1292 | "czech_republic": "🇨🇿",
1293 | "denmark": "🇩🇰",
1294 | "djibouti": "🇩🇯",
1295 | "dominica": "🇩🇲",
1296 | "dominican_republic": "🇩🇴",
1297 | "ecuador": "🇪🇨",
1298 | "egypt": "🇪🇬",
1299 | "el_salvador": "🇸🇻",
1300 | "equatorial_guinea": "🇬🇶",
1301 | "eritrea": "🇪🇷",
1302 | "estonia": "🇪🇪",
1303 | "ethiopia": "🇪🇹",
1304 | "eu": "🇪🇺",
1305 | "european_union": "🇪🇺",
1306 | "falkland_islands": "🇫🇰",
1307 | "faroe_islands": "🇫🇴",
1308 | "fiji": "🇫🇯",
1309 | "finland": "🇫🇮",
1310 | "fr": "🇫🇷",
1311 | "french_guiana": "🇬🇫",
1312 | "french_polynesia": "🇵🇫",
1313 | "french_southern_territories": "🇹🇫",
1314 | "gabon": "🇬🇦",
1315 | "gambia": "🇬🇲",
1316 | "georgia": "🇬🇪",
1317 | "de": "🇩🇪",
1318 | "ghana": "🇬🇭",
1319 | "gibraltar": "🇬🇮",
1320 | "greece": "🇬🇷",
1321 | "greenland": "🇬🇱",
1322 | "grenada": "🇬🇩",
1323 | "guadeloupe": "🇬🇵",
1324 | "guam": "🇬🇺",
1325 | "guatemala": "🇬🇹",
1326 | "guernsey": "🇬🇬",
1327 | "guinea": "🇬🇳",
1328 | "guinea_bissau": "🇬🇼",
1329 | "guyana": "🇬🇾",
1330 | "haiti": "🇭🇹",
1331 | "honduras": "🇭🇳",
1332 | "hong_kong": "🇭🇰",
1333 | "hungary": "🇭🇺",
1334 | "iceland": "🇮🇸",
1335 | "india": "🇮🇳",
1336 | "indonesia": "🇮🇩",
1337 | "iran": "🇮🇷",
1338 | "iraq": "🇮🇶",
1339 | "ireland": "🇮🇪",
1340 | "isle_of_man": "🇮🇲",
1341 | "israel": "🇮🇱",
1342 | "it": "🇮🇹",
1343 | "jamaica": "🇯🇲",
1344 | "jp": "🇯🇵",
1345 | "crossed_flags": "🎌",
1346 | "jersey": "🇯🇪",
1347 | "jordan": "🇯🇴",
1348 | "kazakhstan": "🇰🇿",
1349 | "kenya": "🇰🇪",
1350 | "kiribati": "🇰🇮",
1351 | "kosovo": "🇽🇰",
1352 | "kuwait": "🇰🇼",
1353 | "kyrgyzstan": "🇰🇬",
1354 | "laos": "🇱🇦",
1355 | "latvia": "🇱🇻",
1356 | "lebanon": "🇱🇧",
1357 | "lesotho": "🇱🇸",
1358 | "liberia": "🇱🇷",
1359 | "libya": "🇱🇾",
1360 | "liechtenstein": "🇱🇮",
1361 | "lithuania": "🇱🇹",
1362 | "luxembourg": "🇱🇺",
1363 | "macau": "🇲🇴",
1364 | "macedonia": "🇲🇰",
1365 | "madagascar": "🇲🇬",
1366 | "malawi": "🇲🇼",
1367 | "malaysia": "🇲🇾",
1368 | "maldives": "🇲🇻",
1369 | "mali": "🇲🇱",
1370 | "malta": "🇲🇹",
1371 | "marshall_islands": "🇲🇭",
1372 | "martinique": "🇲🇶",
1373 | "mauritania": "🇲🇷",
1374 | "mauritius": "🇲🇺",
1375 | "mayotte": "🇾🇹",
1376 | "mexico": "🇲🇽",
1377 | "micronesia": "🇫🇲",
1378 | "moldova": "🇲🇩",
1379 | "monaco": "🇲🇨",
1380 | "mongolia": "🇲🇳",
1381 | "montenegro": "🇲🇪",
1382 | "montserrat": "🇲🇸",
1383 | "morocco": "🇲🇦",
1384 | "mozambique": "🇲🇿",
1385 | "myanmar": "🇲🇲",
1386 | "namibia": "🇳🇦",
1387 | "nauru": "🇳🇷",
1388 | "nepal": "🇳🇵",
1389 | "netherlands": "🇳🇱",
1390 | "new_caledonia": "🇳🇨",
1391 | "new_zealand": "🇳🇿",
1392 | "nicaragua": "🇳🇮",
1393 | "niger": "🇳🇪",
1394 | "nigeria": "🇳🇬",
1395 | "niue": "🇳🇺",
1396 | "norfolk_island": "🇳🇫",
1397 | "northern_mariana_islands": "🇲🇵",
1398 | "north_korea": "🇰🇵",
1399 | "norway": "🇳🇴",
1400 | "oman": "🇴🇲",
1401 | "pakistan": "🇵🇰",
1402 | "palau": "🇵🇼",
1403 | "palestinian_territories": "🇵🇸",
1404 | "panama": "🇵🇦",
1405 | "papua_new_guinea": "🇵🇬",
1406 | "paraguay": "🇵🇾",
1407 | "peru": "🇵🇪",
1408 | "philippines": "🇵🇭",
1409 | "pitcairn_islands": "🇵🇳",
1410 | "poland": "🇵🇱",
1411 | "portugal": "🇵🇹",
1412 | "puerto_rico": "🇵🇷",
1413 | "qatar": "🇶🇦",
1414 | "reunion": "🇷🇪",
1415 | "romania": "🇷🇴",
1416 | "ru": "🇷🇺",
1417 | "rwanda": "🇷🇼",
1418 | "st_barthelemy": "🇧🇱",
1419 | "st_helena": "🇸🇭",
1420 | "st_kitts_nevis": "🇰🇳",
1421 | "st_lucia": "🇱🇨",
1422 | "st_pierre_miquelon": "🇵🇲",
1423 | "st_vincent_grenadines": "🇻🇨",
1424 | "samoa": "🇼🇸",
1425 | "san_marino": "🇸🇲",
1426 | "sao_tome_principe": "🇸🇹",
1427 | "saudi_arabia": "🇸🇦",
1428 | "senegal": "🇸🇳",
1429 | "serbia": "🇷🇸",
1430 | "seychelles": "🇸🇨",
1431 | "sierra_leone": "🇸🇱",
1432 | "singapore": "🇸🇬",
1433 | "sint_maarten": "🇸🇽",
1434 | "slovakia": "🇸🇰",
1435 | "slovenia": "🇸🇮",
1436 | "solomon_islands": "🇸🇧",
1437 | "somalia": "🇸🇴",
1438 | "south_africa": "🇿🇦",
1439 | "south_georgia_south_sandwich_islands": "🇬🇸",
1440 | "kr": "🇰🇷",
1441 | "south_sudan": "🇸🇸",
1442 | "es": "🇪🇸",
1443 | "sri_lanka": "🇱🇰",
1444 | "sudan": "🇸🇩",
1445 | "suriname": "🇸🇷",
1446 | "swaziland": "🇸🇿",
1447 | "sweden": "🇸🇪",
1448 | "switzerland": "🇨🇭",
1449 | "syria": "🇸🇾",
1450 | "taiwan": "🇹🇼",
1451 | "tajikistan": "🇹🇯",
1452 | "tanzania": "🇹🇿",
1453 | "thailand": "🇹🇭",
1454 | "timor_leste": "🇹🇱",
1455 | "togo": "🇹🇬",
1456 | "tokelau": "🇹🇰",
1457 | "tonga": "🇹🇴",
1458 | "trinidad_tobago": "🇹🇹",
1459 | "tunisia": "🇹🇳",
1460 | "tr": "🇹🇷",
1461 | "turkmenistan": "🇹🇲",
1462 | "turks_caicos_islands": "🇹🇨",
1463 | "tuvalu": "🇹🇻",
1464 | "uganda": "🇺🇬",
1465 | "ukraine": "🇺🇦",
1466 | "united_arab_emirates": "🇦🇪",
1467 | "gb": "🇬🇧",
1468 | "uk": "🇬🇧",
1469 | "us": "🇺🇸",
1470 | "us_virgin_islands": "🇻🇮",
1471 | "uruguay": "🇺🇾",
1472 | "uzbekistan": "🇺🇿",
1473 | "vanuatu": "🇻🇺",
1474 | "vatican_city": "🇻🇦",
1475 | "venezuela": "🇻🇪",
1476 | "vietnam": "🇻🇳",
1477 | "wallis_futuna": "🇼🇫",
1478 | "western_sahara": "🇪🇭",
1479 | "yemen": "🇾🇪",
1480 | "zambia": "🇿🇲",
1481 | "zimbabwe": "🇿🇼"
1482 | }
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App.vue'
3 | import store from '../vuex/store'
4 | import * as OfflinePluginRuntime from 'offline-plugin/runtime';
5 |
6 | if (process.env.NODE_ENV === 'production') {
7 | OfflinePluginRuntime.install({
8 | onUpdateReady () {
9 | OfflinePluginRuntime.applyUpdate()
10 | },
11 | onUpdated () {
12 | window.location.reload()
13 | }
14 | })
15 | }
16 |
17 | new Vue({
18 | el: '#app',
19 | store,
20 | render: h => h(App)
21 | })
22 |
--------------------------------------------------------------------------------
/src/markdownConf.js:
--------------------------------------------------------------------------------
1 | const hljs = require('highlight.js')
2 | const twemoji = require('twemoji')
3 | const md = require('markdown-it')({
4 | highlight: function (str, lang) {
5 | if (lang && hljs.getLanguage(lang)) {
6 | try {
7 | return hljs.highlight(lang, str).value;
8 | } catch (__) {}
9 | }
10 | return '';
11 | }});
12 | md.use(require('markdown-it-checkbox'));
13 | md.use(require('markdown-it-emoji'));
14 | md.renderer.rules.emoji = function(token, idx) {
15 | return twemoji.parse(token[idx].content)
16 | }
17 |
18 | export default md;
--------------------------------------------------------------------------------
/src/utils/insertContent.js:
--------------------------------------------------------------------------------
1 | export default function(insertDes) {
2 | let inputer = document.querySelector('#inputer')
3 | let startPosition = inputer.selectionStart
4 | let endPosition = inputer.selectionEnd
5 | let oldContent = inputer.value
6 |
7 | inputer.focus()
8 |
9 | if(startPosition === endPosition){
10 | const newContent = oldContent.substring(0, startPosition) + insertDes.content + oldContent.substring(endPosition, oldContent.length)
11 |
12 | inputer.value = newContent
13 |
14 | inputer.setSelectionRange(startPosition + insertDes.startSymbolLen, startPosition + insertDes.content.length - insertDes.endSymbolLen)
15 | } else {
16 | const newContent = oldContent.substring(0, startPosition) + insertDes.updateStart + oldContent.substring(startPosition, endPosition) + insertDes.updateEnd + oldContent.substring(endPosition, oldContent.length)
17 |
18 | inputer.value = newContent
19 |
20 | const len = endPosition + insertDes.updateEnd.length + insertDes.updateStart.length
21 | inputer.setSelectionRange(len,len)
22 | }
23 | }
--------------------------------------------------------------------------------
/static/markdown.less:
--------------------------------------------------------------------------------
1 | @font-family: Microsoft Yahei, "PingHei", "Helvetica Neue", "Helvetica", "STHeitiSC-Light", "Arial", sans-serif;
2 | table{
3 | border-right:1px solid #ccc;
4 | border-bottom:1px solid #ccc;
5 | margin: 10px;
6 | td,
7 | th {
8 | padding: 5px 10px;
9 | border-left:1px solid #ccc;
10 | border-top:1px solid #ccc;
11 | }
12 | }
13 |
14 | code {
15 | padding: 2px 4px;
16 | font-size: 90%;
17 | font-family: monospace;
18 | color: #c7254e;
19 | background-color: #f9f2f4;
20 | border-radius: 4px;
21 | }
22 |
23 | pre {
24 | display: block;
25 | padding: 9.5px;
26 | margin: 0 0 10px;
27 | font-size: 13px;
28 | font-family: inherit;
29 | line-height: 1.42857143;
30 | color: #333;
31 | word-break: break-all;
32 | word-wrap: break-word;
33 | background-color: #f5f5f5;
34 | border: 1px solid #ccc;
35 | border-radius: 4px;
36 | code {
37 | padding: 0;
38 | font-size: inherit;
39 | color: inherit;
40 | white-space: pre-wrap;
41 | background-color: transparent;
42 | border-radius: 0;
43 | }
44 | }
45 |
46 | blockquote {
47 | padding: 10px 20px;
48 | margin: 0 0 20px;
49 | font-size: 17.5px;
50 | border-left: 5px solid #ccc;
51 | p {
52 | margin: 0;
53 | }
54 | }
55 |
56 | a {
57 | color: #009688;
58 | }
59 |
60 | hr {
61 | margin-top: 20px;
62 | margin-bottom: 20px;
63 | border: 0;
64 | border-top: 1px solid #ccc;
65 | }
--------------------------------------------------------------------------------
/vuex/readme.js:
--------------------------------------------------------------------------------
1 | const text = '## Welcome to SilkDown' +
2 | '\n'+
3 | '\n'+
4 | '> :lollipop::lollipop::lollipop: **SilkDown is a beautiful and powerful markdown editor** ' +
5 | '\n'+
6 | '\n'+
7 | '' +
8 | '\n'+
9 | '\n'+
10 | ' ' +
11 | '\n'+
12 | '\n'+
13 | '\n'+
14 | '\n'+
15 | '## Features ' +
16 | '\n'+
17 | '\n'+
18 | '- Real-time HTML preview ' +
19 | '\n'+
20 | '\n'+
21 | '- Markdown Extra/GitHub Flavored Markdown support ' +
22 | '\n'+
23 | '\n'+
24 | '- Todo lists support ' +
25 | '\n'+
26 | '\n'+
27 | '- Unicode Emoji support :kissing_heart: :dart: ' +
28 | '\n'+
29 | '\n'+
30 | '- Smart layout ' +
31 | '\n'+
32 | '\n'+
33 | '- Offline editing ' +
34 | '\n'+
35 | '\n'+
36 | '- Save HTML file support ' +
37 | '\n'+
38 | '\n'+
39 | '- Save markdown file support ' +
40 | '\n'+
41 | '\n'+
42 | '- Theme day/night support ' +
43 | '\n'+
44 | '- Fullscreen preview/edit support' +
45 | '\n'+
46 | '\n'+
47 | '## ToDos ' +
48 | '\n'+
49 | '\n'+
50 | '- [ ] Google Drive support ' +
51 | '\n'+
52 | '\n'+
53 | '- [ ] qiniu cloud Support ' +
54 | '\n'+
55 | '\n'+
56 | '## Preview' +
57 | '\n'+
58 | '\n'+
59 | '' +
60 | '\n'+
61 | '\n'+
62 | '' +
63 | '\n'+
64 | '\n'+
65 | '' +
66 | '\n'+
67 | '\n'+
68 | '## Run and Build' +
69 | '\n'+
70 | '\n'+
71 | '```shell' +
72 | '\n'+
73 | '\n'+
74 | 'git clone https://github.com/huruji/SilkDown.git' +
75 | '\n'+
76 | '\n'+
77 | 'cd SilkDown & yarn' +
78 | '\n'+
79 | '\n'+
80 | 'yarn run dev' +
81 | '\n'+
82 | '\n'+
83 | '// or' +
84 | '\n'+
85 | '\n'+
86 | 'yarn run build' +
87 | '\n'+
88 | '\n'+
89 | '```' +
90 | '\n'+
91 | '\n'+
92 | '## How to contribute' +
93 | '\n'+
94 | '\n'+
95 | 'you can open [issues](https://github.com/huruji/SilkDown/issues/new) or make [pull requests](https://github.com/huruji/SilkDown/pulls), just enjoy!' +
96 | '\n'+
97 | '\n'+
98 | '## Contact ' +
99 | '\n'+
100 | '\n'+
101 | '- **:e-mail: E-mail**: huruji3@foxmail.com ' +
102 | '\n'+
103 | '\n'+
104 | '- **wechat**' +
105 | '\n'+
106 | '\n'+
107 | '' +
108 | '\n'+
109 | '\n'+
110 | '## Thanks' +
111 | '\n'+
112 | '\n'+
113 | "This project is based on [markcook](https://github.com/jrainlau/markcook),thanks for [jrainlau](https://github.com/jrainlau)'s work." +
114 | '\n'+
115 | '\n'+
116 | '## License' +
117 | '\n'+
118 | '\n'+
119 | 'MIT'+
120 | '\n';
121 | ;
122 |
123 |
124 | export default text
--------------------------------------------------------------------------------
/vuex/readme_zh.js:
--------------------------------------------------------------------------------
1 | const text = '## 欢迎来到SilkDown' +
2 | '\n'+
3 | '\n'+
4 | '> :lollipop::lollipop::lollipop: **SilkDown 是一款界面优美、功能强大的 markdown 编辑器** ' +
5 | '\n'+
6 | '\n'+
7 | '' +
8 | '\n'+
9 | '\n'+
10 | ' ' +
11 | '\n'+
12 | '\n'+
13 | '\n'+
14 | '\n'+
15 | '## 特性 ' +
16 | '\n'+
17 | '\n'+
18 | '- 实时预览 ' +
19 | '\n'+
20 | '\n'+
21 | '- 支持 Gtihub markdown 特性 ' +
22 | '\n'+
23 | '\n'+
24 | '- 支持 todo lists ' +
25 | '\n'+
26 | '\n'+
27 | '- 支持 unicode 表情:kissing_heart: :dart: ' +
28 | '\n'+
29 | '\n'+
30 | '- 优美的布局 ' +
31 | '\n'+
32 | '\n'+
33 | '- 离线编辑 ' +
34 | '\n'+
35 | '\n'+
36 | '- 支持保存为 HTML 文件 ' +
37 | '\n'+
38 | '\n'+
39 | '- 支持保存为 markdown 文件 ' +
40 | '\n'+
41 | '\n'+
42 | '- 支持白天/夜间两种主题 ' +
43 | '\n'+
44 | '\n'+
45 | '- 支持全屏阅览/编辑 ' +
46 | '\n'+
47 | '\n'+
48 | '## ToDos ' +
49 | '\n'+
50 | '\n'+
51 | '- [ ] 支持 Google Drive ' +
52 | '\n'+
53 | '\n'+
54 | '- [ ] 支持七牛云 ' +
55 | '\n'+
56 | '\n'+
57 | '## 效果预览' +
58 | '\n'+
59 | '\n'+
60 | '' +
61 | '\n'+
62 | '\n'+
63 | '' +
64 | '\n'+
65 | '\n'+
66 | '' +
67 | '\n'+
68 | '\n'+
69 | '## Run and Build' +
70 | '\n'+
71 | '\n'+
72 | '```shell' +
73 | '\n'+
74 | '\n'+
75 | 'git clone https://github.com/huruji/SilkDown.git' +
76 | '\n'+
77 | '\n'+
78 | 'cd SilkDown & yarn' +
79 | '\n'+
80 | '\n'+
81 | 'yarn run dev' +
82 | '\n'+
83 | '\n'+
84 | '// or' +
85 | '\n'+
86 | '\n'+
87 | 'yarn run build' +
88 | '\n'+
89 | '\n'+
90 | '```' +
91 | '\n'+
92 | '\n'+
93 | '## How to contribute' +
94 | '\n'+
95 | '\n'+
96 | '欢迎你提出[issues](https://github.com/huruji/SilkDown/issues/new) 或者直接提[pull requests](https://github.com/huruji/SilkDown/pulls)。' +
97 | '\n'+
98 | '\n'+
99 | '## 联系我 ' +
100 | '\n'+
101 | '\n'+
102 | '- **:e-mail: E-mail**: huruji3@foxmail.com ' +
103 | '\n'+
104 | '\n'+
105 | '- **微信**' +
106 | '\n'+
107 | '\n'+
108 | '' +
109 | '\n'+
110 | '\n'+
111 | '## Thanks' +
112 | '\n'+
113 | '\n'+
114 | "这个项目是基于项目[markcook](https://github.com/jrainlau/markcook)开发的,感谢[jrainlau](https://github.com/jrainlau)所做的工作。" +
115 | '\n'+
116 | '\n'+
117 | '## License' +
118 | '\n'+
119 | '\n'+
120 | 'MIT'
121 | +'\n';
122 |
123 | export default text
--------------------------------------------------------------------------------
/vuex/store.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Vuex from 'vuex'
3 | import twemoji from 'twemoji'
4 | import md from './../src/markdownConf.js'
5 | import readme from './readme.js'
6 | import readmeZh from './readme_zh.js'
7 |
8 | Vue.use(Vuex)
9 |
10 | const createID = () => {
11 | let t = ''
12 | for(let i = 0; i < 15; i++) {
13 | t += Math.floor(Math.random() * 10)
14 | }
15 | return t
16 | }
17 |
18 | const saveID = (state) => {
19 | let idArr = []
20 | for (let i = 0, len = state.articleList.length; i < len; i++) {
21 | idArr.push(state.articleList[i].id)
22 | localStorage.setItem('idArr', idArr.join(','))
23 | }
24 | }
25 |
26 | export default new Vuex.Store({
27 | state: {
28 | showMenu: true,
29 | fullscreen: false,
30 | preview: false,
31 | articleList: [
32 | {
33 | id: createID(),
34 | content: 'Untitled\n---\n',
35 | current: true
36 | }
37 | ],
38 | theme: null,
39 | firstView: localStorage.getItem('first') !== null ? false : true
40 | },
41 | mutations: {
42 | CHANGE_THEME(state){
43 | if(state.theme === 'theme-day') {
44 | state.theme = 'theme-night'
45 | } else {
46 | state.theme = 'theme-day'
47 | }
48 | localStorage.setItem('theme', state.theme);
49 | },
50 | INITILIZE(state){
51 | state.theme = localStorage.getItem('theme') ? localStorage.getItem('theme') : 'theme-night';
52 | localStorage.setItem('theme', state.theme);
53 | if(state.firstView && state.articleList.length === 1) {
54 | let language = window.navigator.browserLanguage ? window.navigator.browserLanguage: window.navigator.language;
55 | let text = "";
56 | if(~language.indexOf('zh')){
57 | text = readmeZh;
58 | } else {
59 | text = readme;
60 | }
61 | for (let i = 0, len = state.articleList.length; i < len; i++) {
62 | if (state.articleList[i].current) {
63 | state.articleList[i].content = text
64 | }
65 | }
66 |
67 | localStorage.setItem('first', false);
68 | state.firstView = false;
69 | }
70 |
71 | },
72 | SHOW_MENU (state) {
73 | state.showMenu = !state.showMenu
74 | },
75 | TEXT_INPUT (state, txt) {
76 | for (let i = 0, len = state.articleList.length; i < len; i++) {
77 | if (state.articleList[i].current) {
78 | state.articleList[i].content = txt
79 | }
80 | }
81 | },
82 | SAVE_TO_CACHE (state) {
83 | localStorage.setItem('articleList', JSON.stringify(state.articleList))
84 | // for (let i = 0, len = state.articleList.length; i < len; i++) {
85 | // if (state.articleList[i].current) {
86 | // localStorage.setItem(state.articleList[i].id, state.articleList[i].content)
87 | // saveID(state)
88 | // }
89 | // }
90 | },
91 | READ_FROM_CACHE (state) {
92 | for (let i = 0, len = state.articleList.length; i < len; i++) {
93 | if (state.articleList[i].current) {
94 | state.articleList[i].content = localStorage.getItem(state.articleList[i].id)
95 | }
96 | }
97 | },
98 | SELECT_THIS (state, index) {
99 | for (let i = 0, len = state.articleList.length; i < len; i++) {
100 | state.articleList[i].current = false
101 | }
102 | state.articleList[index].current = true
103 | },
104 | NEW_ARTICLE (state) {
105 | for (let i = 0, len = state.articleList.length; i < len; i++) {
106 | state.articleList[i].current = false
107 | }
108 |
109 | let newOne = {
110 | id: createID(),
111 | content: 'Untitled\n---',
112 | current: true
113 | }
114 |
115 | state.articleList.push(newOne)
116 | },
117 | DELETE_THIS (state, index) {
118 | if (state.articleList.length > 1) {
119 |
120 | state.articleList.splice(index, 1)
121 |
122 | localStorage.setItem('articleList', JSON.stringify(state.articleList))
123 |
124 | if(!state.articleList.some(e => e.current)){
125 | state.articleList[0].current = true
126 | }
127 | }
128 | },
129 | READ_LIST_FROM_LOCAL (state) {
130 | if(localStorage.getItem('articleList')) {
131 | state.articleList = null;
132 | let articles = [];
133 | articles = articles.concat(JSON.parse(localStorage.getItem('articleList')));
134 | state.articleList = articles;
135 | }
136 | },
137 | FULLSCREEN(state) {
138 | state.fullscreen = !state.fullscreen;
139 | if(state.fullscreen && state.preview) {
140 | state.preview = !state.preview
141 | }
142 | },
143 | PREVIEW(state){
144 | state.preview = !state.preview;
145 | if(state.fullscreen && state.preview) {
146 | state.fullscreen = !state.fullscreen;
147 | }
148 | }
149 | },
150 | actions: {
151 | showMenu ({ commit }) {
152 | commit('SHOW_MENU')
153 | },
154 | textInput ({ commit }, txt) {
155 | commit('TEXT_INPUT', txt)
156 | },
157 | selectThis ({ commit }, index) {
158 | commit('SELECT_THIS', index)
159 | },
160 | newArticle ({ commit }) {
161 | commit('NEW_ARTICLE')
162 | commit('SAVE_TO_CACHE')
163 | },
164 | deleteThis ({ commit }, index) {
165 | commit('DELETE_THIS', index)
166 | },
167 | saveToCache ({ commit }) {
168 | commit('SAVE_TO_CACHE')
169 | },
170 | readFromCache ({ commit }) {
171 | commit('READ_FROM_CACHE')
172 | },
173 | loadCache ({ commit }) {
174 | commit('READ_LIST_FROM_LOCAL')
175 | }
176 | },
177 | getters: {
178 | articleRaw: state => {
179 | let content = ''
180 | for (let i = 0, len = state.articleList.length; i < len; i++) {
181 | if (state.articleList[i].current) {
182 | content = state.articleList[i].content
183 | }
184 | }
185 | return content
186 | },
187 | articleMd: (state, getters) => {
188 | return md.render(getters.articleRaw)
189 | },
190 | articleList: state => {
191 | return state.articleList
192 | },
193 | articleLineRaw: (state, getters) => {
194 | return getters.articleRaw.split('\n')
195 | }
196 | }
197 | })
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path')
2 | const webpack = require('webpack')
3 | const offlinePlugin = require('offline-plugin')
4 | const cleanWebpackPlugin = require('clean-webpack-plugin')
5 | const htmlWebpackPlugin = require('html-webpack-plugin')
6 | const copyWebpackPlugin = require('copy-webpack-plugin')
7 |
8 | module.exports = {
9 | entry: './src/main.js',
10 | output: {
11 | path: path.resolve(__dirname, './docs'),
12 | filename: 'build.js'
13 | },
14 | module: {
15 | rules: [
16 | {
17 | test: /\.vue$/,
18 | loader: 'vue-loader'
19 | },
20 | {
21 | test: /\.js$/,
22 | loader: 'babel-loader',
23 | exclude: /node_modules/
24 | },
25 | {
26 | test: /\.(png|jpg|gif|svg)$/,
27 | loader: 'file-loader',
28 | options: {
29 | name: '[name].[ext]?[hash]'
30 | }
31 | }
32 | ]
33 | },
34 | resolve: {
35 | alias: {
36 | 'vue$': 'vue/dist/vue.esm.js'
37 | }
38 | },
39 | devServer: {
40 | historyApiFallback: true,
41 | noInfo: true
42 | },
43 | performance: {
44 | hints: false
45 | },
46 | devtool: '#eval-source-map'
47 | }
48 |
49 | if (process.env.NODE_ENV === 'production') {
50 | module.exports.devtool = '#source-map'
51 | module.exports.output = {
52 | path: path.resolve(__dirname, './docs'),
53 | filename: '[name].[hash].js'
54 | }
55 | module.exports.plugins = (module.exports.plugins || []).concat([
56 | new webpack.DefinePlugin({
57 | 'process.env': {
58 | NODE_ENV: '"production"'
59 | }
60 | }),
61 | new webpack.optimize.UglifyJsPlugin({
62 | sourceMap: true,
63 | compress: {
64 | warnings: false
65 | }
66 | }),
67 | new webpack.LoaderOptionsPlugin({
68 | minimize: true
69 | }),
70 | new htmlWebpackPlugin({
71 | filename: 'index.html',
72 | template: 'index.tpl',
73 | inject: true,
74 | minify: {
75 | // removeComments: true,
76 | // collapseWhitespace: true,
77 | // removeAttributeQuotes: true
78 | },
79 | chunks: ['main'],
80 | chunksSortMode: 'dependency'
81 | }),
82 | new cleanWebpackPlugin(['docs'], {
83 | root: path.resolve('./')
84 | }),
85 | new copyWebpackPlugin([
86 | { from: './img/favicon.ico', to: 'favicon.ico'}
87 | ]),
88 | new offlinePlugin({
89 | Caches: {
90 | main: [
91 | 'index.html',
92 | '**.js'
93 | ],
94 | additional: [':externals:']
95 | },
96 | externals: [
97 | 'https://cdn.bootcss.com/font-awesome/4.6.3/css/font-awesome.min.css',
98 | 'https://cdn.bootcss.com/highlight.js/9.7.0/styles/atom-one-dark.min.css'
99 | ],
100 | ServiceWorker: {
101 | events: true
102 | },
103 | AppCache: null
104 | })
105 | ])
106 | }
107 |
--------------------------------------------------------------------------------