Added base64 and URL encoders/decoders
Reviewed-on: #250 Reviewed-by: Adam Bem <bema@noreply.example.com> Co-authored-by: widlam <mikolaj.widla@gmail.com> Co-committed-by: widlam <mikolaj.widla@gmail.com>
This commit is contained in:
35
Frontend/src/components/encoder/EncodeUriButtonComponent.vue
Normal file
35
Frontend/src/components/encoder/EncodeUriButtonComponent.vue
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
|
||||||
|
const props = defineProps(
|
||||||
|
{
|
||||||
|
operation: {type:String,required:true},
|
||||||
|
code: {type: String, required: true}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
const emit = defineEmits([
|
||||||
|
'update:result'
|
||||||
|
])
|
||||||
|
|
||||||
|
function encode(){
|
||||||
|
|
||||||
|
switch(props.operation.toLowerCase()){
|
||||||
|
|
||||||
|
case "encode":{
|
||||||
|
emit('update:result', encodeURI(props.code) )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "decode":{
|
||||||
|
emit('update:result', decodeURI(props.code) )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<button @click="encode()" class="tool-button">{{ props.operation }}</button>
|
||||||
|
</template>
|
||||||
39
Frontend/src/components/encoder/EncoderButtonComponent.vue
Normal file
39
Frontend/src/components/encoder/EncoderButtonComponent.vue
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
|
||||||
|
const props = defineProps(
|
||||||
|
{
|
||||||
|
encodeType: {type:String,required:true},
|
||||||
|
code: {type: String, required: true}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
const emit = defineEmits([
|
||||||
|
'update:result',
|
||||||
|
'image:show'
|
||||||
|
])
|
||||||
|
|
||||||
|
function convert(){
|
||||||
|
console.log("works")
|
||||||
|
switch(props.encodeType.toLowerCase()){
|
||||||
|
case "base64":{
|
||||||
|
emit('update:result', btoa(props.code) )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "text":{
|
||||||
|
emit('update:result', atob(props.code) )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "image":{
|
||||||
|
emit('image:show', props.code )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<button @click="convert()" class="tool-button">{{ props.encodeType }}</button>
|
||||||
|
</template>
|
||||||
@@ -48,6 +48,12 @@ onMounted( () => {
|
|||||||
<SidebarToolLinkComponent path-to="/rest/mock" element-content="Mock" />
|
<SidebarToolLinkComponent path-to="/rest/mock" element-content="Mock" />
|
||||||
</sidebar-menu-element-component>
|
</sidebar-menu-element-component>
|
||||||
|
|
||||||
|
<sidebar-menu-element-component category-name="Encoder">
|
||||||
|
<SidebarToolLinkComponent path-to="/encoder/base64" element-content="Base64" />
|
||||||
|
<SidebarToolLinkComponent path-to="/encoder/url" element-content="URL" />
|
||||||
|
</sidebar-menu-element-component>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<FooterComponent></FooterComponent>
|
<FooterComponent></FooterComponent>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ const xsdTool = import("@views/XSDView.vue")
|
|||||||
const xpathTool = import("@views/XPathView.vue")
|
const xpathTool = import("@views/XPathView.vue")
|
||||||
const xqueryTool = import("@views/XQueryView.vue")
|
const xqueryTool = import("@views/XQueryView.vue")
|
||||||
|
|
||||||
|
const base64Encoder = import("@views/Base64EncoderView.vue")
|
||||||
|
const urlEncoder = import("@views/UrlEncoderView.vue")
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{
|
{
|
||||||
path: '/',
|
path: '/',
|
||||||
@@ -57,6 +60,16 @@ const routes = [
|
|||||||
path: '/rest/mock',
|
path: '/rest/mock',
|
||||||
name: 'restmock',
|
name: 'restmock',
|
||||||
component: () => restMock
|
component: () => restMock
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/encoder/base64',
|
||||||
|
name: 'base64encoder',
|
||||||
|
component: () => base64Encoder
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/encoder/url',
|
||||||
|
name: 'urlEncoder',
|
||||||
|
component: () => urlEncoder
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
66
Frontend/src/views/Base64EncoderView.vue
Normal file
66
Frontend/src/views/Base64EncoderView.vue
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import CodeEditorComponent from '@/components/CodeEditorComponent.vue';
|
||||||
|
import EncoderButton from '@/components/encoder/EncoderButtonComponent.vue'
|
||||||
|
import { ref } from 'vue';
|
||||||
|
|
||||||
|
|
||||||
|
const data : any = ref("")
|
||||||
|
const imageData = ref("")
|
||||||
|
const DoshowImage = ref(false)
|
||||||
|
const inputImage = ref();
|
||||||
|
|
||||||
|
function setTextFieldValue(newData: string) {
|
||||||
|
data.value = newData.toString()
|
||||||
|
DoshowImage.value = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function showImage(newImage : string){
|
||||||
|
imageData.value = "data:image/jpeg;base64,"+newImage
|
||||||
|
DoshowImage.value = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function convertImageToBase64(file : any){
|
||||||
|
console.log(inputImage)
|
||||||
|
const reader = new FileReader()
|
||||||
|
reader.onloadend = () => (console.log(data.value = reader.result?.toString().split(',')[1]))
|
||||||
|
reader.readAsDataURL(file.target.files[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
function clear(){
|
||||||
|
data.value = ""
|
||||||
|
imageData.value = ""
|
||||||
|
DoshowImage.value = false;
|
||||||
|
inputImage.value.value = null
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div id="layoutFull" class="w-full h-full flex">
|
||||||
|
<div id="layoutLeft" class="flex flex-col w-1/2 h-full gap-4">
|
||||||
|
<div class="w-4/5 flex flex-row-reverse gap-2 mt-12 ml-6">
|
||||||
|
<EncoderButton @update:result="setTextFieldValue" :code="data" encode-type="Base64"></EncoderButton>
|
||||||
|
<EncoderButton @update:result="setTextFieldValue" :code="data" encode-type="Text"></EncoderButton>
|
||||||
|
<EncoderButton @image:show="showImage" :code="data" encode-type="Image"></EncoderButton>
|
||||||
|
<button class="tool-button" @click="clear()">Clear</button>
|
||||||
|
</div>
|
||||||
|
<div id="codeEditor" class="w-4/5 h-1/3 ml-6 flex flex-col">
|
||||||
|
<label class="dark:text-white text-center w-full">Base64</label>
|
||||||
|
<CodeEditorComponent @update:updated-code="setTextFieldValue" :config="{language:'base64'}" :code="data"></CodeEditorComponent>
|
||||||
|
</div>
|
||||||
|
<div class="w-4/5 flex items-center flex-col ml-6" id="imageImporter">
|
||||||
|
<label class="block mb-2 text-sm font-medium text-gray-900 dark:text-white" for="file_input">Upload file</label>
|
||||||
|
<input id="imageLoader" ref="inputImage" class="block file:bg-inherit file:shadow-inherit dark:file:text-white file:border-inherit w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50 dark:text-gray-400 focus:outline-none dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400" type="file" @change="convertImageToBase64" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="separator" class="bg-black h-full w-1" ></div>
|
||||||
|
|
||||||
|
<div id="layoutRight" class=" ml-6 w-2/5">
|
||||||
|
<div v-on="DoshowImage">
|
||||||
|
<img :src="imageData"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
31
Frontend/src/views/UrlEncoderView.vue
Normal file
31
Frontend/src/views/UrlEncoderView.vue
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import EncodeUriButton from '@components/encoder/EncodeUriButtonComponent.vue'
|
||||||
|
import CodeEditorComponent from '@/components/CodeEditorComponent.vue';
|
||||||
|
|
||||||
|
|
||||||
|
const uri = ref("")
|
||||||
|
|
||||||
|
function setTextFieldValue(newVal : string){
|
||||||
|
console.log(newVal)
|
||||||
|
uri.value = newVal
|
||||||
|
}
|
||||||
|
|
||||||
|
function clear(){
|
||||||
|
uri.value = "";
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="flex flex-col w-full h-full gap-4" id="layout">
|
||||||
|
<div id="toolbar" class="flex flex-col gap-4 items-center lg:flex-row place-content-between">
|
||||||
|
<span class="dark:text-slate-100">URI Encoder</span>
|
||||||
|
<div class="flex flex-wrap gap-2 justify-center">
|
||||||
|
<button class="tool-button" @click="clear()">Clear</button>
|
||||||
|
<EncodeUriButton @update:result="setTextFieldValue" :code="uri" operation="Encode" />
|
||||||
|
<EncodeUriButton @update:result="setTextFieldValue" :code="uri" operation="Decode" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<CodeEditorComponent @update:updated-code="setTextFieldValue" :code="uri" :config="{disabled:false,language:'uri'}" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
Reference in New Issue
Block a user