integral 1.4.0 → 1.5.0

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 (172) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +4 -3
  3. data/app/assets/javascripts/integral/backend.js +86 -2
  4. data/app/assets/javascripts/integral/support/character_counter.js +13 -8
  5. data/app/assets/javascripts/integral/support/list.coffee +1 -0
  6. data/app/assets/javascripts/integral/support/record_selector.coffee +2 -0
  7. data/app/assets/javascripts/integral/support/slug_generator.coffee +1 -0
  8. data/app/assets/stylesheets/integral/backend.sass +34 -23
  9. data/app/assets/stylesheets/integral/backend/_foundation_settings.scss +2 -2
  10. data/app/assets/stylesheets/integral/backend/dashboard-layout.scss +27 -63
  11. data/app/assets/stylesheets/integral/backend/devise.sass +2 -3
  12. data/app/assets/stylesheets/integral/backend/materialize-tags.sass +1 -0
  13. data/app/assets/stylesheets/integral/backend/modules/dropdown_pane_notifications.scss +150 -0
  14. data/app/assets/stylesheets/integral/backend/modules/dropdown_pane_profile.scss +59 -0
  15. data/app/assets/stylesheets/integral/backend/shared.sass +41 -2
  16. data/app/assets/stylesheets/integral/frontend/layout.sass +10 -0
  17. data/app/assets/stylesheets/integral/support/media-query-indicator.sass +4 -4
  18. data/app/controllers/integral/backend/activities_controller.rb +21 -27
  19. data/app/controllers/integral/backend/base_controller.rb +87 -37
  20. data/app/controllers/integral/backend/images_controller.rb +26 -8
  21. data/app/controllers/integral/backend/lists_controller.rb +2 -14
  22. data/app/controllers/integral/backend/notification_subscriptions_controller.rb +23 -0
  23. data/app/controllers/integral/backend/pages_controller.rb +0 -4
  24. data/app/controllers/integral/backend/posts_controller.rb +0 -4
  25. data/app/controllers/integral/backend/settings_controller.rb +4 -0
  26. data/app/controllers/integral/backend/static_pages_controller.rb +6 -0
  27. data/app/controllers/integral/backend/users_controller.rb +43 -24
  28. data/app/controllers/integral/blog_controller.rb +12 -0
  29. data/app/controllers/integral/categories_controller.rb +17 -3
  30. data/app/controllers/integral/tags_controller.rb +5 -2
  31. data/app/decorators/integral/base_decorator.rb +16 -0
  32. data/app/decorators/integral/image_decorator.rb +2 -2
  33. data/app/decorators/integral/list_decorator.rb +1 -13
  34. data/app/decorators/integral/notification/notification_decorator.rb +74 -0
  35. data/app/decorators/integral/page_decorator.rb +1 -13
  36. data/app/decorators/integral/post_decorator.rb +1 -2
  37. data/app/decorators/integral/user_decorator.rb +1 -13
  38. data/app/decorators/integral/version_decorator.rb +8 -4
  39. data/app/helpers/integral/backend/base_helper.rb +97 -31
  40. data/app/jobs/integral/application_job.rb +1 -0
  41. data/app/jobs/integral/newsletter_signup_job.rb +0 -2
  42. data/app/mailers/integral/devise_mailer.rb +6 -0
  43. data/app/models/concerns/integral/notification/subscribable.rb +67 -0
  44. data/app/models/integral/application_record.rb +9 -0
  45. data/app/models/integral/category.rb +9 -0
  46. data/app/models/integral/image.rb +40 -3
  47. data/app/models/integral/list.rb +10 -2
  48. data/app/models/integral/list_item.rb +14 -14
  49. data/app/models/integral/list_item_connection.rb +6 -0
  50. data/app/models/integral/notification/notification.rb +28 -0
  51. data/app/models/integral/notification/subscription.rb +14 -0
  52. data/app/models/integral/page.rb +15 -8
  53. data/app/models/integral/post.rb +11 -13
  54. data/app/models/integral/user.rb +45 -2
  55. data/app/policies/integral/base_policy.rb +7 -12
  56. data/app/policies/integral/page_policy.rb +1 -0
  57. data/app/policies/integral/version_policy.rb +0 -8
  58. data/app/views/devise/invitations/edit.haml +1 -4
  59. data/app/views/devise/mailer/invitation_instructions.inky-haml +20 -0
  60. data/app/views/integral/backend/activities/grid/_dropdown_actions.haml +1 -0
  61. data/app/views/integral/backend/activities/grid/_row_content.haml +13 -0
  62. data/app/views/integral/backend/activities/index.haml +7 -13
  63. data/app/views/integral/backend/activities/shared/_grid.haml +35 -20
  64. data/app/views/integral/backend/activities/shared/index.haml +12 -12
  65. data/app/views/integral/backend/activities/shared/show.haml +7 -7
  66. data/app/views/integral/backend/activities/show.haml +1 -1
  67. data/app/views/integral/backend/categories/_modal.haml +2 -3
  68. data/app/views/integral/backend/images/_form.haml +13 -25
  69. data/app/views/integral/backend/images/edit.haml +1 -9
  70. data/app/views/integral/backend/images/grid/_dropdown_actions.haml +5 -0
  71. data/app/views/integral/backend/images/grid/_row_content.haml +5 -0
  72. data/app/views/integral/backend/images/index.haml +11 -17
  73. data/app/views/integral/backend/images/list.haml +11 -0
  74. data/app/views/integral/backend/images/show.haml +26 -0
  75. data/app/views/integral/backend/lists/_form.haml +6 -19
  76. data/app/views/integral/backend/lists/_item_modal.haml +3 -3
  77. data/app/views/integral/backend/lists/_manager.haml +11 -13
  78. data/app/views/integral/backend/lists/edit.haml +6 -20
  79. data/app/views/integral/backend/lists/grid/_dropdown_actions.haml +9 -0
  80. data/app/views/integral/backend/lists/grid/_row_content.haml +3 -0
  81. data/app/views/integral/backend/lists/index.haml +11 -17
  82. data/app/views/integral/backend/lists/list.haml +11 -0
  83. data/app/views/integral/backend/lists/show.haml +30 -0
  84. data/app/views/integral/backend/notifications/_notification.haml +21 -0
  85. data/app/views/integral/backend/pages/_form.haml +19 -43
  86. data/app/views/integral/backend/pages/edit.haml +4 -12
  87. data/app/views/integral/backend/pages/grid/_dropdown_actions.haml +11 -0
  88. data/app/views/integral/backend/pages/grid/_row_content.haml +5 -0
  89. data/app/views/integral/backend/pages/index.haml +6 -6
  90. data/app/views/integral/backend/pages/list.haml +12 -19
  91. data/app/views/integral/backend/pages/show.haml +19 -35
  92. data/app/views/integral/backend/posts/_form.haml +18 -56
  93. data/app/views/integral/backend/posts/edit.haml +4 -14
  94. data/app/views/integral/backend/posts/grid/_dropdown_actions.haml +10 -0
  95. data/app/views/integral/backend/posts/grid/_row_content.haml +6 -0
  96. data/app/views/integral/backend/posts/index.haml +6 -6
  97. data/app/views/integral/backend/posts/list.haml +11 -18
  98. data/app/views/integral/backend/posts/new.haml +0 -1
  99. data/app/views/integral/backend/posts/show.haml +18 -41
  100. data/app/views/integral/backend/shared/_breadcrumbs.haml +7 -4
  101. data/app/views/integral/backend/shared/_image_preview.haml +10 -3
  102. data/app/views/integral/backend/shared/_image_selector.haml +1 -1
  103. data/app/views/integral/backend/shared/_notification_subscription_toggle.haml +22 -0
  104. data/app/views/integral/backend/shared/action_bar/_index.haml +9 -0
  105. data/app/views/integral/backend/shared/action_bar/_show.haml +3 -0
  106. data/app/views/integral/backend/shared/cards/_at_a_glance.haml +3 -3
  107. data/app/views/integral/backend/shared/cards/_categories.haml +27 -28
  108. data/app/views/integral/backend/shared/cards/_object.haml +1 -1
  109. data/app/views/integral/backend/shared/cards/_recent_activity.haml +12 -12
  110. data/app/views/integral/backend/shared/cards/_recent_resources.haml +17 -0
  111. data/app/views/integral/backend/shared/cards/_top_post_authors.haml +14 -15
  112. data/app/views/integral/backend/shared/cards/_welcome.haml +24 -25
  113. data/app/views/integral/backend/shared/{_empty_grid.haml → grid/_empty.haml} +0 -0
  114. data/app/views/integral/backend/shared/grid/_form.haml +9 -0
  115. data/app/views/integral/backend/shared/grid/_grid.haml +21 -0
  116. data/app/views/integral/backend/shared/{_pagination.haml → grid/_pagination.haml} +0 -0
  117. data/app/views/integral/backend/shared/grid/_row_layout.haml +8 -0
  118. data/app/views/integral/backend/shared/record_selector/_collection.haml +1 -0
  119. data/app/views/integral/backend/shared/record_selector/_modal.haml +9 -10
  120. data/app/views/integral/backend/static_pages/dashboard.haml +6 -7
  121. data/app/views/integral/backend/users/_form.haml +34 -46
  122. data/app/views/integral/backend/users/grid/_dropdown_actions.haml +17 -0
  123. data/app/views/integral/backend/users/grid/_row_content.haml +8 -0
  124. data/app/views/integral/backend/users/index.haml +6 -6
  125. data/app/views/integral/backend/users/list.haml +10 -16
  126. data/app/views/integral/backend/users/show.haml +10 -1
  127. data/app/views/integral/categories/show.haml +3 -3
  128. data/app/views/integral/posts/_article_footer.haml +1 -1
  129. data/app/views/integral/posts/_card.haml +1 -1
  130. data/app/views/integral/posts/_most_read_section.haml +1 -1
  131. data/app/views/integral/posts/_post.haml +1 -1
  132. data/app/views/integral/posts/templates/default.haml +1 -1
  133. data/app/views/integral/shared/sidebar/_item.haml +1 -1
  134. data/app/views/layouts/integral/backend.html.haml +24 -5
  135. data/app/views/layouts/integral/backend/_create_dropdown.haml +1 -30
  136. data/app/views/layouts/integral/backend/_main_menu_items.haml +1 -101
  137. data/config/initializers/devise.rb +1 -1
  138. data/config/locales/en.yml +60 -2
  139. data/config/routes.rb +2 -0
  140. data/db/migrate/20200407022636_create_integral_notifications.rb +25 -0
  141. data/db/migrate/20200421223602_add_status_to_integral_users.rb +5 -0
  142. data/db/seeds.rb +15 -11
  143. data/lib/integral.rb +1 -0
  144. data/lib/integral/acts_as_integral.rb +115 -0
  145. data/lib/integral/acts_as_listable.rb +1 -1
  146. data/lib/integral/engine.rb +9 -0
  147. data/lib/integral/grids/activities_grid.rb +0 -1
  148. data/lib/integral/grids/lists_grid.rb +1 -0
  149. data/lib/integral/grids/posts_grid.rb +5 -1
  150. data/lib/integral/grids/users_grid.rb +5 -0
  151. data/lib/integral/list_renderer.rb +5 -1
  152. data/lib/integral/router.rb +20 -4
  153. data/lib/integral/version.rb +1 -1
  154. data/spec/factories.rb +15 -1
  155. metadata +45 -39
  156. data/app/decorators/integral/category_version_decorator.rb +0 -7
  157. data/app/decorators/integral/image_version_decorator.rb +0 -7
  158. data/app/decorators/integral/list_version_decorator.rb +0 -7
  159. data/app/decorators/integral/page_version_decorator.rb +0 -7
  160. data/app/decorators/integral/post_version_decorator.rb +0 -7
  161. data/app/decorators/integral/user_version_decorator.rb +0 -7
  162. data/app/views/devise/mailer/invitation_instructions.html.erb +0 -13
  163. data/app/views/integral/backend/activities/_grid.haml +0 -22
  164. data/app/views/integral/backend/images/_grid.haml +0 -16
  165. data/app/views/integral/backend/lists/_grid.haml +0 -14
  166. data/app/views/integral/backend/pages/_grid.haml +0 -46
  167. data/app/views/integral/backend/posts/_grid.haml +0 -51
  168. data/app/views/integral/backend/shared/_grid.haml +0 -18
  169. data/app/views/integral/backend/shared/cards/_recent_pages.haml +0 -19
  170. data/app/views/integral/backend/shared/cards/_recent_posts.haml +0 -18
  171. data/app/views/integral/backend/shared/cards/_recent_users.haml +0 -19
  172. data/app/views/integral/backend/users/_grid.haml +0 -36
@@ -1,7 +0,0 @@
1
- module Integral
2
- class PostVersionDecorator < VersionDecorator
3
- def item_icon
4
- 'rss'
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module Integral
2
- class UserVersionDecorator < VersionDecorator
3
- def item_icon
4
- 'user'
5
- end
6
- end
7
- end
@@ -1,13 +0,0 @@
1
- <% name = @resource.invited_by.present? ? @resource.invited_by.name : 'Someone' %>
2
-
3
- <p><%= t("devise.mailer.invitation_instructions.hello", email: @resource.name) %>,</p>
4
-
5
- <p><%= t("devise.mailer.invitation_instructions.someone_invited_you", url: integral.backend_dashboard_url, name: name) %></p>
6
-
7
- <p><%= link_to t("devise.mailer.invitation_instructions.accept"), accept_invitation_url(@resource, :invitation_token => @token) %></p>
8
-
9
- <% if @resource.invitation_due_at %>
10
- <p><%= t("devise.mailer.invitation_instructions.accept_until", due_date: l(@resource.invitation_due_at, format: :'devise.mailer.invitation_instructions.accept_until_format')) %></p>
11
- <% end %>
12
-
13
- <p><%= t("devise.mailer.invitation_instructions.ignore").html_safe %></p>
@@ -1,22 +0,0 @@
1
- = render layout: 'integral/backend/shared/grid', locals: { grid: grid, options: { columns: [:date, :user, :action, :object, :instance, :actions] }} do
2
- - if grid.assets.any?
3
- - grid.assets.decorate.each do |activity|
4
- %tr
5
- %td= l(activity.created_at)
6
- %td
7
- - if activity.whodunnit.present?
8
- = link_to backend_user_url(activity.whodunnit.id) do
9
- %span.label.clear
10
- = image_tag activity.whodunnit.avatar.url(:thumbnail), class: :avatar
11
- = activity.whodunnit.name
12
- %td
13
- %span.label= activity.event
14
- %td= activity.item_type
15
- %td
16
- = link_to activity.item_url do
17
- = activity.item_title
18
- %td.actions
19
- = link_to activity.url do
20
- = icon('eye')
21
- - else
22
- = render partial: 'integral/backend/shared/empty_grid'
@@ -1,16 +0,0 @@
1
- = render_data_grid do
2
- = render layout: 'integral/backend/shared/grid', locals: { grid: @grid, options: { columns: [:title, :updated_at, :actions], order: true }} do |grid|
3
- - if grid.assets.any?
4
- - grid.assets.decorate.each do |record|
5
- %tr
6
- %td
7
- = image_tag record.file.url(:small), class: :preview
8
- = record.title.truncate(30)
9
- %td= l(record.updated_at, format: :long)
10
- %td.actions
11
- = link_to edit_backend_img_url(record) do
12
- = icon('edit')
13
- = link_to backend_img_url(record), method: :delete, data: { confirm: t('integral.actions.confirmation.deletion') } do
14
- = icon('remove')
15
- - else
16
- = render partial: 'integral/backend/shared/empty_grid'
@@ -1,14 +0,0 @@
1
- = render_data_grid do
2
- = render layout: 'integral/backend/shared/grid', locals: { grid: @grid, options: { columns: [:title, :updated_at, :actions], order: true }} do |grid|
3
- - if grid.assets.any?
4
- - grid.assets.decorate.each do |record|
5
- %tr
6
- %td= record.title
7
- %td= record.description
8
- %td.actions
9
- = link_to edit_backend_list_url(record) do
10
- = icon('edit')
11
- = link_to backend_list_url(record), method: :delete, data: { confirm: t('integral.actions.confirmation.deletion') } do
12
- = icon('remove')
13
- - else
14
- = render partial: 'integral/backend/shared/empty_grid'
@@ -1,46 +0,0 @@
1
- = render_data_grid do
2
- = render layout: 'integral/backend/shared/grid', locals: { grid: @grid, options: { columns: [:title, :path, :status, :updated_at, :actions], order: true }} do |grid|
3
- - if grid.assets.any?
4
- - grid.assets.decorate.each do |record|
5
- %tr.tr--clickable{ data: { href: backend_page_url(record.id), context_menu: "dropdown-pane-actions-page-#{record.id}" }}
6
- %td= record.title.truncate(30)
7
- %td= record.path
8
- %td
9
- %span.label= t("integral.records.status.#{record.status}")
10
- %td= l(record.updated_at, format: :long)
11
- %td.actions
12
- %button.button--action-pane{ 'data-toggle' => "dropdown-pane-actions-page-#{record.id}" }
13
- = icon('ellipsis-v')
14
- .dropdown-pane.dropdown-pane--actions{ id: "dropdown-pane-actions-page-#{record.id}", data: { dropdown: true, position: :bottom, alignment: :right, close_on_click: 'true' } }
15
- %ul.menu.vertical
16
- - if policy(Integral::Page).update?
17
- %li
18
- = link_to edit_backend_page_url(record.id) do
19
- = icon('edit')
20
- = t('integral.actions.edit')
21
- - unless record.archived?
22
- %li
23
- = link_to record.path do
24
- = icon('eye')
25
- = t('integral.actions.view_on_site')
26
- %li
27
- = link_to backend_page_url(record.id), target: :blank do
28
- = icon('external-link')
29
- = t('integral.actions.open_in_new_tab')
30
- - if policy(Integral::Page).duplicate?
31
- %li
32
- = link_to duplicate_backend_page_url(record.id), method: :post, data: { confirm: t('integral.actions.confirmation.clone') } do
33
- = icon('clone')
34
- = t('integral.actions.clone')
35
- - if policy(Integral::Version).manager?
36
- %li
37
- = link_to activities_backend_page_url(record.id) do
38
- = icon('history')
39
- = t('integral.actions.view_history')
40
- - if policy(Integral::Page).destroy?
41
- %li
42
- = link_to backend_page_url(record.id), method: :delete, data: { confirm: t('integral.actions.confirmation.deletion') } do
43
- = icon('remove')
44
- = t('integral.actions.delete')
45
- - else
46
- = render partial: 'integral/backend/shared/empty_grid'
@@ -1,51 +0,0 @@
1
- = render_data_grid do
2
- = render layout: 'integral/backend/shared/grid', locals: { grid: @grid, options: { columns: [:title, :user, :status, :view_count, :updated_at, :actions], order: true }} do |grid|
3
- - if grid.assets.any?
4
- - grid.assets.decorate.each do |record|
5
- %tr.tr--clickable{ data: { href: backend_post_url(record.id), context_menu: "dropdown-pane-actions-post-#{record.id}" }}
6
- %td= record.title.truncate(30)
7
- %td
8
- - if record.user.present?
9
- = image_tag record.user.avatar.url(:thumbnail), alt: record.user.name, class: 'avatar'
10
- = record.user.name
11
- - else
12
- "#{record.user_id} [Deleted]"
13
- %td
14
- %span.label= t("integral.records.status.#{record.status}")
15
- %td= number_with_delimiter(record.view_count)
16
- %td= l(record.updated_at, format: :long)
17
- %td.actions
18
- %button.button--action-pane{ 'data-toggle' => "dropdown-pane-actions-post-#{record.id}" }
19
- = icon('ellipsis-v')
20
- .dropdown-pane.dropdown-pane--actions{ id: "dropdown-pane-actions-post-#{record.id}", data: { dropdown: true, position: :bottom, alignment: :right, close_on_click: 'true' } }
21
- %ul.menu.vertical
22
- - if policy(Integral::Post).manager?
23
- %li
24
- = link_to edit_backend_post_url(record.id) do
25
- = icon('edit')
26
- = t('integral.actions.edit')
27
- %li
28
- = link_to post_url(record) do
29
- = icon('eye')
30
- = t('integral.actions.view_on_site')
31
- %li
32
- = link_to backend_post_url(record.id), target: :blank do
33
- = icon('external-link')
34
- = t('integral.actions.open_in_new_tab')
35
- - if policy(Integral::Post).duplicate?
36
- %li
37
- = link_to duplicate_backend_post_url(record.id), method: :post, data: { confirm: t('integral.actions.confirmation.clone') } do
38
- = icon('clone')
39
- = t('integral.actions.clone')
40
- - if policy(Integral::Version).manager?
41
- %li
42
- = link_to activities_backend_post_url(record.id) do
43
- = icon('history')
44
- = t('integral.actions.view_history')
45
- - if policy(Integral::Post).manager?
46
- %li
47
- = link_to backend_post_url(record.id), method: :delete, data: { confirm: t('integral.actions.confirmation.deletion') } do
48
- = icon('remove')
49
- = t('integral.actions.delete')
50
- - else
51
- = render partial: 'integral/backend/shared/empty_grid'
@@ -1,18 +0,0 @@
1
- -# TODO: Improve this to handle empty grid also
2
- - options ||= local_assigns.fetch(:options, { order: true, columns: [] })
3
-
4
- %table.integral-grid.wice-grid.table-striped.hover
5
- %thead
6
- %tr
7
- - grid.html_columns(*options[:columns]).uniq { |col| col.name }.sort_by{ |item| options[:columns].index item.name }.each do |column|
8
- %th{ class: datagrid_column_classes(grid, column) }
9
- - if column.supports_order? && options[:order]
10
- %button{ data: { sort: column.name, desc: (!grid.descending).to_s }}
11
- = column.header
12
- - else
13
- = column.header
14
- %tbody
15
- = yield(grid)
16
-
17
- = render partial: 'integral/backend/shared/pagination', locals: { records: grid.assets }
18
- = icon('spinner', class: 'fa-pulse fa-3x fa-fw load-indicator')
@@ -1,19 +0,0 @@
1
- -# TODO: Should look to merge this partial with recent_posts to create recent_resources card
2
- .card
3
- .card-section
4
- .card-action-title
5
- %h2 Recent Pages
6
- %table.hover
7
- - Integral::Page.published.limit(5).decorate.each do |record|
8
- %tr
9
- %td= record.title
10
- -# %td
11
- -# - if record.user.present?
12
- -# = image_tag record.user.avatar.url(:thumbnail), alt: record.user.name, class: 'avatar'
13
- -# = record.user.name
14
- -# - else
15
- -# "#{record.user_id} [Deleted]"
16
- %td
17
- = link_to backend_page_url(record.id), class: 'button--action-pane' do
18
- = icon('eye')
19
- = link_to t('integral.actions.view_all'), list_backend_pages_url, class: 'button clear expanded'
@@ -1,18 +0,0 @@
1
- .card
2
- .card-section
3
- .card-action-title
4
- %h2 Recent Posts
5
- %table.hover
6
- - Integral::Post.published.limit(5).decorate.each do |record|
7
- %tr
8
- %td= record.title
9
- %td
10
- - if record.user.present?
11
- = image_tag record.user.avatar.url(:thumbnail), alt: record.user.name, class: 'avatar'
12
- = record.user.name
13
- - else
14
- "#{record.user_id} [Deleted]"
15
- %td
16
- = link_to backend_post_url(record.id), class: 'button--action-pane' do
17
- = icon('eye')
18
- = link_to t('integral.actions.view_all'), list_backend_posts_url, class: 'button clear expanded'
@@ -1,19 +0,0 @@
1
- -# TODO: Should look to merge this partial with recent_posts to create recent_resources card
2
- .card
3
- .card-section
4
- .card-action-title
5
- %h2 Recent Users
6
- %table.hover
7
- - Integral::User.order('created_at DESC').limit(5).decorate.each do |record|
8
- %tr
9
- %td= record.name
10
- -# %td
11
- -# - if record.user.present?
12
- -# = image_tag record.user.avatar.url(:thumbnail), alt: record.user.name, class: 'avatar'
13
- -# = record.user.name
14
- -# - else
15
- -# "#{record.user_id} [Deleted]"
16
- %td
17
- = link_to backend_user_url(record.id), class: 'button--action-pane' do
18
- = icon('eye')
19
- = link_to t('integral.actions.view_all'), list_backend_users_url, class: 'button clear expanded'
@@ -1,36 +0,0 @@
1
- = render_data_grid do
2
- = render layout: 'integral/backend/shared/grid', locals: { grid: @grid, options: { columns: [:name, :email, :updated_at, :actions], order: true }} do |grid|
3
- - if grid.assets.any?
4
- - grid.assets.decorate.each do |record|
5
- %tr.tr--clickable{ data: { href: backend_user_url(record.id), context_menu: "dropdown-pane-actions-user-#{record.id}" }}
6
- %td
7
- = image_tag record.avatar.url(:thumbnail), class: :avatar
8
- = record.name.truncate(30)
9
- %td= record.email
10
- %td= l(record.updated_at, format: :long)
11
- %td.actions
12
- %button.button--action-pane{ 'data-toggle' => "dropdown-pane-actions-user-#{record.id}" }
13
- = icon('ellipsis-v')
14
- .dropdown-pane.dropdown-pane--actions{ id: "dropdown-pane-actions-user-#{record.id}", data: { dropdown: true, position: :bottom, alignment: :right, close_on_click: 'true' } }
15
- %ul.menu.vertical
16
- - if policy(Integral::User).manager?
17
- %li
18
- = link_to edit_backend_user_url(record.id) do
19
- = icon('edit')
20
- = t('integral.actions.edit')
21
- %li
22
- = link_to backend_user_url(record.id), target: :blank do
23
- = icon('external-link')
24
- = t('integral.actions.open_in_new_tab')
25
- -# - if policy(Integral::Version).manager?
26
- -# %li
27
- -# = link_to activities_backend_post_url(record.id) do
28
- -# = icon('history')
29
- -# = t('integral.actions.view_history')
30
- - if policy(Integral::User).manager?
31
- %li
32
- = link_to backend_user_url(record.id), method: :delete, data: { confirm: t('integral.actions.confirmation.deletion') } do
33
- = icon('remove')
34
- = t('integral.actions.delete')
35
- - else
36
- = render partial: 'integral/backend/shared/empty_grid'