itsf_backend 1.0.1
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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +43 -0
- data/Rakefile +21 -0
- data/app/assets/images/itsf/backend/favicon.png +0 -0
- data/app/assets/javascripts/itsf/backend/application.js +21 -0
- data/app/assets/javascripts/itsf/backend/application/ace.coffee +51 -0
- data/app/assets/javascripts/itsf/backend/application/acts-as-list.coffee +21 -0
- data/app/assets/javascripts/itsf/backend/application/auto-submit.coffee +21 -0
- data/app/assets/javascripts/itsf/backend/application/autofocus-last.coffee +4 -0
- data/app/assets/javascripts/itsf/backend/application/drop-down-hover.coffee +8 -0
- data/app/assets/javascripts/itsf/backend/application/itsf-logo.coffee +24 -0
- data/app/assets/javascripts/itsf/backend/vendor/jQueryRotate.js +339 -0
- data/app/assets/javascripts/itsf/backend/vendor/jquery.redirect.js +119 -0
- data/app/assets/javascripts/itsf_backend.js +1 -0
- data/app/assets/stylesheets/itsf/backend/application.css.less +30 -0
- data/app/assets/stylesheets/itsf/backend/application/ace.css.less +6 -0
- data/app/assets/stylesheets/itsf/backend/application/basic-page.css.less +10 -0
- data/app/assets/stylesheets/itsf/backend/application/bootstrap-extensions.css.less +48 -0
- data/app/assets/stylesheets/itsf/backend/application/bottom-margin-extension.css.less +9 -0
- data/app/assets/stylesheets/itsf/backend/application/button-responsive.css.less +7 -0
- data/app/assets/stylesheets/itsf/backend/application/check-box-margin-fix.css.less +5 -0
- data/app/assets/stylesheets/itsf/backend/application/code.css.less +6 -0
- data/app/assets/stylesheets/itsf/backend/application/form-errors.css.less +6 -0
- data/app/assets/stylesheets/itsf/backend/application/form-inline-margin-fixes.css.less +9 -0
- data/app/assets/stylesheets/itsf/backend/application/hexagon.css.less +161 -0
- data/app/assets/stylesheets/itsf/backend/application/itsf-dashboard-panels.css.less +9 -0
- data/app/assets/stylesheets/itsf/backend/application/itsf-logo.css.less +107 -0
- data/app/assets/stylesheets/itsf/backend/application/navigation-logo.css.less +5 -0
- data/app/assets/stylesheets/itsf/backend/application/panel-footer-pagination.css.less +8 -0
- data/app/assets/stylesheets/itsf/backend/application/panel-with-actions.css.less +21 -0
- data/app/assets/stylesheets/itsf/backend/application/table-actions.css.less +9 -0
- data/app/assets/stylesheets/itsf/backend/application/table-responsive.css.less +3 -0
- data/app/assets/stylesheets/itsf/backend/bootstrap_and_overrides.css.less +34 -0
- data/app/assets/stylesheets/itsf/backend/vendor/timeline.min.css +1 -0
- data/app/assets/stylesheets/itsf_backend.css +3 -0
- data/app/concerns/routing/service_concern.rb +12 -0
- data/app/controllers/concerns/controller/acts_as_list_concern.rb +13 -0
- data/app/controllers/concerns/controller/acts_as_published_concern.rb +13 -0
- data/app/controllers/concerns/controller/pagination_concern.rb +15 -0
- data/app/controllers/concerns/controller/pundit_namespaced_authorize_concern.rb +19 -0
- data/app/controllers/concerns/controller/ransack_concern.rb +25 -0
- data/app/controllers/concerns/controller/rest_actions_concern_with_pundit.rb +93 -0
- data/app/controllers/itsf/backend/application_controller.rb +6 -0
- data/app/controllers/itsf/backend/base_controller.rb +34 -0
- data/app/controllers/itsf/backend/dashboard_controller.rb +20 -0
- data/app/controllers/itsf/backend/home_controller.rb +27 -0
- data/app/controllers/itsf/backend/resource/base_controller.rb +35 -0
- data/app/controllers/itsf/backend/service/base_controller.rb +29 -0
- data/app/extensions/concerns/head_row/acts_as_list_extensions.rb +11 -0
- data/app/extensions/concerns/head_row/association_extensions.rb +14 -0
- data/app/extensions/concerns/head_row/paperclip_extensions.rb +11 -0
- data/app/extensions/concerns/head_row/published_extensions.rb +11 -0
- data/app/extensions/concerns/head_row/ransack_extensions.rb +7 -0
- data/app/extensions/concerns/head_row/timestamp_extensions.rb +21 -0
- data/app/extensions/concerns/object_extensions.rb +8 -0
- data/app/extensions/concerns/ransack_form_builder_extensions.rb +72 -0
- data/app/extensions/concerns/resource_row/acts_as_list_extensions.rb +28 -0
- data/app/extensions/concerns/resource_row/association_extensions.rb +22 -0
- data/app/extensions/concerns/resource_row/paperclip_extensions.rb +18 -0
- data/app/extensions/concerns/resource_row/published_extensions.rb +24 -0
- data/app/extensions/concerns/resource_row/timestamp_extensions.rb +23 -0
- data/app/extensions/concerns/simple_form_form_builder_extensions.rb +28 -0
- data/app/helpers/itsf/backend/application_helper.rb +9 -0
- data/app/policies/itsf/backend/base_policy.rb +67 -0
- data/app/policies/itsf/backend/dashboard_policy.rb +14 -0
- data/app/policies/itsf/backend/engine_policy.rb +14 -0
- data/app/policies/itsf/backend/service/base_policy.rb +29 -0
- data/app/presenters/bootstrap_table_presenter.rb.old +106 -0
- data/app/views/itsf/backend/dashboard/_dashboard_panel.html.haml +18 -0
- data/app/views/itsf/backend/dashboard/index.html.haml +7 -0
- data/app/views/itsf/backend/home/_dashboard_panel.html.haml +26 -0
- data/app/views/itsf/backend/home/_index_extras.html.haml +0 -0
- data/app/views/itsf/backend/home/index.html.haml +14 -0
- data/app/views/itsf/backend/i18n/_navigation.html.haml +10 -0
- data/app/views/itsf/backend/resource/base/_form.html.haml +2 -0
- data/app/views/itsf/backend/resource/base/_form_errors.html.haml +6 -0
- data/app/views/itsf/backend/resource/base/_scopes.html.haml +1 -0
- data/app/views/itsf/backend/resource/base/_search.html.haml +3 -0
- data/app/views/itsf/backend/resource/base/_show.html.haml +2 -0
- data/app/views/itsf/backend/resource/base/_show_extras.html.haml +0 -0
- data/app/views/itsf/backend/resource/base/_table.html.haml +2 -0
- data/app/views/itsf/backend/resource/base/_table_actions.html.haml +15 -0
- data/app/views/itsf/backend/resource/base/edit.html.haml +17 -0
- data/app/views/itsf/backend/resource/base/index.html.haml +48 -0
- data/app/views/itsf/backend/resource/base/new.html.haml +15 -0
- data/app/views/itsf/backend/resource/base/show.html.haml +28 -0
- data/app/views/itsf/backend/service/base/_form.html.haml +0 -0
- data/app/views/itsf/backend/service/base/_form_errors.html.haml +6 -0
- data/app/views/itsf/backend/service/base/_messages.html.erb +5 -0
- data/app/views/itsf/backend/service/base/index.html.haml +18 -0
- data/app/views/itsf/backend/service/base/invoke.html.haml +16 -0
- data/app/views/itsf/backend/service/base/success.html.haml +13 -0
- data/app/views/layouts/itsf/backend/_footer.html.haml +1 -0
- data/app/views/layouts/itsf/backend/_logo.html.haml +4 -0
- data/app/views/layouts/itsf/backend/_main_navigation.html.haml +6 -0
- data/app/views/layouts/itsf/backend/_main_navigation_drop_down.html.haml +20 -0
- data/app/views/layouts/itsf/backend/base.html.haml +56 -0
- data/config/initializers/assets.rb +3 -0
- data/config/initializers/extend_object.rb +1 -0
- data/config/initializers/extend_ransack_form_builder.rb +4 -0
- data/config/initializers/extend_simple_form_form_builder.rb +5 -0
- data/config/locales/de.yml +104 -0
- data/config/locales/en.yml +99 -0
- data/config/rbac.yml +7 -0
- data/config/routes.rb +3 -0
- data/lib/generators/itsf/backend/home_controller/home_controller_generator.rb +77 -0
- data/lib/generators/itsf/backend/home_controller/templates/home_controller.rb +6 -0
- data/lib/generators/itsf/backend/home_controller/templates/routes.source +2 -0
- data/lib/generators/itsf/backend/install/install_generator.rb +23 -0
- data/lib/generators/itsf/backend/install/templates/backend_controller.rb +2 -0
- data/lib/generators/itsf/backend/install/templates/initializer.rb +95 -0
- data/lib/generators/itsf/backend/install/templates/routes.source +9 -0
- data/lib/generators/itsf/backend/resource/resource_generator.rb +96 -0
- data/lib/generators/itsf/backend/resource/templates/controller.rb +34 -0
- data/lib/generators/itsf/backend/resource/templates/routes.source +2 -0
- data/lib/itsf/backend.rb +11 -0
- data/lib/itsf/backend/configuration.rb +38 -0
- data/lib/itsf/backend/engine.rb +16 -0
- data/lib/itsf/backend/features.rb +13 -0
- data/lib/itsf/backend/policies.rb +13 -0
- data/lib/itsf/backend/spec_helpers.rb +47 -0
- data/lib/itsf/backend/version.rb +5 -0
- data/lib/itsf_backend.rb +21 -0
- data/lib/tasks/itsf/backend_tasks.rake +4 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/models/post.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +29 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +38 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +41 -0
- data/spec/dummy/config/environments/production.rb +79 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/itsf_backend.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +56 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/db/migrate/20151024185112_create_posts.rb +10 -0
- data/spec/dummy/db/schema.rb +15 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/factories/posts.rb +6 -0
- data/spec/models/post_spec.rb +5 -0
- data/spec/rails_helper.rb +52 -0
- data/spec/spec_helper.rb +90 -0
- data/spec/support/addons.rb +3 -0
- metadata +688 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
module Itsf::Backend
|
|
2
|
+
class BasePolicy
|
|
3
|
+
attr_reader :user, :record
|
|
4
|
+
|
|
5
|
+
def initialize(user, record)
|
|
6
|
+
@user = user
|
|
7
|
+
@record = record
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def index?
|
|
11
|
+
# false
|
|
12
|
+
authorize_with_rbac(user, record, __method__)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def show?
|
|
16
|
+
scope.where(id: record.id).exists?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def create?
|
|
20
|
+
# false
|
|
21
|
+
authorize_with_rbac(user, record, __method__)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def new?
|
|
25
|
+
create?
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def update?
|
|
29
|
+
# false
|
|
30
|
+
authorize_with_rbac(user, record, __method__)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def edit?
|
|
34
|
+
update?
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def destroy?
|
|
38
|
+
# false
|
|
39
|
+
authorize_with_rbac(user, record, __method__)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def scope
|
|
43
|
+
Pundit.policy_scope!(user, record.class)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class Scope
|
|
47
|
+
attr_reader :user, :scope
|
|
48
|
+
|
|
49
|
+
def initialize(user, scope)
|
|
50
|
+
@user = user
|
|
51
|
+
@scope = scope
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def resolve
|
|
55
|
+
scope
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
private
|
|
60
|
+
|
|
61
|
+
def authorize_with_rbac(user, record, method_name)
|
|
62
|
+
resource_name = record.class == Class ? record.name : record.class.name
|
|
63
|
+
permission_identifier = "#{resource_name.underscore}/#{method_name.to_s.chomp('?')}"
|
|
64
|
+
allowed = user.respond_to?(:allowed_to?) ? user.allowed_to?(permission_identifier) : true
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Itsf::Backend
|
|
2
|
+
class DashboardPolicy < Struct.new(:user, :dashboard)
|
|
3
|
+
def access?
|
|
4
|
+
permission_identifier = self.class.name.gsub('Policy', '').underscore
|
|
5
|
+
allowed = user.respond_to?(:allowed_to?) ? user.allowed_to?(permission_identifier) : true
|
|
6
|
+
if allowed
|
|
7
|
+
Rails.logger.info "Allowed access to #{permission_identifier} for #{user}"
|
|
8
|
+
else
|
|
9
|
+
Rails.logger.info "Denied access to #{permission_identifier} for #{user}"
|
|
10
|
+
end
|
|
11
|
+
allowed
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Itsf::Backend
|
|
2
|
+
class EnginePolicy < Struct.new(:user, :engine)
|
|
3
|
+
def access?
|
|
4
|
+
permission_identifier = self.class.name.gsub('Policy', '').underscore
|
|
5
|
+
allowed = user.respond_to?(:allowed_to?) ? user.allowed_to?(permission_identifier) : true
|
|
6
|
+
if allowed
|
|
7
|
+
Rails.logger.debug "User #{user} is allowed to access #{permission_identifier}"
|
|
8
|
+
else
|
|
9
|
+
Rails.logger.debug "User #{user} is not allowed to access #{permission_identifier}"
|
|
10
|
+
end
|
|
11
|
+
allowed
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Itsf::Backend
|
|
2
|
+
class Service::BasePolicy
|
|
3
|
+
attr_reader :user, :service
|
|
4
|
+
|
|
5
|
+
def initialize(user, service)
|
|
6
|
+
@user = user
|
|
7
|
+
@service = service
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def index?
|
|
11
|
+
authorize_with_rbac(user, service, __method__)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def invoke?
|
|
15
|
+
authorize_with_rbac(user, service, __method__)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def call?
|
|
19
|
+
invoke?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def authorize_with_rbac(user, service_class, method_name)
|
|
25
|
+
permission_identifier = "#{service_class.name.underscore}/#{method_name.to_s.chomp('?')}"
|
|
26
|
+
user.respond_to?(:allowed_to?) ? user.allowed_to?(permission_identifier) : true
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
class BootstrapTablePresenter < Admino::Table::Presenter
|
|
2
|
+
private
|
|
3
|
+
|
|
4
|
+
def table_html_options
|
|
5
|
+
{ class: 'table table-striped table-hover table-admino table-scrollable table-condensed' }
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def head_row(collection_klass, query, view_context)
|
|
9
|
+
HeadRow.new(collection_klass, query, view_context)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def resource_row(resource, view_context)
|
|
13
|
+
ResourceRow.new(resource, view_context)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class HeadRow < Admino::Table::HeadRow
|
|
17
|
+
def column(*args, &block)
|
|
18
|
+
attribute_name, label, html_options = parse_column_args(args)
|
|
19
|
+
|
|
20
|
+
if label.nil?
|
|
21
|
+
label = column_label(attribute_name)
|
|
22
|
+
elsif label.is_a? Symbol
|
|
23
|
+
label = column_label(label)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
html_options = complete_column_html_options(
|
|
27
|
+
attribute_name,
|
|
28
|
+
html_options
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# sorting_scope = html_options.delete(:sorting)
|
|
32
|
+
# sorting_html_options = html_options.delete(:sorting_html_options) { {} }
|
|
33
|
+
|
|
34
|
+
# if sorting_scope
|
|
35
|
+
# raise ArgumentError, 'query object is required' unless query
|
|
36
|
+
# label = query.sorting.scope_link(sorting_scope, label, sorting_html_options)
|
|
37
|
+
# end
|
|
38
|
+
if Itsf::Backend.features?(:ransack)
|
|
39
|
+
html_options.reverse_merge!(sortable: true, sortable_options: [])
|
|
40
|
+
sortable = html_options.delete(:sortable)
|
|
41
|
+
sortable_options = html_options.delete(:sortable_options)
|
|
42
|
+
if sortable_options.empty?
|
|
43
|
+
sortable_options << attribute_name
|
|
44
|
+
sortable_options << resource_klass.human_attribute_name(attribute_name)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
if sortable
|
|
49
|
+
label = h.sort_link(h.instance_variable_get("@q"), *sortable_options)
|
|
50
|
+
# label = h.sort_link(h.instance_variable_get("@q"), attribute_name)
|
|
51
|
+
else
|
|
52
|
+
label = label.to_s
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
@columns << h.content_tag(:th, label, html_options)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class ResourceRow < Admino::Table::ResourceRow
|
|
61
|
+
# def to_html
|
|
62
|
+
# buffer = @columns
|
|
63
|
+
|
|
64
|
+
# if @actions.any?
|
|
65
|
+
# html_options = column_html_options(:actions)
|
|
66
|
+
# buffer << h.content_tag(:td, html_options) do
|
|
67
|
+
# actions_wrapper do
|
|
68
|
+
# @actions.join(" ").html_safe
|
|
69
|
+
# end
|
|
70
|
+
# end
|
|
71
|
+
# end
|
|
72
|
+
|
|
73
|
+
# buffer.html_safe
|
|
74
|
+
# end
|
|
75
|
+
|
|
76
|
+
# def actions_wrapper(&block)
|
|
77
|
+
# h.content_tag(:div, { class: 'btn-group' }, &block)
|
|
78
|
+
# end
|
|
79
|
+
|
|
80
|
+
# def edit_action_url
|
|
81
|
+
# view_context.edit_resource_url(resource)
|
|
82
|
+
# end
|
|
83
|
+
|
|
84
|
+
# def destroy_action_url
|
|
85
|
+
# view_context.resource_url(resource)
|
|
86
|
+
# end
|
|
87
|
+
|
|
88
|
+
# def show_action_html_options
|
|
89
|
+
# { class: 'btn btn-default btn-xs' }
|
|
90
|
+
# end
|
|
91
|
+
|
|
92
|
+
# def edit_action_html_options
|
|
93
|
+
# { class: 'btn btn-default btn-xs' }
|
|
94
|
+
# end
|
|
95
|
+
|
|
96
|
+
# def destroy_action_html_options
|
|
97
|
+
# {
|
|
98
|
+
# method: :delete,
|
|
99
|
+
# class: 'btn btn-danger btn-xs',
|
|
100
|
+
# data: {
|
|
101
|
+
# confirm: I18n.t('confirmations.delete')
|
|
102
|
+
# }
|
|
103
|
+
# }
|
|
104
|
+
# end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
.panel.panel-default.panel-with-actions.itsf-dashboard-panel
|
|
2
|
+
.panel-heading
|
|
3
|
+
.panel-title
|
|
4
|
+
= t("classes.#{engine.name.underscore}")
|
|
5
|
+
.panel-actions
|
|
6
|
+
= link_to(t('.view'), main_app.send("#{engine.engine_name}_path"), class: 'btn btn-primary btn-xs')
|
|
7
|
+
|
|
8
|
+
%table.table.table-striped.table-hover.table-condensed
|
|
9
|
+
- "#{engine.to_s.deconstantize}::Configuration".constantize.registered_controllers.call.each do |kontroller|
|
|
10
|
+
- if !Itsf::Backend.features?(:pundit) || policy(kontroller.resource_class).index?
|
|
11
|
+
%tr
|
|
12
|
+
%th.col-md-3= kontroller.resource_class.model_name.human(count: :other)
|
|
13
|
+
%td.item-count
|
|
14
|
+
%span.label.label-default
|
|
15
|
+
- if respond_to?(:current_user) && current_user.respond_to?(:last_sign_in_at) && kontroller.resource_class.respond_to?(:column_names) && kontroller.resource_class.column_names.include?('updated_at')
|
|
16
|
+
= "#{kontroller.resource_class.where("updated_at > ?", current_user.last_sign_in_at).count}/#{kontroller.resource_class.count}"
|
|
17
|
+
- else
|
|
18
|
+
= kontroller.resource_class.count
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#page-title.bottom-margin-1
|
|
2
|
+
%h3= t('.title', engine_name: t(controller.class.name.deconstantize.underscore.gsub('/', '_')))
|
|
3
|
+
|
|
4
|
+
- Itsf::Backend::Configuration.backend_engines.each do |engine|
|
|
5
|
+
- if !Itsf::Backend.features?(:pundit) || engine_policy(engine).access?
|
|
6
|
+
.col-lg-6= render 'dashboard_panel', engine: engine
|
|
7
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.panel.panel-default
|
|
2
|
+
.panel-heading
|
|
3
|
+
.panel-title
|
|
4
|
+
= t(".resources")
|
|
5
|
+
%table.table.table-striped.table-hover.table-condensed
|
|
6
|
+
- "#{engine.to_s.deconstantize}::Configuration".constantize.registered_controllers.call.each do |kontroller|
|
|
7
|
+
%tr
|
|
8
|
+
%th.col-md-3= kontroller.resource_class.model_name.human(count: :other)
|
|
9
|
+
%td.text-left
|
|
10
|
+
%span.label.label-default
|
|
11
|
+
- if respond_to?(:current_user) && current_user.respond_to?(:last_sign_in_at) && kontroller.resource_class.respond_to?(:column_names) && kontroller.resource_class.column_names.include?('updated_at')
|
|
12
|
+
= "#{kontroller.resource_class.where("updated_at > ?", current_user.last_sign_in_at).count}/#{kontroller.resource_class.count}"
|
|
13
|
+
- else
|
|
14
|
+
= kontroller.resource_class.count
|
|
15
|
+
%td.text-right= link_to(t('.view'), { controller: kontroller.name.underscore.gsub('_controller', '') }, id: "link-to-#{kontroller.name.underscore.gsub('_controller', '').gsub(/[\/_]/, '-')}-index" ,class: 'btn btn-primary btn-xs')
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
.panel.panel-default
|
|
19
|
+
.panel-heading
|
|
20
|
+
.panel-title
|
|
21
|
+
= t(".services")
|
|
22
|
+
%table.table.table-striped.table-hover.table-condensed
|
|
23
|
+
- "#{engine.to_s.deconstantize}::Configuration".constantize.registered_services.call.each do |kontroller|
|
|
24
|
+
%tr
|
|
25
|
+
%th.col-md-3= t("classes.#{kontroller.service_class.name.underscore}")
|
|
26
|
+
%td.text-right= link_to(t('.view'), { controller: kontroller.name.underscore.gsub('_controller', '') }, id: "link-to-#{kontroller.name.underscore.gsub('_controller', '').gsub(/[\/_]/, '-')}-invoke" ,class: 'btn btn-primary btn-xs')
|
|
File without changes
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#page-title.bottom-margin-1
|
|
2
|
+
%h3= t('.title', engine_name: t("classes.#{engine.name.underscore}"))
|
|
3
|
+
|
|
4
|
+
.col-lg-12= render 'dashboard_panel', engine: engine
|
|
5
|
+
|
|
6
|
+
.col-lg-12= render 'index_extras', engine: engine
|
|
7
|
+
|
|
8
|
+
.col-lg-12
|
|
9
|
+
.well.well-sm
|
|
10
|
+
.btn-container-right
|
|
11
|
+
- if main_app.respond_to?(:itsf_backend_path)
|
|
12
|
+
= link_to(main_app.itsf_backend_path, class: 'btn btn-default btn-responsive') do
|
|
13
|
+
%span.glyphicon.glyphicon-arrow-left
|
|
14
|
+
%span.btn-text= t('.back')
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
%li.dropdown.active
|
|
2
|
+
= link_to('#', { class: 'dropdown-toggle', 'data-toggle': 'dropdown', role: 'button', 'aria-haspopup': true, 'aria-expanded': false }) do
|
|
3
|
+
= t("classes.#{I18n.name.underscore}")
|
|
4
|
+
%span.caret
|
|
5
|
+
%ul.dropdown-menu
|
|
6
|
+
- I18n.available_locales.reject{ |l| I18n.locale == l }.each do |locale|
|
|
7
|
+
%li{ class: (I18n.locale == locale ? 'active' : nil) }
|
|
8
|
+
= link_to(locale: locale) do
|
|
9
|
+
- I18n.with_locale(locale) do
|
|
10
|
+
= t("locales.#{locale}")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
= form.scope :all
|
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
= table.column(:actions) do |resource|
|
|
2
|
+
- id_base = "link-to-#{controller.class.name.underscore.gsub('_controller', '').gsub(/[\/_]/, '-')}-#{resource.to_param}"
|
|
3
|
+
.btn-group
|
|
4
|
+
- if !Itsf::Backend.features?(:pundit) || policy(resource).show?
|
|
5
|
+
= link_to(resource_path(resource), id: "#{id_base}-show", class: 'btn btn-xs btn-responsive btn-default') do
|
|
6
|
+
%span.glyphicon.glyphicon-eye-open
|
|
7
|
+
%span.btn-text= t('.show')
|
|
8
|
+
- if !Itsf::Backend.features?(:pundit) || policy(resource).edit?
|
|
9
|
+
= link_to(edit_resource_path(resource), id: "#{id_base}-edit", class: 'btn btn-xs btn-responsive btn-default') do
|
|
10
|
+
%span.glyphicon.glyphicon-pencil
|
|
11
|
+
%span.btn-text= t('.edit')
|
|
12
|
+
- if !Itsf::Backend.features?(:pundit) || policy(resource).destroy?
|
|
13
|
+
= link_to(resource_path(resource), id: "#{id_base}-destroy", class: 'btn btn-xs btn-responsive btn-danger', method: :delete, data: { confirm: I18n.t('.confirmations.delete') }) do
|
|
14
|
+
%span.glyphicon.glyphicon-fire
|
|
15
|
+
%span.btn-text= t('.destroy')
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
.panel.panel-default
|
|
2
|
+
.panel-heading
|
|
3
|
+
%h1= t('.title', inflections)
|
|
4
|
+
.panel-body
|
|
5
|
+
= simple_form_for(@resource, url: resource_path(@resource)) do |f|
|
|
6
|
+
= render partial: 'form_errors', locals: { resource: f.object }
|
|
7
|
+
= render 'form', form: f
|
|
8
|
+
= f.button :submit, class: 'btn btn-success'
|
|
9
|
+
.panel-footer
|
|
10
|
+
|
|
11
|
+
.well.well-sm
|
|
12
|
+
= link_to resource_path(@resource), class: 'btn btn-primary btn-responsive' do
|
|
13
|
+
%span.glyphicon.glyphicon-eye-open
|
|
14
|
+
%span.btn-text= t('.show')
|
|
15
|
+
= link_to collection_path, class: 'btn btn-default btn-responsive pull-right' do
|
|
16
|
+
%span.glyphicon.glyphicon-arrow-left
|
|
17
|
+
%span.btn-text= t('.back')
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#page-title.bottom-margin-1
|
|
2
|
+
.row
|
|
3
|
+
.col-xs-8
|
|
4
|
+
%h1
|
|
5
|
+
= t('.title', inflections)
|
|
6
|
+
%span.label.label-default= Itsf::Backend.features?(:kaminari) ? "#{@collection.total_count}/#{resource_class.count}" : @collection.count
|
|
7
|
+
.col-xs-4
|
|
8
|
+
#page-actions.btn-container-right
|
|
9
|
+
.btn-group
|
|
10
|
+
- if !Itsf::Backend.features?(:pundit) || policy(resource_class).new?
|
|
11
|
+
= link_to new_resource_path, id: "link-to-#{controller.class.name.underscore.gsub('_controller', '').gsub(/[\/_]/, '-')}-new", class: 'btn btn-success btn-responsive' do
|
|
12
|
+
%span.glyphicon.glyphicon-plus
|
|
13
|
+
%span.btn-text= t('.new', inflections)
|
|
14
|
+
|
|
15
|
+
.panel.panel-default.panel-with-actions
|
|
16
|
+
- if Itsf::Backend.features?(:ransack)
|
|
17
|
+
.panel-body
|
|
18
|
+
#filter
|
|
19
|
+
= search_form_for(@q, url: collection_path, class: 'form-inline', html: { 'data-auto-submit': true }) do |f|
|
|
20
|
+
#scopes.bottom-margin-1
|
|
21
|
+
= render 'scopes', form: f
|
|
22
|
+
#search.bottom-margin-1
|
|
23
|
+
= render 'search', form: f
|
|
24
|
+
#filter-actions.btn-group
|
|
25
|
+
- if f.is_a?(SimpleForm::FormBuilder)
|
|
26
|
+
= f.button :submit, t('ransack.search'), class: 'btn btn-success'
|
|
27
|
+
= link_to t('ransack.reset'), {},class: 'btn btn-danger'
|
|
28
|
+
- else
|
|
29
|
+
= f.submit
|
|
30
|
+
|
|
31
|
+
.table-responsive
|
|
32
|
+
= render_collection(@collection, resource_class, as: :bootstrap_table) do |table|
|
|
33
|
+
= render 'table', table: table
|
|
34
|
+
= render 'table_actions', table: table
|
|
35
|
+
|
|
36
|
+
.panel-footer
|
|
37
|
+
- if Itsf::Backend.features?(:kaminari)
|
|
38
|
+
.row
|
|
39
|
+
.col-md-4
|
|
40
|
+
.col-md-4
|
|
41
|
+
.text-center= paginate @collection, theme: 'twitter-bootstrap-3'
|
|
42
|
+
.col-md-4
|
|
43
|
+
|
|
44
|
+
.well.well-sm
|
|
45
|
+
.btn-container-right
|
|
46
|
+
= link_to root_path, class: 'btn btn-default btn-responsive' do
|
|
47
|
+
%span.glyphicon.glyphicon-arrow-left
|
|
48
|
+
%span.btn-text= t('.back')
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
%div.panel.panel-default
|
|
2
|
+
%div.panel-heading
|
|
3
|
+
%h1= t('.title', inflections)
|
|
4
|
+
%div.panel-body
|
|
5
|
+
= simple_form_for(@resource, url: collection_path) do |f|
|
|
6
|
+
= render partial: 'form_errors', locals: { resource: f.object }
|
|
7
|
+
= render 'form', form: f
|
|
8
|
+
= f.button :submit, class: 'btn btn-success'
|
|
9
|
+
%div.panel-footer
|
|
10
|
+
|
|
11
|
+
.well.well-sm
|
|
12
|
+
.btn-container-right
|
|
13
|
+
= link_to collection_path, class: 'btn btn-default btn-responsive' do
|
|
14
|
+
%span.glyphicon.glyphicon-arrow-left
|
|
15
|
+
%span.btn-text= t('.back')
|