hyrax 2.0.0.beta1 → 2.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -2
  3. data/app/actors/hyrax/actors/file_set_actor.rb +12 -15
  4. data/app/assets/javascripts/hyrax.js +6 -5
  5. data/app/assets/javascripts/hyrax/{app.js → app.js.erb} +12 -8
  6. data/app/assets/javascripts/hyrax/channels/notifications.js +0 -0
  7. data/app/assets/javascripts/hyrax/notification.es6 +19 -31
  8. data/app/channels/hyrax/application_cable/channel.rb +6 -0
  9. data/app/channels/hyrax/application_cable/connection.rb +30 -0
  10. data/app/channels/hyrax/notifications_channel.rb +15 -0
  11. data/app/controllers/hyrax/depositors_controller.rb +2 -2
  12. data/app/controllers/hyrax/notifications_controller.rb +2 -0
  13. data/app/controllers/hyrax/users_controller.rb +0 -7
  14. data/app/helpers/hyrax/hyrax_helper_behavior.rb +27 -0
  15. data/app/jobs/import_url_job.rb +3 -1
  16. data/app/jobs/stream_notifications_job.rb +10 -0
  17. data/app/models/proxy_deposit_request.rb +2 -2
  18. data/app/models/user_mailbox.rb +19 -0
  19. data/app/services/hyrax/{message_user_service.rb → abstract_message_service.rb} +7 -4
  20. data/app/services/hyrax/batch_create_failure_service.rb +1 -1
  21. data/app/services/hyrax/batch_create_success_service.rb +1 -1
  22. data/app/services/hyrax/fixity_check_failure_service.rb +1 -1
  23. data/app/services/hyrax/import_url_failure_service.rb +1 -1
  24. data/app/services/hyrax/messenger_service.rb +8 -0
  25. data/app/services/hyrax/workflow/abstract_notification.rb +1 -1
  26. data/app/views/_user_util_links.html.erb +1 -1
  27. data/app/views/hyrax/homepage/index.html.erb +1 -1
  28. data/config/locales/hyrax.de.yml +5 -2
  29. data/config/locales/hyrax.en.yml +4 -1
  30. data/config/locales/hyrax.es.yml +4 -1
  31. data/config/locales/hyrax.fr.yml +5 -2
  32. data/config/locales/hyrax.it.yml +4 -1
  33. data/config/locales/hyrax.pt-BR.yml +5 -2
  34. data/config/locales/hyrax.zh.yml +5 -2
  35. data/config/routes.rb +4 -2
  36. data/db/migrate/20170905135339_add_preferred_locale_to_users.rb +5 -0
  37. data/lib/generators/hyrax/templates/config/authorities/licenses.yml +28 -10
  38. data/lib/generators/hyrax/templates/config/hyrax.rb +0 -3
  39. data/lib/hyrax/configuration.rb +0 -5
  40. data/lib/hyrax/engine.rb +5 -0
  41. data/lib/hyrax/version.rb +1 -1
  42. data/spec/actors/hyrax/actors/file_set_actor_spec.rb +74 -0
  43. data/spec/channels/hyrax/application_cable/channel_spec.rb +14 -0
  44. data/spec/channels/hyrax/application_cable/connection_spec.rb +31 -0
  45. data/spec/channels/hyrax/notifications_channel_spec.rb +45 -0
  46. data/spec/controllers/hyrax/notifications_controller_spec.rb +1 -0
  47. data/spec/helpers/blacklight_helper_spec.rb +4 -2
  48. data/spec/helpers/hyrax_helper_spec.rb +34 -4
  49. data/spec/jobs/import_url_job_spec.rb +1 -1
  50. data/spec/jobs/stream_notifications_job_spec.rb +30 -0
  51. data/spec/models/collection_spec.rb +13 -19
  52. data/spec/models/proxy_deposit_request_spec.rb +2 -1
  53. data/spec/models/user_mailbox_spec.rb +73 -0
  54. data/spec/services/hyrax/abstract_message_service_spec.rb +25 -0
  55. data/spec/services/hyrax/messenger_service_spec.rb +15 -0
  56. data/spec/test_app_templates/lib/generators/test_app_generator.rb +6 -0
  57. data/spec/views/_user_util_links.html.erb_spec.rb +3 -2
  58. data/spec/views/hyrax/homepage/index.html.erb_spec.rb +4 -0
  59. data/template.rb +1 -1
  60. metadata +23 -14
  61. data/app/assets/javascripts/hyrax/notifications.es6 +0 -63
  62. data/app/views/hyrax/users/_notify_number.html.erb +0 -8
  63. data/app/views/hyrax/users/notifications_number.json.jbuilder +0 -1
  64. data/app/views/kaminari/blacklight/_first_page.html.erb +0 -9
  65. data/app/views/kaminari/blacklight/_gap.html.erb +0 -8
  66. data/app/views/kaminari/blacklight/_last_page.html.erb +0 -9
  67. data/app/views/kaminari/blacklight/_next_page.html.erb +0 -9
  68. data/app/views/kaminari/blacklight/_page.html.erb +0 -10
  69. data/app/views/kaminari/blacklight/_paginator.html.erb +0 -19
  70. data/app/views/kaminari/blacklight/_prev_page.html.erb +0 -9
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  RSpec.describe '/_user_util_links.html.erb', type: :view do
2
4
  let(:join_date) { 5.days.ago }
3
5
  let(:can_create_file) { true }
@@ -6,7 +8,6 @@ RSpec.describe '/_user_util_links.html.erb', type: :view do
6
8
  allow(view).to receive(:user_signed_in?).and_return(true)
7
9
  allow(view).to receive(:current_user).and_return(stub_model(User, user_key: 'userX'))
8
10
  allow(view).to receive(:can?).with(:create, GenericWork).and_return(can_create_file)
9
- assign :notify_number, 8
10
11
  end
11
12
 
12
13
  it 'has dropdown list of links' do
@@ -19,7 +20,7 @@ RSpec.describe '/_user_util_links.html.erb', type: :view do
19
20
  it 'shows the number of outstanding messages' do
20
21
  render
21
22
  expect(rendered).to have_selector "a[aria-label='You have no unread notifications'][href='#{hyrax.notifications_path}']"
22
- expect(rendered).to have_selector 'a.notify-number span.label-danger.invisible', text: '0'
23
+ expect(rendered).to have_selector 'a.notify-number span.label-default.invisible', text: '0'
23
24
  end
24
25
 
25
26
  describe 'translations' do
@@ -25,6 +25,10 @@ RSpec.describe "hyrax/homepage/index.html.erb", type: :view do
25
25
  it "displays" do
26
26
  expect(rendered).to have_content t("hyrax.share_button")
27
27
  end
28
+
29
+ it 'links to the my works path' do
30
+ expect(rendered).to have_selector('a[href="/dashboard/my/works"]')
31
+ end
28
32
  end
29
33
  context "when the button displays for users with rights" do
30
34
  let(:display_share_button) { false }
data/template.rb CHANGED
@@ -1,4 +1,4 @@
1
- gem 'hyrax', '2.0.0.beta1'
1
+ gem 'hyrax', '2.0.0.beta2'
2
2
  run 'bundle install'
3
3
  generate 'hyrax:install', '-f'
4
4
  rails_command 'db:migrate'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyrax
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.beta1
4
+ version: 2.0.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Coyne
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2017-09-01 00:00:00.000000000 Z
17
+ date: 2017-09-14 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: rails
@@ -1000,7 +1000,7 @@ files:
1000
1000
  - app/assets/javascripts/hyrax/admin/admin_set/visibility.es6
1001
1001
  - app/assets/javascripts/hyrax/admin/admin_set_controls.es6
1002
1002
  - app/assets/javascripts/hyrax/admin/graphs.es6
1003
- - app/assets/javascripts/hyrax/app.js
1003
+ - app/assets/javascripts/hyrax/app.js.erb
1004
1004
  - app/assets/javascripts/hyrax/authority_select.es6
1005
1005
  - app/assets/javascripts/hyrax/autocomplete.es6
1006
1006
  - app/assets/javascripts/hyrax/autocomplete/default.es6
@@ -1011,6 +1011,7 @@ files:
1011
1011
  - app/assets/javascripts/hyrax/batch_select.es6
1012
1012
  - app/assets/javascripts/hyrax/batch_select_all.js
1013
1013
  - app/assets/javascripts/hyrax/browse_everything.js
1014
+ - app/assets/javascripts/hyrax/channels/notifications.js
1014
1015
  - app/assets/javascripts/hyrax/collections.js
1015
1016
  - app/assets/javascripts/hyrax/collections/editor.es6
1016
1017
  - app/assets/javascripts/hyrax/config.js.erb
@@ -1031,7 +1032,6 @@ files:
1031
1032
  - app/assets/javascripts/hyrax/initialize.js
1032
1033
  - app/assets/javascripts/hyrax/monkey_patch_turbolinks.js.coffee
1033
1034
  - app/assets/javascripts/hyrax/notification.es6
1034
- - app/assets/javascripts/hyrax/notifications.es6
1035
1035
  - app/assets/javascripts/hyrax/per_page.es6
1036
1036
  - app/assets/javascripts/hyrax/permissions.js
1037
1037
  - app/assets/javascripts/hyrax/permissions/control.es6
@@ -1108,6 +1108,9 @@ files:
1108
1108
  - app/authorities/qa/authorities/find_works.rb
1109
1109
  - app/builders/hyrax/bootstrap_breadcrumbs_builder.rb
1110
1110
  - app/builders/hyrax/form_builder.rb
1111
+ - app/channels/hyrax/application_cable/channel.rb
1112
+ - app/channels/hyrax/application_cable/connection.rb
1113
+ - app/channels/hyrax/notifications_channel.rb
1111
1114
  - app/connections/hyrax/clean_connection.rb
1112
1115
  - app/controlled_vocabularies/hyrax/controlled_vocabularies/location.rb
1113
1116
  - app/controllers/concerns/hyrax/admin/stats_behavior.rb
@@ -1268,6 +1271,7 @@ files:
1268
1271
  - app/jobs/ingest_local_file_job.rb
1269
1272
  - app/jobs/inherit_permissions_job.rb
1270
1273
  - app/jobs/resolrize_job.rb
1274
+ - app/jobs/stream_notifications_job.rb
1271
1275
  - app/jobs/user_edit_profile_event_job.rb
1272
1276
  - app/jobs/visibility_copy_job.rb
1273
1277
  - app/mailers/hyrax/contact_mailer.rb
@@ -1442,6 +1446,7 @@ files:
1442
1446
  - app/search_builders/hyrax/work_relation.rb
1443
1447
  - app/search_builders/hyrax/work_search_builder.rb
1444
1448
  - app/search_builders/hyrax/works_search_builder.rb
1449
+ - app/services/hyrax/abstract_message_service.rb
1445
1450
  - app/services/hyrax/admin_set_create_service.rb
1446
1451
  - app/services/hyrax/admin_set_service.rb
1447
1452
  - app/services/hyrax/analytics.rb
@@ -1474,7 +1479,7 @@ files:
1474
1479
  - app/services/hyrax/local_file_service.rb
1475
1480
  - app/services/hyrax/lock_manager.rb
1476
1481
  - app/services/hyrax/lockable.rb
1477
- - app/services/hyrax/message_user_service.rb
1482
+ - app/services/hyrax/messenger_service.rb
1478
1483
  - app/services/hyrax/microdata.rb
1479
1484
  - app/services/hyrax/noid.rb
1480
1485
  - app/services/hyrax/parent_service.rb
@@ -1832,7 +1837,6 @@ files:
1832
1837
  - app/views/hyrax/users/_activity_log.html.erb
1833
1838
  - app/views/hyrax/users/_contributions.html.erb
1834
1839
  - app/views/hyrax/users/_left_sidebar.html.erb
1835
- - app/views/hyrax/users/_notify_number.html.erb
1836
1840
  - app/views/hyrax/users/_profile_tabs.html.erb
1837
1841
  - app/views/hyrax/users/_proxies.html.erb
1838
1842
  - app/views/hyrax/users/_search_form.html.erb
@@ -1843,15 +1847,7 @@ files:
1843
1847
  - app/views/hyrax/users/_vitals.html.erb
1844
1848
  - app/views/hyrax/users/index.html.erb
1845
1849
  - app/views/hyrax/users/index.json.jbuilder
1846
- - app/views/hyrax/users/notifications_number.json.jbuilder
1847
1850
  - app/views/hyrax/users/show.html.erb
1848
- - app/views/kaminari/blacklight/_first_page.html.erb
1849
- - app/views/kaminari/blacklight/_gap.html.erb
1850
- - app/views/kaminari/blacklight/_last_page.html.erb
1851
- - app/views/kaminari/blacklight/_next_page.html.erb
1852
- - app/views/kaminari/blacklight/_page.html.erb
1853
- - app/views/kaminari/blacklight/_paginator.html.erb
1854
- - app/views/kaminari/blacklight/_prev_page.html.erb
1855
1851
  - app/views/kaminari/blacklight_compact/_paginator.html.erb
1856
1852
  - app/views/layouts/_head_tag_content.html.erb
1857
1853
  - app/views/layouts/dashboard.html.erb
@@ -1948,6 +1944,7 @@ files:
1948
1944
  - db/migrate/20170308175556_add_allows_access_grant_to_workflow.rb
1949
1945
  - db/migrate/20170504192714_change_checksum_audit_log.rb
1950
1946
  - db/migrate/20170621201939_create_job_io_wrappers.rb
1947
+ - db/migrate/20170905135339_add_preferred_locale_to_users.rb
1951
1948
  - hyrax.gemspec
1952
1949
  - lib/generators/hyrax/arkivo_api_generator.rb
1953
1950
  - lib/generators/hyrax/assets_generator.rb
@@ -2101,6 +2098,9 @@ files:
2101
2098
  - spec/actors/hyrax/actors/optimistic_lock_validator_spec.rb
2102
2099
  - spec/actors/hyrax/actors/transactional_request_spec.rb
2103
2100
  - spec/authorities/qa/authorities/find_works_spec.rb
2101
+ - spec/channels/hyrax/application_cable/channel_spec.rb
2102
+ - spec/channels/hyrax/application_cable/connection_spec.rb
2103
+ - spec/channels/hyrax/notifications_channel_spec.rb
2104
2104
  - spec/config/hyrax_events_spec.rb
2105
2105
  - spec/controllers/catalog_controller_spec.rb
2106
2106
  - spec/controllers/hyrax/accepts_batches_controller_spec.rb
@@ -2322,6 +2322,7 @@ files:
2322
2322
  - spec/jobs/import_url_job_spec.rb
2323
2323
  - spec/jobs/ingest_local_file_job_spec.rb
2324
2324
  - spec/jobs/inherit_permissions_job_spec.rb
2325
+ - spec/jobs/stream_notifications_job_spec.rb
2325
2326
  - spec/jobs/user_edit_profile_event_job_spec.rb
2326
2327
  - spec/jobs/visibility_copy_job_spec.rb
2327
2328
  - spec/lib/hyrax/analytics_spec.rb
@@ -2459,6 +2460,7 @@ files:
2459
2460
  - spec/search_builders/hyrax/work_relation_spec.rb
2460
2461
  - spec/search_builders/hyrax/work_search_builder_spec.rb
2461
2462
  - spec/search_builders/hyrax/works_search_builder_spec.rb
2463
+ - spec/services/hyrax/abstract_message_service_spec.rb
2462
2464
  - spec/services/hyrax/admin_set_create_service_spec.rb
2463
2465
  - spec/services/hyrax/admin_set_service_spec.rb
2464
2466
  - spec/services/hyrax/batch_create_failure_service_spec.rb
@@ -2481,6 +2483,7 @@ files:
2481
2483
  - spec/services/hyrax/lease_service_spec.rb
2482
2484
  - spec/services/hyrax/license_service_spec.rb
2483
2485
  - spec/services/hyrax/lock_manager_spec.rb
2486
+ - spec/services/hyrax/messenger_service_spec.rb
2484
2487
  - spec/services/hyrax/microdata_spec.rb
2485
2488
  - spec/services/hyrax/noid_spec.rb
2486
2489
  - spec/services/hyrax/parent_service_spec.rb
@@ -2729,6 +2732,9 @@ test_files:
2729
2732
  - spec/actors/hyrax/actors/optimistic_lock_validator_spec.rb
2730
2733
  - spec/actors/hyrax/actors/transactional_request_spec.rb
2731
2734
  - spec/authorities/qa/authorities/find_works_spec.rb
2735
+ - spec/channels/hyrax/application_cable/channel_spec.rb
2736
+ - spec/channels/hyrax/application_cable/connection_spec.rb
2737
+ - spec/channels/hyrax/notifications_channel_spec.rb
2732
2738
  - spec/config/hyrax_events_spec.rb
2733
2739
  - spec/controllers/catalog_controller_spec.rb
2734
2740
  - spec/controllers/hyrax/accepts_batches_controller_spec.rb
@@ -2950,6 +2956,7 @@ test_files:
2950
2956
  - spec/jobs/import_url_job_spec.rb
2951
2957
  - spec/jobs/ingest_local_file_job_spec.rb
2952
2958
  - spec/jobs/inherit_permissions_job_spec.rb
2959
+ - spec/jobs/stream_notifications_job_spec.rb
2953
2960
  - spec/jobs/user_edit_profile_event_job_spec.rb
2954
2961
  - spec/jobs/visibility_copy_job_spec.rb
2955
2962
  - spec/lib/hyrax/analytics_spec.rb
@@ -3087,6 +3094,7 @@ test_files:
3087
3094
  - spec/search_builders/hyrax/work_relation_spec.rb
3088
3095
  - spec/search_builders/hyrax/work_search_builder_spec.rb
3089
3096
  - spec/search_builders/hyrax/works_search_builder_spec.rb
3097
+ - spec/services/hyrax/abstract_message_service_spec.rb
3090
3098
  - spec/services/hyrax/admin_set_create_service_spec.rb
3091
3099
  - spec/services/hyrax/admin_set_service_spec.rb
3092
3100
  - spec/services/hyrax/batch_create_failure_service_spec.rb
@@ -3109,6 +3117,7 @@ test_files:
3109
3117
  - spec/services/hyrax/lease_service_spec.rb
3110
3118
  - spec/services/hyrax/license_service_spec.rb
3111
3119
  - spec/services/hyrax/lock_manager_spec.rb
3120
+ - spec/services/hyrax/messenger_service_spec.rb
3112
3121
  - spec/services/hyrax/microdata_spec.rb
3113
3122
  - spec/services/hyrax/noid_spec.rb
3114
3123
  - spec/services/hyrax/parent_service_spec.rb
@@ -1,63 +0,0 @@
1
- import Notification from './notification';
2
-
3
- export default class {
4
- // If URL is not provided, do nothing.
5
- // If there is a query parameter named "notification_seconds", it will
6
- // use it's value as the interval in seconds to poll.
7
- // Otherwise it will use the default interval passed as a parmeter
8
- constructor(url, default_interval) {
9
- if (!url)
10
- return;
11
- // First call happens immediately
12
- this.fetchUpdates(url)
13
- let interval = this.getIntervalSeconds(default_interval) * 1000
14
- this.poller(interval, url)
15
- this.notification_widget = new Notification($('.notify-number'))
16
- }
17
-
18
- poller(interval, url) {
19
- setInterval(() => { this.fetchUpdates(url) }, interval);
20
- }
21
-
22
- fetchUpdates(url) {
23
- $.getJSON( url, (data) => this.updatePage(data))
24
- }
25
-
26
- updatePage(data) {
27
- this.notification_widget.setCount(data.notify_number)
28
- }
29
-
30
- getIntervalSeconds(default_interval) {
31
- var seconds = parseInt(this.queryStringParam("notification_seconds"), 10);
32
- return seconds || default_interval;
33
- }
34
-
35
- // During development allow the frequency of the notifications check to
36
- // be overwritten via query string parameter notification_seconds to
37
- // prevent cluttering the terminal with (mostly) meaninless messages.
38
- queryStringParam(key) {
39
- var queryString, pairs, i;
40
- var value = null;
41
- try {
42
- queryString = document.location.search.substring(1);
43
- if (queryString === "") {
44
- return value; // nothing to do
45
- }
46
- pairs = queryString.split("&").map(function(el) {
47
- var pair = el.split("=");
48
- return {key: pair[0], value: pair[1]};
49
- });
50
- for(i = 0; i < pairs.length; i++) {
51
- if (pairs[i].key === key) {
52
- value = pairs[i].value;
53
- break;
54
- }
55
- }
56
- }
57
- catch(e) {
58
- // assume it's a malformed query string.
59
- value = null;
60
- }
61
- return value;
62
- }
63
- }
@@ -1,8 +0,0 @@
1
- <%= link_to hyrax.notifications_path,
2
- 'aria-label' => t("hyrax.toolbar.notifications"),
3
- class: "notify-number",
4
- data: { 'update-poll-url' => hyrax.user_notify_path,
5
- 'update-poll-interval' => Hyrax.config.notifications_update_poll_interval } do %>
6
- <span class="fa fa-bell"></span>
7
- <span class="count invisible label label-danger">0</span>
8
- <% end %>
@@ -1 +0,0 @@
1
- json.notify_number @notify_number
@@ -1,9 +0,0 @@
1
- <%# Link to the "First" page
2
- - available local variables
3
- url: url to the first page
4
- current_page: a page object for the currently displayed page
5
- num_pages: total number of pages
6
- per_page: number of items to fetch per page
7
- remote: data-remote
8
- -%>
9
- <%= link_to raw(t 'views.pagination.first'), url, remote: remote, class: current_page.first? ? 'disabled' : nil %>
@@ -1,8 +0,0 @@
1
- <%# Non-link tag that stands for skipped pages...
2
- - available local variables
3
- current_page: a page object for the currently displayed page
4
- num_pages: total number of pages
5
- per_page: number of items to fetch per page
6
- remote: data-remote
7
- -%>
8
- <%= raw(t 'views.pagination.truncate') %>
@@ -1,9 +0,0 @@
1
- <%# Link to the "Last" page
2
- - available local variables
3
- url: url to the last page
4
- current_page: a page object for the currently displayed page
5
- num_pages: total number of pages
6
- per_page: number of items to fetch per page
7
- remote: data-remote
8
- -%>
9
- <%= link_to raw(t 'views.pagination.last'), url, {remote: remote, class: current_page.last? ? 'disabled' : nil} %>
@@ -1,9 +0,0 @@
1
- <%# Link to the "Next" page
2
- - available local variables
3
- url: url to the next page
4
- current_page: a page object for the currently displayed page
5
- num_pages: total number of pages
6
- per_page: number of items to fetch per page
7
- remote: data-remote
8
- -%>
9
- <%= link_to raw(t 'views.pagination.next'), url, rel: 'next', remote: remote, class: current_page.last? ? 'disabled' : nil %>
@@ -1,10 +0,0 @@
1
- <%# Link showing page number
2
- - available local variables
3
- page: a page object for "this" page
4
- url: url to this page
5
- current_page: a page object for the currently displayed page
6
- num_pages: total number of pages
7
- per_page: number of items to fetch per page
8
- remote: data-remote
9
- -%>
10
- <%= link_to number_with_delimiter(page.to_s), url, opts = {remote: remote, rel: page.next? ? 'next' : page.prev? ? 'prev' : nil, class: page.current? ? 'disabled' : nil} %>
@@ -1,19 +0,0 @@
1
- <%# The container tag
2
- - available local variables
3
- current_page: a page object for the currently displayed page
4
- num_pages: total number of pages
5
- per_page: number of items to fetch per page
6
- remote: data-remote
7
- paginator: the paginator that renders the pagination tags inside
8
- -%>
9
- <%= paginator.render do -%>
10
- <%= prev_page_tag %>
11
- <% each_relevant_page do |page| -%>
12
- <% if page.left_outer? || page.right_outer? || page.inside_window? -%>
13
- <%= page_tag page %>
14
- <% elsif !page.was_truncated? -%>
15
- <%= gap_tag %>
16
- <% end -%>
17
- <% end -%>
18
- <%= next_page_tag %>
19
- <% end -%>
@@ -1,9 +0,0 @@
1
- <%# Link to the "Previous" page
2
- - available local variables
3
- url: url to the previous page
4
- current_page: a page object for the currently displayed page
5
- num_pages: total number of pages
6
- per_page: number of items to fetch per page
7
- remote: data-remote
8
- -%>
9
- <%= link_to raw(t 'views.pagination.previous'), url, rel: 'prev', remote: remote, class: current_page.first? ? 'disabled' : nil %>