admin_it 1.0.6 → 1.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -0
- data/README_RU.md +18 -0
- data/app/assets/javascript/admin_it/admin_it.js +2 -10
- data/app/views/admin_it/context/_show.html.slim +38 -0
- data/app/views/admin_it/context/_table.html.slim +4 -0
- data/app/views/admin_it/shared/_form.html.slim +1 -1
- data/app/views/admin_it/show.html.slim +1 -5
- data/app/views/layouts/admin_it_dialog.html.slim +1 -1
- data/lib/admin_it/context/context.rb +3 -1
- data/lib/admin_it/context/show_context.rb +20 -2
- data/lib/admin_it/context/single_context.rb +2 -2
- data/lib/admin_it/data/active_record.rb +7 -3
- data/lib/admin_it/helpers/table.rb +36 -14
- data/lib/admin_it/locales/en.yml +8 -1
- data/lib/admin_it/locales/ru.yml +7 -0
- data/lib/admin_it/resource.rb +4 -3
- data/lib/admin_it/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c69b40dfe779b858729883eea07b1077f74216b4
|
4
|
+
data.tar.gz: 7ba60b0a798165f512348b509411fffad8f1d17f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a55e137e2e089570a4a00faeeee9eeb1cc38657b5055b3153d304e785a1b6109cf1a1281b9e525ab9185d4c04c3906105711678f573bee09d5fe43d2b1a7452
|
7
|
+
data.tar.gz: 7bbfd6ff962a80ac79adeb880730693c072d5b003828f5d6c27d9b2dbd9da95e6154752d63689557de88f908760f2834032052c1a1e0cd587aa07d15597b33d6
|
data/README.md
CHANGED
data/README_RU.md
CHANGED
@@ -37,6 +37,24 @@ bundle install
|
|
37
37
|
|
38
38
|
# Изменения
|
39
39
|
|
40
|
+
`1.0.7`
|
41
|
+
|
42
|
+
* исправлено удаление записей
|
43
|
+
* добавлено подтверждение удаления
|
44
|
+
* налажено редактирование и создание простых записей
|
45
|
+
|
46
|
+
`1.0.6`
|
47
|
+
|
48
|
+
* исправлено: [#1](/../../issues/1)
|
49
|
+
|
50
|
+
`1.0.5`
|
51
|
+
|
52
|
+
* исправлено: font-awesome asset path
|
53
|
+
|
54
|
+
`1.0.4`
|
55
|
+
|
56
|
+
* исправлено: font-awesome
|
57
|
+
|
40
58
|
`1.0.3`
|
41
59
|
|
42
60
|
* исправлено: assets
|
@@ -70,20 +70,12 @@ var initLinks = function() {
|
|
70
70
|
});
|
71
71
|
}
|
72
72
|
|
73
|
-
var initFilters = function() {
|
74
|
-
$('[data-filter-values]').each(function(idx, container) {
|
75
|
-
$.each($(container).data().filterValues, function(i, v) {
|
76
|
-
var html = "<a class='label label-success' href='#'>" + v.value + ' ' + "<span class='badge'>" + v.count + "</span></a>";
|
77
|
-
$(container).append(html);
|
78
|
-
});
|
79
|
-
});
|
80
|
-
}
|
81
|
-
|
82
73
|
$(document).on('ready page:load', function() {
|
83
74
|
initPartials();
|
84
75
|
initTiles();
|
85
76
|
initTabs();
|
86
77
|
initPopups();
|
87
78
|
initLinks();
|
88
|
-
//
|
79
|
+
// allow dialog content reloading
|
80
|
+
$('.modal').on('hidden.bs.modal', function() { $(this).removeData(); })
|
89
81
|
});
|
@@ -0,0 +1,38 @@
|
|
1
|
+
- for_context ||= context
|
2
|
+
|
3
|
+
- content_for :title do
|
4
|
+
- if for_context.confirm?
|
5
|
+
- if for_context.confirm == :destroy
|
6
|
+
span class="text-danger"
|
7
|
+
i class="fa fa-exclamation-triangle"
|
8
|
+
= ' ' + t('admin_it.destroying')
|
9
|
+
- else
|
10
|
+
= t('admin_it.details')
|
11
|
+
|
12
|
+
- if for_context.layout.empty?
|
13
|
+
h4 = yield :title
|
14
|
+
|
15
|
+
- if for_context.confirm?
|
16
|
+
- if for_context.confirm == :destroy
|
17
|
+
p = t('admin_it.confirm.destroy.header')
|
18
|
+
|
19
|
+
dl class="dl-horizontal"
|
20
|
+
- for_context.fields.each do |f|
|
21
|
+
- next if f.type == :relation
|
22
|
+
dt = f.display_name
|
23
|
+
= field f, tag: 'dl'
|
24
|
+
div class="clearfix"
|
25
|
+
|
26
|
+
- if for_context.confirm?
|
27
|
+
- if for_context.confirm == :destroy
|
28
|
+
p = t('admin_it.confirm.destroy.text')
|
29
|
+
|
30
|
+
- content_for :buttons do
|
31
|
+
- if for_context.confirm?
|
32
|
+
- if for_context.confirm == :destroy
|
33
|
+
= link_to( \
|
34
|
+
'<i class="fa fa-trash-o"></i> '.html_safe + t('admin_it.action.destroy'),
|
35
|
+
for_context.path, \
|
36
|
+
method: :delete, \
|
37
|
+
class: 'btn btn-danger' \
|
38
|
+
)
|
@@ -23,6 +23,7 @@ module AdminIt
|
|
23
23
|
value.nil? ? default_icon : value.to_s
|
24
24
|
end
|
25
25
|
dsl_use_hash :fields
|
26
|
+
dsl_boolean :confirm_destroy
|
26
27
|
end
|
27
28
|
|
28
29
|
inherited_class_reader :resource, :entity_class
|
@@ -35,6 +36,7 @@ module AdminIt
|
|
35
36
|
@resource = _resource
|
36
37
|
@context_name = context_name
|
37
38
|
@entity_class = @resource.entity_class
|
39
|
+
@confirm_destroy = @resource.confirm_destroy?
|
38
40
|
|
39
41
|
import_data_module(base)
|
40
42
|
|
@@ -91,7 +93,7 @@ module AdminIt
|
|
91
93
|
end
|
92
94
|
|
93
95
|
class_attr_reader :collection?, :single?, :entity_class, :resource, :icon,
|
94
|
-
:entity_path?
|
96
|
+
:entity_path?, :confirm_destroy?
|
95
97
|
attr_reader :top_menu, :toolbar, :parent, :template, :controller
|
96
98
|
|
97
99
|
CONTEXT_REGEXP = /\A
|
@@ -2,6 +2,8 @@ module AdminIt
|
|
2
2
|
class ShowContext < SingleContext
|
3
3
|
include Identifiable
|
4
4
|
|
5
|
+
CONFIRMS = %i(destroy update)
|
6
|
+
|
5
7
|
class << self
|
6
8
|
include Renderable
|
7
9
|
|
@@ -24,6 +26,22 @@ module AdminIt
|
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
29
|
+
attr_reader :confirm
|
30
|
+
|
31
|
+
after_load do |store: {}, params: {}|
|
32
|
+
self.confirm = params[:confirm]
|
33
|
+
end
|
34
|
+
|
35
|
+
def confirm=(value)
|
36
|
+
value = value.downcase.to_sym if value.is_a?(String)
|
37
|
+
return unless value.is_a?(Symbol) && CONFIRMS.include?(value)
|
38
|
+
@confirm = value
|
39
|
+
end
|
40
|
+
|
41
|
+
def confirm?
|
42
|
+
!@confirm.nil?
|
43
|
+
end
|
44
|
+
|
27
45
|
def destroy_entity
|
28
46
|
if entity_destroyer.nil?
|
29
47
|
if controller.respond_to?("#{resource.name}_destroy")
|
@@ -31,7 +49,7 @@ module AdminIt
|
|
31
49
|
elsif controller.respond_to?(:destroy_entity)
|
32
50
|
controller.destroy_entity(entity_class)
|
33
51
|
else
|
34
|
-
|
52
|
+
do_destroy_entity
|
35
53
|
end
|
36
54
|
else
|
37
55
|
entity_destroyer.call(controller)
|
@@ -40,6 +58,6 @@ module AdminIt
|
|
40
58
|
|
41
59
|
protected
|
42
60
|
|
43
|
-
def
|
61
|
+
def do_destroy_entity; end
|
44
62
|
end
|
45
63
|
end
|
@@ -147,7 +147,7 @@ module AdminIt
|
|
147
147
|
elsif controller.respond_to?(:save)
|
148
148
|
controller.save(entity_class, name)
|
149
149
|
else
|
150
|
-
|
150
|
+
do_save_entity
|
151
151
|
end
|
152
152
|
else
|
153
153
|
entity_saver.call(controller, name)
|
@@ -158,7 +158,7 @@ module AdminIt
|
|
158
158
|
|
159
159
|
protected
|
160
160
|
|
161
|
-
def
|
161
|
+
def do_save_entity; end
|
162
162
|
end
|
163
163
|
|
164
164
|
class EditContext < SavableSingleContext
|
@@ -105,7 +105,7 @@ module AdminIt
|
|
105
105
|
module SavableSingleContext
|
106
106
|
protected
|
107
107
|
|
108
|
-
def
|
108
|
+
def do_save_entity
|
109
109
|
if AdminIt::Env.pundit?
|
110
110
|
controller.authorize(entity, "#{self.class.save_action}?")
|
111
111
|
end
|
@@ -165,7 +165,7 @@ module AdminIt
|
|
165
165
|
|
166
166
|
protected
|
167
167
|
|
168
|
-
def
|
168
|
+
def do_destroy_entity
|
169
169
|
if AdminIt::Env.pundit?
|
170
170
|
controller.authorize(entity, :destroy?)
|
171
171
|
end
|
@@ -214,7 +214,11 @@ module AdminIt
|
|
214
214
|
def read_value(entity)
|
215
215
|
value = entity.send(name)
|
216
216
|
if type == :relation
|
217
|
-
assoc.collection?
|
217
|
+
if assoc.collection?
|
218
|
+
value.nil? || value.empty? ? [] : value.map(&:id).to_json
|
219
|
+
else
|
220
|
+
value.nil? ? nil : value.id
|
221
|
+
end
|
218
222
|
else
|
219
223
|
value
|
220
224
|
end
|
@@ -20,25 +20,47 @@ module AdminIt
|
|
20
20
|
default_tag 'td'
|
21
21
|
|
22
22
|
before_capture do
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
context = parent.parent.context
|
24
|
+
entity = context.entity
|
25
|
+
resource = parent.parent.resource
|
26
|
+
single = resource.singles.select { |c| !(c <= NewContext) }
|
27
|
+
buttons = single.map do |_context|
|
28
|
+
cl = _context <= ShowContext ? 'info' : 'default'
|
29
|
+
href = _context.path(entity)
|
27
30
|
"<a class=\"btn btn-xs btn-#{cl}\" href=\"#{href}\">" \
|
28
|
-
"<i class=\"fa fa-#{
|
31
|
+
"<i class=\"fa fa-#{_context.icon}\"></i></a>"
|
32
|
+
end
|
33
|
+
if resource.destroyable?
|
34
|
+
if context.confirm_destroy?
|
35
|
+
confirm = single.find { |c| c.context_name == :confirm } ||
|
36
|
+
single.first { |c| c <= ShowContext }
|
37
|
+
buttons << if confirm.nil?
|
38
|
+
@template.link_to(
|
39
|
+
html_safe('<i class="fa fa-trash-o"></i>'),
|
40
|
+
show.path(entity),
|
41
|
+
method: :delete,
|
42
|
+
confirm: I18n.t('admin_it.confirm.destroy.text'),
|
43
|
+
class: 'btn btn-xs btn-danger'
|
44
|
+
)
|
45
|
+
else
|
46
|
+
'<a class="btn btn-xs btn-danger" ' +
|
47
|
+
%Q{data-toggle="modal" data-target="#confirm_modal" } +
|
48
|
+
%Q{href="#{confirm.path(entity)}} +
|
49
|
+
'?layout=dialog&confirm=destroy">' +
|
50
|
+
'<i class="fa fa-trash-o"></i></a>'
|
51
|
+
end
|
52
|
+
else
|
53
|
+
buttons << @template.link_to(
|
54
|
+
html_safe('<i class="fa fa-trash-o"></i>'),
|
55
|
+
show.path(entity),
|
56
|
+
method: :delete,
|
57
|
+
class: 'btn btn-xs btn-danger'
|
58
|
+
)
|
29
59
|
end
|
30
|
-
show = single.first { |c| c <= ShowContext }
|
31
|
-
unless show.nil?
|
32
|
-
buttons << @template.link_to(
|
33
|
-
html_safe('<i class="fa fa-trash-o"></i>'),
|
34
|
-
show.path(parent.parent.context.entity),
|
35
|
-
method: :delete,
|
36
|
-
class: 'btn btn-xs btn-danger'
|
37
|
-
)
|
38
60
|
end
|
39
61
|
|
40
62
|
html = buttons.join
|
41
|
-
html = "<div class=\"btn-group\">#{html}</
|
63
|
+
html = "<div class=\"btn-group\">#{html}</div>" if buttons.size > 1
|
42
64
|
|
43
65
|
self[:content] = html_safe(html)
|
44
66
|
end
|
data/lib/admin_it/locales/en.yml
CHANGED
@@ -11,4 +11,11 @@ en:
|
|
11
11
|
create: 'Create'
|
12
12
|
save: 'Save'
|
13
13
|
close: 'Close'
|
14
|
-
|
14
|
+
destroy: 'Delete'
|
15
|
+
filters: 'Filters'
|
16
|
+
details: 'Details'
|
17
|
+
destroying: 'Deletion'
|
18
|
+
confirm:
|
19
|
+
destroy:
|
20
|
+
header: 'You are going to delete following record:'
|
21
|
+
text: 'Please, confirm deletion'
|
data/lib/admin_it/locales/ru.yml
CHANGED
@@ -11,4 +11,11 @@ ru:
|
|
11
11
|
create: 'Создать'
|
12
12
|
save: 'Сохранить'
|
13
13
|
close: 'Закрыть'
|
14
|
+
destroy: 'Удалить'
|
14
15
|
filters: 'Фильтры'
|
16
|
+
details: 'Подробная информация'
|
17
|
+
destroying: 'Удаление'
|
18
|
+
confirm:
|
19
|
+
destroy:
|
20
|
+
header: 'Вы собираетесь удалить следующую запись:'
|
21
|
+
text: 'Подтвердите удаление'
|
data/lib/admin_it/resource.rb
CHANGED
@@ -55,6 +55,7 @@ module AdminIt
|
|
55
55
|
|
56
56
|
dsl_accessor :icon
|
57
57
|
dsl_use_hash :fields
|
58
|
+
dsl_boolean :confirm_destroy
|
58
59
|
|
59
60
|
define_callbacks :initialize
|
60
61
|
|
@@ -202,7 +203,7 @@ module AdminIt
|
|
202
203
|
end
|
203
204
|
|
204
205
|
def define_controller
|
205
|
-
c_name = "#{name.to_s.camelize}Controller" # !
|
206
|
+
c_name = "#{name.to_s.camelize}Controller" # !PORTABLE
|
206
207
|
resource = self
|
207
208
|
c_class = Class.new(AdminIt.config.controller) do
|
208
209
|
@resource = resource
|
@@ -213,14 +214,14 @@ module AdminIt
|
|
213
214
|
|
214
215
|
if _context < SavableSingleContext
|
215
216
|
define_method _context.save_action do
|
216
|
-
load_context(_context) { context.save_entity
|
217
|
+
load_context(_context) { context.save_entity }
|
217
218
|
end
|
218
219
|
end
|
219
220
|
end
|
220
221
|
|
221
222
|
if resource.destroyable?
|
222
223
|
define_method :destroy do
|
223
|
-
load_context(resource[:show]) { context.destroy_entity
|
224
|
+
load_context(resource[:show]) { context.destroy_entity }
|
224
225
|
end
|
225
226
|
end
|
226
227
|
end
|
data/lib/admin_it/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: admin_it
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Ovchinnikov
|
@@ -209,6 +209,7 @@ files:
|
|
209
209
|
- app/assets/stylesheets/admin_it/bootstrap-theme.min.css
|
210
210
|
- app/assets/stylesheets/admin_it/bootstrap.min.css
|
211
211
|
- app/assets/stylesheets/admin_it/font-awesome.min.css.erb
|
212
|
+
- app/views/admin_it/context/_show.html.slim
|
212
213
|
- app/views/admin_it/context/_table.html.slim
|
213
214
|
- app/views/admin_it/context/_tiles.html.slim
|
214
215
|
- app/views/admin_it/edit.html.slim
|