diff --git a/CHANGELOG.md b/CHANGELOG.md index f7c2cae9..99a0ab0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Next +- [feat] added [qr-code generator](/#/qrcode-generator) + ## 1.4.0 - [ui] condensed + colored sidenav - [feat] added [git memo](/#/git-memo) diff --git a/README.md b/README.md index 7fab5b33..f3115abd 100644 --- a/README.md +++ b/README.md @@ -18,10 +18,10 @@ Here is an unordered list of the current functionalities, and some that may come - [x] Markdown editor - [x] Lorem ipsum text generator - [x] Git memo (cheat sheet) +- [x] QR code generator - [ ] CSS memo (cheat sheet) - [ ] REGEX memo (cheat sheet) + tester? - [ ] Image exif editor/remover -- [ ] QR code generator - [ ] Bip39 pass-phrase generator - [ ] Crontab friendly generator - [ ] Image format converter? diff --git a/package-lock.json b/package-lock.json index 869734fe..3b8a0e2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9990,6 +9990,11 @@ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, + "qrcode.vue": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/qrcode.vue/-/qrcode.vue-1.7.0.tgz", + "integrity": "sha512-R7t6Y3fDDtcU7L4rtqwGUDP9xD64gJhIwpfjhRCTKmBoYF6SS49PIJHRJ048cse6OI7iwTwgyy2C46N9Ygoc6g==" + }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", diff --git a/package.json b/package.json index 7c5c3255..3874d669 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "core-js": "^3.6.4", "dompurify": "^2.0.11", "marked": "^1.1.0", + "qrcode.vue": "^1.7.0", "register-service-worker": "^1.7.1", "roboto-fontface": "*", "vue": "^2.6.11", diff --git a/src/components/ColorInput.vue b/src/components/ColorInput.vue new file mode 100644 index 00000000..e75f6c1f --- /dev/null +++ b/src/components/ColorInput.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/src/router.js b/src/router.js index a36ab2bb..eae5138d 100644 --- a/src/router.js +++ b/src/router.js @@ -121,7 +121,18 @@ const toolsComponents = [ keywords: ['git', 'push', 'rebase', 'merge', 'tag', 'commit', 'checkout'] } ] - + }, + { + title: 'Miscellaneous', + child: [ + { + text: 'QR Code generator', + path: '/qrcode-generator', + icon: 'fa-qrcode', + component: () => import('./routes/tools/QRCodeGenerator'), + keywords: [] + } + ] } ]; diff --git a/src/routes/tools/QRCodeGenerator.vue b/src/routes/tools/QRCodeGenerator.vue new file mode 100644 index 00000000..c920bc69 --- /dev/null +++ b/src/routes/tools/QRCodeGenerator.vue @@ -0,0 +1,137 @@ + + + + + \ No newline at end of file diff --git a/src/utils/helpers.js b/src/utils/helpers.js index 3f3a7fc6..5a083227 100644 --- a/src/utils/helpers.js +++ b/src/utils/helpers.js @@ -41,6 +41,13 @@ const randFromArray = (array) => array[Math.floor(Math.random() * array.length)] const randIntFromInterval = (min, max) => Math.floor(Math.random() * (max - min) + min) +const downloadBase64File = (dataUrl, name = 'file') => { + const a = document.createElement("a"); + a.href = dataUrl; + a.download = name; + a.click(); +} + export { copyToClipboard, fileIsImage, @@ -48,5 +55,6 @@ export { isInt, debounce, randFromArray, - randIntFromInterval + randIntFromInterval, + downloadBase64File } \ No newline at end of file