2 import * as Dates from "../services/dates";
4 const dropzone = require('./components/dropzone');
7 let previousClickTime = 0;
8 let previousClickImage = 0;
9 let dataLoaded = false;
13 let preSearchImages = [];
14 let preSearchHasMore = false;
23 dependantPages: false,
30 imageUpdateSuccess: false,
31 imageDeleteSuccess: false,
37 show(providedCallback, imageType = null) {
38 callback = providedCallback;
40 this.$el.children[0].components.overlay.show();
42 // Get initial images if they have not yet been loaded in.
43 if (dataLoaded && imageType === this.imageType) return;
45 this.imageType = imageType;
53 if (this.$refs.dropzone) {
54 this.$refs.dropzone.onClose();
57 this.selectedImage = false;
58 this.$el.children[0].components.overlay.hide();
62 let url = baseUrl + page;
64 if (this.uploadedTo !== false) query.page_id = this.uploadedTo;
65 if (this.searching) query.term = this.searchTerm;
67 this.$http.get(url, {params: query}).then(response => {
68 this.images = this.images.concat(response.data.images);
69 this.hasMore = response.data.hasMore;
84 this.deleteConfirm = false;
86 baseUrl = window.baseUrl(`/images/${this.imageType}/${this.view}/`);
90 if (this.searchTerm === '') return this.cancelSearch();
92 // Cache current settings for later
93 if (!this.searching) {
94 preSearchImages = this.images;
95 preSearchHasMore = this.hasMore;
98 this.searching = true;
100 this.hasMore = false;
102 baseUrl = window.baseUrl(`/images/${this.imageType}/search/`);
107 if (!this.searching) return;
108 this.searching = false;
109 this.searchTerm = '';
110 this.images = preSearchImages;
111 this.hasMore = preSearchHasMore;
115 let dblClickTime = 300;
116 let currentTime = Date.now();
117 let timeDiff = currentTime - previousClickTime;
118 let isDblClick = timeDiff < dblClickTime && image.id === previousClickImage;
121 this.callbackAndHide(image);
123 this.selectedImage = image;
124 this.deleteConfirm = false;
125 this.dependantPages = false;
128 previousClickTime = currentTime;
129 previousClickImage = image.id;
132 callbackAndHide(imageResult) {
133 if (callback) callback(imageResult);
138 let url = window.baseUrl(`/images/update/${this.selectedImage.id}`);
139 this.$http.put(url, this.selectedImage).then(response => {
140 this.$events.emit('success', trans('components.image_update_success'));
142 if (error.response.status === 422) {
143 let errors = error.response.data;
145 Object.keys(errors).forEach((key) => {
146 message += errors[key].join('\n');
148 this.$events.emit('error', message);
155 if (!this.deleteConfirm) {
156 let url = window.baseUrl(`/images/usage/${this.selectedImage.id}`);
157 this.$http.get(url).then(resp => {
158 this.dependantPages = resp.data;
159 }).catch(console.error).then(() => {
160 this.deleteConfirm = true;
165 this.$http.delete(`/images/${this.selectedImage.id}`).then(resp => {
166 this.images.splice(this.images.indexOf(this.selectedImage), 1);
167 this.selectedImage = false;
168 this.$events.emit('success', trans('components.image_delete_success'));
169 this.deleteConfirm = false;
173 getDate(stringDate) {
174 return Dates.formatDateTime(new Date(stringDate));
177 uploadSuccess(event) {
178 this.images.unshift(event.data);
179 this.$events.emit('success', trans('components.image_upload_success'));
185 return window.baseUrl(`/images/${this.imageType}/upload`);
190 window.ImageManager = this;
191 this.imageType = this.$el.getAttribute('image-type');
192 this.uploadedTo = this.$el.getAttribute('uploaded-to');
193 baseUrl = window.baseUrl('/images/' + this.imageType + '/all/')
201 components: {dropzone},