1 const dropzone = require('./components/dropzone');
4 let previousClickTime = 0;
5 let previousClickImage = 0;
6 let dataLoaded = false;
10 let preSearchImages = [];
11 let preSearchHasMore = false;
20 dependantPages: false,
27 imageUpdateSuccess: false,
28 imageDeleteSuccess: false,
34 show(providedCallback, imageType = null) {
35 callback = providedCallback;
37 this.$el.children[0].components.overlay.show();
39 // Get initial images if they have not yet been loaded in.
40 if (dataLoaded && imageType === this.imageType) return;
42 this.imageType = imageType;
51 this.selectedImage = false;
52 this.$refs.dropzone.onClose();
53 this.$el.children[0].components.overlay.hide();
57 let url = baseUrl + page;
59 if (this.uploadedTo !== false) query.page_id = this.uploadedTo;
60 if (this.searching) query.term = this.searchTerm;
62 this.$http.get(url, {params: query}).then(response => {
63 this.images = this.images.concat(response.data.images);
64 this.hasMore = response.data.hasMore;
79 this.deleteConfirm = false;
81 baseUrl = window.baseUrl(`/images/${this.imageType}/${this.view}/`);
85 if (this.searchTerm === '') return this.cancelSearch();
87 // Cache current settings for later
88 if (!this.searching) {
89 preSearchImages = this.images;
90 preSearchHasMore = this.hasMore;
93 this.searching = true;
97 baseUrl = window.baseUrl(`/images/${this.imageType}/search/`);
102 this.searching = false;
103 this.searchTerm = '';
104 this.images = preSearchImages;
105 this.hasMore = preSearchHasMore;
109 let dblClickTime = 300;
110 let currentTime = Date.now();
111 let timeDiff = currentTime - previousClickTime;
112 let isDblClick = timeDiff < dblClickTime && image.id === previousClickImage;
115 this.callbackAndHide(image);
117 this.selectedImage = image;
118 this.deleteConfirm = false;
119 this.dependantPages = false;
122 previousClickTime = currentTime;
123 previousClickImage = image.id;
126 callbackAndHide(imageResult) {
127 if (callback) callback(imageResult);
132 let url = window.baseUrl(`/images/update/${this.selectedImage.id}`);
133 this.$http.put(url, this.selectedImage).then(response => {
134 this.$events.emit('success', trans('components.image_update_success'));
136 if (error.response.status === 422) {
137 let errors = error.response.data;
139 Object.keys(errors).forEach((key) => {
140 message += errors[key].join('\n');
142 this.$events.emit('error', message);
149 if (!this.deleteConfirm) {
150 let url = window.baseUrl(`/images/usage/${this.selectedImage.id}`);
151 this.$http.get(url).then(resp => {
152 this.dependantPages = resp.data;
153 }).catch(console.error).then(() => {
154 this.deleteConfirm = true;
159 this.$http.delete(`/images/${this.selectedImage.id}`).then(resp => {
160 this.images.splice(this.images.indexOf(this.selectedImage), 1);
161 this.selectedImage = false;
162 this.$events.emit('success', trans('components.image_delete_success'));
163 this.deleteConfirm = false;
167 getDate(stringDate) {
168 return new Date(stringDate);
171 uploadSuccess(event) {
172 this.images.unshift(event.data);
173 this.$events.emit('success', trans('components.image_upload_success'));
179 return window.baseUrl(`/images/${this.imageType}/upload`);
184 window.ImageManager = this;
185 this.imageType = this.$el.getAttribute('image-type');
186 this.uploadedTo = this.$el.getAttribute('uploaded-to');
187 baseUrl = window.baseUrl('/images/' + this.imageType + '/all/')
195 components: {dropzone},