403Webshell
Server IP : 34.87.99.72  /  Your IP : 216.73.217.31
Web Server : Apache/2.4.46 (Unix) OpenSSL/1.1.1n
System : Linux zlock-bitnami-lamp-prod-v2-vm 4.19.0-16-cloud-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64
User : bitnami ( 1000)
PHP Version : 7.4.18
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : OFF
Directory :  /opt/bitnami/apache/htdocs/app/resources/js/components/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/bitnami/apache/htdocs/app/resources/js/components/ImageInput.vue
<template>
	<v-dialog 
		ref="image_ref"
		v-model="image_dialog" 
		:return-value.sync="image_val"
		max-width="750px" 
		persistent
	>
		<template #activator="{ on }">
			<div class="text-center pa-1 fill-height fill-weight" :style="'min-height:'+minHeight">
				<div v-if="value" class="relative fill-height fill-weight">
					<v-img 
						class="radius-05" 
						:src="value"
						:aspect-ratio="ratio" height="100%"
					></v-img>
					<v-progress-linear
						v-if="loadingProgress"
						class="absolute"
						height="6px"
						:indeterminate="loadingProgress == 100"
						:value="loadingProgress"
						style="bottom: 0px; z-index: 5;"
					></v-progress-linear>
					<v-btn
						v-if="!hideEditBtn"
						class="absolute background elevation-2"
						style="top: -6px;right: 18px; z-index: 5;"
						x-small
						icon
						v-on="on"
					>
						<v-icon x-small>mdi-pencil</v-icon>
					</v-btn>
					<v-btn
						class="absolute background elevation-2"
						style="top: -6px;right: -6px; z-index: 5;"
						x-small
						icon
						@click="clearInput() "
					>
						<v-icon x-small>mdi-delete</v-icon>
					</v-btn>
				</div>
				<div
					v-else 
					class="background clickable container justify-center radius-05 px-12 py-3 fill-height fill-weight"
					style="border: 1px solid #666;"
					v-on="on"
				>
					<div>
						<div><v-icon>mdi-upload</v-icon></div>
						<div class="caption">Upload Image <div class="font-italic"> {{ ratio == 16/9 ? "(ratio 16:9)" : "(resolution 1024x1280)" }} </div></div>
					</div>
				</div>
				<div class="text-left font-italic">
				</div>
				<div class="caption error--text text-left">
					<div v-if="errorMessages">{{ errorMessages[0] }}</div>
				</div>
			</div>
		</template>
		<vuetify-image-clipper
			v-model="image_val"
			:ratio="ratio" 
			@input="computed_file_size()" 
			@reset="file_size = null"
		>
			<template #extra_info>
				<div v-if="file_size" class="caption">size: {{ file_size }} MB</div>
			</template>
			<div class="body-2 font-italic">*Scroll to zoom</div>
			<v-spacer></v-spacer>
			<v-btn text color="error" @click="image_dialog = false">Cancel</v-btn>
			<v-btn 
				text color="primary" :disabled="!image_val"
				@click="saveImage()"
			>
				Save
			</v-btn>
		</vuetify-image-clipper>
	</v-dialog>
</template>

<script>
import VuetifyImageClipper from "vuetify-image-clipper"
import "vuetify-image-clipper/dist/v-image-clipper.css"
export default{
	components:{
		VuetifyImageClipper
	},
	props:{
		value: {
			type: String,
			required: false,
			default : ''
		},
		loadingProgress: {
			type: [Number, Boolean],
			required: false,
			default : 0
		},
		errorMessages:{
			type: Array,
			required: false,
			default : ()=>{
				return []
			}
		},
		minHeight:{
			type: String,
			default: 'auto',
		},
		hideEditBtn:{
			type: Boolean,
			default: false,
		},
		ratio:{
			type: Number,
			default: 16/9,
		}
	},
	data(){
		return {
			image_val : null,
			image_dialog : false,
			file_size : null,
		}
	},
	methods:{
		saveImage(){
			this.image_dialog = false
			this.$emit('input',this.image_val)
		},
		clearInput(){
			this.$emit('clearInput')
		},
		computed_file_size(){
			this.file_size = null
			if(this.image_val){
				let file = this.dataURLtoBlob(this.image_val)
				if(file){
					this.file_size = ( file.size / (1024*1024)).toFixed(2);
				}
			}
		},
		dataURLtoBlob(dataURL){
			var blobBin = atob(dataURL.split(',')[1]);
			var array = [];
			for(var i = 0; i < blobBin.length; i++) {
				array.push(blobBin.charCodeAt(i));
			}
			var file = new Blob([new Uint8Array(array)], {type: 'image/png'});
			return file
		},
		get_broken_img(){
			return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAABHNCSVQICAgIfAhkiAAAA6RJREFUeF7tmy1z6kAYhbcOXLE4cNiCQwISSS2OSiT9CSDBgQOLRAISVyw4cJWlrnX3zu5MmITpJbtJJjlv74lhMuTj9DzzdMkmefj4+PijuMA08EAgMCxMEALB4kEgYDwIhEDQGgDLwzGEQMAaAItDQwgErAGwODSEQMAaAItDQwgErAGwODSEQMAaAItDQwgErAGwODSEQMAaAItDQwgErAGwODSEQMAaAItDQwgErAGwODSEQMAaAItDQwgk+QZOp5M5aLlcTv7gKR9RvCGLxUIdDgdT29PTk3p+fk65wmRPJxrIer1W2+020Eij0VCtVivZllI8mlggX19fajQaqe/v70BduVxODQYDlc/nU6wxuVOJBeK34/Hx0TTy+flpPiVbIhLIrR2dTseAWC6X5lOyJSKB3Nrx+vpqQAyHQ/GWiAPykx3VatUA2e/34i0RB+RfdnjDqnRLRAG5Z4cHRLolooCE2fEbLBEDxMaO32CJGCC2dki3RAQQFzukWyICiKsdki2BBxLFDsmWwAMJs2O1WqndbmcY1Ot11W63AzN90q5LoIGE2aHvg+j7If6l1+sFblRJuy6BBhJmh+39EEmWwAIJs0NbYQtEkiWwQMLscAEiaSYYEoiNHa5ApFgCCcTGDlcgUiyBA2JrRxQgEiyBA2JrRxQgEiyBAuJiR1Qg6JZAAXGxIyoQdEtggLjaoYu9XC5qPB5fn83ST5v0+31VKBQCV++3K8iWwABxtcMrWUN5e3szq7VaLRQG+kwwBJAodtxVwOJLVEsggES1w6L3u5sgznFlDiSuHfpVhM1mY4pvNptOryQgWpI5kDh2vL+/q8lkErBAP2gdNqj7d0CzJFMgce2wne29938LzZJMgcSxQ5fsL9MrXT947T1aajvGIFmSGZC4dnhlT6dTdT6fzWqpVFIvLy+2HK7bIVmSGZC4dvhb12OJXorFojMMtOuSTIAkZUfk9n/YEcWSTIDon6qz2exaC8rbs97bvDrY7cMSScK/dywIIGn9sS7n+a+A6GLm87k6Ho8uHaW2baVSUd1uN7Xz+U+UiSFeAD0Y375Fm0kLvpPqGeM4Pw7i5s8USNzwv3F/AgGjSiAEAtYAWBwaQiBgDYDFoSEEAtYAWBwaQiBgDYDFoSEEAtYAWBwaQiBgDYDFoSEEAtYAWBwaQiBgDYDFoSEEAtYAWBwaQiBgDYDFoSEEAtYAWBwaQiBgDYDFoSEEAtYAWBwaAgbkLz1H5RbOQSuJAAAAAElFTkSuQmCC"
		}
	}
}
</script>

Youez - 2016 - github.com/yon3zu
LinuXploit