ab_admin 0.9.0 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/ab_admin/components/in_place_edit.js.coffee +28 -24
- data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +1 -1
- data/app/assets/javascripts/ab_admin/core/init.js.coffee +1 -0
- data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +21 -1
- data/app/assets/javascripts/ab_admin/core/utils.js.coffee +8 -0
- data/app/assets/javascripts/ab_admin/inputs/datetime_input.js.coffee +1 -0
- data/app/assets/javascripts/ab_admin/main.js +1 -2
- data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.scss +44 -23
- data/app/assets/stylesheets/ab_admin/components/_colored_tabs.scss +1 -1
- data/app/assets/stylesheets/ab_admin/components/_form.scss +3 -1
- data/app/assets/stylesheets/ab_admin/components/_navigation.scss +7 -2
- data/app/assets/stylesheets/ab_admin/components/_table_view.scss +75 -9
- data/app/assets/stylesheets/ab_admin/components/_tooltip.scss +1 -0
- data/app/assets/stylesheets/ab_admin/main.scss +1 -1
- data/app/controllers/admin/assets_controller.rb +1 -1
- data/app/controllers/admin/base_controller.rb +87 -107
- data/app/controllers/admin/manager_controller.rb +17 -47
- data/app/views/ab_admin/devise/sessions/new.html.slim +2 -0
- data/app/views/admin/assets/batch_edit.html.slim +2 -1
- data/app/views/admin/base/_search_layout.html.slim +1 -1
- data/app/views/admin/base/create.js.erb +1 -1
- data/app/views/admin/base/edit.js.erb +1 -1
- data/app/views/admin/base/new.js.erb +1 -1
- data/app/views/admin/base/update.js.erb +3 -3
- data/app/views/admin/manager/_show_table.html.slim +1 -1
- data/app/views/admin/manager/_stats.html.slim +4 -0
- data/app/views/admin/manager/_table.html.slim +6 -3
- data/app/views/admin/shared/_content_actions.html.slim +22 -15
- data/app/views/admin/shared/_save_buttons.html.slim +10 -1
- data/app/views/admin/users/_form.html.slim +2 -2
- data/config/locales/en.yml +8 -13
- data/config/locales/it.yml +1 -0
- data/db/migrate/20130101000001_create_users.rb +1 -4
- data/db/migrate/20130101000003_create_assets.rb +1 -1
- data/db/migrate/20130101000004_create_headers.rb +5 -5
- data/db/migrate/20130101000005_create_static_pages.rb +2 -5
- data/db/migrate/20130101000006_create_structures.rb +1 -1
- data/db/migrate/20130101000007_base_translations.rb +43 -12
- data/db/migrate/20130101000008_create_admin_comments.rb +2 -7
- data/db/migrate/20130101000009_create_tracks.rb +4 -8
- data/lib/ab_admin/abstract_resource.rb +6 -5
- data/lib/ab_admin/carrierwave/base_uploader.rb +87 -74
- data/lib/ab_admin/carrierwave/glue.rb +0 -5
- data/lib/ab_admin/concerns/admin_addition.rb +19 -1
- data/lib/ab_admin/concerns/utilities.rb +1 -1
- data/lib/ab_admin/config/base.rb +20 -4
- data/lib/ab_admin/core_ext/array.rb +0 -5
- data/lib/ab_admin/core_ext/string.rb +1 -6
- data/lib/ab_admin/devise.rb +7 -0
- data/lib/ab_admin/engine.rb +1 -1
- data/lib/ab_admin/hooks/ckeditor_lazy.rb +13 -0
- data/lib/ab_admin/menu/base_group.rb +0 -1
- data/lib/ab_admin/menu/group.rb +2 -4
- data/lib/ab_admin/menu/item.rb +4 -8
- data/lib/ab_admin/models/asset.rb +7 -10
- data/lib/ab_admin/models/locator.rb +1 -1
- data/lib/ab_admin/models/settings.rb +2 -2
- data/lib/ab_admin/models/structure.rb +3 -3
- data/lib/ab_admin/models/track.rb +15 -3
- data/lib/ab_admin/utils/csv_document.rb +4 -4
- data/lib/ab_admin/utils/eval_helpers.rb +0 -16
- data/lib/ab_admin/utils/logger.rb +12 -2
- data/lib/ab_admin/utils/mysql.rb +2 -3
- data/lib/ab_admin/utils/xls_document.rb +1 -3
- data/lib/ab_admin/utils.rb +0 -5
- data/lib/ab_admin/version.rb +1 -1
- data/lib/ab_admin/views/admin_helpers.rb +33 -16
- data/lib/ab_admin/views/admin_navigation_helpers.rb +12 -9
- data/lib/ab_admin/views/inputs/ckeditor_input.rb +1 -5
- data/lib/ab_admin/views/manager_helpers.rb +9 -3
- data/lib/ab_admin/views/search_form_builder.rb +12 -12
- data/lib/ab_admin.rb +13 -2
- data/lib/generators/ab_admin/install/templates/models/user.rb +1 -2
- data/lib/generators/ab_admin/install/templates/uploaders/attachment_file_uploader.rb +1 -1
- data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +1 -1
- data/lib/generators/ab_admin/install/templates/uploaders/picture_uploader.rb +16 -3
- data/lib/generators/ab_admin/resource/resource_generator.rb +0 -4
- data/lib/generators/ab_admin/resource/templates/controller.erb +0 -7
- data/lib/tasks/assets.rake +5 -5
- metadata +28 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e4cff3af876fcd7ea0ee9a0a340b10ceb31d22c2a3728910692c0048c8f0e6c
|
4
|
+
data.tar.gz: 7c66e65f59261910436f0c4d18cf069e1f94e42cec845c39bb5d7ee07de434e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c5926ca259601ec0369db9588748dc3c6b34fca63816ea9ef2adda4a238f45eb26f2f215d2337a38fe7a5061e870e0bdae466dcd46b5f51c7b0f2118e3e9084
|
7
|
+
data.tar.gz: 8ecd6b3078af74eee5d0135eb8fe1764d27f2dbd623c6e0f663d5e9b8e4e808323e968e6c87955e4f4f0c9ad7431743307b364a22a870fda1874b5a3fd9942e3
|
@@ -6,7 +6,10 @@ EditableForm.prototype.saveWithUrlHook = (value) ->
|
|
6
6
|
originalUrl.call(@options.scope, params)
|
7
7
|
else
|
8
8
|
params[@options.model] ||= {}
|
9
|
-
|
9
|
+
if _.isString(params.value) && params.value.match(/@\d+/)
|
10
|
+
params[@options.model][params.name] = params.value.replace('@', '')
|
11
|
+
else
|
12
|
+
params[@options.model][params.name] = params.value
|
10
13
|
params._method = 'PATCH'
|
11
14
|
ajax_opts =
|
12
15
|
url: originalUrl
|
@@ -27,29 +30,30 @@ EditableForm.prototype.saveWithoutUrlHook = EditableForm.prototype.save
|
|
27
30
|
EditableForm.prototype.save = EditableForm.prototype.saveWithUrlHook
|
28
31
|
|
29
32
|
window.initInPlaceEditable = ->
|
30
|
-
$('.editable').
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
33
|
+
$('.editable').each ->
|
34
|
+
$el = $(this)
|
35
|
+
$el.editable
|
36
|
+
onblur: 'submit'
|
37
|
+
placement: 'bottom'
|
38
|
+
emptytext: $el.attr('placeholder') || I18n.t('admin.js.empty') || 'Empty'
|
39
|
+
error: (response) ->
|
40
|
+
if response.status == 422
|
41
|
+
Object.entries(response.responseJSON.errors).map((i) -> i.join(': ')).join(', ')
|
42
|
+
else
|
43
|
+
response.responseText
|
44
|
+
success: (response) ->
|
45
|
+
if response && $(this).data().options?.accept == 'script'
|
46
|
+
$.globalEval(response.responseText)
|
47
|
+
datetimepicker:
|
48
|
+
format: "dd.mm.yyyy hh:ii"
|
49
|
+
autoclose: true
|
50
|
+
todayBtn: true
|
51
|
+
language: I18n.locale
|
52
|
+
ajaxOptions:
|
53
|
+
xhrFields:
|
54
|
+
withCredentials: true
|
55
|
+
headers:
|
56
|
+
Accept: 'application/json'
|
53
57
|
|
54
58
|
|
55
59
|
$(document).on 'admin:init', initInPlaceEditable
|
@@ -85,4 +85,24 @@ window.initNestedFields = (opts={}) ->
|
|
85
85
|
window.initFancySelect() unless opts.skip_fancy
|
86
86
|
window.initPickers() unless opts.skip_pickers
|
87
87
|
window.initEditor() unless opts.skip_editor
|
88
|
-
opts.callback.call(e) if opts.callback
|
88
|
+
opts.callback.call(e) if opts.callback
|
89
|
+
|
90
|
+
window.initCkeditor = (dom_id, options={}) ->
|
91
|
+
if window.CKEDITOR
|
92
|
+
CKEDITOR.replace(dom_id, options) unless CKEDITOR.instances[dom_id]
|
93
|
+
else
|
94
|
+
$.getScript $("##{dom_id}").data('cdnUrl'), ->
|
95
|
+
CKEDITOR.replaceClass = null;
|
96
|
+
CKEDITOR.replace(dom_id, options) unless CKEDITOR.instances[dom_id]
|
97
|
+
|
98
|
+
window.lazyInitCkeditor = (dom_id, options={}) ->
|
99
|
+
$el = $("##{dom_id}")
|
100
|
+
$form = $el.closest('form')
|
101
|
+
height = options.height || 200
|
102
|
+
height += if options.toolbar == 'mini' then 34 else 67
|
103
|
+
$el.height(height)
|
104
|
+
callback = (intersectionRatio) ->
|
105
|
+
initCkeditor(dom_id, options) if intersectionRatio
|
106
|
+
window.ckeditorVisibilityObserver = new IntersectionObserver (entries, observer) =>
|
107
|
+
entries.forEach(((entry) => callback(entry.intersectionRatio)), {root: $form[0]})
|
108
|
+
window.ckeditorVisibilityObserver.observe document.getElementById(dom_id)
|
@@ -174,3 +174,11 @@ window.localeToFlag = (l) ->
|
|
174
174
|
l = {'JA': 'JP', 'EN': 'GB', 'UK': 'UA'}[l] || l
|
175
175
|
chars = {"A":"🇦","B":"🇧","C":"🇨","D":"🇩","E":"🇪","F":"🇫","G":"🇬","H":"🇭","I":"🇮","J":"🇯","K":"🇰","L":"🇱","M":"🇲","N":"🇳","O":"🇴","P":"🇵","Q":"🇶","R":"🇷","S":"🇸","T":"🇹","U":"🇺","V":"🇻","W":"🇼","X":"🇽","Y":"🇾","Z":"🇿"}
|
176
176
|
l.replace /[A-Z]/g, (m) -> chars[m]
|
177
|
+
|
178
|
+
window.I18n ||= {}
|
179
|
+
window.I18n.locale = 'en'
|
180
|
+
window.I18n.translations ||= {}
|
181
|
+
I18n.t = (key) ->
|
182
|
+
keys = key.split('.')
|
183
|
+
keys.unshift(I18n.locale)
|
184
|
+
_.get(I18n.translations, keys)
|
@@ -7,6 +7,7 @@ $ ->
|
|
7
7
|
viewSelect: 'month'
|
8
8
|
minView: 'day'
|
9
9
|
language: I18n.locale
|
10
|
+
weekStart: 1
|
10
11
|
|
11
12
|
search_form_options = _.defaults({pickerPosition: "bottom-left datetimepicker-bottom-left-custom"}, base_options)
|
12
13
|
search_form_options_gt = _.defaults({initialDate: new Date(new Date().setHours(0,0,0,0))}, search_form_options)
|
@@ -1,4 +1,3 @@
|
|
1
|
-
//= require i18n
|
2
1
|
//= require i18n/translations
|
3
2
|
//= require jquery.min
|
4
3
|
//= require jquery_ujs
|
@@ -17,7 +16,7 @@
|
|
17
16
|
//= require moment.min
|
18
17
|
//= require ab_admin/bootstrap-editable
|
19
18
|
//= require ab_admin/bootbox.min
|
20
|
-
//= require select2
|
19
|
+
//= require select2_3_5_2/select2
|
21
20
|
//= require ab_admin/jquery-ui-1.10.3.custom.min
|
22
21
|
//= require jquery.ui.nestedSortable
|
23
22
|
//= require clipboard.min
|
@@ -88,6 +88,15 @@ ul.nav li.dropdown:hover ul.dropdown-menu {
|
|
88
88
|
width: auto;
|
89
89
|
}
|
90
90
|
|
91
|
+
.label a {
|
92
|
+
color: white;
|
93
|
+
font-size: 12px;
|
94
|
+
font-weight: 500;
|
95
|
+
text-decoration: none;
|
96
|
+
border: none;
|
97
|
+
line-height: 1.4;
|
98
|
+
}
|
99
|
+
|
91
100
|
.label-primary, .badge-primary {
|
92
101
|
background-color: #05C;
|
93
102
|
}
|
@@ -145,28 +154,6 @@ label.control-label.label-reset {
|
|
145
154
|
text-align: left;
|
146
155
|
}
|
147
156
|
|
148
|
-
.table tbody {
|
149
|
-
tr.success > td, &.success > tr > td {
|
150
|
-
background-color: #dff0d8;
|
151
|
-
}
|
152
|
-
|
153
|
-
tr.error > td, &.error > tr > td {
|
154
|
-
background-color: #f2dede;
|
155
|
-
}
|
156
|
-
|
157
|
-
tr.warning > td, &.warning > tr > td {
|
158
|
-
background-color: #fcf8e3;
|
159
|
-
}
|
160
|
-
|
161
|
-
tr.muted > td, &.muted > tr > td {
|
162
|
-
background-color: #ededed;
|
163
|
-
}
|
164
|
-
|
165
|
-
tr.info > td, &.info > tr > td {
|
166
|
-
background-color: #d9edf7;
|
167
|
-
}
|
168
|
-
}
|
169
|
-
|
170
157
|
.js-copy-popup {
|
171
158
|
position: relative;
|
172
159
|
&:before {
|
@@ -184,6 +171,27 @@ label.control-label.label-reset {
|
|
184
171
|
top: -5px;
|
185
172
|
}
|
186
173
|
}
|
174
|
+
|
175
|
+
.pulse.badge-important {
|
176
|
+
cursor: pointer;
|
177
|
+
box-shadow: 0 0 0 rgba(185, 74, 72, 0.7);
|
178
|
+
animation: pulse-important 1s infinite;
|
179
|
+
}
|
180
|
+
.pulse:hover {
|
181
|
+
animation: none;
|
182
|
+
}
|
183
|
+
@keyframes pulse-important {
|
184
|
+
0% {
|
185
|
+
box-shadow: 0 0 0 0 rgba(185, 74, 72, 0.7);
|
186
|
+
}
|
187
|
+
70% {
|
188
|
+
box-shadow: 0 0 0 10px rgba(185, 74, 72, 0);
|
189
|
+
}
|
190
|
+
100% {
|
191
|
+
box-shadow: 0 0 0 0 rgba(185, 74, 72, 0);
|
192
|
+
}
|
193
|
+
}
|
194
|
+
|
187
195
|
@keyframes text-pop-up-top {
|
188
196
|
0% {
|
189
197
|
transform: translateY(0);
|
@@ -202,10 +210,23 @@ label.control-label.label-reset {
|
|
202
210
|
.clear {
|
203
211
|
clear: both;
|
204
212
|
}
|
205
|
-
|
213
|
+
|
214
|
+
.white-space-nowrap, .wsn {
|
206
215
|
white-space: nowrap;
|
207
216
|
}
|
208
217
|
|
218
|
+
.text-pink {
|
219
|
+
color: #F52887;
|
220
|
+
}
|
221
|
+
|
222
|
+
.text-violet {
|
223
|
+
color: #BA55D3;
|
224
|
+
}
|
225
|
+
|
226
|
+
.text-turquoise {
|
227
|
+
color: #07d3d3;
|
228
|
+
}
|
229
|
+
|
209
230
|
@media (max-width: 767px) {
|
210
231
|
body, .container-fluid {
|
211
232
|
padding: 0;
|
@@ -36,6 +36,12 @@
|
|
36
36
|
margin-bottom: 5px;
|
37
37
|
}
|
38
38
|
|
39
|
+
.btn.btn-symbol {
|
40
|
+
font-size: 22px;
|
41
|
+
padding-top: 2px;
|
42
|
+
padding-bottom: 6px;
|
43
|
+
}
|
44
|
+
|
39
45
|
.resource_actions {
|
40
46
|
float: left;
|
41
47
|
margin-top: -10px;
|
@@ -64,13 +70,12 @@
|
|
64
70
|
|
65
71
|
#main .content_actions {
|
66
72
|
margin-bottom: 10px;
|
67
|
-
margin-left: -30px;
|
68
73
|
.btn-group {
|
69
74
|
float: left;
|
70
75
|
margin-left: 10px;
|
71
76
|
}
|
72
77
|
> *:first-child {
|
73
|
-
margin-left:
|
78
|
+
margin-left: 0;
|
74
79
|
}
|
75
80
|
}
|
76
81
|
|
@@ -7,6 +7,16 @@
|
|
7
7
|
}
|
8
8
|
|
9
9
|
table.index_table {
|
10
|
+
&.table th, &.table td {
|
11
|
+
padding: 3px 3px 5px;
|
12
|
+
}
|
13
|
+
input[type='checkbox'] {
|
14
|
+
margin-right: 5px;
|
15
|
+
margin-top: 0;
|
16
|
+
}
|
17
|
+
p {
|
18
|
+
margin: 0 0 4px;
|
19
|
+
}
|
10
20
|
& > thead th {
|
11
21
|
background: #EFEFEF;
|
12
22
|
@include gradient-vertical(#EFEFEF, #DFE1E2);
|
@@ -21,9 +31,9 @@ table.index_table {
|
|
21
31
|
color: #2E3439;
|
22
32
|
border-right: none;
|
23
33
|
text-align: left;
|
24
|
-
|
25
|
-
|
26
|
-
|
34
|
+
& > thead th a.sort_link {
|
35
|
+
white-space: normal;
|
36
|
+
}
|
27
37
|
a, a:link, a:visited {
|
28
38
|
text-decoration: none;
|
29
39
|
display: block;
|
@@ -31,22 +41,18 @@ table.index_table {
|
|
31
41
|
-webkit-font-smoothing: antialiased;
|
32
42
|
color: #2E3439;
|
33
43
|
}
|
34
|
-
|
35
44
|
a:hover {
|
36
45
|
color: #2E3439;
|
37
46
|
}
|
38
|
-
|
39
47
|
&.sortable a {
|
40
|
-
background: url("/images/admin/orderable.png") no-repeat 0 4px;
|
48
|
+
background: url("/images/admin/orderable.png") no-repeat 0 4px;
|
49
|
+
padding-left: 13px;
|
41
50
|
}
|
42
|
-
|
43
51
|
&.sorted-asc a { background-position: 0 -27px; }
|
44
52
|
&.sorted-desc a { background-position: 0 -56px;}
|
45
|
-
|
46
53
|
&.sorted-asc, &.sorted-desc {
|
47
54
|
@include gradient-vertical(#e2e2e2, #d2d4d6);
|
48
55
|
}
|
49
|
-
|
50
56
|
&:last-child {
|
51
57
|
border-right: solid 1px #d4d4d4;
|
52
58
|
}
|
@@ -130,6 +136,66 @@ table.index_table {
|
|
130
136
|
}
|
131
137
|
}
|
132
138
|
|
139
|
+
@mixin colored_row($color) {
|
140
|
+
background-color: $color !important;
|
141
|
+
& > td, &:hover > td {
|
142
|
+
background-color: $color !important;
|
143
|
+
}
|
144
|
+
}
|
145
|
+
.table tbody {
|
146
|
+
.bg-green {
|
147
|
+
@include colored_row(#a4f58a);
|
148
|
+
}
|
149
|
+
.bg-skyblue {
|
150
|
+
@include colored_row(#9de8f7);
|
151
|
+
}
|
152
|
+
.bg-blue {
|
153
|
+
@include colored_row(#bbddfb);
|
154
|
+
}
|
155
|
+
.bg-orange {
|
156
|
+
@include colored_row(#fce492);
|
157
|
+
}
|
158
|
+
.bg-yellow {
|
159
|
+
@include colored_row(#ffefd5);
|
160
|
+
}
|
161
|
+
.bg-pink {
|
162
|
+
@include colored_row(#f2c0db);
|
163
|
+
}
|
164
|
+
.bg-violet {
|
165
|
+
@include colored_row(#f0dcff);
|
166
|
+
}
|
167
|
+
.bg-violet-dark {
|
168
|
+
@include colored_row(#d8c0ff);
|
169
|
+
}
|
170
|
+
.bg-grey {
|
171
|
+
@include colored_row(#eaeaea);
|
172
|
+
color: #828282;
|
173
|
+
}
|
174
|
+
.bg-turquoise {
|
175
|
+
@include colored_row(#ddfff3fc);
|
176
|
+
}
|
177
|
+
.success {
|
178
|
+
@include colored_row(#dff0d8);
|
179
|
+
}
|
180
|
+
.error {
|
181
|
+
@include colored_row(#f2dede);
|
182
|
+
}
|
183
|
+
.warning {
|
184
|
+
@include colored_row(#fcf8e3);
|
185
|
+
}
|
186
|
+
.info {
|
187
|
+
@include colored_row(#d9edf7);
|
188
|
+
}
|
189
|
+
.bg-lemon {
|
190
|
+
@include colored_row(#d7ff76);
|
191
|
+
}
|
192
|
+
}
|
193
|
+
.muted {
|
194
|
+
& > td, &:hover > td {
|
195
|
+
background-color: #ededed !important;
|
196
|
+
}
|
197
|
+
}
|
198
|
+
|
133
199
|
#batch_action_form {
|
134
200
|
margin-bottom: 10px;
|
135
201
|
}
|
@@ -53,7 +53,7 @@ class Admin::AssetsController < ApplicationController
|
|
53
53
|
protected
|
54
54
|
|
55
55
|
def permitted_params
|
56
|
-
params[:asset].try!(:permit, :data, :is_main, :original_name, :
|
56
|
+
params[:asset].try!(:permit, :data, :is_main, :original_name, :human_filename, *Asset.all_translated_attribute_names)
|
57
57
|
end
|
58
58
|
|
59
59
|
def find_asset
|