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,
33 show(providedCallback) {
34 callback = providedCallback;
36 this.$el.children[0].components.overlay.show();
38 // Get initial images if they have not yet been loaded in.
39 if (dataLoaded) return;
46 this.$el.children[0].components.overlay.hide();
50 let url = baseUrl + page;
52 if (this.uploadedTo !== false) query.page_id = this.uploadedTo;
53 if (this.searching) query.term = this.searchTerm;
55 this.$http.get(url, {params: query}).then(response => {
56 this.images = this.images.concat(response.data.images);
57 this.hasMore = response.data.hasMore;
68 baseUrl = window.baseUrl(`/images/${this.imageType}/${viewName}/`);
73 if (this.searchTerm === '') return this.cancelSearch();
75 // Cache current settings for later
76 if (!this.searching) {
77 preSearchImages = this.images;
78 preSearchHasMore = this.hasMore;
81 this.searching = true;
85 baseUrl = window.baseUrl(`/images/${this.imageType}/search/`);
90 this.searching = false;
92 this.images = preSearchImages;
93 this.hasMore = preSearchHasMore;
97 let dblClickTime = 300;
98 let currentTime = Date.now();
99 let timeDiff = currentTime - previousClickTime;
100 let isDblClick = timeDiff < dblClickTime && image.id === previousClickImage;
103 this.callbackAndHide(image);
105 this.selectedImage = image;
106 this.dependantPages = false;
109 previousClickTime = currentTime;
110 previousClickImage = image.id;
113 callbackAndHide(imageResult) {
114 if (callback) callback(imageResult);
119 let url = window.baseUrl(`/images/update/${this.selectedImage.id}`);
120 this.$http.put(url, this.selectedImage).then(response => {
121 this.$events.emit('success', trans('components.image_update_success'));
123 if (error.response.status === 422) {
124 let errors = error.response.data;
126 Object.keys(errors).forEach((key) => {
127 message += errors[key].join('\n');
129 this.$events.emit('error', message);
130 } else if (error.response.status === 403) {
131 this.$events.emit('error', error.response.data.error);
137 let force = this.dependantPages !== false;
138 let url = window.baseUrl('/images/' + this.selectedImage.id);
139 if (force) url += '?force=true';
140 this.$http.delete(url).then(response => {
141 this.images.splice(this.images.indexOf(this.selectedImage), 1);
142 this.selectedImage = false;
143 this.$events.emit('success', trans('components.image_delete_success'));
145 if (error.response.status === 400) {
146 this.dependantPages = error.response.data;
147 } else if (error.response.status === 403) {
148 this.$events.emit('error', error.response.data.error);
153 getDate(stringDate) {
154 return new Date(stringDate);
157 uploadSuccess(event) {
158 this.images.unshift(event.data);
159 this.$events.emit('success', trans('components.image_upload_success'));
165 return window.baseUrl(`/images/${this.imageType}/upload`);
170 window.ImageManager = this;
171 this.imageType = this.$el.getAttribute('image-type');
172 this.uploadedTo = this.$el.getAttribute('uploaded-to');
173 baseUrl = window.baseUrl('/images/' + this.imageType + '/all/')
181 components: {dropzone},