Reviewed-on: #270 Reviewed-by: Adam Bem <bema@noreply.example.com> Co-authored-by: widlam <mikolaj.widla@gmail.com> Co-committed-by: widlam <mikolaj.widla@gmail.com>
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <script setup lang="ts">
 | |
| import CodeEditorComponent from '@/components/common/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){
 | |
|     const reader = new FileReader()
 | |
|     reader.onloadend = () => {
 | |
|         data.value = reader.result?.toString().split(',')[1]
 | |
|         showImage(data.value)
 | |
|     }
 | |
|     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 flex-col xl:flex-row gap-4">
 | |
|     <div id="layoutLeft" class="flex flex-col w-full xl:w-1/2 h-1/3 xl:h-full gap-4">
 | |
|         <div class="w-full flex flex-row place-content-between items-center">
 | |
|             <label class="dark:text-white text-center">Base64 Encoder</label>
 | |
|             <div class="flex flex-row items-center gap-2 overflow-x-auto">
 | |
|                 <button class="tool-button" @click="clear()">Clear</button>
 | |
|                 <EncoderButton @image:show="showImage" :code="data" operation-type="Show Image"></EncoderButton>
 | |
|                 <div class="w-2"></div>
 | |
|                 <EncoderButton @update:result="setTextFieldValue" :code="data" operation-type="Encode"></EncoderButton>
 | |
|                 <EncoderButton @update:result="setTextFieldValue" :code="data" operation-type="Decode"></EncoderButton>
 | |
|             </div>
 | |
|             
 | |
|         </div>
 | |
|         <div id="codeEditor" class="w-full h-full xl:h-1/3 flex flex-col">
 | |
|             <CodeEditorComponent @update:updated-code="setTextFieldValue" :config="{language:'base64'}" :code="data"></CodeEditorComponent>
 | |
|         </div>
 | |
|         <div class="flex flex-row justify-center w-full">
 | |
|             <div class="flex flex-col items-center w-fit" id="imageImporter">
 | |
|                 <label class="block mb-2 text-sm font-medium text-gray-900 dark:text-white" for="file_input">Upload image</label>
 | |
|                 <input id="imageLoader" ref="inputImage" class="file-selector" accept=".gif, .jpg, .jpeg, .png, .webm, image/gif, image/jpeg, image/png, image/webm"  type="file" @change="convertImageToBase64" />
 | |
|             </div>    
 | |
|         </div>
 | |
|         
 | |
|     </div>
 | |
|     
 | |
|     <div id="layoutRight" class="w-full xl:w-1/2 min-h-[66%] xl:h-full">
 | |
|         <div class="border-2 rounded-lg border-gray-300 dark:border-gray-600 min-h-[50%]" v-on="DoshowImage">
 | |
|             <img :src="imageData"/>
 | |
|         </div>
 | |
|         
 | |
|     </div>
 | |
| </div>
 | |
|     
 | |
| </template> |