1 import * as Dates from "../services/dates";
2 import dropzone from "./components/dropzone";
5 let previousClickTime = 0;
6 let previousClickImage = 0;
7 let dataLoaded = false;
11 let preSearchImages = [];
12 let preSearchHasMore = false;
21 dependantPages: false,
28 imageUpdateSuccess: false,
29 imageDeleteSuccess: false,
35 show(providedCallback, imageType = null) {
36 callback = providedCallback;
38 this.$el.children[0].components.overlay.show();
40 // Get initial images if they have not yet been loaded in.
41 if (dataLoaded && imageType === this.imageType) return;
43 this.imageType = imageType;
51 if (this.$refs.dropzone) {
52 this.$refs.dropzone.onClose();
55 this.selectedImage = false;
56 this.$el.children[0].components.overlay.hide();
60 let url = baseUrl + page;
62 if (this.uploadedTo !== false) query.page_id = this.uploadedTo;
63 if (this.searching) query.term = this.searchTerm;
65 this.$http.get(url, {params: query}).then(response => {
66 this.images = this.images.concat(response.data.images);
67 this.hasMore = response.data.hasMore;
82 this.deleteConfirm = false;
84 baseUrl = window.baseUrl(`/images/${this.imageType}/${this.view}/`);
88 if (this.searchTerm === '') return this.cancelSearch();
90 // Cache current settings for later
91 if (!this.searching) {
92 preSearchImages = this.images;
93 preSearchHasMore = this.hasMore;
96 this.searching = true;
100 baseUrl = window.baseUrl(`/images/${this.imageType}/search/`);
105 if (!this.searching) return;
106 this.searching = false;
107 this.searchTerm = '';
108 this.images = preSearchImages;
109 this.hasMore = preSearchHasMore;
113 let dblClickTime = 300;
114 let currentTime = Date.now();
115 let timeDiff = currentTime - previousClickTime;
116 let isDblClick = timeDiff < dblClickTime && image.id === previousClickImage;
119 this.callbackAndHide(image);
121 this.selectedImage = image;
122 this.deleteConfirm = false;
123 this.dependantPages = false;
126 previousClickTime = currentTime;
127 previousClickImage = image.id;
130 callbackAndHide(imageResult) {
131 if (callback) callback(imageResult);
136 let url = window.baseUrl(`/images/update/${this.selectedImage.id}`);
137 this.$http.put(url, this.selectedImage).then(response => {
138 this.$events.emit('success', trans('components.image_update_success'));
140 if (error.response.status === 422) {
141 let errors = error.response.data;
143 Object.keys(errors).forEach((key) => {
144 message += errors[key].join('\n');
146 this.$events.emit('error', message);
153 if (!this.deleteConfirm) {
154 let url = window.baseUrl(`/images/usage/${this.selectedImage.id}`);
155 this.$http.get(url).then(resp => {
156 this.dependantPages = resp.data;
157 }).catch(console.error).then(() => {
158 this.deleteConfirm = true;
162 let url = window.baseUrl(`/images/${this.selectedImage.id}`);
163 this.$http.delete(url).then(resp => {
164 this.images.splice(this.images.indexOf(this.selectedImage), 1);
165 this.selectedImage = false;
166 this.$events.emit('success', trans('components.image_delete_success'));
167 this.deleteConfirm = false;
171 getDate(stringDate) {
172 return Dates.formatDateTime(new Date(stringDate));
175 uploadSuccess(event) {
176 this.images.unshift(event.data);
177 this.$events.emit('success', trans('components.image_upload_success'));
183 return window.baseUrl(`/images/${this.imageType}/upload`);
188 window.ImageManager = this;
189 this.imageType = this.$el.getAttribute('image-type');
190 this.uploadedTo = this.$el.getAttribute('uploaded-to');
191 baseUrl = window.baseUrl('/images/' + this.imageType + '/all/')
199 components: {dropzone},