diff options
author | 2023-05-15 14:35:44 +0200 | |
---|---|---|
committer | 2023-05-15 14:35:44 +0200 | |
commit | 0b20f1c16a42aef7f165dc47929bbee4bb201d54 (patch) | |
tree | 63667d3ffa067037a7035e8cde3f56cc18acc06d /src/tools/base64-string-converter/base64-string-converter.vue | |
parent | 8c92d56318b21fb0cddd8364e903b9e693fd53ed (diff) | |
download | it-tools-0b20f1c16a42aef7f165dc47929bbee4bb201d54.tar.gz it-tools-0b20f1c16a42aef7f165dc47929bbee4bb201d54.tar.zst it-tools-0b20f1c16a42aef7f165dc47929bbee4bb201d54.zip |
feat(base64-string-converter): switch to encode and decode url safe base64 strings (#392)
* feat(base64-string-converter): switch to encode and decode url safe
* feat(base64-string-converter): changes based on review comments, use config object instead of boolean argument.
* feat(base64-string-converter): fix validation, add option to watch additional refs for changes which interfere with validation rules
Diffstat (limited to 'src/tools/base64-string-converter/base64-string-converter.vue')
-rw-r--r-- | src/tools/base64-string-converter/base64-string-converter.vue | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/tools/base64-string-converter/base64-string-converter.vue b/src/tools/base64-string-converter/base64-string-converter.vue index 0bcd966..9d574c9 100644 --- a/src/tools/base64-string-converter/base64-string-converter.vue +++ b/src/tools/base64-string-converter/base64-string-converter.vue @@ -1,5 +1,8 @@ <template> <c-card title="String to base64"> + <n-form-item label="Encode URL safe" label-placement="left"> + <n-switch v-model:value="encodeUrlSafe" /> + </n-form-item> <c-input-text v-model:value="textInput" multiline @@ -26,12 +29,16 @@ </c-card> <c-card title="Base64 to string"> + <n-form-item label="Decode URL safe" label-placement="left"> + <n-switch v-model:value="decodeUrlSafe" /> + </n-form-item> <c-input-text v-model:value="base64Input" multiline placeholder="Your base64 string..." rows="5" :validation-rules="b64ValidationRules" + :validation-watch="b64ValidationWatch" label="Base64 string to decode" mb-5 /> @@ -58,15 +65,23 @@ import { base64ToText, isValidBase64, textToBase64 } from '@/utils/base64'; import { withDefaultOnError } from '@/utils/defaults'; import { computed, ref } from 'vue'; +const encodeUrlSafe = useStorage('base64-string-converter--encode-url-safe', false); +const decodeUrlSafe = useStorage('base64-string-converter--decode-url-safe', false); + const textInput = ref(''); -const base64Output = computed(() => textToBase64(textInput.value)); +const base64Output = computed(() => textToBase64(textInput.value, { makeUrlSafe: encodeUrlSafe.value })); const { copy: copyTextBase64 } = useCopy({ source: base64Output, text: 'Base64 string copied to the clipboard' }); const base64Input = ref(''); -const textOutput = computed(() => withDefaultOnError(() => base64ToText(base64Input.value.trim()), '')); +const textOutput = computed(() => + withDefaultOnError(() => base64ToText(base64Input.value.trim(), { makeUrlSafe: decodeUrlSafe.value }), ''), +); const { copy: copyText } = useCopy({ source: textOutput, text: 'String copied to the clipboard' }); - const b64ValidationRules = [ - { message: 'Invalid base64 string', validator: (value: string) => isValidBase64(value.trim()) }, + { + message: 'Invalid base64 string', + validator: (value: string) => isValidBase64(value.trim(), { makeUrlSafe: decodeUrlSafe.value }), + }, ]; +const b64ValidationWatch = [decodeUrlSafe]; </script> |