rails_admin_image_manager 0.1.3 → 0.1.15

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/app/assets/javascripts/rails_admin_image_manager/app-compiled.js.erb +339 -16444
  4. data/app/assets/javascripts/rails_admin_image_manager/app-vue.js +0 -2
  5. data/app/assets/javascripts/rails_admin_image_manager/ckeditor_plugin.js.erb +11 -1
  6. data/app/assets/javascripts/rails_admin_image_manager/components/imageInsertButton.vue +1 -1
  7. data/app/assets/javascripts/rails_admin_image_manager/components/imageInsertOverlay.vue +1 -3
  8. data/app/assets/javascripts/rails_admin_image_manager/components/imageListing.vue +27 -36
  9. data/app/assets/javascripts/rails_admin_image_manager/components/imageUpload.vue +2 -3
  10. data/app/assets/javascripts/rails_admin_image_manager/components/searchAutocomplete.vue +1 -5
  11. data/app/assets/javascripts/rails_admin_image_manager/libs/helpers.js +1 -4
  12. data/app/assets/javascripts/rails_admin_image_manager/router/index.js +2 -9
  13. data/app/assets/javascripts/rails_admin_image_manager/stores/medias.js +4 -37
  14. data/app/assets/javascripts/rails_admin_image_manager/stores/railsAdmin.js +1 -1
  15. data/app/assets/stylesheets/rails_admin_image_manager/_font.scss +2 -2
  16. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/FontAwesome.otf +0 -0
  17. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/Simple-Line-Icons.eot +0 -0
  18. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/Simple-Line-Icons.svg +0 -0
  19. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/Simple-Line-Icons.ttf +0 -0
  20. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/Simple-Line-Icons.woff +0 -0
  21. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/fontawesome-webfont.eot +0 -0
  22. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/fontawesome-webfont.svg +0 -0
  23. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/fontawesome-webfont.ttf +0 -0
  24. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/fontawesome-webfont.woff +0 -0
  25. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/fontawesome-webfont.woff2 +0 -0
  26. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/glyphicons-halflings-regular.eot +0 -0
  27. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/glyphicons-halflings-regular.svg +0 -0
  28. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/glyphicons-halflings-regular.ttf +0 -0
  29. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/glyphicons-halflings-regular.woff +0 -0
  30. data/app/assets/{fonts → stylesheets/rails_admin_image_manager/fonts}/glyphicons-halflings-regular.woff2 +0 -0
  31. data/app/assets/stylesheets/rails_admin_image_manager/global.css.erb +2 -2
  32. data/app/controllers/rails_admin_image_manager/application_controller.rb +0 -17
  33. data/app/controllers/rails_admin_image_manager/images_controller.rb +5 -30
  34. data/app/models/rails_admin_image_manager/file.rb +2 -4
  35. data/config/routes.rb +0 -1
  36. data/lib/dynamic_paperclip_patch.rb +0 -17
  37. data/lib/generators/rails_admin_image_manager/install/install_generator.rb +1 -1
  38. data/lib/paperclip_patch.rb +0 -6
  39. data/lib/rails_admin_image_manager/has_managed_file.rb +0 -5
  40. data/lib/rails_admin_image_manager/version.rb +1 -1
  41. metadata +24 -26
  42. data/app/assets/javascripts/rails_admin_image_manager/components/listingFilter.vue +0 -32
  43. data/app/assets/javascripts/rails_admin_image_manager/filters/index.js +0 -7
@@ -11,8 +11,6 @@ import progressOverlay from './components/progressOverlay.vue'
11
11
  import notificationOverlay from './components/notificationOverlay.vue'
12
12
  import confirmationOverlay from './components/confirmationOverlay.vue'
13
13
 
14
- import './filters'
15
-
16
14
  document.addEventListener("DOMContentLoaded", function() {
17
15
 
18
16
  let csrfElement = document.querySelectorAll('meta[name="csrf-token"]')[0]
@@ -8,7 +8,17 @@ window.addQueryString = function ( url, params ) {
8
8
  return url + ( ( url.indexOf( "?" ) != -1 ) ? "&" : "?" ) + queryString.join( "&" );
9
9
  }
10
10
 
11
- if (!CKEDITOR.plugins.get( 'imageManager')) {
11
+ // Wait till ckeditor is defined before initializing image manager plugin
12
+ var ckready = setInterval(function() {
13
+ console.log('in interval')
14
+ if (typeof CKEDITOR != 'undefined') {
15
+ console.log('ckeditor', CKEDITOR)
16
+ initImageManagerCKPlugin()
17
+ clearInterval(ckready)
18
+ }
19
+ }, 200)
20
+
21
+ function initImageManagerCKPlugin() {
12
22
  CKEDITOR.plugins.add( 'imageManager', {
13
23
  init: function( editor ) {
14
24
  var openManager = function(ele){
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <button typ="button" class="btn btn-xs btn-default" @click.prevent="insert()">Utiliser</button>
2
+ <button typ="button" class="btn btn-sm btn-default" @click.prevent="insert()">Utiliser l'image</button>
3
3
  </template>
4
4
 
5
5
  <script>
@@ -66,15 +66,13 @@ export default {
66
66
  <style media="screen">
67
67
  .image-insert-overlay {
68
68
  box-shadow: 0 0 200px rgba(0, 0, 0, 0.5);
69
- position: fixed;
69
+ position: absolute;
70
70
  top: 50%;
71
71
  left: 50%;
72
72
  transform: translate(-50%,-50%);
73
73
  width: 100%;
74
74
  max-width: 475px;
75
75
  z-index: 20;
76
- max-height: 100vh;
77
- overflow-y: auto;
78
76
  }
79
77
  .fade-enter-active, .fade-leave-active {
80
78
  transition: opacity .5s
@@ -9,7 +9,7 @@
9
9
  <div class="row">
10
10
  <div class="col-sm-6">
11
11
  <p>
12
- <router-link v-if="!readOnly" class="btn btn-primary" :to="{ name: 'createImage'}"><i class="fa fa-plus"></i> Ajouter une image</router-link>
12
+ <router-link class="btn btn-primary" :to="{ name: 'createImage'}"><i class="fa fa-plus"></i> Ajouter une image</router-link>
13
13
  <button v-if="searchedQuery || selectedFilter" @click="resetSearchAndFilters" class="btn btn-default" ><i class="fa fa-undo"></i> Annuler la recherche</button>
14
14
  </p>
15
15
 
@@ -24,49 +24,32 @@
24
24
  <div class="img-options">
25
25
  <div class="img-options-content">
26
26
  <h4 class="h6 font-w400 text-white-op push-15">{{ image.name }}</h4>
27
- <router-link v-if="!readOnly" class="btn btn-sm btn-default" :to="{ name: 'showImage', params: { id: image.id }}">Modifier</router-link>
27
+ <router-link class="btn btn-sm btn-default" :to="{ name: 'showImage', params: { id: image.id }}">Modifier</router-link>
28
28
  <image-insert-button :id="image.id"/>
29
- <a v-if="!readOnly" class="btn btn-sm btn-default" @click="deleteImage(image)" href="javascript:void(0)">Supprimer</a>
29
+ <a class="btn btn-sm btn-default" @click="deleteImage(image)" href="javascript:void(0)">Supprimer</a>
30
30
  </div>
31
31
  </div>
32
32
  </div>
33
33
  </div>
34
34
  </div>
35
- <div class="row items-push" v-if="!grid ">
35
+ <div class="row text-center items-push">
36
+ <div class="col-sm-12">
37
+ <button type="button" v-if="showMoreButton()" class="btn btn-default" @click="fetchImage">Plus d'image</button>
38
+ </div>
39
+ </div>
40
+ <div class="row items-push" v-if="!grid">
36
41
  <div class="table-responsive">
37
42
  <table class="table table-striped table-vcenter">
38
- <thead>
39
- <tr>
40
- <td width="110px">Image</td>
41
- <td><listing-filter label="Titre" type="title" ></listing-filter></td>
42
- <td width="140px"><listing-filter label="Ajouté le" type="date" ></listing-filter></td>
43
- <td width="150px" class="text-center">Actions</td>
44
- </tr>
45
- </thead>
46
43
  <tbody>
47
44
  <tr v-for="(image, key) in imageListItems">
48
45
  <td>
49
- <router-link :to="{ name: 'showImage', params: { id: image.id }}"><img width="100px" :src="image.src" alt=""></router-link>
50
- </td>
51
- <td>
52
- {{image.name}}
53
- </td>
54
- <td>{{ image.created_at | formatDate }}</td>
55
- <td class="text-right">
56
- <image-insert-button :id="image.id"/>
57
- <router-link v-if="!readOnly" class="btn btn-xs btn-default" :to="{ name: 'showImage', params: { id: image.id }}"><i class="fa fa-edit"></i></router-link>
58
- <a v-if="!readOnly" class="btn btn-xs btn-default" @click="deleteImage(image)" href="javascript:void(0)"><i class="fa fa-trash-o"></i></a>
46
+ <img width="100px" :src="image.src" alt="">
59
47
  </td>
60
48
  </tr>
61
49
  </tbody>
62
50
  </table>
63
51
  </div>
64
52
  </div>
65
- <div class="row text-center items-push">
66
- <div class="col-sm-12">
67
- <button type="button" v-if="showMoreButton()" class="btn btn-default" @click="fetchImage">Plus d'image</button>
68
- </div>
69
- </div>
70
53
 
71
54
  </div>
72
55
  </div>
@@ -78,15 +61,13 @@
78
61
  import imageInsertButton from './imageInsertButton.vue'
79
62
  import imageTagSelector from './imageTagSelector.vue'
80
63
  import searchAutocomplete from './searchAutocomplete.vue'
81
- import listingFilter from './listingFilter.vue'
82
64
  import Lazyload from '../libs/lazyload.js'
83
- import { formatDate } from '../libs/helpers.js'
84
65
  import {mapState} from 'vuex'
85
66
  export default {
86
- components: {imageInsertButton, imageTagSelector, searchAutocomplete, listingFilter},
67
+ components: {imageInsertButton, imageTagSelector, searchAutocomplete},
87
68
  data () {
88
69
  return {
89
- grid: false,
70
+ grid: true,
90
71
  lazyload: new Lazyload(()=> {
91
72
  this.fetchImage()
92
73
  }),
@@ -98,27 +79,39 @@ export default {
98
79
  }
99
80
  },
100
81
  computed: {
101
- ...mapState('mediasStore', ['imageListItems', 'maxImageListItems', 'tags', 'activeFilters', 'readOnly'])
82
+ ...mapState('mediasStore', ['imageListItems', 'maxImageListItems', 'tags', 'activeFilters'])
102
83
  },
103
84
  methods:{
104
85
  fetchImage() {
105
86
  if (!this.isFetching && (this.maxImageListItems == -1 || this.imageListItems.length < this.maxImageListItems) ) {
106
87
  this.isFetching = true
107
- this.$store.dispatch('mediasStore/setSearchPage', this.activeFilters.page + 1)
88
+ this.$store.dispatch('mediasStore/setSearchPage', this.page + 1)
108
89
  this.$store.dispatch('mediasStore/fetchImage').then(()=> {
109
90
  this.isFetching = false
91
+ this.page ++
110
92
  })
111
93
  }
112
94
  },
95
+ filter() {
96
+ console.log('filter');
97
+ },
98
+ search() {
99
+ this.page = 1
100
+ this.searchedQuery = (this.query == '') ? '' : this.query
101
+ this.$store.dispatch('mediasStore/clearImgListing')
102
+ this.$store.dispatch('mediasStore/setSearchQuery', this.query)
103
+ this.$store.dispatch('mediasStore/fetchImage')
104
+ },
113
105
  showMoreButton() {
114
106
  return (this.maxImageListItems > this.imageListItems.length && this.activeFilters.tags.length <= 0 && this.activeFilters.search == '')
115
107
  },
116
108
  resetSearchAndFilters() {
109
+ this.page = 1
117
110
  this.query = ''
118
111
  this.selectedFilter = ''
119
112
  this.searchedQuery = ''
120
113
  this.$store.dispatch('mediasStore/clearImgListing')
121
- this.$store.dispatch('mediasStore/setSearchPage', 1)
114
+ this.$store.dispatch('mediasStore/setSearchPage', this.page)
122
115
  this.$store.dispatch('mediasStore/fetchImage')
123
116
  },
124
117
  deleteImage(image){
@@ -139,8 +132,6 @@ export default {
139
132
  </script>
140
133
 
141
134
  <style media="screen" lang="sass">
142
- .table > thead td
143
- text-transform: uppercase
144
135
  .add-image-link
145
136
  margin-bottom: 15px
146
137
 
@@ -39,10 +39,9 @@ export default {
39
39
  methods: {
40
40
  encode(e) {
41
41
  encodeImageFileAsURL(e.target)
42
- .then((result) => {
42
+ .then((src) => {
43
43
  if (this.originalSrc != '') this.showOriginal = true
44
- this.$store.dispatch('mediasStore/updateSrc', result.src)
45
- this.$store.dispatch('mediasStore/updateImageName', result.name)
44
+ this.$store.dispatch('mediasStore/updateSrc', src)
46
45
  })
47
46
  },
48
47
  undo() {
@@ -32,7 +32,7 @@ export default {
32
32
  filteredTags() {
33
33
  if (this.fuseSearch) {
34
34
  return this.fuseSearch.search(this.searchFor);
35
- } else {
35
+ }else {
36
36
  return []
37
37
  }
38
38
 
@@ -47,10 +47,7 @@ export default {
47
47
  } else if (e.key == 'Enter') {
48
48
  this.$store.dispatch('mediasStore/setSearchQuery', this.query)
49
49
  this.$store.dispatch('mediasStore/clearImgListing')
50
- this.$store.dispatch('mediasStore/setSearchPage', 1)
51
50
  this.$store.dispatch('mediasStore/fetchImage')
52
- console.log('search');
53
- this.query = ""
54
51
  } else if((e.key == 'Backspace' || e.key == 'Meta') && this.query == '' && this.activeFilters.search != '') {
55
52
  this.clearSearch()
56
53
  }
@@ -73,7 +70,6 @@ export default {
73
70
  queryArray[0] = this.filteredTags[this.selectedTagIndex].name
74
71
  let newQuery = queryArray.reverse().join(' ')
75
72
  this.$store.dispatch('mediasStore/setSearchQuery', '')
76
- this.$store.dispatch('mediasStore/setSearchPage', 1)
77
73
  this.$store.dispatch('mediasStore/clearImgListing')
78
74
  this.$store.dispatch('mediasStore/addToTagFilter', this.filteredTags[this.selectedTagIndex].id)
79
75
  this.$store.dispatch('mediasStore/fetchImage')
@@ -1,12 +1,9 @@
1
- import moment from 'moment'
2
-
3
1
  export function encodeImageFileAsURL(element) {
4
2
  return new Promise((resolve, reject) => {
5
3
  var file = element.files[0];
6
4
  var reader = new FileReader();
7
- reader.fileName = file.name
8
5
  reader.onloadend = function() {
9
- resolve({src: reader.result, name: reader.fileName})
6
+ resolve(reader.result)
10
7
  }
11
8
  reader.readAsDataURL(file);
12
9
  })
@@ -30,7 +30,7 @@ let router = new Router({
30
30
  store.dispatch('overlayStore/showProgressOverlay', false)
31
31
  next()
32
32
  })
33
- .catch((e) => { store.dispatch('overlayStore/showProgressOverlay', false); })
33
+ .catch((e) => { console.log(e); store.dispatch('overlayStore/showProgressOverlay', false); })
34
34
  }
35
35
  },
36
36
  {
@@ -38,15 +38,8 @@ let router = new Router({
38
38
  name: 'createImage',
39
39
  component: imageShow,
40
40
  beforeEnter: (to, from, next) => {
41
- store.dispatch('overlayStore/showProgressOverlay', true)
42
41
  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
- })
42
+ next()
50
43
  }
51
44
  }
52
45
  ]
@@ -9,25 +9,18 @@ const mediasStore = {
9
9
  currentImgCopyright: "",
10
10
  currentImgDescription: "",
11
11
  currentImgSrc: "",
12
- currentImgName: "",
13
12
  currentImgTags: [],
14
13
  imageListItems: [],
15
- readOnly: false,
16
14
  maxImageListItems: -1,
17
15
  activeFilters: {
18
16
  tags: [],
19
17
  search: '',
20
- page: 1,
21
- date: '',
22
- title: ''
18
+ page: 1
23
19
  },
24
20
  tags: [],
25
21
  errors: {}
26
22
  },
27
23
  mutations: {
28
- UPDATE_READ_ONLY (state, readOnly) {
29
- state.readOnly = readOnly
30
- },
31
24
  UPDATE_CURRENT_IMG_ID (state, id) {
32
25
  state.currentImgId = id
33
26
  },
@@ -40,9 +33,6 @@ const mediasStore = {
40
33
  UPDATE_CURRENT_IMG_DESC (state, desc) {
41
34
  state.currentImgDescription = desc
42
35
  },
43
- UPDATE_CURRENT_IMG_NAME (state, name) {
44
- state.currentImgName = name
45
- },
46
36
  UPDATE_CURRENT_IMG_SRC (state, src) {
47
37
  state.currentImgSrc = src
48
38
  },
@@ -106,11 +96,6 @@ const mediasStore = {
106
96
  },
107
97
  SET_QUERY(state, query){
108
98
  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
99
  }
115
100
  },
116
101
  getters: {
@@ -119,7 +104,6 @@ const mediasStore = {
119
104
  image: {
120
105
  id: state.currentImgId,
121
106
  name: state.currentImgTitle,
122
- image_file_name: state.currentImgName,
123
107
  copyright: state.currentImgCopyright,
124
108
  description: state.currentImgDescription,
125
109
  src: state.currentImgSrc,
@@ -134,7 +118,7 @@ const mediasStore = {
134
118
  // Generating new dynamic image size before sending it back to CKEDITOR
135
119
  axios.get(`/images/${state.currentImgId}?width=${data[0]}&height=${data[1]}`).then((response) => {
136
120
  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;'));
121
+ window.opener.CKEDITOR.tools.callFunction(rootState.ckEditorStore.ckId, response.data.src_for_wysiwyg, state.currentImgId, state.currentImgTitle.replace(/"/g, '&quot;'));
138
122
  window.close()
139
123
  })
140
124
 
@@ -145,7 +129,6 @@ const mediasStore = {
145
129
  if (imgData.copyright != undefined) commit('UPDATE_CURRENT_IMG_COPYRIGHT', imgData.copyright)
146
130
  if (imgData.description != undefined) commit('UPDATE_CURRENT_IMG_DESC', imgData.description)
147
131
  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
132
  if (imgData.tags_list != undefined) commit('UPDATE_CURRENT_IMG_TAGS', imgData.tags_list)
150
133
  if (imgData.errors != undefined) commit('SET_ERRORS', imgData.errors)
151
134
  },
@@ -224,7 +207,6 @@ const mediasStore = {
224
207
  if(state.maxImageListItems == -1) commit('SET_MAX_IMAGE_LIST_ITEMS', response.data.total_count)
225
208
  // Calling mutation
226
209
  commit('ADD_TO_LIST_ITEMS', response.data.items)
227
- commit('UPDATE_READ_ONLY', response.data.readonly)
228
210
 
229
211
  // Hiding progess bar
230
212
  dispatch('overlayStore/showProgressOverlay', false, {root:true})
@@ -242,13 +224,12 @@ const mediasStore = {
242
224
  })
243
225
  })
244
226
  },
245
- fetchSingleImage({ dispatch, rootDispatch, commit}, id) {
227
+ fetchSingleImage({ dispatch, rootDispatch}, id) {
246
228
  dispatch('overlayStore/showProgressOverlay', true, {root:true})
247
229
  return new Promise((resolve, reject) => {
248
230
  axios.get(`/images/${id}`)
249
231
  .then((response) => {
250
- commit('UPDATE_READ_ONLY', response.data.readonly)
251
- dispatch('setCurrentImg', response.data.image)
232
+ dispatch('setCurrentImg', response.data)
252
233
  dispatch('overlayStore/showProgressOverlay', false, {root:true})
253
234
  resolve()
254
235
  })
@@ -298,32 +279,18 @@ const mediasStore = {
298
279
  })
299
280
  })
300
281
  },
301
- checkAddMediaPermission({commit}) {
302
- return new Promise(function(resolve, reject) {
303
- axios.get(`/images/new`)
304
- .then(() => { resolve() })
305
- .catch(() => { reject() })
306
- })
307
- },
308
282
  setSearchPage({commit}, page) {
309
283
  commit('SET_PAGE', page)
310
284
  },
311
285
  setSearchQuery({commit}, query) {
312
286
  commit('SET_QUERY', query)
313
287
  },
314
- toggleFilter({commit, state}, type) {
315
- let term = (state.activeFilters[type] == 'ASC') ? 'DESC' : 'ASC'
316
- commit('SET_FILTER', [term, type])
317
- },
318
288
  clearImgListing({ commit }){
319
289
  commit('CLEAR_IMG_LISTING')
320
290
  },
321
291
  updateSrc ({commit, state}, src) {
322
292
  commit('UPDATE_CURRENT_IMG_SRC', src)
323
293
  },
324
- updateImageName ({commit, state}, name) {
325
- commit('UPDATE_CURRENT_IMG_NAME', name)
326
- },
327
294
  addToTagFilter({commit, state}, id) {
328
295
  commit('ADD_TO_TAG_FILTERS', id)
329
296
  },
@@ -18,7 +18,7 @@ const railsAdmin = {
18
18
  // Generating new dynamic image size before sending it back
19
19
  axios.get(`/images/${idImage}?width=0&height=0`).then((response) => {
20
20
  dispatch('overlayStore/showProgressOverlay', false, {root:true})
21
- window.opener.insertImageManagerMedia(idImage, state.inputId, response.data.image.src_for_wysiwyg)
21
+ window.opener.insertImageManagerMedia(idImage, state.inputId, response.data.src_for_wysiwyg)
22
22
  window.close()
23
23
  })
24
24
  }
@@ -6,8 +6,8 @@
6
6
  * -------------------------- */
7
7
  @font-face {
8
8
  font-family: 'FontAwesome';
9
- src: url("<%= font_path('fontawesome-webfont.eot?v=4.7.0') %>");
10
- src: url("<%= font_path('fontawesome-webfont.eot?#iefix&v=4.7.0') %>") format('embedded-opentype'), url("<%= font_path('fontawesome-webfont.woff2?v=4.7.0') %>") format('woff2'), url("<%= font_path('fontawesome-webfont.woff?v=4.7.0') %>") format('woff'), url("<%= font_path('fontawesome-webfont.ttf?v=4.7.0') %>") format('truetype'), url("<%= font_path('fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') %>") format('svg');
9
+ src: url('fonts/fontawesome-webfont.eot?v=4.7.0');
10
+ src: url('fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
11
11
  font-weight: normal;
12
12
  font-style: normal;
13
13
  }