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,20 @@
|
|
|
1
|
+
module Itsf::Backend
|
|
2
|
+
class DashboardController < Configuration.dashboard_base_controller.constantize
|
|
3
|
+
helper Itsf::Backend::ApplicationHelper
|
|
4
|
+
helper MultiClientHelper if Itsf::Backend.features?(:multi_client)
|
|
5
|
+
|
|
6
|
+
layout 'itsf/backend/base'
|
|
7
|
+
|
|
8
|
+
if Itsf::Backend.features?(:pundit)
|
|
9
|
+
include Pundit
|
|
10
|
+
prepend Controller::PunditNamespacedAuthorizeConcern
|
|
11
|
+
helper_method :engine_policy
|
|
12
|
+
|
|
13
|
+
after_action :verify_authorized
|
|
14
|
+
|
|
15
|
+
def index
|
|
16
|
+
authorize :dashboard, :access?, self.class.name.deconstantize
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Itsf::Backend
|
|
2
|
+
class HomeController < Configuration.home_base_controller.constantize
|
|
3
|
+
helper Itsf::Backend::ApplicationHelper
|
|
4
|
+
helper MultiClientHelper if Itsf::Backend.features?(:multi_client)
|
|
5
|
+
|
|
6
|
+
if Itsf::Backend.features?(:pundit)
|
|
7
|
+
include Pundit
|
|
8
|
+
prepend Controller::PunditNamespacedAuthorizeConcern
|
|
9
|
+
helper_method :engine_policy
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
layout 'itsf/backend/base'
|
|
13
|
+
|
|
14
|
+
helper_method :engine
|
|
15
|
+
|
|
16
|
+
def self.engine
|
|
17
|
+
"#{name.deconstantize}::Engine".constantize
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def engine
|
|
21
|
+
self.class.engine
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def index
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'ransack' if Itsf::Backend.features?(:ransack)
|
|
2
|
+
require 'kaminari' if Itsf::Backend.features?(:kaminari)
|
|
3
|
+
|
|
4
|
+
module Itsf::Backend
|
|
5
|
+
class Resource::BaseController < Configuration.resource_base_controller.constantize
|
|
6
|
+
if Itsf::Backend.features?(:pundit)
|
|
7
|
+
include Controller::RestActionsConcernWithPundit
|
|
8
|
+
include Pundit
|
|
9
|
+
prepend Controller::PunditNamespacedAuthorizeConcern
|
|
10
|
+
helper_method :engine_policy
|
|
11
|
+
else
|
|
12
|
+
include Controller::RestActionsConcern
|
|
13
|
+
end
|
|
14
|
+
include Controller::ResourceUrlsConcern
|
|
15
|
+
include Controller::ResourceInflectionsConcern
|
|
16
|
+
include Controller::RansackConcern if Itsf::Backend.features?(:ransack)
|
|
17
|
+
include Controller::PaginationConcern if Itsf::Backend.features?(:kaminari)
|
|
18
|
+
include Controller::JsonApiConcern
|
|
19
|
+
helper Itsf::Backend::ApplicationHelper
|
|
20
|
+
|
|
21
|
+
helper_method :resource_class
|
|
22
|
+
|
|
23
|
+
helper ResourceRenderer::ViewHelper
|
|
24
|
+
|
|
25
|
+
layout 'itsf/backend/base'
|
|
26
|
+
|
|
27
|
+
def self.resource_class
|
|
28
|
+
name.gsub('Controller', '').singularize.constantize
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def resource_class
|
|
32
|
+
self.class.resource_class
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'ransack' if Itsf::Backend.features?(:ransack)
|
|
2
|
+
require 'kaminari' if Itsf::Backend.features?(:kaminari)
|
|
3
|
+
|
|
4
|
+
module Itsf::Backend
|
|
5
|
+
class Service::BaseController < Configuration.service_base_controller.constantize
|
|
6
|
+
if Itsf::Backend.features?(:pundit)
|
|
7
|
+
include Pundit
|
|
8
|
+
include Controller::PunditNamespacedAuthorizeConcern
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
include Controller::ServiceInflectionsConcern
|
|
12
|
+
include Controller::ServiceUrlsConcern
|
|
13
|
+
include Controller::ServiceActionsConcern
|
|
14
|
+
include Controller::JsonApiConcern
|
|
15
|
+
helper Itsf::Backend::ApplicationHelper
|
|
16
|
+
|
|
17
|
+
layout 'itsf/backend/base'
|
|
18
|
+
|
|
19
|
+
helper_method :service_class
|
|
20
|
+
|
|
21
|
+
def self.service_class
|
|
22
|
+
name.gsub('Controller', '').constantize
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def service_class
|
|
26
|
+
self.class.service_class
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'active_support/concern'
|
|
2
|
+
|
|
3
|
+
module HeadRow
|
|
4
|
+
module AssociationExtensions
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
def association(association_name, options = {})
|
|
8
|
+
options.reverse_merge!(label_method: :name)
|
|
9
|
+
label_method = options.delete(:label_method)
|
|
10
|
+
|
|
11
|
+
column(association_name, sortable_options: ["#{association_name}_#{label_method}", resource_klass.human_attribute_name(association_name)])
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'active_support/concern'
|
|
2
|
+
|
|
3
|
+
module HeadRow
|
|
4
|
+
module TimestampExtensions
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
def timestamp(attribute_name, _options = {})
|
|
8
|
+
column attribute_name
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def timestamps
|
|
12
|
+
timestamp :created_at
|
|
13
|
+
timestamp :updated_at
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def column_timestamps
|
|
17
|
+
ActiveSupport::Deprecation.warn('Do not use table.column_timestamps. Use table.timestamps instead!')
|
|
18
|
+
timestamps
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# :nodoc:
|
|
2
|
+
module RansackFormBuilderExtensions
|
|
3
|
+
def search(attribute_name, options = {})
|
|
4
|
+
options.reverse_merge!(label_options: {}, text_field_options: {})
|
|
5
|
+
autofocus = options[:autofocus]
|
|
6
|
+
|
|
7
|
+
label_options = options.delete(:label_options)
|
|
8
|
+
|
|
9
|
+
text_field_options = options.delete(:text_field_options)
|
|
10
|
+
text_field_options.reverse_merge!(class: 'form-control', 'data-autofocus': autofocus)
|
|
11
|
+
if [:last, true].include?(autofocus)
|
|
12
|
+
text_field_options.reverse_merge!(autofocus: true)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
@template.content_tag(:div, class: 'form-group') do
|
|
16
|
+
label(attribute_name, label_options) +
|
|
17
|
+
text_field(attribute_name, text_field_options)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# placeholder = true
|
|
21
|
+
|
|
22
|
+
# if placeholder
|
|
23
|
+
# text_field_options.reverse_merge!(placeholder: true)
|
|
24
|
+
# text_field(attribute_name, text_field_options)
|
|
25
|
+
# else
|
|
26
|
+
# label(attribute_name, label_options) +
|
|
27
|
+
# text_field(attribute_name, text_field_options)
|
|
28
|
+
# end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def full_text_search(*args)
|
|
32
|
+
options = args.extract_options!
|
|
33
|
+
attribute_names = *args
|
|
34
|
+
attribute_connector = '_or_'
|
|
35
|
+
search_field_name = "#{attribute_names.join(attribute_connector)}_cont"
|
|
36
|
+
search(search_field_name, options)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def locale_select
|
|
40
|
+
if respond_to?(:input)
|
|
41
|
+
input :locale_eq, as: :select, collection: I18n.available_locales.collect { |l| [l.to_s, l.to_s] }, include_blank: true
|
|
42
|
+
else
|
|
43
|
+
label(:locale_eq) +
|
|
44
|
+
select(:locale_eq, I18n.available_locales.collect { |l| [l.to_s, l.to_s] }, include_blank: true)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def excluding_scopes(*args)
|
|
49
|
+
options = args.extract_options!
|
|
50
|
+
scope_names = *args
|
|
51
|
+
|
|
52
|
+
@template.content_tag(:div, class: 'excluding-scopes') do
|
|
53
|
+
scope_names.map { |scope_name| scope(scope_name) }.join.html_safe
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def scope(scope_name)
|
|
58
|
+
t = @template
|
|
59
|
+
value = t.params.key?(:q) && t.params[:q].key?(:scopes) && t.params[:q][:scopes].key?(scope_name) && t.params[:q][:scopes][scope_name] == '1'
|
|
60
|
+
t.content_tag(:label) do
|
|
61
|
+
t.check_box_tag("q[scopes][#{scope_name}]", '1', value) +
|
|
62
|
+
t.t("activerecord.scopes.#{scope_name}")
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def scopes(*args)
|
|
67
|
+
options = args.extract_options!
|
|
68
|
+
scope_names = *args
|
|
69
|
+
|
|
70
|
+
scope_names.map { |scope_name| scope(scope_name) }.join.html_safe
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'active_support/concern'
|
|
2
|
+
|
|
3
|
+
module ResourceRow
|
|
4
|
+
module ActsAsListExtensions
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
def acts_as_list(options = {})
|
|
8
|
+
options.reverse_merge!(scope: nil)
|
|
9
|
+
|
|
10
|
+
scope = options.delete(:scope)
|
|
11
|
+
|
|
12
|
+
scope = "#{scope}_id".intern if scope.is_a?(Symbol) && scope.to_s !~ /_id$/
|
|
13
|
+
|
|
14
|
+
data_attributes = {
|
|
15
|
+
'acts-as-list-item': true,
|
|
16
|
+
'acts-as-list-item-scope': "#{scope}-#{resource.send(scope)}",
|
|
17
|
+
'acts-as-list-item-uid': resource.to_param,
|
|
18
|
+
'acts-as-list-item-on-drop-target': h.url_for([:reposition, resource])
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
column(:acts_as_list) do |_resource|
|
|
22
|
+
h.content_tag(:span, data: data_attributes, class: 'btn btn-xs btn-default acts-as-list-item') do
|
|
23
|
+
h.tag(:span, class: 'glyphicon glyphicon-sort')
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'active_support/concern'
|
|
2
|
+
|
|
3
|
+
module ResourceRow
|
|
4
|
+
module AssociationExtensions
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
def association(association_name, options = {})
|
|
8
|
+
options.reverse_merge!(label_method: :name)
|
|
9
|
+
label_method = options.delete(:label_method)
|
|
10
|
+
associated = resource.send(association_name)
|
|
11
|
+
|
|
12
|
+
label = associated.respond_to?(label_method) ? associated.send(label_method) : nil
|
|
13
|
+
|
|
14
|
+
if label.present?
|
|
15
|
+
link_method_name = "#{associated.class.name.demodulize.underscore}_path"
|
|
16
|
+
column(association_name) { |_resource| h.link_to(label, h.send(link_method_name, associated)) }
|
|
17
|
+
else
|
|
18
|
+
column(association_name)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'active_support/concern'
|
|
2
|
+
|
|
3
|
+
module ResourceRow
|
|
4
|
+
module PaperclipExtensions
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
def thumbnail(attachment_name, options = {})
|
|
8
|
+
options.reverse_merge!(style: :original)
|
|
9
|
+
style = options.delete(:style)
|
|
10
|
+
|
|
11
|
+
attachment = resource.send(attachment_name)
|
|
12
|
+
return column(attachment_name) unless attachment.respond_to?(:url)
|
|
13
|
+
|
|
14
|
+
image_tag = h.image_tag(attachment.url(style))
|
|
15
|
+
column(attachment_name) { |resource| h.link_to(image_tag, h.send("#{resource.class.name.demodulize.underscore}_path", resource)) }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'active_support/concern'
|
|
2
|
+
|
|
3
|
+
module ResourceRow
|
|
4
|
+
module PublishedExtensions
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
def column_published_actions
|
|
8
|
+
link_path = view_context.controller.url_for(action: :toggle_published, id: resource.to_param)
|
|
9
|
+
column(:column_published_actions) do |resource|
|
|
10
|
+
if resource.published?
|
|
11
|
+
view_context.link_to(link_path, class: 'btn btn-xs btn-danger btn-responsive', method: :post) do
|
|
12
|
+
view_context.content_tag(:span, nil, class: 'glyphicon glyphicon-eye-close') +
|
|
13
|
+
view_context.content_tag(:span, view_context.t('.unpublish', default: view_context.t('acts_as_published.actions.unpublish')), class: 'btn-text')
|
|
14
|
+
end
|
|
15
|
+
else
|
|
16
|
+
view_context.link_to(link_path, class: 'btn btn-xs btn-success btn-responsive', method: :post) do
|
|
17
|
+
view_context.content_tag(:span, nil, class: 'glyphicon glyphicon-eye-open') +
|
|
18
|
+
view_context.content_tag(:span, view_context.t('.publish', default: view_context.t('acts_as_published.actions.publish')), class: 'btn-text')
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'active_support/concern'
|
|
2
|
+
|
|
3
|
+
module ResourceRow
|
|
4
|
+
module TimestampExtensions
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
def timestamp(attribute_name, options = {})
|
|
8
|
+
options.reverse_merge!(format: :short)
|
|
9
|
+
format = options.delete(:format)
|
|
10
|
+
column(attribute_name) { |resource| I18n.l(resource.send(attribute_name), format: format) if resource.send(attribute_name).present? }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def timestamps
|
|
14
|
+
timestamp :created_at
|
|
15
|
+
timestamp :updated_at
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def column_timestamps
|
|
19
|
+
ActiveSupport::Deprecation.warn('Do not use table.column_timestamps. Use table.timestamps instead!')
|
|
20
|
+
timestamps
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# :nodoc:
|
|
2
|
+
module SimpleFormFormBuilderExtensions
|
|
3
|
+
def editor(*args)
|
|
4
|
+
options = args.extract_options!
|
|
5
|
+
syntax = options.delete(:syntax)
|
|
6
|
+
|
|
7
|
+
input_html = options.key?(:input_html) ? options[:input_html] : {}
|
|
8
|
+
|
|
9
|
+
input_html['data-add-editor'] = true
|
|
10
|
+
|
|
11
|
+
input_html['data-editor-syntax'] = syntax if syntax.present?
|
|
12
|
+
|
|
13
|
+
options[:input_html] = input_html
|
|
14
|
+
|
|
15
|
+
input(*args, options)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def locale_input(attribute_name = :locale, _ = {})
|
|
19
|
+
input_options = {
|
|
20
|
+
collection: I18n.available_locales,
|
|
21
|
+
as: :radio_buttons,
|
|
22
|
+
item_label_class: 'radio-inline',
|
|
23
|
+
item_wrapper_tag: false
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
input attribute_name, input_options
|
|
27
|
+
end
|
|
28
|
+
end
|