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.
Files changed (169) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +43 -0
  4. data/Rakefile +21 -0
  5. data/app/assets/images/itsf/backend/favicon.png +0 -0
  6. data/app/assets/javascripts/itsf/backend/application.js +21 -0
  7. data/app/assets/javascripts/itsf/backend/application/ace.coffee +51 -0
  8. data/app/assets/javascripts/itsf/backend/application/acts-as-list.coffee +21 -0
  9. data/app/assets/javascripts/itsf/backend/application/auto-submit.coffee +21 -0
  10. data/app/assets/javascripts/itsf/backend/application/autofocus-last.coffee +4 -0
  11. data/app/assets/javascripts/itsf/backend/application/drop-down-hover.coffee +8 -0
  12. data/app/assets/javascripts/itsf/backend/application/itsf-logo.coffee +24 -0
  13. data/app/assets/javascripts/itsf/backend/vendor/jQueryRotate.js +339 -0
  14. data/app/assets/javascripts/itsf/backend/vendor/jquery.redirect.js +119 -0
  15. data/app/assets/javascripts/itsf_backend.js +1 -0
  16. data/app/assets/stylesheets/itsf/backend/application.css.less +30 -0
  17. data/app/assets/stylesheets/itsf/backend/application/ace.css.less +6 -0
  18. data/app/assets/stylesheets/itsf/backend/application/basic-page.css.less +10 -0
  19. data/app/assets/stylesheets/itsf/backend/application/bootstrap-extensions.css.less +48 -0
  20. data/app/assets/stylesheets/itsf/backend/application/bottom-margin-extension.css.less +9 -0
  21. data/app/assets/stylesheets/itsf/backend/application/button-responsive.css.less +7 -0
  22. data/app/assets/stylesheets/itsf/backend/application/check-box-margin-fix.css.less +5 -0
  23. data/app/assets/stylesheets/itsf/backend/application/code.css.less +6 -0
  24. data/app/assets/stylesheets/itsf/backend/application/form-errors.css.less +6 -0
  25. data/app/assets/stylesheets/itsf/backend/application/form-inline-margin-fixes.css.less +9 -0
  26. data/app/assets/stylesheets/itsf/backend/application/hexagon.css.less +161 -0
  27. data/app/assets/stylesheets/itsf/backend/application/itsf-dashboard-panels.css.less +9 -0
  28. data/app/assets/stylesheets/itsf/backend/application/itsf-logo.css.less +107 -0
  29. data/app/assets/stylesheets/itsf/backend/application/navigation-logo.css.less +5 -0
  30. data/app/assets/stylesheets/itsf/backend/application/panel-footer-pagination.css.less +8 -0
  31. data/app/assets/stylesheets/itsf/backend/application/panel-with-actions.css.less +21 -0
  32. data/app/assets/stylesheets/itsf/backend/application/table-actions.css.less +9 -0
  33. data/app/assets/stylesheets/itsf/backend/application/table-responsive.css.less +3 -0
  34. data/app/assets/stylesheets/itsf/backend/bootstrap_and_overrides.css.less +34 -0
  35. data/app/assets/stylesheets/itsf/backend/vendor/timeline.min.css +1 -0
  36. data/app/assets/stylesheets/itsf_backend.css +3 -0
  37. data/app/concerns/routing/service_concern.rb +12 -0
  38. data/app/controllers/concerns/controller/acts_as_list_concern.rb +13 -0
  39. data/app/controllers/concerns/controller/acts_as_published_concern.rb +13 -0
  40. data/app/controllers/concerns/controller/pagination_concern.rb +15 -0
  41. data/app/controllers/concerns/controller/pundit_namespaced_authorize_concern.rb +19 -0
  42. data/app/controllers/concerns/controller/ransack_concern.rb +25 -0
  43. data/app/controllers/concerns/controller/rest_actions_concern_with_pundit.rb +93 -0
  44. data/app/controllers/itsf/backend/application_controller.rb +6 -0
  45. data/app/controllers/itsf/backend/base_controller.rb +34 -0
  46. data/app/controllers/itsf/backend/dashboard_controller.rb +20 -0
  47. data/app/controllers/itsf/backend/home_controller.rb +27 -0
  48. data/app/controllers/itsf/backend/resource/base_controller.rb +35 -0
  49. data/app/controllers/itsf/backend/service/base_controller.rb +29 -0
  50. data/app/extensions/concerns/head_row/acts_as_list_extensions.rb +11 -0
  51. data/app/extensions/concerns/head_row/association_extensions.rb +14 -0
  52. data/app/extensions/concerns/head_row/paperclip_extensions.rb +11 -0
  53. data/app/extensions/concerns/head_row/published_extensions.rb +11 -0
  54. data/app/extensions/concerns/head_row/ransack_extensions.rb +7 -0
  55. data/app/extensions/concerns/head_row/timestamp_extensions.rb +21 -0
  56. data/app/extensions/concerns/object_extensions.rb +8 -0
  57. data/app/extensions/concerns/ransack_form_builder_extensions.rb +72 -0
  58. data/app/extensions/concerns/resource_row/acts_as_list_extensions.rb +28 -0
  59. data/app/extensions/concerns/resource_row/association_extensions.rb +22 -0
  60. data/app/extensions/concerns/resource_row/paperclip_extensions.rb +18 -0
  61. data/app/extensions/concerns/resource_row/published_extensions.rb +24 -0
  62. data/app/extensions/concerns/resource_row/timestamp_extensions.rb +23 -0
  63. data/app/extensions/concerns/simple_form_form_builder_extensions.rb +28 -0
  64. data/app/helpers/itsf/backend/application_helper.rb +9 -0
  65. data/app/policies/itsf/backend/base_policy.rb +67 -0
  66. data/app/policies/itsf/backend/dashboard_policy.rb +14 -0
  67. data/app/policies/itsf/backend/engine_policy.rb +14 -0
  68. data/app/policies/itsf/backend/service/base_policy.rb +29 -0
  69. data/app/presenters/bootstrap_table_presenter.rb.old +106 -0
  70. data/app/views/itsf/backend/dashboard/_dashboard_panel.html.haml +18 -0
  71. data/app/views/itsf/backend/dashboard/index.html.haml +7 -0
  72. data/app/views/itsf/backend/home/_dashboard_panel.html.haml +26 -0
  73. data/app/views/itsf/backend/home/_index_extras.html.haml +0 -0
  74. data/app/views/itsf/backend/home/index.html.haml +14 -0
  75. data/app/views/itsf/backend/i18n/_navigation.html.haml +10 -0
  76. data/app/views/itsf/backend/resource/base/_form.html.haml +2 -0
  77. data/app/views/itsf/backend/resource/base/_form_errors.html.haml +6 -0
  78. data/app/views/itsf/backend/resource/base/_scopes.html.haml +1 -0
  79. data/app/views/itsf/backend/resource/base/_search.html.haml +3 -0
  80. data/app/views/itsf/backend/resource/base/_show.html.haml +2 -0
  81. data/app/views/itsf/backend/resource/base/_show_extras.html.haml +0 -0
  82. data/app/views/itsf/backend/resource/base/_table.html.haml +2 -0
  83. data/app/views/itsf/backend/resource/base/_table_actions.html.haml +15 -0
  84. data/app/views/itsf/backend/resource/base/edit.html.haml +17 -0
  85. data/app/views/itsf/backend/resource/base/index.html.haml +48 -0
  86. data/app/views/itsf/backend/resource/base/new.html.haml +15 -0
  87. data/app/views/itsf/backend/resource/base/show.html.haml +28 -0
  88. data/app/views/itsf/backend/service/base/_form.html.haml +0 -0
  89. data/app/views/itsf/backend/service/base/_form_errors.html.haml +6 -0
  90. data/app/views/itsf/backend/service/base/_messages.html.erb +5 -0
  91. data/app/views/itsf/backend/service/base/index.html.haml +18 -0
  92. data/app/views/itsf/backend/service/base/invoke.html.haml +16 -0
  93. data/app/views/itsf/backend/service/base/success.html.haml +13 -0
  94. data/app/views/layouts/itsf/backend/_footer.html.haml +1 -0
  95. data/app/views/layouts/itsf/backend/_logo.html.haml +4 -0
  96. data/app/views/layouts/itsf/backend/_main_navigation.html.haml +6 -0
  97. data/app/views/layouts/itsf/backend/_main_navigation_drop_down.html.haml +20 -0
  98. data/app/views/layouts/itsf/backend/base.html.haml +56 -0
  99. data/config/initializers/assets.rb +3 -0
  100. data/config/initializers/extend_object.rb +1 -0
  101. data/config/initializers/extend_ransack_form_builder.rb +4 -0
  102. data/config/initializers/extend_simple_form_form_builder.rb +5 -0
  103. data/config/locales/de.yml +104 -0
  104. data/config/locales/en.yml +99 -0
  105. data/config/rbac.yml +7 -0
  106. data/config/routes.rb +3 -0
  107. data/lib/generators/itsf/backend/home_controller/home_controller_generator.rb +77 -0
  108. data/lib/generators/itsf/backend/home_controller/templates/home_controller.rb +6 -0
  109. data/lib/generators/itsf/backend/home_controller/templates/routes.source +2 -0
  110. data/lib/generators/itsf/backend/install/install_generator.rb +23 -0
  111. data/lib/generators/itsf/backend/install/templates/backend_controller.rb +2 -0
  112. data/lib/generators/itsf/backend/install/templates/initializer.rb +95 -0
  113. data/lib/generators/itsf/backend/install/templates/routes.source +9 -0
  114. data/lib/generators/itsf/backend/resource/resource_generator.rb +96 -0
  115. data/lib/generators/itsf/backend/resource/templates/controller.rb +34 -0
  116. data/lib/generators/itsf/backend/resource/templates/routes.source +2 -0
  117. data/lib/itsf/backend.rb +11 -0
  118. data/lib/itsf/backend/configuration.rb +38 -0
  119. data/lib/itsf/backend/engine.rb +16 -0
  120. data/lib/itsf/backend/features.rb +13 -0
  121. data/lib/itsf/backend/policies.rb +13 -0
  122. data/lib/itsf/backend/spec_helpers.rb +47 -0
  123. data/lib/itsf/backend/version.rb +5 -0
  124. data/lib/itsf_backend.rb +21 -0
  125. data/lib/tasks/itsf/backend_tasks.rake +4 -0
  126. data/spec/dummy/README.rdoc +28 -0
  127. data/spec/dummy/Rakefile +6 -0
  128. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  129. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  130. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  131. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  132. data/spec/dummy/app/models/post.rb +2 -0
  133. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  134. data/spec/dummy/bin/bundle +3 -0
  135. data/spec/dummy/bin/rails +4 -0
  136. data/spec/dummy/bin/rake +4 -0
  137. data/spec/dummy/bin/setup +29 -0
  138. data/spec/dummy/config.ru +4 -0
  139. data/spec/dummy/config/application.rb +38 -0
  140. data/spec/dummy/config/boot.rb +5 -0
  141. data/spec/dummy/config/database.yml +25 -0
  142. data/spec/dummy/config/environment.rb +5 -0
  143. data/spec/dummy/config/environments/development.rb +41 -0
  144. data/spec/dummy/config/environments/production.rb +79 -0
  145. data/spec/dummy/config/environments/test.rb +42 -0
  146. data/spec/dummy/config/initializers/assets.rb +11 -0
  147. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  148. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  149. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  150. data/spec/dummy/config/initializers/inflections.rb +16 -0
  151. data/spec/dummy/config/initializers/itsf_backend.rb +15 -0
  152. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  153. data/spec/dummy/config/initializers/session_store.rb +3 -0
  154. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  155. data/spec/dummy/config/locales/en.yml +23 -0
  156. data/spec/dummy/config/routes.rb +56 -0
  157. data/spec/dummy/config/secrets.yml +22 -0
  158. data/spec/dummy/db/migrate/20151024185112_create_posts.rb +10 -0
  159. data/spec/dummy/db/schema.rb +15 -0
  160. data/spec/dummy/public/404.html +67 -0
  161. data/spec/dummy/public/422.html +67 -0
  162. data/spec/dummy/public/500.html +66 -0
  163. data/spec/dummy/public/favicon.ico +0 -0
  164. data/spec/factories/posts.rb +6 -0
  165. data/spec/models/post_spec.rb +5 -0
  166. data/spec/rails_helper.rb +52 -0
  167. data/spec/spec_helper.rb +90 -0
  168. data/spec/support/addons.rb +3 -0
  169. 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,11 @@
1
+ require 'active_support/concern'
2
+
3
+ module HeadRow
4
+ module ActsAsListExtensions
5
+ extend ActiveSupport::Concern
6
+
7
+ def acts_as_list(_options = {})
8
+ column :acts_as_list
9
+ end
10
+ end
11
+ 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,11 @@
1
+ require 'active_support/concern'
2
+
3
+ module HeadRow
4
+ module PaperclipExtensions
5
+ extend ActiveSupport::Concern
6
+
7
+ def thumbnail(attachment_name, _options = {})
8
+ column(attachment_name)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'active_support/concern'
2
+
3
+ module HeadRow
4
+ module PublishedExtensions
5
+ extend ActiveSupport::Concern
6
+
7
+ def column_published_actions
8
+ column :published_actions
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ require 'active_support/concern'
2
+
3
+ module HeadRow
4
+ module RansackExtensions
5
+ extend ActiveSupport::Concern
6
+ end
7
+ 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,8 @@
1
+ module ObjectExtensions
2
+ def try_all(*methods)
3
+ methods.map(&:to_sym).each do |method|
4
+ next unless respond_to?(method)
5
+ return send(method)
6
+ end
7
+ end
8
+ 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
@@ -0,0 +1,9 @@
1
+ module Itsf
2
+ module Backend
3
+ module ApplicationHelper
4
+ def render_i18n_navigation
5
+ render partial: 'itsf/backend/i18n/navigation'
6
+ end
7
+ end
8
+ end
9
+ end