adminterface 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/lib/adminterface/extensions/base_controller.rb +16 -12
- data/lib/adminterface/extensions/view_helpers/alert_helper.rb +3 -1
- data/lib/adminterface/extensions/views/components/dropdown_menu.rb +4 -1
- data/lib/adminterface/extensions/views/components/menu_item.rb +8 -3
- data/lib/adminterface/extensions/views/components/tabs.rb +38 -13
- data/lib/adminterface/extensions/views/header.rb +2 -1
- data/lib/adminterface/extensions/views/pages/base.rb +2 -1
- data/lib/adminterface/initializers/configurations.rb +1 -1
- data/lib/adminterface/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b30a8aff4bfb6cf7d7b27a339506303115d5405b0469235a8bc30b742dfc83d
|
4
|
+
data.tar.gz: fb9a449e608873ef279011a2aa28842c0ea58ebffe536c2e5dd5ea86073554bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa068e11984acb0479d6cf5b91b9af4ca200da51fd5eca97db028350cf5aac3069c5f1d31fd02232e0b0a8f2cb265e9f93ce87d24bb9c86b8dbbd8daec7362e8
|
7
|
+
data.tar.gz: 38bd9d91f3748df7c4e81482eccf9262e8426aaf02be1a7014be6ef9a4074432608688dabd3ae0b4b37cd3fa8e9ffb68b22fb96e26e7322539cc1cbfcd408e82
|
data/README.md
CHANGED
@@ -50,7 +50,7 @@ Check our [website](https://adminterface.io) to find in-depth documentation for
|
|
50
50
|
See [CONTRIBUTING.md](CONTRIBUTING.md).
|
51
51
|
|
52
52
|
## License
|
53
|
-
Adminterface is free for personal and non-commercial use and with a yearly subscription for commercial purposes. See
|
53
|
+
Adminterface is free for personal and non-commercial use and with a yearly subscription for commercial purposes. See our [Terms of Service in full text](LICENSE.md) for more information.
|
54
54
|
|
55
55
|
### For Commerical License
|
56
56
|
Get a license at https://adminterface.io/pricing, then create and add the `license_key` into the following file in your project:
|
data/Rakefile
CHANGED
@@ -18,7 +18,7 @@ task :prepare_assets do
|
|
18
18
|
system "rm -rf test/dummy/public/packs"
|
19
19
|
system "rm -rf test/dummy/public/packs-test"
|
20
20
|
system "yarn install --frozen-lockfile"
|
21
|
-
system "
|
21
|
+
system "cd test/dummy && yarn install --frozen-lockfile"
|
22
22
|
end
|
23
23
|
|
24
24
|
# Generate dependency licenses
|
@@ -9,11 +9,19 @@ module Adminterface
|
|
9
9
|
|
10
10
|
def set_resource_scope
|
11
11
|
session[:resource_scope] = {
|
12
|
-
controller:
|
13
|
-
action: action_name
|
12
|
+
controller: controller_path,
|
13
|
+
action: action_name_pairing(action_name)
|
14
14
|
}
|
15
15
|
end
|
16
16
|
|
17
|
+
def action_name_pairing(name)
|
18
|
+
case name
|
19
|
+
when "create" then "new"
|
20
|
+
when "update" then "edit"
|
21
|
+
else name
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
17
25
|
def reset_tab
|
18
26
|
params.delete(:tab)
|
19
27
|
params.delete(:anchor_id)
|
@@ -26,30 +34,26 @@ module Adminterface
|
|
26
34
|
def same_controller?
|
27
35
|
return true if resource_scope[:controller].blank?
|
28
36
|
|
29
|
-
resource_scope[:controller] ==
|
37
|
+
resource_scope[:controller] == controller_path
|
30
38
|
end
|
31
39
|
|
32
40
|
def same_action?
|
33
|
-
|
34
|
-
|
35
|
-
case resource_scope[:action]
|
36
|
-
when "edit", "update" then %w[edit update].include? action_name
|
37
|
-
else action_name == resource_scope[:action]
|
38
|
-
end
|
41
|
+
resource_scope[:action].presence &&
|
42
|
+
action_name_pairing(action_name).eql?(resource_scope[:action])
|
39
43
|
end
|
40
44
|
|
41
45
|
def resource_scope
|
42
|
-
session.fetch(:resource_scope, {})
|
46
|
+
session.fetch(:resource_scope, {}).with_indifferent_access
|
43
47
|
end
|
44
48
|
end
|
45
49
|
end
|
46
50
|
end
|
47
51
|
|
48
52
|
# Overwrite activeadmin/lib/active_admin/base_controller.rb
|
49
|
-
|
53
|
+
ActiveAdmin.after_load do
|
50
54
|
ActiveAdmin::BaseController.class_eval do
|
51
55
|
prepend Adminterface::Extensions::BaseController
|
52
56
|
before_action :reset_tab, if: :should_reset_tab?
|
53
|
-
|
57
|
+
before_action :set_resource_scope
|
54
58
|
end
|
55
59
|
end
|
@@ -4,7 +4,9 @@ module Adminterface
|
|
4
4
|
module AlertHelper
|
5
5
|
def flashes_html
|
6
6
|
flash.each do |type, msg|
|
7
|
-
concat(content_tag(:div, msg,
|
7
|
+
concat(content_tag(:div, msg,
|
8
|
+
class: "flash flash_#{type} alert #{flash_css_classes[type.to_sym]}".squish,
|
9
|
+
role: "alert"))
|
8
10
|
end
|
9
11
|
nil
|
10
12
|
end
|
@@ -47,7 +47,10 @@ ActiveAdmin::Views::DropdownMenu.class_eval do
|
|
47
47
|
button_options[:class] = "#{button_options[:class]} dropdown-toggle".squish
|
48
48
|
options[:class] = "#{options[:class]} dropdown".squish
|
49
49
|
|
50
|
-
@button = build_button(
|
50
|
+
@button = build_button(
|
51
|
+
name,
|
52
|
+
button_options.merge("data-bs-toggle": "dropdown", role: "button", "aria-expanded": "false")
|
53
|
+
)
|
51
54
|
@menu = build_menu(menu_options)
|
52
55
|
|
53
56
|
super(options)
|
@@ -15,8 +15,13 @@ module Adminterface
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
19
|
-
|
18
|
+
def current_item_options(item)
|
19
|
+
return {} unless item.current?(assigns[:current_tab])
|
20
|
+
|
21
|
+
{
|
22
|
+
class: "#{item.html_options[:class]} active".squish,
|
23
|
+
"aria-current": "page"
|
24
|
+
}
|
20
25
|
end
|
21
26
|
end
|
22
27
|
end
|
@@ -51,7 +56,7 @@ ActiveAdmin::Views::MenuItem.class_eval do
|
|
51
56
|
end
|
52
57
|
|
53
58
|
if url
|
54
|
-
item_options = item.html_options.merge(
|
59
|
+
item_options = item.html_options.merge(current_item_options(item)).delete_if { |_k, v| v.blank? }
|
55
60
|
text_node link_to(menu_label, url, **item_options)
|
56
61
|
else
|
57
62
|
span menu_label, item.html_options.merge(class: "navbar-text")
|
@@ -6,20 +6,16 @@ module Adminterface
|
|
6
6
|
def build_menu_item(title, options, &_block)
|
7
7
|
fragment = options.fetch(:id, fragmentize(title))
|
8
8
|
html_options = options.fetch(:html_options, {})
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
link_to title, url_for(tab: fragment, anchor: id, anchor_id: id), class: toggler_class(fragment)
|
13
|
-
else
|
14
|
-
link_to title, "##{fragment}", class: toggler_class(fragment), data: {"bs-toggle": "tab", "bs-target": "##{fragment}"}
|
15
|
-
end
|
9
|
+
|
10
|
+
li html_options.merge(class: "nav-item", role: "presentation") do
|
11
|
+
@http ? link_to_http(title, fragment) : link_to_js(title, fragment)
|
16
12
|
end
|
17
13
|
end
|
18
14
|
|
19
15
|
def build_content_item(title, options, &block)
|
20
16
|
fragment = options.fetch(:id, fragmentize(title))
|
21
|
-
options = options.reverse_merge(id:
|
22
|
-
div(options.merge(
|
17
|
+
options = options.reverse_merge(id: fragment, "aria-labelledby": "#{fragment}-tab")
|
18
|
+
div(options.merge(tab_pane_options(fragment)), &block)
|
23
19
|
end
|
24
20
|
|
25
21
|
def default_css_class
|
@@ -39,12 +35,41 @@ module Adminterface
|
|
39
35
|
|
40
36
|
private
|
41
37
|
|
42
|
-
def
|
43
|
-
|
38
|
+
def link_to_js(title, fragment)
|
39
|
+
options = toggler_options(fragment).merge(data: {"bs-toggle": "tab", "bs-target": "##{fragment}"})
|
40
|
+
link_to(title, "##{fragment}", **options)
|
41
|
+
end
|
42
|
+
|
43
|
+
def link_to_http(title, fragment)
|
44
|
+
params[:tab] ||= @default_tab || fragment
|
45
|
+
|
46
|
+
link_to(title,
|
47
|
+
url_for(controller: resource_scope[:controller],
|
48
|
+
action: resource_scope[:action], tab: fragment, anchor: id, anchor_id: id),
|
49
|
+
**toggler_options(fragment))
|
50
|
+
end
|
51
|
+
|
52
|
+
def resource_scope
|
53
|
+
session.fetch(:resource_scope, {}).with_indifferent_access
|
54
|
+
end
|
55
|
+
|
56
|
+
def toggler_options(fragment)
|
57
|
+
defaults = {id: "#{fragment}-tab", "aria-controls": fragment}
|
58
|
+
options =
|
59
|
+
if current_tab?(fragment)
|
60
|
+
{class: "nav-link active", "aria-selected": "true"}
|
61
|
+
else
|
62
|
+
{class: "nav-link", "aria-selected": "false"}
|
63
|
+
end
|
64
|
+
|
65
|
+
defaults.merge(options)
|
44
66
|
end
|
45
67
|
|
46
|
-
def
|
47
|
-
|
68
|
+
def tab_pane_options(fragment)
|
69
|
+
{
|
70
|
+
class: "tab-pane #{current_tab?(fragment) ? "active" : nil}".squish,
|
71
|
+
role: "tabpanel"
|
72
|
+
}
|
48
73
|
end
|
49
74
|
|
50
75
|
def current_tab?(fragment)
|
@@ -26,7 +26,8 @@ module Adminterface
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def navbar_toggler
|
29
|
-
button(class: "navbar-toggler", 'data-bs-target': "##{ID}",
|
29
|
+
button(class: "navbar-toggler", 'data-bs-target': "##{ID}",
|
30
|
+
'data-bs-toggle': "collapse", "aria-expanded": "false") do
|
30
31
|
span class: "navbar-toggler-icon"
|
31
32
|
end
|
32
33
|
end
|
@@ -102,7 +102,8 @@ module Adminterface
|
|
102
102
|
div class: "flashes" do
|
103
103
|
flash_messages.each do |type, messages|
|
104
104
|
[*messages].each do |message|
|
105
|
-
div class: "flash flash_#{type} alert #{flash_css_classes[type.to_sym]} #{flash_dismissible_class}".squish
|
105
|
+
div class: "flash flash_#{type} alert #{flash_css_classes[type.to_sym]} #{flash_dismissible_class}".squish,
|
106
|
+
role: "alert" do
|
106
107
|
text_node(message)
|
107
108
|
button(class: "btn-close", "data-bs-dismiss": "alert", "aria-label": "Close") if flash_dismissible?
|
108
109
|
end
|
@@ -25,7 +25,7 @@ module Adminterface
|
|
25
25
|
|
26
26
|
meta_tags = {
|
27
27
|
version: Adminterface::VERSION,
|
28
|
-
viewport: "width=device-width, height=device-height, initial-scale=1.0
|
28
|
+
viewport: "width=device-width, height=device-height, initial-scale=1.0"
|
29
29
|
}
|
30
30
|
|
31
31
|
config.meta_tags_for_logged_out_pages = meta_tags
|
data/lib/adminterface/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adminterface
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- I-Lung Lee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activeadmin
|