adminpanel 2.6.1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/adminpanel.gemspec +6 -6
  4. data/app/assets/images/adminpanel/magnifier.png +0 -0
  5. data/app/assets/javascripts/adminpanel/bootstrap-data-confirm.coffee.erb +142 -0
  6. data/app/assets/javascripts/adminpanel/dom-filter.coffee +15 -0
  7. data/app/assets/javascripts/adminpanel/dropzone.js +1728 -0
  8. data/app/assets/javascripts/adminpanel/filter-side-menu.coffee +4 -0
  9. data/app/assets/javascripts/adminpanel/gallery.js.coffee.erb +79 -0
  10. data/app/assets/javascripts/adminpanel/realm.js +0 -3
  11. data/app/assets/stylesheets/adminpanel/_search-input.scss.erb +11 -0
  12. data/app/assets/stylesheets/adminpanel/bootstrap.css.erb +1 -1
  13. data/app/assets/stylesheets/adminpanel/dropzone.css +515 -0
  14. data/app/assets/stylesheets/adminpanel/theme.css.scss.erb +1 -1
  15. data/app/controllers/adminpanel/analytics_controller.rb +7 -51
  16. data/app/controllers/adminpanel/application_controller.rb +1 -0
  17. data/app/controllers/adminpanel/roles_controller.rb +4 -1
  18. data/app/controllers/adminpanel/sections_controller.rb +1 -7
  19. data/app/controllers/concerns/adminpanel/facebook_actions.rb +3 -0
  20. data/app/controllers/concerns/adminpanel/gallery_actions.rb +31 -0
  21. data/app/controllers/concerns/adminpanel/rest_actions.rb +4 -1
  22. data/app/helpers/adminpanel/analytics_helper.rb +8 -18
  23. data/app/helpers/adminpanel/application_helper.rb +10 -2
  24. data/app/helpers/adminpanel/router_helper.rb +6 -2
  25. data/app/helpers/adminpanel/shared_pages_helper.rb +5 -3
  26. data/app/models/adminpanel/analytic.rb +4 -0
  27. data/app/models/adminpanel/image.rb +31 -0
  28. data/app/models/adminpanel/sectionfile.rb +1 -3
  29. data/app/models/concerns/adminpanel/base.rb +51 -7
  30. data/app/models/concerns/adminpanel/sortable_gallery.rb +12 -17
  31. data/app/views/adminpanel/analytics/_header.html.erb +1 -1
  32. data/app/views/adminpanel/form/_adminpanel_file_field.html.erb +27 -23
  33. data/app/views/adminpanel/icons/_delete.html.erb +1 -0
  34. data/app/views/adminpanel/sections/edit.html.erb +1 -12
  35. data/app/views/adminpanel/shared/_form_fields.html.erb +1 -0
  36. data/app/views/adminpanel/templates/destroy.js.erb +3 -0
  37. data/app/views/adminpanel/templates/index.html.erb +4 -4
  38. data/app/views/adminpanel/templates/show.html.erb +57 -52
  39. data/app/views/layouts/adminpanel/_side_menu.html.erb +18 -3
  40. data/config/initializers/adminpanel/assets.rb +4 -0
  41. data/config/locales/en.yml +24 -9
  42. data/config/locales/es.yml +18 -33
  43. data/config/routes.rb +10 -5
  44. data/lib/adminpanel/version.rb +1 -1
  45. data/lib/generators/adminpanel/gallery/gallery_generator.rb +0 -8
  46. data/lib/generators/adminpanel/gallery/templates/gallery_template.rb +7 -18
  47. data/lib/generators/adminpanel/gallery/templates/uploader.rb +1 -1
  48. data/lib/generators/adminpanel/initialize/templates/create_adminpanel_tables.rb +9 -5
  49. data/lib/generators/adminpanel/resource/resource_generator.rb +12 -16
  50. data/lib/generators/adminpanel/resource/resource_generator_helper.rb +23 -16
  51. data/test/dummy/.gitignore +2 -2
  52. data/test/dummy/app/controllers/adminpanel/products_controller.rb +1 -1
  53. data/test/dummy/app/models/adminpanel/galleryfile.rb +1 -13
  54. data/test/dummy/app/models/adminpanel/photo.rb +2 -9
  55. data/test/dummy/app/models/adminpanel/product.rb +1 -0
  56. data/test/dummy/config/initializers/carrierwave.rb +5 -0
  57. data/test/dummy/db/schema.rb +10 -18
  58. data/test/dummy/test/fixtures/adminpanel/galleries.yml +3 -3
  59. data/test/dummy/test/fixtures/adminpanel/images.yml +60 -0
  60. data/test/dummy/test/fixtures/adminpanel/products.yml +2 -2
  61. data/test/dummy/test/fixtures/{dog fries.png → attachments/dog-fries.png} +0 -0
  62. data/test/dummy/test/fixtures/attachments/hipster.jpg +0 -0
  63. data/test/dummy/test/fixtures/attachments/thumb_hipster.jpg +0 -0
  64. data/test/features/shared/form/belongs_to_remote_test.rb +1 -4
  65. data/test/features/shared/form/resource_field_test.rb +1 -1
  66. data/test/features/shared/resource/edit_test.rb +2 -5
  67. data/test/features/shared/resource/new_test.rb +5 -2
  68. data/test/features/shared/ui/dropzone_element_generation_test.rb +27 -0
  69. data/test/features/shared/ui/filtering_test.rb +29 -0
  70. data/test/generators/gallery_generator_test.rb +0 -10
  71. data/test/generators/resource_generator_test.rb +30 -6
  72. data/test/helpers/shared_pages_helper_test.rb +22 -43
  73. data/test/models/adminpanel/image_test.rb +31 -0
  74. data/test/models/adminpanel/sortable_gallery_unit_test.rb +8 -8
  75. data/test/support/view_case.rb +2 -2
  76. metadata +53 -43
  77. data/app/assets/images/adminpanel/dialogs.png +0 -0
  78. data/app/assets/images/adminpanel/icons-big.png +0 -0
  79. data/app/assets/images/adminpanel/icons-small.png +0 -0
  80. data/app/assets/images/adminpanel/select2.png +0 -0
  81. data/app/assets/images/adminpanel/select2x2.png +0 -0
  82. data/app/assets/images/adminpanel/toolbar.png +0 -0
  83. data/app/assets/javascripts/adminpanel/jquery.knob.js +0 -652
  84. data/app/assets/javascripts/adminpanel/jquery.masonry.min.js +0 -10
  85. data/app/assets/javascripts/adminpanel/jquery.slimscroll.min.js +0 -14
  86. data/app/views/adminpanel/analytics/_fb_statistic_widget.html.erb +0 -63
  87. data/app/views/adminpanel/analytics/fb.html.erb +0 -106
  88. data/test/dummy/config/carrierwave.rb +0 -6
  89. data/test/dummy/public/favicon.ico +0 -0
  90. data/test/dummy/test/fixtures/adminpanel/galleryfiles.yml +0 -42
  91. data/test/features/shared/ui/max_images_gallery_test.rb +0 -51
@@ -0,0 +1,4 @@
1
+ $(document).on 'page:load ready', ->
2
+ $('#search-modules').domFilter
3
+ input: '#search-input'
4
+ selector: '.accordion-group'
@@ -0,0 +1,79 @@
1
+ window.Dropzone.autoDiscover = false
2
+
3
+ DropzoneHandler =
4
+ csrf: null
5
+
6
+ init: ->
7
+ @csrf = $('meta[name="csrf-token"]').attr('content')
8
+ _this = @
9
+ $('form[data-dropzone]').each((i,e)->
10
+ form = $(e)
11
+ parentObjectClass = form.data('parent-object-class')
12
+ parentObjectId = form.data('parent-object-id')
13
+
14
+ fields = form.data('dropzone-galleries')
15
+ for field, className of fields
16
+ model = className
17
+ field = field
18
+ dropzoneContainer = $("##{field}_dropzone")
19
+
20
+ if dropzoneContainer.length
21
+ maxfiles = $("##{_this.field}_dropzone").data('max-files')
22
+ maxfiles = null if (typeof maxfiles == 'undefined' || maxfiles == '')
23
+
24
+ dropzone = new Dropzone(
25
+ "##{field}_dropzone",
26
+ {
27
+ url: form.data('dropzone-url'),
28
+ previewsContainer: "##{field}_dropzone",
29
+ clickable: "##{field}_dropzone a.btn",
30
+ headers: { 'X-CSRF-Token': _this.csrf },
31
+ addRemoveLinks: true,
32
+ dictCancelUpload: "<%= I18n.t('dropzone.cancel_upload') %>",
33
+ dictCancelUploadConfirmation: "<%= I18n.t('dropzone.cancel_upload_confirmation') %>"
34
+ dictRemoveFile: "<%= I18n.t('dropzone.remove_file') %>"
35
+ dictMaxFilesExceeded: "<%= I18n.t('dropzone.max_files_reached') %>"
36
+ maxFiles: maxfiles
37
+ }
38
+ )
39
+
40
+ dropzone.on('success', $.proxy(_this.onSuccessUpload, _this, dropzoneContainer, form, field))
41
+ dropzone.on('sending', $.proxy(_this.addModelToData, _this, model, parentObjectClass, parentObjectId))
42
+ dropzone.on('removedfile', $.proxy(_this.deleteFile, _this, form, field, model))
43
+
44
+ dropzoneContainer.find("input[type='hidden']").each((a, b)->
45
+ input = $(b)
46
+ mockFile = { name: input.data('file-name'), size: input.data('file-size') }
47
+ dropzone.emit('addedfile', mockFile)
48
+ dropzone.emit('thumbnail', mockFile, input.data('file-url'))
49
+ dropzone.emit('complete', mockFile)
50
+ dropzoneContainer.find('.dz-image').last().data('id', input.val())
51
+ )
52
+ )
53
+
54
+ onSuccessUpload: (dropzoneContainer, form, field, file, serverResponse) ->
55
+ $(file.previewElement).find('.dz-image').data('id', serverResponse['id'])
56
+ dropzoneContainer.append($('<input/>').attr('type', 'hidden').attr('name', "#{form.data('dropzone')}[#{field}_ids][]").val(serverResponse['id']))
57
+
58
+ addModelToData: (model, parentObjectClass, parentObjectId, file, xhr, formData) ->
59
+ formData.append('model', model)
60
+ formData.append('parent_object_class', parentObjectClass)
61
+ unless typeof parentObjectId == 'undefined'
62
+ formData.append('resource_id', parentObjectId)
63
+
64
+ deleteFile: (form, field, model, file) ->
65
+ imageToDelete = $(file.previewElement).find('.dz-image').data('id')
66
+ $.ajax(
67
+ url: form.data('dropzone-delete-url'),
68
+ dataType: 'json',
69
+ data:
70
+ model: model,
71
+ id: imageToDelete
72
+ type: 'DELETE'
73
+ )
74
+
75
+ $("input[type='hidden'][value='#{imageToDelete}'][name='#{form.data('dropzone')}[#{field}_ids][]']").remove()
76
+
77
+
78
+
79
+ $(document).on('page:load ready', $.proxy(DropzoneHandler.init, DropzoneHandler))
@@ -5,11 +5,8 @@ var ready = function(){
5
5
  $('.accordion-heading .accordion-toggle').not($(this)[0], '.accordion-heading .accordion-toggle.collapse').addClass('collapsed');
6
6
  });
7
7
 
8
-
9
8
  // show the overview boxes on the dashboard once they are loaded
10
9
  $('.overview_boxes .box_row').css('display', 'inline-block');
11
- $(".knob").knob();
12
-
13
10
 
14
11
  // init tooltips on .tips class elements, text for the tooltip is in the data-title attribute on the element itself
15
12
  // $('.tip').tooltip();
@@ -0,0 +1,11 @@
1
+ input[type="text"].search-input {
2
+ width: 85%;
3
+ border-radius: 15px;
4
+ margin-top: 10px;
5
+ margin-left: 7.5%;
6
+ margin-right: 7.5%;
7
+ padding-left: 30px;
8
+ background: url(<%= asset_path('adminpanel/magnifier.png') %>) no-repeat 8px 6px;
9
+ background-size: 15px 15px;
10
+ background-color: white;
11
+ }
@@ -6098,6 +6098,6 @@ button.close {
6098
6098
  @media (min-width: 980px) {
6099
6099
  .nav-collapse.collapse {
6100
6100
  height: auto !important;
6101
- overflow: visible !important;
6101
+ overflow: scroll !important;
6102
6102
  }
6103
6103
  }
@@ -0,0 +1,515 @@
1
+ /*
2
+ * The MIT License
3
+ * Copyright (c) 2012 Matias Meno <m@tias.me>
4
+ */
5
+ @-webkit-keyframes passing-through {
6
+ 0% {
7
+ opacity: 0;
8
+ -webkit-transform: translateY(40px);
9
+ -moz-transform: translateY(40px);
10
+ -ms-transform: translateY(40px);
11
+ -o-transform: translateY(40px);
12
+ transform: translateY(40px); }
13
+ 30%, 70% {
14
+ opacity: 1;
15
+ -webkit-transform: translateY(0px);
16
+ -moz-transform: translateY(0px);
17
+ -ms-transform: translateY(0px);
18
+ -o-transform: translateY(0px);
19
+ transform: translateY(0px); }
20
+ 100% {
21
+ opacity: 0;
22
+ -webkit-transform: translateY(-40px);
23
+ -moz-transform: translateY(-40px);
24
+ -ms-transform: translateY(-40px);
25
+ -o-transform: translateY(-40px);
26
+ transform: translateY(-40px); } }
27
+ @-moz-keyframes passing-through {
28
+ 0% {
29
+ opacity: 0;
30
+ -webkit-transform: translateY(40px);
31
+ -moz-transform: translateY(40px);
32
+ -ms-transform: translateY(40px);
33
+ -o-transform: translateY(40px);
34
+ transform: translateY(40px); }
35
+ 30%, 70% {
36
+ opacity: 1;
37
+ -webkit-transform: translateY(0px);
38
+ -moz-transform: translateY(0px);
39
+ -ms-transform: translateY(0px);
40
+ -o-transform: translateY(0px);
41
+ transform: translateY(0px); }
42
+ 100% {
43
+ opacity: 0;
44
+ -webkit-transform: translateY(-40px);
45
+ -moz-transform: translateY(-40px);
46
+ -ms-transform: translateY(-40px);
47
+ -o-transform: translateY(-40px);
48
+ transform: translateY(-40px); } }
49
+ @keyframes passing-through {
50
+ 0% {
51
+ opacity: 0;
52
+ -webkit-transform: translateY(40px);
53
+ -moz-transform: translateY(40px);
54
+ -ms-transform: translateY(40px);
55
+ -o-transform: translateY(40px);
56
+ transform: translateY(40px); }
57
+ 30%, 70% {
58
+ opacity: 1;
59
+ -webkit-transform: translateY(0px);
60
+ -moz-transform: translateY(0px);
61
+ -ms-transform: translateY(0px);
62
+ -o-transform: translateY(0px);
63
+ transform: translateY(0px); }
64
+ 100% {
65
+ opacity: 0;
66
+ -webkit-transform: translateY(-40px);
67
+ -moz-transform: translateY(-40px);
68
+ -ms-transform: translateY(-40px);
69
+ -o-transform: translateY(-40px);
70
+ transform: translateY(-40px); } }
71
+ @-webkit-keyframes slide-in {
72
+ 0% {
73
+ opacity: 0;
74
+ -webkit-transform: translateY(40px);
75
+ -moz-transform: translateY(40px);
76
+ -ms-transform: translateY(40px);
77
+ -o-transform: translateY(40px);
78
+ transform: translateY(40px); }
79
+ 30% {
80
+ opacity: 1;
81
+ -webkit-transform: translateY(0px);
82
+ -moz-transform: translateY(0px);
83
+ -ms-transform: translateY(0px);
84
+ -o-transform: translateY(0px);
85
+ transform: translateY(0px); } }
86
+ @-moz-keyframes slide-in {
87
+ 0% {
88
+ opacity: 0;
89
+ -webkit-transform: translateY(40px);
90
+ -moz-transform: translateY(40px);
91
+ -ms-transform: translateY(40px);
92
+ -o-transform: translateY(40px);
93
+ transform: translateY(40px); }
94
+ 30% {
95
+ opacity: 1;
96
+ -webkit-transform: translateY(0px);
97
+ -moz-transform: translateY(0px);
98
+ -ms-transform: translateY(0px);
99
+ -o-transform: translateY(0px);
100
+ transform: translateY(0px); } }
101
+ @keyframes slide-in {
102
+ 0% {
103
+ opacity: 0;
104
+ -webkit-transform: translateY(40px);
105
+ -moz-transform: translateY(40px);
106
+ -ms-transform: translateY(40px);
107
+ -o-transform: translateY(40px);
108
+ transform: translateY(40px); }
109
+ 30% {
110
+ opacity: 1;
111
+ -webkit-transform: translateY(0px);
112
+ -moz-transform: translateY(0px);
113
+ -ms-transform: translateY(0px);
114
+ -o-transform: translateY(0px);
115
+ transform: translateY(0px); } }
116
+ @-webkit-keyframes pulse {
117
+ 0% {
118
+ -webkit-transform: scale(1);
119
+ -moz-transform: scale(1);
120
+ -ms-transform: scale(1);
121
+ -o-transform: scale(1);
122
+ transform: scale(1); }
123
+ 10% {
124
+ -webkit-transform: scale(1.1);
125
+ -moz-transform: scale(1.1);
126
+ -ms-transform: scale(1.1);
127
+ -o-transform: scale(1.1);
128
+ transform: scale(1.1); }
129
+ 20% {
130
+ -webkit-transform: scale(1);
131
+ -moz-transform: scale(1);
132
+ -ms-transform: scale(1);
133
+ -o-transform: scale(1);
134
+ transform: scale(1); } }
135
+ @-moz-keyframes pulse {
136
+ 0% {
137
+ -webkit-transform: scale(1);
138
+ -moz-transform: scale(1);
139
+ -ms-transform: scale(1);
140
+ -o-transform: scale(1);
141
+ transform: scale(1); }
142
+ 10% {
143
+ -webkit-transform: scale(1.1);
144
+ -moz-transform: scale(1.1);
145
+ -ms-transform: scale(1.1);
146
+ -o-transform: scale(1.1);
147
+ transform: scale(1.1); }
148
+ 20% {
149
+ -webkit-transform: scale(1);
150
+ -moz-transform: scale(1);
151
+ -ms-transform: scale(1);
152
+ -o-transform: scale(1);
153
+ transform: scale(1); } }
154
+ @keyframes pulse {
155
+ 0% {
156
+ -webkit-transform: scale(1);
157
+ -moz-transform: scale(1);
158
+ -ms-transform: scale(1);
159
+ -o-transform: scale(1);
160
+ transform: scale(1); }
161
+ 10% {
162
+ -webkit-transform: scale(1.1);
163
+ -moz-transform: scale(1.1);
164
+ -ms-transform: scale(1.1);
165
+ -o-transform: scale(1.1);
166
+ transform: scale(1.1); }
167
+ 20% {
168
+ -webkit-transform: scale(1);
169
+ -moz-transform: scale(1);
170
+ -ms-transform: scale(1);
171
+ -o-transform: scale(1);
172
+ transform: scale(1); } }
173
+ .zone.dz-clickable {
174
+ cursor: pointer;
175
+ }
176
+ .zone.dz-clickable * {
177
+ cursor: default;
178
+ }
179
+ .zone.dz-clickable .dz-message, .zone.dz-clickable .dz-message * {
180
+ cursor: pointer;
181
+ }
182
+ .zone.dz-started .dz-message {
183
+ display: none;
184
+ }
185
+ .zone.dz-drag-hover {
186
+ border-style: solid;
187
+ }
188
+ .zone.dz-drag-hover .dz-message {
189
+ opacity: 0.5;
190
+ }
191
+ .zone .dz-message {
192
+ text-align: center;
193
+ margin: 2em 0;
194
+ }
195
+ .zone .dz-preview {
196
+ position: relative;
197
+ float: left;
198
+ display: inline-block;
199
+ vertical-align: top;
200
+ margin: 16px;
201
+ min-height: 100px;
202
+ }
203
+ .zone .dz-preview:hover {
204
+ z-index: 1000;
205
+ }
206
+ .zone .dz-preview:hover .dz-details {
207
+ opacity: 1;
208
+ }
209
+ .zone .dz-preview.dz-file-preview .dz-image {
210
+ border-radius: 20px;
211
+ background: #999;
212
+ background: linear-gradient(to bottom, #eee, #ddd);
213
+ }
214
+ .zone .dz-preview.dz-file-preview .dz-details {
215
+ opacity: 1;
216
+ }
217
+ .zone .dz-preview.dz-image-preview .dz-details {
218
+ -webkit-transition: opacity 0.2s linear;
219
+ -moz-transition: opacity 0.2s linear;
220
+ -ms-transition: opacity 0.2s linear;
221
+ -o-transition: opacity 0.2s linear;
222
+ transition: opacity 0.2s linear;
223
+ }
224
+ .zone .dz-preview .dz-remove {
225
+ font-size: 14px;
226
+ text-align: center;
227
+ display: block;
228
+ cursor: pointer;
229
+ border: none;
230
+ }
231
+ .zone .dz-preview .dz-remove:hover {
232
+ text-decoration: underline;
233
+ }
234
+ .zone .dz-preview:hover .dz-details {
235
+ opacity: 1;
236
+ }
237
+ .zone .dz-preview .dz-details {
238
+ z-index: 20;
239
+ position: absolute;
240
+ top: 0;
241
+ left: 0;
242
+ opacity: 0;
243
+ font-size: 13px;
244
+ min-width: 100%;
245
+ max-width: 100%;
246
+ padding: 2em 1em;
247
+ text-align: center;
248
+ color: rgba(0, 0, 0, 0.9);
249
+ line-height: 150%;
250
+ }
251
+ .zone .dz-preview .dz-details .dz-size {
252
+ margin-bottom: 1em;
253
+ font-size: 16px;
254
+ }
255
+ .zone .dz-preview .dz-details .dz-filename {
256
+ white-space: nowrap;
257
+ }
258
+ .zone .dz-preview .dz-details .dz-filename:hover span {
259
+ border: 1px solid rgba(200, 200, 200, 0.8);
260
+ background-color: rgba(255, 255, 255, 0.8);
261
+ }
262
+ .zone .dz-preview .dz-details .dz-filename:not(:hover) {
263
+ overflow: hidden;
264
+ text-overflow: ellipsis;
265
+ }
266
+ .zone .dz-preview .dz-details .dz-filename:not(:hover) span {
267
+ border: 1px solid transparent;
268
+ }
269
+ .zone .dz-preview .dz-details .dz-filename span, .zone .dz-preview .dz-details .dz-size span {
270
+ background-color: rgba(255, 255, 255, 0.4);
271
+ padding: 0 0.4em;
272
+ border-radius: 3px;
273
+ }
274
+ .zone .dz-preview:hover .dz-image img {
275
+ -webkit-transform: scale(1.05, 1.05);
276
+ -moz-transform: scale(1.05, 1.05);
277
+ -ms-transform: scale(1.05, 1.05);
278
+ -o-transform: scale(1.05, 1.05);
279
+ transform: scale(1.05, 1.05);
280
+ -webkit-filter: blur(8px);
281
+ filter: blur(8px);
282
+ }
283
+ .zone .dz-preview .dz-image {
284
+ border-radius: 20px;
285
+ overflow: hidden;
286
+ width: 120px;
287
+ height: 120px;
288
+ position: relative;
289
+ display: block;
290
+ z-index: 10;
291
+ }
292
+ .zone .dz-preview .dz-image img {
293
+ display: block;
294
+ }
295
+ .zone .dz-preview.dz-success .dz-success-mark {
296
+ -webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
297
+ -moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
298
+ -ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
299
+ -o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
300
+ animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);
301
+ }
302
+ .zone .dz-preview.dz-error .dz-error-mark {
303
+ opacity: 1;
304
+ -webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
305
+ -moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
306
+ -ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
307
+ -o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
308
+ animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);
309
+ }
310
+ .zone .dz-preview .dz-success-mark, .zone .dz-preview .dz-error-mark {
311
+ pointer-events: none;
312
+ opacity: 0;
313
+ z-index: 500;
314
+ position: absolute;
315
+ display: block;
316
+ top: 50%;
317
+ left: 50%;
318
+ margin-left: -27px;
319
+ margin-top: -27px;
320
+ }
321
+ .zone .dz-preview .dz-success-mark svg, .zone .dz-preview .dz-error-mark svg {
322
+ display: block;
323
+ width: 54px;
324
+ height: 54px;
325
+ }
326
+ .zone .dz-preview.dz-processing .dz-progress {
327
+ opacity: 1;
328
+ -webkit-transition: all 0.2s linear;
329
+ -moz-transition: all 0.2s linear;
330
+ -ms-transition: all 0.2s linear;
331
+ -o-transition: all 0.2s linear;
332
+ transition: all 0.2s linear;
333
+ }
334
+ .zone .dz-preview.dz-complete .dz-progress {
335
+ opacity: 0;
336
+ -webkit-transition: opacity 0.4s ease-in;
337
+ -moz-transition: opacity 0.4s ease-in;
338
+ -ms-transition: opacity 0.4s ease-in;
339
+ -o-transition: opacity 0.4s ease-in;
340
+ transition: opacity 0.4s ease-in;
341
+ }
342
+ .zone .dz-preview:not(.dz-processing) .dz-progress {
343
+ -webkit-animation: pulse 6s ease infinite;
344
+ -moz-animation: pulse 6s ease infinite;
345
+ -ms-animation: pulse 6s ease infinite;
346
+ -o-animation: pulse 6s ease infinite;
347
+ animation: pulse 6s ease infinite;
348
+ }
349
+ .zone .dz-preview .dz-progress {
350
+ opacity: 1;
351
+ z-index: 1000;
352
+ pointer-events: none;
353
+ position: absolute;
354
+ height: 16px;
355
+ left: 50%;
356
+ top: 50%;
357
+ margin-top: -8px;
358
+ width: 80px;
359
+ margin-left: -40px;
360
+ background: rgba(255, 255, 255, 0.9);
361
+ -webkit-transform: scale(1);
362
+ border-radius: 8px;
363
+ overflow: hidden;
364
+ }
365
+ .zone .dz-preview .dz-progress .dz-upload {
366
+ background: #333;
367
+ background: linear-gradient(to bottom, #666, #444);
368
+ position: absolute;
369
+ top: 0;
370
+ left: 0;
371
+ bottom: 0;
372
+ width: 0;
373
+ -webkit-transition: width 300ms ease-in-out;
374
+ -moz-transition: width 300ms ease-in-out;
375
+ -ms-transition: width 300ms ease-in-out;
376
+ -o-transition: width 300ms ease-in-out;
377
+ transition: width 300ms ease-in-out;
378
+ }
379
+ .zone .dz-preview.dz-error .dz-error-message {
380
+ display: block;
381
+ }
382
+ .zone .dz-preview.dz-error:hover .dz-error-message {
383
+ opacity: 1;
384
+ pointer-events: auto;
385
+ }
386
+ .zone .dz-preview .dz-error-message {
387
+ pointer-events: none;
388
+ z-index: 1000;
389
+ position: absolute;
390
+ display: block;
391
+ display: none;
392
+ opacity: 0;
393
+ -webkit-transition: opacity 0.3s ease;
394
+ -moz-transition: opacity 0.3s ease;
395
+ -ms-transition: opacity 0.3s ease;
396
+ -o-transition: opacity 0.3s ease;
397
+ transition: opacity 0.3s ease;
398
+ border-radius: 8px;
399
+ font-size: 13px;
400
+ top: 130px;
401
+ left: -10px;
402
+ width: 140px;
403
+ background: #be2626;
404
+ background: linear-gradient(to bottom, #be2626, #a92222);
405
+ padding: 0.5em 1.2em;
406
+ color: white;
407
+ }
408
+ .zone .dz-preview .dz-error-message:after {
409
+ content: '';
410
+ position: absolute;
411
+ top: -6px;
412
+ left: 64px;
413
+ width: 0;
414
+ height: 0;
415
+ border-left: 6px solid transparent;
416
+ border-right: 6px solid transparent;
417
+ border-bottom: 6px solid #be2626;
418
+ }
419
+ .zone {
420
+ background: -webkit-radial-gradient(center, ellipse, #95A5A6 0, #34495E 100%);
421
+ background: radial-gradient(ellipse at center, #95A5A6 0, #34495E 100%);
422
+ width: 57.26495726495726%;
423
+ height: 50%;
424
+ border: 5px dashed white;
425
+ text-align: center;
426
+ color: white;
427
+ z-index: 20;
428
+ -webkit-transition: all 0.3s ease-out;
429
+ transition: all 0.3s ease-out;
430
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.05), inset 0 0 0.25em 0 rgba(0, 0, 0, 0.25);
431
+ float: left;
432
+ }
433
+
434
+ @media (max-width: 767px) {
435
+ .zone {
436
+ width: 100%;
437
+ }
438
+ }
439
+
440
+ .zone .btnCompression .active {
441
+ background: #95A5A6;
442
+ color: white;
443
+ }
444
+ .zone i {
445
+ text-align: center;
446
+ font-size: 50px;
447
+ color: #fff;
448
+ margin-top: 25px;
449
+ }
450
+ .zone .selectFile {
451
+ margin: 10px auto;
452
+ }
453
+ .zone label {
454
+ cursor: pointer;
455
+ display: block;
456
+ }
457
+ .zone a.btn {
458
+ border-radius: 5px;
459
+ background: #fff;
460
+ color: #95A5A6;
461
+ display: inline-block;
462
+ text-align: center;
463
+ box-shadow: 0 1px 1px gray;
464
+ }
465
+ .zone a.btn:hover {
466
+ color: #95A5A6;
467
+ }
468
+ .zone input[type=file] {
469
+ opacity: 0;
470
+ }
471
+ .zone.in {
472
+ color: white;
473
+ border-color: white;
474
+ background: -webkit-radial-gradient(center, ellipse, #95A5A6 0, #34495E 100%);
475
+ background: radial-gradient(ellipse at center, #95A5A6 0, #34495E 100%);
476
+ }
477
+ .zone.in i {
478
+ color: #fff;
479
+ }
480
+ .zone.in label {
481
+ background: #fff;
482
+ color: #95A5A6;
483
+ }
484
+ .zone.hover {
485
+ color: gray;
486
+ border-color: white;
487
+ background: #fff;
488
+ border: 5px dashed gray;
489
+ }
490
+ .zone.hover i {
491
+ color: #95A5A6;
492
+ }
493
+ .zone.hover label {
494
+ background: #fff;
495
+ color: #95A5A6;
496
+ }
497
+ .zone.fade {
498
+ -webkit-transition: all 0.3s ease-out;
499
+ transition: all 0.3s ease-out;
500
+ opacity: 1;
501
+ }
502
+
503
+ .zone-label {
504
+ float: left;
505
+ width: 160px;
506
+ padding-top: 5px;
507
+ text-align: right
508
+ }
509
+
510
+ .zone-container {
511
+ width: 100%;
512
+ position: relative;
513
+ float: left;
514
+ margin-bottom: 20px;
515
+ }