rails_admin_image_manager 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +125 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/config/rails_admin_image_manager_manifest.js +2 -0
  6. data/app/assets/fonts/FontAwesome.otf +0 -0
  7. data/app/assets/fonts/Simple-Line-Icons.eot +0 -0
  8. data/app/assets/fonts/Simple-Line-Icons.svg +1369 -0
  9. data/app/assets/fonts/Simple-Line-Icons.ttf +0 -0
  10. data/app/assets/fonts/Simple-Line-Icons.woff +0 -0
  11. data/app/assets/fonts/fontawesome-webfont.eot +0 -0
  12. data/app/assets/fonts/fontawesome-webfont.svg +2671 -0
  13. data/app/assets/fonts/fontawesome-webfont.ttf +0 -0
  14. data/app/assets/fonts/fontawesome-webfont.woff +0 -0
  15. data/app/assets/fonts/fontawesome-webfont.woff2 +0 -0
  16. data/app/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  17. data/app/assets/fonts/glyphicons-halflings-regular.svg +288 -0
  18. data/app/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  19. data/app/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  20. data/app/assets/fonts/glyphicons-halflings-regular.woff2 +0 -0
  21. data/app/assets/images/rails_admin_image_manager/image.png +0 -0
  22. data/app/assets/javascripts/rails_admin_image_manager/app-compiled.js.erb +34896 -0
  23. data/app/assets/javascripts/rails_admin_image_manager/app-vue.js +51 -0
  24. data/app/assets/javascripts/rails_admin_image_manager/application.js +17 -0
  25. data/app/assets/javascripts/rails_admin_image_manager/base.js.erb +62 -0
  26. data/app/assets/javascripts/rails_admin_image_manager/ckeditor_plugin.js.erb +58 -0
  27. data/app/assets/javascripts/rails_admin_image_manager/components/confirmationOverlay.vue +69 -0
  28. data/app/assets/javascripts/rails_admin_image_manager/components/imageInsertButton.vue +41 -0
  29. data/app/assets/javascripts/rails_admin_image_manager/components/imageInsertOverlay.vue +92 -0
  30. data/app/assets/javascripts/rails_admin_image_manager/components/imageListing.vue +167 -0
  31. data/app/assets/javascripts/rails_admin_image_manager/components/imageShow.vue +112 -0
  32. data/app/assets/javascripts/rails_admin_image_manager/components/imageTagSelector.vue +94 -0
  33. data/app/assets/javascripts/rails_admin_image_manager/components/imageUpload.vue +94 -0
  34. data/app/assets/javascripts/rails_admin_image_manager/components/listingFilter.vue +32 -0
  35. data/app/assets/javascripts/rails_admin_image_manager/components/notificationOverlay.vue +47 -0
  36. data/app/assets/javascripts/rails_admin_image_manager/components/progressOverlay.vue +37 -0
  37. data/app/assets/javascripts/rails_admin_image_manager/components/searchAutocomplete.vue +140 -0
  38. data/app/assets/javascripts/rails_admin_image_manager/editor/image_manager_picker.js.erb +41 -0
  39. data/app/assets/javascripts/rails_admin_image_manager/filters/index.js +7 -0
  40. data/app/assets/javascripts/rails_admin_image_manager/libs/helpers.js +13 -0
  41. data/app/assets/javascripts/rails_admin_image_manager/libs/lazyload.js +63 -0
  42. data/app/assets/javascripts/rails_admin_image_manager/router/index.js +55 -0
  43. data/app/assets/javascripts/rails_admin_image_manager/stores/ckeditor.js +25 -0
  44. data/app/assets/javascripts/rails_admin_image_manager/stores/index.js +16 -0
  45. data/app/assets/javascripts/rails_admin_image_manager/stores/medias.js +342 -0
  46. data/app/assets/javascripts/rails_admin_image_manager/stores/overlay.js +57 -0
  47. data/app/assets/javascripts/rails_admin_image_manager/stores/railsAdmin.js +28 -0
  48. data/app/assets/javascripts/rails_admin_image_manager/vendors/fuse.min.js +9 -0
  49. data/app/assets/javascripts/rails_admin_image_manager/vendors/oneui.min.js +8 -0
  50. data/app/assets/javascripts/rails_admin_image_manager/vendors/underscore.min.js +6 -0
  51. data/app/assets/stylesheets/rails_admin_image_manager/_font.scss +2845 -0
  52. data/app/assets/stylesheets/rails_admin_image_manager/application.css +16 -0
  53. data/app/assets/stylesheets/rails_admin_image_manager/global.css.erb +3723 -0
  54. data/app/assets/stylesheets/rails_admin_image_manager/global.sass +1 -0
  55. data/app/assets/stylesheets/rails_admin_image_manager/vendors/bootstrap.min.css +5 -0
  56. data/app/assets/stylesheets/rails_admin_image_manager/vendors/oneui.css +8865 -0
  57. data/app/controllers/rails_admin_image_manager/application_controller.rb +41 -0
  58. data/app/controllers/rails_admin_image_manager/home_controller.rb +8 -0
  59. data/app/controllers/rails_admin_image_manager/images_controller.rb +117 -0
  60. data/app/helpers/rails_admin_image_manager/application_helper.rb +4 -0
  61. data/app/jobs/rails_admin_image_manager/application_job.rb +4 -0
  62. data/app/models/rails_admin_image_manager/application_record.rb +5 -0
  63. data/app/models/rails_admin_image_manager/file.rb +78 -0
  64. data/app/models/rails_admin_image_manager/tag.rb +41 -0
  65. data/app/views/layouts/rails_admin_image_manager/application.html.erb +26 -0
  66. data/app/views/rails_admin/main/_form_image_manager_picker.html.erb +45 -0
  67. data/app/views/rails_admin_image_manager/images/index.html.erb +2 -0
  68. data/config/initializers/rails_admin/image_manager_file.rb +87 -0
  69. data/config/initializers/rails_admin/image_manager_tag.rb +22 -0
  70. data/config/locales/rails_admin_image_manager.en.yml +33 -0
  71. data/config/locales/rails_admin_image_manager.fr.yml +33 -0
  72. data/config/routes.rb +12 -0
  73. data/db/migrate/20170626000000_create_image_manager.rb +37 -0
  74. data/lib/dynamic_paperclip_patch.rb +92 -0
  75. data/lib/generators/rails_admin_image_manager/install/install_generator.rb +22 -0
  76. data/lib/paperclip_patch.rb +22 -0
  77. data/lib/rails_admin_image_manager.rb +46 -0
  78. data/lib/rails_admin_image_manager/engine.rb +36 -0
  79. data/lib/rails_admin_image_manager/has_managed_file.rb +47 -0
  80. data/lib/rails_admin_image_manager/rails_admin/config/fields/types/image_manager_picker.rb +49 -0
  81. data/lib/rails_admin_image_manager/version.rb +3 -0
  82. data/lib/tasks/rails_admin_image_manager_tasks.rake +4 -0
  83. metadata +253 -0
@@ -0,0 +1,41 @@
1
+ <% self.class.include RailsAdminImageManager::Engine.routes.url_helpers %>
2
+
3
+ // Direct asset picker
4
+
5
+ var rails_admin_image_manager = rails_admin_image_manager || {};
6
+ rails_admin_image_manager.AssetPicker = function(){
7
+
8
+ };
9
+
10
+ rails_admin_image_manager.AssetPicker.prototype = {
11
+
12
+ showFinder: function(dom_id, options, file_id){
13
+ // open a popup
14
+ var params = {};
15
+ params.CKEditor = 'picker'; // this is not CKEditor
16
+
17
+ if (file_id > 0) {
18
+ params.selectImage = file_id;
19
+ }
20
+
21
+ var url = addQueryString('<%= image_manager_index_path %>', params);
22
+ window.open(url, 'filebrowser', "resizable=yes,scrollbars=yes,width=1024,height=700")
23
+ },
24
+
25
+ setAsset: function(dom_id, asset, id, type){
26
+ var split_field_name = $(dom_id).attr('id').split('_')
27
+ if (split_field_name[split_field_name.length - 1] == "id") {
28
+ $(dom_id).val(id);
29
+ } else {
30
+ $(dom_id).val(asset);
31
+ }
32
+
33
+ if (type=='image') {
34
+ $(dom_id).siblings('img.rich-image-preview').first().attr({src: asset});
35
+ }
36
+ }
37
+
38
+ };
39
+
40
+ // RailsAdminImageManager Asset input
41
+ var assetPicker = new rails_admin_image_manager.AssetPicker();
@@ -0,0 +1,7 @@
1
+ import Vue from 'vue'
2
+ import moment from 'moment'
3
+
4
+ moment.locale('fr');
5
+ Vue.filter('formatDate', (date) => {
6
+ return moment(date).format('D MMMM YYYY')
7
+ })
@@ -0,0 +1,13 @@
1
+ import moment from 'moment'
2
+
3
+ export function encodeImageFileAsURL(element) {
4
+ return new Promise((resolve, reject) => {
5
+ var file = element.files[0];
6
+ var reader = new FileReader();
7
+ reader.fileName = file.name
8
+ reader.onloadend = function() {
9
+ resolve({src: reader.result, name: reader.fileName})
10
+ }
11
+ reader.readAsDataURL(file);
12
+ })
13
+ }
@@ -0,0 +1,63 @@
1
+
2
+ /**
3
+ *
4
+ * @param {Func} cb
5
+ * @param {Object} options
6
+ */
7
+ export default function Lazyload(cb, threshold = 120 ) {
8
+ this.lastScroll = 0
9
+ this.cb = cb
10
+ this.threshold = threshold
11
+
12
+ this._boundHandleScroll = this.handleScroll.bind(this)
13
+ }
14
+
15
+ /**
16
+ * Add event listener
17
+ */
18
+ Lazyload.prototype.start = function() {
19
+ // Keep initial scroll position
20
+ this.lastScroll = getScrollTop()
21
+ window.addEventListener('scroll', this._boundHandleScroll)
22
+ }
23
+
24
+ /**
25
+ * Remove event listener
26
+ */
27
+ Lazyload.prototype.stop = function() {
28
+ window.removeEventListener('scroll', this._boundHandleScroll)
29
+ }
30
+
31
+ /**
32
+ * Handle scroll
33
+ */
34
+ Lazyload.prototype.handleScroll = function(event) {
35
+
36
+ if (!this.ticking) {
37
+
38
+ window.requestAnimationFrame(() => {
39
+
40
+ // Get current scroll position
41
+ const currentScroll = getScrollTop()
42
+
43
+ // If user has scrolled down and more than threshold
44
+ if (currentScroll - this.lastScroll >= this.threshold) {
45
+
46
+ // Execute callback
47
+ this.cb.call()
48
+
49
+ // Keep new milestone
50
+ this.lastScroll = currentScroll
51
+ }
52
+
53
+ this.ticking = false
54
+
55
+ })
56
+ }
57
+
58
+ this.ticking = true
59
+ }
60
+
61
+ function getScrollTop() {
62
+ return window.pageYOffset || document.documentElement.scrollTop
63
+ }
@@ -0,0 +1,55 @@
1
+ import Vue from 'vue'
2
+ import Router from 'vue-router'
3
+
4
+ import imageListing from '../components/imageListing.vue'
5
+ import imageShow from '../components/imageShow.vue'
6
+
7
+ import store from '../stores'
8
+
9
+ Vue.use(Router)
10
+
11
+ let router = new Router({
12
+ routes: [
13
+ {
14
+ path: '/',
15
+ name: 'root',
16
+ component: imageListing,
17
+ beforeEnter: (to, from, next) => {
18
+ store.dispatch('mediasStore/clearImgListing')
19
+ next()
20
+ }
21
+ },
22
+ {
23
+ path: '/show/:id',
24
+ name: 'showImage',
25
+ component: imageShow,
26
+ beforeEnter: (to, from, next) => {
27
+ store.dispatch('overlayStore/showProgressOverlay', true)
28
+ store.dispatch('mediasStore/fetchSingleImage', to.params.id)
29
+ .then(() => {
30
+ store.dispatch('overlayStore/showProgressOverlay', false)
31
+ next()
32
+ })
33
+ .catch((e) => { store.dispatch('overlayStore/showProgressOverlay', false); })
34
+ }
35
+ },
36
+ {
37
+ path: '/new/',
38
+ name: 'createImage',
39
+ component: imageShow,
40
+ beforeEnter: (to, from, next) => {
41
+ store.dispatch('overlayStore/showProgressOverlay', true)
42
+ store.dispatch('mediasStore/clearCurrentImg')
43
+ store.dispatch('mediasStore/checkAddMediaPermission').then(()=> {
44
+ store.dispatch('overlayStore/showProgressOverlay', false)
45
+ next()
46
+ }).catch(() => {
47
+ store.dispatch('overlayStore/showProgressOverlay', false)
48
+ store.dispatch('overlayStore/pushNotification', {error: true, msg: `Vous n'avez pas les permissions d'ajouter un media`}, {root:true})
49
+ })
50
+ }
51
+ }
52
+ ]
53
+ })
54
+
55
+ export default router
@@ -0,0 +1,25 @@
1
+ const ckEditor = {
2
+ namespaced: true,
3
+ state: {
4
+ ckId: "",
5
+ ckFun: "",
6
+ },
7
+ mutations: {
8
+ SET_CK_ID(state, value) {
9
+ state.ckId = value
10
+ },
11
+ SET_CK_FUN(state, value) {
12
+ state.ckFun = value
13
+ }
14
+ },
15
+ actions: {
16
+ setCkFun({commit}, value) {
17
+ commit('SET_CK_FUN', value)
18
+ },
19
+ setCkId({commit}, value) {
20
+ commit('SET_CK_ID', value)
21
+ }
22
+ }
23
+ }
24
+
25
+ export default ckEditor
@@ -0,0 +1,16 @@
1
+ import mediasStore from './medias'
2
+ import overlayStore from './overlay'
3
+ import ckEditorStore from './ckeditor'
4
+ import railsAdmin from './railsAdmin'
5
+ import Vue from 'vue'
6
+ import Vuex from 'vuex'
7
+
8
+ Vue.use(Vuex)
9
+ export default new Vuex.Store({
10
+ modules: {
11
+ mediasStore: mediasStore,
12
+ overlayStore: overlayStore,
13
+ ckEditorStore: ckEditorStore,
14
+ railsAdmin: railsAdmin
15
+ }
16
+ })
@@ -0,0 +1,342 @@
1
+ import axios from 'axios';
2
+ import router from '../router';
3
+
4
+ const mediasStore = {
5
+ namespaced: true,
6
+ state: {
7
+ currentImgId: "",
8
+ currentImgTitle: "",
9
+ currentImgCopyright: "",
10
+ currentImgDescription: "",
11
+ currentImgSrc: "",
12
+ currentImgName: "",
13
+ currentImgTags: [],
14
+ imageListItems: [],
15
+ readOnly: false,
16
+ maxImageListItems: -1,
17
+ activeFilters: {
18
+ tags: [],
19
+ search: '',
20
+ page: 1,
21
+ date: '',
22
+ title: ''
23
+ },
24
+ tags: [],
25
+ errors: {}
26
+ },
27
+ mutations: {
28
+ UPDATE_READ_ONLY (state, readOnly) {
29
+ state.readOnly = readOnly
30
+ },
31
+ UPDATE_CURRENT_IMG_ID (state, id) {
32
+ state.currentImgId = id
33
+ },
34
+ UPDATE_CURRENT_IMG_TITLE (state, title) {
35
+ state.currentImgTitle = title
36
+ },
37
+ UPDATE_CURRENT_IMG_COPYRIGHT (state, copy) {
38
+ state.currentImgCopyright = copy
39
+ },
40
+ UPDATE_CURRENT_IMG_DESC (state, desc) {
41
+ state.currentImgDescription = desc
42
+ },
43
+ UPDATE_CURRENT_IMG_NAME (state, name) {
44
+ state.currentImgName = name
45
+ },
46
+ UPDATE_CURRENT_IMG_SRC (state, src) {
47
+ state.currentImgSrc = src
48
+ },
49
+ UPDATE_CURRENT_IMG_TAGS (state, tags) {
50
+ state.currentImgTags = []
51
+ for (var i = 0; i < tags.length; i++) {
52
+ let tag = tags[i]
53
+ state.currentImgTags.push(tag)
54
+ }
55
+ },
56
+ ADD_TO_LIST_ITEMS(state, items) {
57
+ for (var i = 0; i < items.length; i++) {
58
+ let item = items[i]
59
+ state.imageListItems.push(item)
60
+ }
61
+ },
62
+ CLEAR_IMG_LISTING(state){
63
+ state.imageListItems = []
64
+ },
65
+ SPLICE_IMG_LISTING(state, id){
66
+ state.imageListItems.forEach((image, index) => {
67
+ if (image.id == id) {
68
+ state.imageListItems.splice(index, 1)
69
+ }
70
+ })
71
+ },
72
+ ADD_CURRENT_IMG_TAG(state, string) {
73
+ state.currentImgTags.push(string)
74
+ },
75
+ REMOVE_CURRENT_IMG_TAG(state, string) {
76
+ let index = state.currentImgTags.indexOf(string)
77
+ if (index >= 0) {
78
+ state.currentImgTags.splice(index, 1)
79
+ }
80
+ },
81
+ SET_ERRORS(state, errorObject) {
82
+ state.errors = errorObject
83
+ },
84
+ SET_MAX_IMAGE_LIST_ITEMS(state, value) {
85
+ state.maxImageListItems = value
86
+ },
87
+ SET_TAGS_LIST(state, tags) {
88
+ state.tags = []
89
+ for (var i = 0; i < tags.length; i++) {
90
+ let tag = tags[i]
91
+ state.tags.push(tag)
92
+ }
93
+ },
94
+ // tag is an id
95
+ REMOVE_FROM_TAG_FILTERS(state, tag) {
96
+ state.activeFilters.tags = _.without(state.activeFilters.tags, tag)
97
+ },
98
+ // tag is an id
99
+ ADD_TO_TAG_FILTERS(state, tag) {
100
+ if (!_.contains(state.activeFilters.tags, tag)) {
101
+ state.activeFilters.tags.push(tag)
102
+ }
103
+ },
104
+ SET_PAGE(state, page) {
105
+ state.activeFilters.page = page
106
+ },
107
+ SET_QUERY(state, query){
108
+ state.activeFilters.search = query
109
+ },
110
+ SET_FILTER(state, opts){
111
+ state.activeFilters.date = ''
112
+ state.activeFilters.title = ''
113
+ state.activeFilters[opts[1]] = opts[0]
114
+ }
115
+ },
116
+ getters: {
117
+ imageObject: (state) => {
118
+ return {
119
+ image: {
120
+ id: state.currentImgId,
121
+ name: state.currentImgTitle,
122
+ image_file_name: state.currentImgName,
123
+ copyright: state.currentImgCopyright,
124
+ description: state.currentImgDescription,
125
+ src: state.currentImgSrc,
126
+ tags: state.currentImgTags
127
+ }
128
+ }
129
+ }
130
+ },
131
+ actions: {
132
+ useImage ({ commit, state, dispatch, rootState}, data) {
133
+ dispatch('overlayStore/showProgressOverlay', true, {root:true})
134
+ // Generating new dynamic image size before sending it back to CKEDITOR
135
+ axios.get(`/images/${state.currentImgId}?width=${data[0]}&height=${data[1]}`).then((response) => {
136
+ dispatch('overlayStore/showProgressOverlay', false, {root:true})
137
+ window.opener.CKEDITOR.tools.callFunction(rootState.ckEditorStore.ckId, response.data.image.src_for_wysiwyg, state.currentImgId, state.currentImgTitle.replace(/"/g, '&quot;'));
138
+ window.close()
139
+ })
140
+
141
+ },
142
+ setCurrentImg ({commit, state}, imgData) {
143
+ if (imgData.id != undefined) commit('UPDATE_CURRENT_IMG_ID', imgData.id)
144
+ if (imgData.name != undefined) commit('UPDATE_CURRENT_IMG_TITLE', imgData.name)
145
+ if (imgData.copyright != undefined) commit('UPDATE_CURRENT_IMG_COPYRIGHT', imgData.copyright)
146
+ if (imgData.description != undefined) commit('UPDATE_CURRENT_IMG_DESC', imgData.description)
147
+ if (imgData.src != undefined) commit('UPDATE_CURRENT_IMG_SRC', imgData.src)
148
+ if (imgData.image_file_name != undefined) commit('UPDATE_CURRENT_IMG_NAME', imgData.image_file_name)
149
+ if (imgData.tags_list != undefined) commit('UPDATE_CURRENT_IMG_TAGS', imgData.tags_list)
150
+ if (imgData.errors != undefined) commit('SET_ERRORS', imgData.errors)
151
+ },
152
+ saveCurrentImg ({dispatch, commit, state, getters}) {
153
+ // Loading bar
154
+ dispatch('overlayStore/showProgressOverlay', true, {root:true})
155
+
156
+ if (state.currentImgId != '') {
157
+ return dispatch('updateImg')
158
+ } else {
159
+ return dispatch('createImg')
160
+ }
161
+ },
162
+ updateImg ({dispatch, commit, state, getters}) {
163
+ return new Promise((resolve, reject) => {
164
+ axios.put('/images', getters.imageObject).then((response)=> {
165
+
166
+ // Notificating
167
+ dispatch('overlayStore/pushNotification', {success: true, msg: 'Image mise à jour avec succès'}, {root:true})
168
+
169
+ // Clearing errors object
170
+ commit('SET_ERRORS', {})
171
+
172
+ // hiding loading bar
173
+ dispatch('overlayStore/showProgressOverlay', false, {root:true})
174
+ resolve(response)
175
+ }).catch((error) => {
176
+ // hiding loading bar
177
+ dispatch('overlayStore/showProgressOverlay', false, {root:true})
178
+
179
+ // Error notification
180
+ dispatch('overlayStore/pushNotification', {error: true, msg: 'Erreur lors de la mise à jour'}, {root:true})
181
+
182
+ commit('SET_ERRORS', error.response.data)
183
+ reject()
184
+ })
185
+ })
186
+ },
187
+ createImg ({dispatch, commit, state, getters}) {
188
+ return new Promise((resolve, reject) => {
189
+ axios.post('/images',getters.imageObject).then((response)=> {
190
+ // Notificating
191
+ dispatch('overlayStore/pushNotification', {success: true, msg: 'Image créé avec succès'}, {root:true})
192
+
193
+ // Clearing errors object
194
+ commit('SET_ERRORS', {})
195
+
196
+ // Redirect
197
+ dispatch('setCurrentImg', response.data)
198
+ router.push({ name: 'root'})
199
+ resolve(response)
200
+ }).catch((error) => {
201
+ // hiding loading bar
202
+ dispatch('overlayStore/showProgressOverlay', false, {root:true})
203
+
204
+ dispatch('overlayStore/pushNotification', {error: true, msg: 'Erreur lors de la création'}, {root:true})
205
+ commit('SET_ERRORS', error.response.data)
206
+ reject()
207
+ })
208
+ })
209
+ },
210
+ deleteImg ({ commit }, id) {
211
+ axios.delete({params: {id: id}})
212
+ },
213
+
214
+ fetchImage({commit, dispatch, state}) {
215
+ return new Promise((resolve, reject) => {
216
+
217
+ // Showing progress bar
218
+ dispatch('overlayStore/showProgressOverlay', true, {root:true})
219
+
220
+ // GET WITH PARAMS
221
+ axios.get('images.json', {params: state.activeFilters})
222
+ // SUCCESS
223
+ .then((response) => {
224
+ if(state.maxImageListItems == -1) commit('SET_MAX_IMAGE_LIST_ITEMS', response.data.total_count)
225
+ // Calling mutation
226
+ commit('ADD_TO_LIST_ITEMS', response.data.items)
227
+ commit('UPDATE_READ_ONLY', response.data.readonly)
228
+
229
+ // Hiding progess bar
230
+ dispatch('overlayStore/showProgressOverlay', false, {root:true})
231
+ resolve()
232
+ })
233
+ // ERROR
234
+ .catch((error) => {
235
+
236
+ // hiding loading bar
237
+ dispatch('overlayStore/showProgressOverlay', false, {root:true})
238
+
239
+ // Notificating
240
+ dispatch('overlayStore/pushNotification', {success: true, msg: 'Problème lors du fetch'}, {root:true})
241
+ reject()
242
+ })
243
+ })
244
+ },
245
+ fetchSingleImage({ dispatch, rootDispatch, commit}, id) {
246
+ dispatch('overlayStore/showProgressOverlay', true, {root:true})
247
+ return new Promise((resolve, reject) => {
248
+ axios.get(`/images/${id}`)
249
+ .then((response) => {
250
+ commit('UPDATE_READ_ONLY', response.data.readonly)
251
+ dispatch('setCurrentImg', response.data.image)
252
+ dispatch('overlayStore/showProgressOverlay', false, {root:true})
253
+ resolve()
254
+ })
255
+ .catch(()=> {
256
+ dispatch('overlayStore/showProgressOverlay', false, {root:true})
257
+ reject()
258
+ })
259
+ })
260
+ },
261
+ clearCurrentImg({dispatch}){
262
+ let clearObject = {
263
+ id:'',
264
+ name:'',
265
+ copyright:'',
266
+ description:'',
267
+ src:'',
268
+ tags_list: [],
269
+ errors: {}
270
+ }
271
+ dispatch('setCurrentImg', clearObject)
272
+ },
273
+ fetchTags({commit, dispatch}){
274
+ return new Promise((resolve, reject) => {
275
+ axios.get(`/tags.json`).then((response)=>{
276
+ commit('SET_TAGS_LIST', response.data)
277
+ resolve()
278
+ })
279
+ .catch((error) => {
280
+ dispatch('overlayStore/pushNotification', {error: true, msg: 'Problème avec les tags'}, {root:true})
281
+ reject()
282
+ })
283
+
284
+ })
285
+ },
286
+ deleteImg({commit, dispatch}, idImage) {
287
+ dispatch('overlayStore/showProgressOverlay', true, {root:true})
288
+ return new Promise(function(resolve, reject) {
289
+ axios.delete(`/images`, {params: {id: idImage}})
290
+ .then((response)=>{
291
+ dispatch('overlayStore/showProgressOverlay', false, {root:true})
292
+ dispatch('overlayStore/pushNotification', {success: true, msg: 'Image supprimé avec succès'}, {root:true})
293
+ commit('SPLICE_IMG_LISTING', idImage)
294
+ })
295
+ .catch((error) => {
296
+ dispatch('overlayStore/showProgressOverlay', false, {root:true})
297
+ dispatch('overlayStore/pushNotification', {error: true, msg: 'Problème lors de la supression de l\'image'}, {root:true})
298
+ })
299
+ })
300
+ },
301
+ checkAddMediaPermission({commit}) {
302
+ return new Promise(function(resolve, reject) {
303
+ axios.get(`/images/new`)
304
+ .then(() => { resolve() })
305
+ .catch(() => { reject() })
306
+ })
307
+ },
308
+ setSearchPage({commit}, page) {
309
+ commit('SET_PAGE', page)
310
+ },
311
+ setSearchQuery({commit}, query) {
312
+ commit('SET_QUERY', query)
313
+ },
314
+ toggleFilter({commit, state}, type) {
315
+ let term = (state.activeFilters[type] == 'ASC') ? 'DESC' : 'ASC'
316
+ commit('SET_FILTER', [term, type])
317
+ },
318
+ clearImgListing({ commit }){
319
+ commit('CLEAR_IMG_LISTING')
320
+ },
321
+ updateSrc ({commit, state}, src) {
322
+ commit('UPDATE_CURRENT_IMG_SRC', src)
323
+ },
324
+ updateImageName ({commit, state}, name) {
325
+ commit('UPDATE_CURRENT_IMG_NAME', name)
326
+ },
327
+ addToTagFilter({commit, state}, id) {
328
+ commit('ADD_TO_TAG_FILTERS', id)
329
+ },
330
+ removeFromTagFilter({commit, state}, id) {
331
+ commit('REMOVE_FROM_TAG_FILTERS', id)
332
+ },
333
+ addTag ({ commit }, string) {
334
+ commit('ADD_CURRENT_IMG_TAG', string)
335
+ },
336
+ removeTag ({ commit }, string) {
337
+ commit('REMOVE_CURRENT_IMG_TAG', string)
338
+ }
339
+ }
340
+ }
341
+
342
+ export default mediasStore