diff --git a/README.md b/README.md index 0c605a7..eb66fd2 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,4 @@ Application for manipulating images (crop, resize, adujst brightness, ...). -![](./docs/screenshot_20250905.png) +![](./docs/app.png) diff --git a/docs/app.png b/docs/app.png new file mode 100644 index 0000000..a34b12d Binary files /dev/null and b/docs/app.png differ diff --git a/docs/screenshot_20250905.png b/docs/screenshot_20250905.png deleted file mode 100644 index 3c850c3..0000000 Binary files a/docs/screenshot_20250905.png and /dev/null differ diff --git a/frontend/src/App.vue b/frontend/src/App.vue index cf40d55..1074ba9 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -10,6 +10,8 @@ const type = ref(null) const result = ref(null) const effects = ref([]) const resultLoading = ref(false) +const availableEffects = ref([]) +const effectToAdd = ref(null) const makeSetting = (label, value, min, max, step) => { return {label, value, min, max, step} @@ -25,7 +27,7 @@ const openImageFile = () => { source.value = info - effects.value = [ + availableEffects.value = [ { label: "Crop", name: "crop", @@ -154,6 +156,29 @@ const applyEffects = () => { }) } +function makeId() { + let result = ''; + const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + const charactersLength = characters.length; + + for ( var i = 0; i < 20; i++ ) { + result += characters.charAt(Math.floor(Math.random() * charactersLength)); + } + + return result; +} + + +const addEffect = () => { + if (!effectToAdd.value) { + return + } + + let effect = JSON.parse(JSON.stringify(availableEffects.value.filter((e) => e.name === effectToAdd.value)[0])) + effect.id = makeId() + effects.value.push(effect) +} + const makeRenderStyle = () => { return { 'align-items': source.value !== null ? 'top' : 'center' @@ -164,6 +189,10 @@ const makeImageSrc = (data) => { return `data:image/${data.type};base64, ${data.base64}` } +const deleteEffect = (index) => { + effects.value.splice(index, 1) +} + onMounted(openImageFile) @@ -176,20 +205,25 @@ onMounted(openImageFile) :options="{handle: '.effect-move', animation: 400}" v-model="effects" @end="sortEnd" - item-key="name" + item-key="id" tag="div" >