From 507d961cd8567a96365565aaa894bdcef5318c08 Mon Sep 17 00:00:00 2001 From: Corentin Thomasset Date: Sun, 14 Jun 2020 19:33:29 +0200 Subject: [PATCH] feat: added MarkdownEditor.vue Signed-off-by: Corentin Thomasset --- CHANGELOG.md | 1 + package-lock.json | 22 ++++++--- package.json | 2 + src/router.js | 11 ++++- src/routes/tools/MarkdownEditor.vue | 77 +++++++++++++++++++++++++++++ src/utils/helpers.js | 12 ++++- 6 files changed, 116 insertions(+), 9 deletions(-) create mode 100644 src/routes/tools/MarkdownEditor.vue diff --git a/CHANGELOG.md b/CHANGELOG.md index a01cc222..abbbc29d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [fix] [GithubContributors] ordered contributors by contribution count - [refactor] used vue-typecasting for number inputs - [feat] lazy loading tools routes +- [feat] added [markdown editor](/#/markdown-editor) ## 1.2.1 - [fix] [UuidGenerator] added quantity validation rules diff --git a/package-lock.json b/package-lock.json index e99f5c86..25952fac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3139,6 +3139,12 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "highlight.js": { + "version": "9.18.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.1.tgz", + "integrity": "sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg==", + "dev": true + }, "supports-color": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", @@ -4373,6 +4379,11 @@ "domelementtype": "1" } }, + "dompurify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.0.11.tgz", + "integrity": "sha512-qVoGPjIW9IqxRij7klDQQ2j6nSe4UNWANBhZNLnsS7ScTtLb+3YdxkRY8brNTpkUiTtcXsCJO+jS0UCDfenLuA==" + }, "domutils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", @@ -6253,12 +6264,6 @@ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", "dev": true }, - "highlight.js": { - "version": "9.18.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.1.tgz", - "integrity": "sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg==", - "dev": true - }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -8103,6 +8108,11 @@ "object-visit": "^1.0.0" } }, + "marked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-1.1.0.tgz", + "integrity": "sha512-EkE7RW6KcXfMHy2PA7Jg0YJE1l8UPEZE8k45tylzmZM30/r1M1MUXWQfJlrSbsTeh7m/XTwHbWUENvAJZpp1YA==" + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", diff --git a/package.json b/package.json index b552be8a..97cd7d81 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,8 @@ "color-convert": "^2.0.1", "color-name": "^1.1.4", "core-js": "^3.6.4", + "dompurify": "^2.0.11", + "marked": "^1.1.0", "register-service-worker": "^1.7.1", "roboto-fontface": "*", "vue": "^2.6.11", diff --git a/src/router.js b/src/router.js index 35471805..17cd3e9a 100644 --- a/src/router.js +++ b/src/router.js @@ -85,15 +85,22 @@ const toolsComponents = [ ], }, { - title: 'Miscellaneous', + title: 'Text', child: [ { - icon: 'fa-align-left\n', + icon: 'fa-align-left', text: 'Text stats', path: '/text-stats', component: () => import('./routes/tools/TextStats'), keywords: ['word', 'count', 'size', 'bytes', 'length'] }, + { + icon: 'fab fa-markdown', + text: 'Markdown editor', + path: '/markdown-editor', + component: () => import('./routes/tools/MarkdownEditor'), + keywords: ['text', 'html', 'markdown'] + }, ], } ]; diff --git a/src/routes/tools/MarkdownEditor.vue b/src/routes/tools/MarkdownEditor.vue new file mode 100644 index 00000000..7a19b09c --- /dev/null +++ b/src/routes/tools/MarkdownEditor.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/src/utils/helpers.js b/src/utils/helpers.js index e847c420..f81190bc 100644 --- a/src/utils/helpers.js +++ b/src/utils/helpers.js @@ -28,9 +28,19 @@ const isInt = (value) => { return Number.isInteger(value); } +const debounce = (callback, delay = 300) => { + let timer; + + return function(...args) { + clearTimeout(timer); + timer = setTimeout(() => callback(...args), delay); + } +} + export { copyToClipboard, fileIsImage, formatBytes, - isInt + isInt, + debounce } \ No newline at end of file