debian-mirror-gitlab/app/assets/javascripts/vue_shared/components/diff_viewer/viewers/image_diff_viewer.vue

142 lines
3.5 KiB
Vue
Raw Normal View History

2018-11-08 19:23:39 +05:30
<script>
import ImageViewer from '../../content_viewer/viewers/image_viewer.vue';
import TwoUpViewer from './image_diff/two_up_viewer.vue';
import SwipeViewer from './image_diff/swipe_viewer.vue';
import OnionSkinViewer from './image_diff/onion_skin_viewer.vue';
import { diffModes, imageViewMode } from '../constants';
export default {
components: {
ImageViewer,
},
props: {
diffMode: {
type: String,
required: true,
},
newPath: {
type: String,
required: true,
},
oldPath: {
type: String,
required: true,
},
2019-12-26 22:10:19 +05:30
newSize: {
type: Number,
required: false,
default: 0,
},
oldSize: {
type: Number,
required: false,
default: 0,
},
2018-11-08 19:23:39 +05:30
},
data() {
return {
mode: imageViewMode.twoup,
};
},
2018-12-13 13:39:08 +05:30
computed: {
imageViewComponent() {
switch (this.mode) {
case imageViewMode.twoup:
return TwoUpViewer;
case imageViewMode.swipe:
return SwipeViewer;
case imageViewMode.onion:
return OnionSkinViewer;
default:
return undefined;
}
},
isNew() {
return this.diffMode === diffModes.new;
},
isRenamed() {
return this.diffMode === diffModes.renamed;
},
imagePath() {
return this.isNew || this.isRenamed ? this.newPath : this.oldPath;
},
},
2018-11-08 19:23:39 +05:30
methods: {
changeMode(newMode) {
this.mode = newMode;
},
},
diffModes,
imageViewMode,
};
</script>
<template>
<div class="diff-file-container">
2019-02-15 15:39:39 +05:30
<div v-if="diffMode === $options.diffModes.replaced" class="diff-viewer">
2018-11-08 19:23:39 +05:30
<div class="image js-replaced-image">
2019-02-15 15:39:39 +05:30
<component :is="imageViewComponent" v-bind="$props">
2021-02-22 17:27:13 +05:30
<template #image-overlay="{ renderedWidth, renderedHeight }">
<slot
:rendered-width="renderedWidth"
:rendered-height="renderedHeight"
name="image-overlay"
></slot>
</template>
2018-12-13 13:39:08 +05:30
</component>
2018-11-08 19:23:39 +05:30
</div>
<div class="view-modes">
<ul class="view-modes-menu">
<li
:class="{
2019-02-15 15:39:39 +05:30
active: mode === $options.imageViewMode.twoup,
2018-11-08 19:23:39 +05:30
}"
2019-03-02 22:35:43 +05:30
@click="changeMode($options.imageViewMode.twoup)"
2019-02-15 15:39:39 +05:30
>
2018-11-08 19:23:39 +05:30
{{ s__('ImageDiffViewer|2-up') }}
</li>
<li
:class="{
2019-02-15 15:39:39 +05:30
active: mode === $options.imageViewMode.swipe,
2018-11-08 19:23:39 +05:30
}"
2019-03-02 22:35:43 +05:30
@click="changeMode($options.imageViewMode.swipe)"
2019-02-15 15:39:39 +05:30
>
2018-11-08 19:23:39 +05:30
{{ s__('ImageDiffViewer|Swipe') }}
</li>
<li
:class="{
2019-02-15 15:39:39 +05:30
active: mode === $options.imageViewMode.onion,
2018-11-08 19:23:39 +05:30
}"
2019-03-02 22:35:43 +05:30
@click="changeMode($options.imageViewMode.onion)"
2019-02-15 15:39:39 +05:30
>
2018-11-08 19:23:39 +05:30
{{ s__('ImageDiffViewer|Onion skin') }}
</li>
</ul>
</div>
</div>
2019-02-15 15:39:39 +05:30
<div v-else class="diff-viewer">
2018-12-13 13:39:08 +05:30
<div class="image">
<image-viewer
:path="imagePath"
2020-04-08 14:13:33 +05:30
:file-size="isNew ? newSize : oldSize"
2019-02-15 15:39:39 +05:30
:inner-css-classes="[
'frame',
{
added: isNew,
deleted: diffMode === $options.diffModes.deleted,
},
]"
2018-12-13 13:39:08 +05:30
>
2021-02-22 17:27:13 +05:30
<template v-if="isNew || isRenamed" #image-overlay="{ renderedWidth, renderedHeight }">
<slot
:rendered-width="renderedWidth"
:rendered-height="renderedHeight"
name="image-overlay"
></slot>
</template>
2018-12-13 13:39:08 +05:30
</image-viewer>
</div>
2018-11-08 19:23:39 +05:30
</div>
</div>
</template>