geoblacklight_admin 0.4.1 → 0.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 (109) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -55
  3. data/Rakefile +3 -0
  4. data/app/assets/javascripts/geoblacklight_admin/chosen.js +7 -3
  5. data/app/assets/javascripts/geoblacklight_admin/datepicker.js +2 -2
  6. data/app/assets/javascripts/geoblacklight_admin/inputmask.js +2 -2
  7. data/app/assets/javascripts/geoblacklight_admin/truncate.js +2 -2
  8. data/app/assets/javascripts/geoblacklight_admin.js +1 -4
  9. data/app/assets/stylesheets/geoblacklight_admin/_core.scss +3 -1
  10. data/app/assets/stylesheets/geoblacklight_admin/modules/_images.scss +4 -0
  11. data/app/assets/stylesheets/geoblacklight_admin/modules/_nav.scss +4 -0
  12. data/app/assets/stylesheets/geoblacklight_admin/modules/_results.scss +5 -0
  13. data/app/controllers/admin/admin_controller.rb +1 -1
  14. data/app/controllers/admin/advanced_search_controller.rb +0 -1
  15. data/app/controllers/admin/assets_controller.rb +142 -0
  16. data/app/controllers/admin/bulk_actions_controller.rb +1 -1
  17. data/app/controllers/admin/document_accesses_controller.rb +3 -3
  18. data/app/controllers/admin/document_assets_controller.rb +33 -23
  19. data/app/controllers/admin/documents_controller.rb +6 -2
  20. data/app/controllers/admin/ids_controller.rb +0 -1
  21. data/app/controllers/admin/imports_controller.rb +2 -2
  22. data/app/helpers/asset_helper.rb +8 -0
  23. data/app/helpers/document_helper.rb +4 -0
  24. data/app/helpers/geoblacklight_admin_helper.rb +11 -1
  25. data/{lib/generators/geoblacklight_admin/templates → app}/javascript/controllers/results_controller.js +38 -0
  26. data/app/javascript/entrypoints/engine.js +8 -0
  27. data/app/javascript/index.js +8 -0
  28. data/app/jobs/bulk_action_revert_document_job.rb +2 -2
  29. data/app/jobs/bulk_action_run_document_job.rb +5 -1
  30. data/app/jobs/bulk_action_run_job.rb +11 -1
  31. data/app/jobs/geoblacklight_admin/delete_thumbnail_job.rb +17 -0
  32. data/app/jobs/geoblacklight_admin/remove_parent_dct_references_uri_job.rb +16 -0
  33. data/app/jobs/geoblacklight_admin/set_parent_dct_references_uri_job.rb +19 -0
  34. data/app/jobs/geoblacklight_admin/store_image_job.rb +21 -2
  35. data/app/models/asset.rb +38 -0
  36. data/app/models/blacklight_api.rb +2 -2
  37. data/app/models/blacklight_api_facets.rb +1 -1
  38. data/app/models/blacklight_api_ids.rb +2 -2
  39. data/app/models/bulk_action_document_state_machine.rb +2 -4
  40. data/app/models/bulk_action_state_machine.rb +3 -3
  41. data/app/models/bulk_actions/change_publication_state.rb +10 -0
  42. data/app/models/document/reference.rb +24 -0
  43. data/app/models/document.rb +122 -11
  44. data/app/models/document_thumbnail_state_machine.rb +22 -0
  45. data/app/models/document_thumbnail_transition.rb +26 -0
  46. data/app/models/element.rb +1 -1
  47. data/app/models/geoblacklight_admin/field_mappings_btaa_aardvark.rb +7 -1
  48. data/app/models/geoblacklight_admin/schema.rb +37 -1
  49. data/app/models/geoblacklight_admin/solr_utils.rb +87 -0
  50. data/app/models/kithe/vips_cli_image_to_png.rb +114 -0
  51. data/app/services/geoblacklight_admin/image_service/iiif.rb +2 -2
  52. data/app/services/geoblacklight_admin/image_service/iiif_manifest.rb +111 -0
  53. data/app/services/geoblacklight_admin/image_service/tms.rb +50 -0
  54. data/app/services/geoblacklight_admin/image_service/wms.rb +1 -4
  55. data/app/services/geoblacklight_admin/image_service.rb +16 -40
  56. data/app/services/geoblacklight_admin/item_viewer.rb +1 -1
  57. data/app/uploaders/asset_uploader.rb +6 -11
  58. data/app/views/admin/assets/_form.html.erb +19 -0
  59. data/app/views/admin/assets/display_attach_form.html.erb +39 -0
  60. data/app/views/admin/assets/edit.html.erb +9 -0
  61. data/app/views/admin/assets/index.html.erb +75 -0
  62. data/app/views/admin/assets/show.html.erb +100 -0
  63. data/app/views/admin/bulk_actions/index.html.erb +50 -48
  64. data/app/views/admin/bulk_actions/show.html.erb +3 -2
  65. data/app/views/admin/document_accesses/index.html.erb +68 -64
  66. data/app/views/admin/document_assets/_form.html.erb +17 -0
  67. data/app/views/admin/document_assets/display_attach_form.html.erb +4 -9
  68. data/app/views/admin/document_assets/edit.html.erb +5 -0
  69. data/app/views/admin/document_assets/index.html.erb +88 -72
  70. data/app/views/admin/document_downloads/index.html.erb +64 -62
  71. data/app/views/admin/documents/_document.html.erb +37 -16
  72. data/app/views/admin/documents/_form.html.erb +21 -6
  73. data/app/views/admin/documents/_form_nav.html.erb +12 -3
  74. data/app/views/admin/documents/_result_selected_options.html.erb +6 -1
  75. data/app/views/admin/documents/admin.html.erb +210 -0
  76. data/app/views/admin/documents/index.html.erb +10 -1
  77. data/app/views/admin/documents/versions.html.erb +3 -3
  78. data/app/views/admin/elements/index.html.erb +55 -54
  79. data/app/views/admin/form_elements/index.html.erb +38 -35
  80. data/app/views/admin/imports/index.html.erb +52 -50
  81. data/app/views/admin/layouts/application.html.erb +7 -4
  82. data/app/views/admin/shared/_js_behaviors.html.erb +6 -3
  83. data/app/views/admin/shared/_navbar.html.erb +11 -8
  84. data/config/locales/documents.en.yml +6 -0
  85. data/config/routes.rb +1 -0
  86. data/config/vite.json +14 -0
  87. data/db/migrate/20240619171628_create_document_thumbnail_statesman.rb +18 -0
  88. data/lib/generators/geoblacklight_admin/config_generator.rb +63 -15
  89. data/lib/generators/geoblacklight_admin/install_generator.rb +1 -0
  90. data/lib/generators/geoblacklight_admin/templates/api_controller.rb +0 -2
  91. data/lib/generators/geoblacklight_admin/templates/base.html.erb +53 -0
  92. data/lib/generators/geoblacklight_admin/templates/config/initializers/kithe.rb +1 -0
  93. data/lib/generators/geoblacklight_admin/templates/config/settings.yml +15 -1
  94. data/lib/generators/geoblacklight_admin/templates/config/vite.json +16 -0
  95. data/lib/generators/geoblacklight_admin/templates/frontend/entrypoints/application.js +30 -0
  96. data/lib/generators/geoblacklight_admin/templates/package-test.json +10 -0
  97. data/lib/generators/geoblacklight_admin/templates/package.json +5 -29
  98. data/lib/generators/geoblacklight_admin/templates/vite.config.ts +8 -0
  99. data/lib/geoblacklight_admin/engine.rb +1 -0
  100. data/lib/geoblacklight_admin/rake_task.rb +5 -0
  101. data/lib/geoblacklight_admin/tasks/images.rake +33 -0
  102. data/lib/geoblacklight_admin/tasks/solr.rake +11 -0
  103. data/lib/geoblacklight_admin/version.rb +1 -1
  104. metadata +75 -19
  105. data/lib/generators/geoblacklight_admin/templates/javascript/controllers/application_controller.js +0 -17
  106. data/lib/generators/geoblacklight_admin/templates/javascript/controllers/document_controller.js +0 -26
  107. data/lib/generators/geoblacklight_admin/templates/javascript/controllers/index.js +0 -10
  108. data/lib/tasks/geoblacklight_admin/images.rake +0 -30
  109. data/lib/tasks/geoblacklight_admin.rake +0 -213
@@ -1,77 +1,93 @@
1
- <h1 style="width:100%;">
2
- Document &middot; Assets
1
+ <%- @page_title = "GBL♦Admin - Document - Assets" %>
3
2
 
4
- <% if params[:document_id] %>
5
- <%= link_to '+ Upload Assets', display_attach_form_admin_document_document_assets_url(@document), { class: 'btn btn-primary float-right mr-2' } %>
6
- <% end %>
7
- </h1>
8
- <% if params[:document_id] %>
9
- <h2 class='h3'>
10
- <%= link_to(@document.title, admin_document_path(@document)) %>
11
- &middot;
12
- <%= @document_assets.count %> assets
13
- </h2>
14
- <% else %>
15
- <h2 class='h3'>Assets</h2>
16
- <% end %>
3
+ <div class="row mb-2">
4
+ <div class="col">
5
+ <h1 style="width:100%;">
6
+ Document &middot; Assets
17
7
 
18
- <% if @pagy %>
19
- <h6>
20
- <span class='float-left mt-3'>
21
- <%== pagy_info(@pagy, 'assets'.pluralize(@pagy.count)) %>
22
- </span>
23
- <span class='float-right'>
24
- <%== pagy_bootstrap_nav(@pagy) %>
25
- </span>
26
- </h6>
27
- <% end %>
28
-
29
- <div class="table-responsive">
30
- <table class="table table-striped table-bordered sortable">
31
- <thead class="thead-dark">
32
- <tr>
33
- <th>Thumbnail</th>
34
- <th>Preview</th>
35
- <th>Title</th>
36
- <th>MimeType</th>
37
- <th>Actions</th>
38
- </tr>
39
- </thead>
40
- <tbody>
41
- <% @document_assets.each do |document_asset| %>
42
- <tr>
43
- <td>
44
- <% if document_asset.respond_to?(:thumbnail) %>
45
- <%= document_asset.respond_to?(:thumbnail) %>
46
- <% end %>
47
- </td>
48
- <td>
49
- <% if document_asset.respond_to?(:thumbnail) %>
50
- <%= image_tag(document_asset.file_url(:thumb_mini_2X), { height: 100 }) %>
51
- <% end %>
52
- </td>
53
- <td><%= link_to(document_asset.title, document_asset.file.url) %></td>
54
-
55
- <td>
56
- <%= document_asset.file_data["metadata"]["mime_type"] %>
57
- <span class="sr-only"><%= document_asset.inspect %></span>
58
- </td>
59
- <td><%= link_to 'Destroy', admin_document_document_asset_path(document_asset.parent, document_asset), method: :delete, data: { confirm: 'Are you sure?' } %></td>
60
- </tr>
8
+ <% if params[:document_id] %>
9
+ <%= link_to '+ Upload Assets', display_attach_form_admin_document_document_assets_url(@document), { class: 'btn btn-primary float-right mr-2' } %>
61
10
  <% end %>
62
- </tbody>
63
- </table>
11
+ </h1>
12
+ <% if params[:document_id] %>
13
+ <h2 class='h3'>
14
+ <%= link_to(@document.title, admin_document_path(@document)) %>
15
+ &middot;
16
+ <%= @document_assets.count %> assets
17
+ </h2>
18
+ <% else %>
19
+ <h2 class='h3'>Assets</h2>
20
+ <% end %>
64
21
 
65
- <% if @pagy %>
66
- <h6>
67
- <span class='float-left mt-3'>
68
- <%== pagy_info(@pagy, 'imports'.pluralize(@pagy.count)) %>
69
- </span>
70
- <span class='float-right'>
71
- <%== pagy_bootstrap_nav(@pagy) %>
72
- </span>
73
- </h6>
74
- <% end %>
75
- </div>
22
+ <% if @pagy %>
23
+ <h6>
24
+ <span class='float-left mt-3'>
25
+ <%== pagy_info(@pagy, 'assets'.pluralize(@pagy.count)) %>
26
+ </span>
27
+ <span class='float-right'>
28
+ <%== pagy_bootstrap_nav(@pagy) %>
29
+ </span>
30
+ </h6>
31
+ <% end %>
76
32
 
77
- <br>
33
+ <div class="table-responsive">
34
+ <table class="table table-striped table-bordered sortable">
35
+ <thead class="thead-dark">
36
+ <tr>
37
+ <th>Thumbnail</th>
38
+ <th>Preview</th>
39
+ <th>Title</th>
40
+ <th>Label</th>
41
+ <th>MimeType</th>
42
+ <th>Reference URI Type</th>
43
+ <th colspan="2">Actions</th>
44
+ </tr>
45
+ </thead>
46
+ <tbody>
47
+ <% @document_assets.each do |document_asset| %>
48
+ <tr>
49
+ <td>
50
+ <% if document_asset.respond_to?(:thumbnail) %>
51
+ <%= document_asset.thumbnail %>
52
+ <% end %>
53
+ </td>
54
+ <td>
55
+ <% if document_asset.respond_to?(:thumbnail) %>
56
+ <% unless document_asset.file_url(:thumb_standard).nil? %>
57
+ <%= image_tag(document_asset.file_url(:thumb_standard), { height: 100 }) %>
58
+ <% end %>
59
+ <% end %>
60
+ </td>
61
+ <td><%= link_to(document_asset.title, document_asset.file.url) %></td>
62
+ <td><%= document_asset.label %></td>
63
+ <td>
64
+ <%= document_asset.file_data["metadata"]["mime_type"] %>
65
+ <span class="sr-only"><%= document_asset.inspect %></span>
66
+ </td>
67
+ <td>
68
+ <%= document_asset.dct_references_uri_key %>
69
+ </td>
70
+ <td>
71
+ <%= link_to 'Edit', edit_admin_document_document_asset_path(document_asset.parent, document_asset) %>
72
+ </td>
73
+ <td>
74
+ <%= link_to 'Destroy', admin_document_document_asset_path(document_asset.parent, document_asset), method: :delete, data: { confirm: 'Are you sure?' } %>
75
+ </td>
76
+ </tr>
77
+ <% end %>
78
+ </tbody>
79
+ </table>
80
+
81
+ <% if @pagy %>
82
+ <h6>
83
+ <span class='float-left mt-3'>
84
+ <%== pagy_info(@pagy, 'imports'.pluralize(@pagy.count)) %>
85
+ </span>
86
+ <span class='float-right'>
87
+ <%== pagy_bootstrap_nav(@pagy) %>
88
+ </span>
89
+ </h6>
90
+ <% end %>
91
+ </div>
92
+ </div>
93
+ </div>
@@ -1,70 +1,72 @@
1
1
  <%- @page_title = "GBL♦Admin - Document - Download Links" %>
2
2
 
3
- <h1 style="width:100%;">
4
- Document &middot; Download Links
3
+ <div class="row mb-2">
4
+ <div class="col">
5
+ <h1 style="width:100%;">
6
+ Document &middot; Download Links
5
7
 
6
- <% if params[:document_id] %>
7
- <%= link_to '+ Import CSV', import_admin_document_document_downloads_path(@document), { class: 'btn btn-primary float-right' } %>
8
+ <% if params[:document_id] %>
9
+ <%= link_to '+ Import CSV', import_admin_document_document_downloads_path(@document), { class: 'btn btn-primary float-right' } %>
8
10
 
9
- <%= link_to '+ New Download URL', new_admin_document_document_download_path(@document), { class: 'btn btn-primary float-right mr-2' } %>
10
- <% else %>
11
- <%= link_to '- Delete CSV', destroy_all_admin_document_downloads_path, { class: 'btn btn-danger float-right' } %>
12
- <%= link_to '+ Import CSV', import_admin_document_downloads_path, { class: 'btn btn-primary float-right mr-4' } %>
13
- <% end %>
14
- </h1>
15
- <% if params[:document_id] %>
16
- <h2 class='h3'>
17
- <%= link_to(@document.title, admin_document_path(@document)) %>
18
- &middot;
19
- <%= @document_downloads.count %> downloads
20
- </h2>
21
- <% else %>
22
- <h2 class='h3'>Download Links</h2>
23
- <% end %>
24
-
25
- <% if @pagy %>
26
- <h6>
27
- <span class='float-left mt-3'>
28
- <%== pagy_info(@pagy) %>
29
- </span>
30
- <span class='float-right'>
31
- <%== pagy_bootstrap_nav(@pagy) %>
32
- </span>
33
- </h6>
34
- <% end %>
35
-
36
- <table class="table table-striped table-bordered sortable">
37
- <thead class="thead-dark">
38
- <tr>
39
- <th class="header" colspan="2">Actions</th>
40
- <th class="header">Layer Slug</th>
41
- <th class="header">Download Label</th>
42
- <th class="header">Download URL</th>
43
- </tr>
44
- </thead>
11
+ <%= link_to '+ New Download URL', new_admin_document_document_download_path(@document), { class: 'btn btn-primary float-right mr-2' } %>
12
+ <% else %>
13
+ <%= link_to '- Delete CSV', destroy_all_admin_document_downloads_path, { class: 'btn btn-danger float-right' } %>
14
+ <%= link_to '+ Import CSV', import_admin_document_downloads_path, { class: 'btn btn-primary float-right mr-4' } %>
15
+ <% end %>
16
+ </h1>
17
+ <% if params[:document_id] %>
18
+ <h2 class='h3'>
19
+ <%= link_to(@document.title, admin_document_path(@document)) %>
20
+ &middot;
21
+ <%= @document_downloads.count %> downloads
22
+ </h2>
23
+ <% else %>
24
+ <h2 class='h3'>Download Links</h2>
25
+ <% end %>
45
26
 
46
- <tbody>
47
- <% @document_downloads.each do |document_download| %>
48
- <tr>
49
- <td><%= link_to 'Edit', edit_admin_document_document_download_path(document_download.document, document_download) %></td>
50
- <td><%= link_to 'Destroy', admin_document_document_download_path(document_download.document, document_download), method: :delete, data: { confirm: 'Are you sure?' } %></td>
51
- <td><%= link_to document_download.friendlier_id, admin_document_path(document_download.document) %></td>
52
- <td><%= document_download.label %></td>
53
- <td><%= link_to document_download.value %></td>
54
- </tr>
27
+ <% if @pagy %>
28
+ <h6>
29
+ <span class='float-left mt-3'>
30
+ <%== pagy_info(@pagy) %>
31
+ </span>
32
+ <span class='float-right'>
33
+ <%== pagy_bootstrap_nav(@pagy) %>
34
+ </span>
35
+ </h6>
55
36
  <% end %>
56
- </tbody>
57
- </table>
58
37
 
59
- <% if @pagy %>
60
- <h6>
61
- <span class='float-left mt-3'>
62
- <%== pagy_info(@pagy) %>
63
- </span>
64
- <span class='float-right'>
65
- <%== pagy_bootstrap_nav(@pagy) %>
66
- </span>
67
- </h6>
68
- <% end %>
38
+ <table class="table table-striped table-bordered sortable">
39
+ <thead class="thead-dark">
40
+ <tr>
41
+ <th class="header">Layer Slug</th>
42
+ <th class="header">Download Label</th>
43
+ <th class="header">Download URL</th>
44
+ <th class="header" colspan="2">Actions</th>
45
+ </tr>
46
+ </thead>
69
47
 
70
- <br>
48
+ <tbody>
49
+ <% @document_downloads.each do |document_download| %>
50
+ <tr>
51
+ <td><%= link_to document_download.friendlier_id, admin_document_path(document_download.document) %></td>
52
+ <td><%= document_download.label %></td>
53
+ <td><%= link_to document_download.value %></td>
54
+ <td><%= link_to 'Edit', edit_admin_document_document_download_path(document_download.document, document_download) %></td>
55
+ <td><%= link_to 'Destroy', admin_document_document_download_path(document_download.document, document_download), method: :delete, data: { confirm: 'Are you sure?' } %></td>
56
+ </tr>
57
+ <% end %>
58
+ </tbody>
59
+ </table>
60
+
61
+ <% if @pagy %>
62
+ <h6>
63
+ <span class='float-left mt-3'>
64
+ <%== pagy_info(@pagy) %>
65
+ </span>
66
+ <span class='float-right'>
67
+ <%== pagy_bootstrap_nav(@pagy) %>
68
+ </span>
69
+ </h6>
70
+ <% end %>
71
+ </div>
72
+ </div>
@@ -2,28 +2,49 @@
2
2
 
3
3
  <% if document.respond_to?('friendlier_id') %>
4
4
  <%= content_tag :li, id: document.friendlier_id, class: bookmarked do %>
5
- <%= check_box_tag nil, nil, false, data: { id: document.friendlier_id, action: 'click->results#checkChecked'}%>
5
+ <div class="row">
6
+ <div class="col-1">
7
+ <% # This should happen elsewhere %>
8
+ <% @document = Document.find_by(friendlier_id: document.friendlier_id) %>
9
+ <% if thumb_to_render?(@document) %>
10
+ <%= link_to edit_admin_document_path(document.friendlier_id) do %>
11
+ <% if @document.thumbnail.file_derivatives[:thumb_standard_2X].exists? %>
12
+ <%= image_tag(@document.thumbnail.file_url(:thumb_standard_2X), class: "thumbnail") %>
13
+ <% end %>
14
+ <% end %>
15
+ <% end %>
16
+ </div>
17
+ <div class="result col">
18
+ <%= check_box_tag nil, nil, false, data: { id: document.friendlier_id, action: 'click->results#checkChecked'}%>
6
19
 
7
- <%= render 'admin/documents/document_bookmark', document: document %>
20
+ <%= render 'admin/documents/document_bookmark', document: document %>
8
21
 
9
- <%= "#{@documents.meta['pages']['offset_value'] + index + 1}." if @documents %>
22
+ <%= "#{@documents.meta['pages']['offset_value'] + index + 1}." if @documents %>
10
23
 
11
- <%= link_to document.title, edit_admin_document_path(document.friendlier_id) %>
12
- &middot; <%= publication_state_badge(document) %>
13
-
14
- <% if document.send("schema_provider_s") %>
15
- &middot; <%= document.send("schema_provider_s") %>
16
- <% end %>
17
- <% if document.send("dct_temporal_sm") %>
18
- &middot; <%= document.send("dct_temporal_sm").join("-") %>
19
- <% end %>
20
- <% if document.send("dct_description_sm").present? %>
21
- <p class="js-truncate"><%= document.send("dct_description_sm").join %></p>
22
- <% end %>
24
+ <%= link_to document.title, edit_admin_document_path(document.friendlier_id) %>
25
+ &middot; <%= publication_state_badge(document) %>
23
26
 
27
+ <% if document.send("schema_provider_s") %>
28
+ &middot; <%= document.send("schema_provider_s") %>
29
+ <% end %>
30
+ <% if document.send("dct_temporal_sm") %>
31
+ &middot; <%= document.send("dct_temporal_sm").join("-") %>
32
+ <% end %>
33
+ <% if document.send("dct_description_sm").present? %>
34
+ <p class="js-truncate"><%= document.send("dct_description_sm").join %></p>
35
+ <% end %>
36
+ </div>
37
+ </div>
24
38
  <% end %>
25
39
  <% else %>
26
40
  <li>
27
- <p><strong>Missing from database: </strong><%= document.inspect %></p>
41
+ <div class="row">
42
+ <div class="thumbnail col-1">
43
+ &nbsp;
44
+ </div>
45
+ <div class="result col">
46
+ <p><strong>Missing from database: </strong><%= document.inspect %></p>
47
+ </div>
48
+ </div>
28
49
  </li>
29
50
  <% end %>
@@ -7,12 +7,27 @@
7
7
  <div class="mr-2">
8
8
  <h1 class="h5">
9
9
  <% if @document.persisted? %>
10
- <span id="<%=@document.friendlier_id %>">
11
- <%= render 'document_bookmark', document: @document %>
12
- <%= truncate(@document.title, length: 80) %>
13
- <%= publication_state_badge(@document) %>
14
- <p class='mb-0'>
15
- <small>Last updated <%= time_ago_in_words(@document.updated_at) %> ago. <%= link_to 'Versions', admin_document_versions_path(@document) %></small></p>
10
+ <div class="row">
11
+ <% if @document.thumbnail.present? %>
12
+ <div class="thumbnail col-2">
13
+ <% unless @document&.thumbnail&.file_url(:thumb_mini).nil? %>
14
+ <%= image_tag @document&.thumbnail&.file_url(:thumb_mini) %>
15
+ <% end %>
16
+ </div>
17
+ <% end %>
18
+ <div class="col">
19
+ <span id="<%=@document.friendlier_id %>">
20
+ <%= render 'document_bookmark', document: @document %>
21
+ <%= truncate(@document.title, length: 80) %>
22
+ <%= publication_state_badge(@document) %>
23
+ <p class='mb-0'>
24
+ <small>Last updated <%= time_ago_in_words(@document.updated_at) %> ago.
25
+ <%= link_to 'Versions', admin_document_versions_path(@document) %> |
26
+ <%= link_to 'Admin View', admin_document_admin_path(@document) %>
27
+ </small>
28
+ </p>
29
+ </div>
30
+ </div>
16
31
  <% else %>
17
32
  New document
18
33
  <% end %>
@@ -15,9 +15,18 @@
15
15
  <% end %>
16
16
 
17
17
  <% if @document.persisted? %>
18
- <%= link_to "Institutional Access Links", admin_document_document_accesses_url(@document), class: "ml-2" %>
19
- <%= link_to "Multiple Download Links", admin_document_document_downloads_url(@document), class: "ml-2" %>
20
- <%= link_to "Additional Assets", admin_document_document_assets_url(@document), class: "ml-2" %>
18
+ <%= link_to admin_document_document_accesses_url(@document), class: "ml-2" do %>
19
+ Institutional Access Links
20
+ <span class="badge badge-light"><%= @document.document_accesses.count %></span>
21
+ <% end %>
22
+ <%= link_to admin_document_document_downloads_url(@document), class: "ml-2" do %>
23
+ Multiple Download Links
24
+ <span class="badge badge-light"><%= @document.document_downloads.count %></span>
25
+ <% end %>
26
+ <%= link_to admin_document_document_assets_url(@document), class: "ml-2" do %>
27
+ Additional Assets
28
+ <span class="badge badge-light"><%= @document.document_assets.count %></span>
29
+ <% end %>
21
30
  <% end %>
22
31
  </nav>
23
32
  </div>
@@ -34,12 +34,17 @@
34
34
  <span class="dropdown">
35
35
  <button class="btn btn-sm btn-outline-primary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
36
36
  <%= inline_svg_tag "file-import-solid.svg", class: 'icon baseline' %>
37
- State
37
+ Bulk Actions
38
38
  </button>
39
39
  <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
40
+ <h6 class="dropdown-header">Publication State</h6>
40
41
  <a class="dropdown-item" data-action="click->results#setPubFieldNameValue" href="javascript:void(0);">Published</a>
41
42
  <a class="dropdown-item" data-action="click->results#setPubFieldNameValue" href="javascript:void(0);">Unpublished</a>
42
43
  <a class="dropdown-item" data-action="click->results#setPubFieldNameValue" href="javascript:void(0);">Draft</a>
44
+ <div class="dropdown-divider"></div>
45
+ <h6 class="dropdown-header">Imagery</h6>
46
+ <a class="dropdown-item" data-action="click->results#harvestThumbnails" href="javascript:void(0);">Harvest Thumbnails</a>
47
+ <a class="dropdown-item" data-action="click->results#deleteThumbnails" href="javascript:void(0);">Delete Thumbnails</a>
43
48
  </div>
44
49
  </span>
45
50
 
@@ -0,0 +1,210 @@
1
+ <div class="row flex-xl-nowrap">
2
+ <main class="col-md-12 mb-4">
3
+ <h1 style="width:100%;">
4
+ Document &middot; Admin View
5
+ </h1>
6
+
7
+ <h3>
8
+ <%= link_to(@document.title, admin_document_path(@document)) %>
9
+ </h3>
10
+
11
+ <table class="table table-bordered table-sm">
12
+ <thead class="thead-dark">
13
+ <tr>
14
+ <th>Provenance</th>
15
+ <th>Updated At</th>
16
+ </tr>
17
+ </thead>
18
+ <tbody>
19
+ <tr>
20
+ <td><%= @document.schema_provider_s %></td>
21
+ <td>
22
+ <table>
23
+ <tr>
24
+ <th>Solr</th>
25
+ <td><%= DateTime.parse(@document.raw_solr_document["timestamp"]).strftime('%D %r') %></td>
26
+ </tr>
27
+ <tr>
28
+ <th>Database</th>
29
+ <td><%= @document.updated_at.strftime('%D %r') %></td>
30
+ </tr>
31
+ </table>
32
+ </td>
33
+ </tr>
34
+ </tbody>
35
+ </table>
36
+
37
+ <hr/>
38
+
39
+ <div id="accordion">
40
+ <div class="card">
41
+ <div class="card-header" id="database-object">
42
+ <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#database-object-content" aria-controls="database-object-content">
43
+ <h3 class="mb-0">Database Object</h3>
44
+ </button>
45
+ </div>
46
+ <div id="database-object-content" class="collapse" aria-labelledby="database-object-content" data-parent="#database-object">
47
+ <div class="card-body">
48
+ <%= ap(JSON.parse(@document.to_json)).html_safe %>
49
+ </div>
50
+ </div>
51
+ </div>
52
+
53
+ <div class="card">
54
+ <div class="card-header" id="solr-document">
55
+ <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#solr-document-content" aria-controls="solr-document-content">
56
+ <h3 class="mb-0">Solr Document</h3>
57
+ </button>
58
+ </div>
59
+ <div id="solr-document-content" class="collapse" aria-labelledby="solr-document-content" data-parent="#solr-document">
60
+ <div class="card-body">
61
+ <%= ap(JSON.parse(@document.raw_solr_document.to_json)).html_safe %>
62
+ </div>
63
+ </div>
64
+ </div>
65
+
66
+ <div class="card">
67
+ <div class="card-header" id="item-viewer">
68
+ <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#item-viewer-content" aria-controls="item-viewer-content">
69
+ <h3 class="mb-0">Item Viewer</h3>
70
+ </button>
71
+ </div>
72
+ <div id="item-viewer-content" class="collapse" aria-labelledby="item-viewer-content" data-parent="#item-viewer">
73
+ <div class="card-body">
74
+ <table class="table">
75
+ <thead>
76
+ <tr>
77
+ <th>Protocol</th>
78
+ <th>Endpoint</th>
79
+ </tr>
80
+ <tbody>
81
+ <tr>
82
+ <td><%= @document.viewer_protocol %></td>
83
+ <td><%= link_to(@document.viewer_endpoint, @document.viewer_endpoint) %></td>
84
+ </tr>
85
+ </tbody>
86
+ </table>
87
+ </div>
88
+ </div>
89
+ </div>
90
+
91
+ <div class="card">
92
+ <div class="card-header" id="thumbnail">
93
+ <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#thumbnail-content" aria-controls="thumbnail-content">
94
+ <h3 class="mb-0">Thumbnail</h3>
95
+ </button>
96
+ </div>
97
+ <div id="thumbnail-content" class="collapse" aria-labelledby="thumbnail-content" data-parent="#thumbnail">
98
+ <div class="card-body">
99
+ <table class="table">
100
+ <thead>
101
+ <tr>
102
+ <th>Display</th>
103
+ <th>Attached</th>
104
+ <th>State</th>
105
+ <th>Last Transition</th>
106
+ </tr>
107
+ </thead>
108
+ <tbody>
109
+ <tr>
110
+ <% if @document&.thumbnail&.present? %>
111
+ <td>
112
+ <span>AWS S3</span>
113
+ <div class="media">
114
+ <span class="mr-3">
115
+ <% unless @document&.thumbnail&.file_url(:thumb_mini).nil? %>
116
+ <%= image_tag @document&.thumbnail&.file_url(:thumb_mini) %>
117
+ <% end %>
118
+ </span>
119
+ </div>
120
+ </td>
121
+ <% else %>
122
+ <td><span>None</span></td>
123
+ <% end %>
124
+ <td><%= @document.thumbnail.present? %></td>
125
+ <td><%= @document&.thumbnail_state_machine&.current_state %></td>
126
+ <td><%= ap(@document&.thumbnail_state_machine&.last_transition).html_safe %></td>
127
+ </tr>
128
+ </tbody>
129
+ </table>
130
+ </div>
131
+ </div>
132
+ </div>
133
+
134
+ <div class="card">
135
+ <div class="card-header" id="references">
136
+ <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#references-content" aria-controls="references-content">
137
+ <h3 class="mb-0">References</h3>
138
+ </button>
139
+ </div>
140
+ <div id="references-content" class="collapse" aria-labelledby="references-content" data-parent="#references">
141
+ <div class="card-body">
142
+ <table class="table responsive">
143
+ <thead>
144
+ <tr>
145
+ <th>Key</th>
146
+ <th>Values</th>
147
+ </tr>
148
+ </thead>
149
+ <tbody>
150
+ <% @document.references.each do |entry| %>
151
+ <tr>
152
+ <td><%= entry[0] %></td>
153
+ <td>
154
+ <% if entry[1].is_a?(Array) %>
155
+ <ul>
156
+ <% entry[1].each do |value| %>
157
+ <li><%= value %></li>
158
+ <% end %>
159
+ </ul>
160
+ <% else %>
161
+ <% if entry[1].is_a?(Hash) %>
162
+ <ul>
163
+ <% entry[1].each do |key, value| %>
164
+ <li><%= key %>: <%= value %></li>
165
+ <% end %>
166
+ </ul>
167
+ <% else %>
168
+ <p><%= link_to(entry[1], entry[1]) %></p>
169
+ <% end %>
170
+ <% end %>
171
+ </td>
172
+ </tr>
173
+ <% end %>
174
+ </tbody>
175
+ </table>
176
+ </div>
177
+ </div>
178
+ </div>
179
+
180
+ <div class="card">
181
+ <div class="card-header" id="access-links">
182
+ <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#access-links-content" aria-controls="access-links-content">
183
+ <h3 class="mb-0">Access Links</h3>
184
+ </button>
185
+ </div>
186
+ <div id="access-links-content" class="collapse" aria-labelledby="access-links-content" data-parent="#access-links">
187
+ <div class="card-body">
188
+ <table class="table responsive">
189
+ <thead>
190
+ <tr>
191
+ <th>University</th>
192
+ <th>Access Link</th>
193
+ </tr>
194
+ </thead>
195
+ <tbody>
196
+ <% @document.document_accesses.each do |da| %>
197
+ <tr>
198
+ <td><%= da.institution_code %></td>
199
+ <td><a href="<%= da.access_url %>"><%= da.access_url %></a></td>
200
+ </tr>
201
+ <% end %>
202
+ </tbody>
203
+ </table>
204
+ </div>
205
+ </div>
206
+ </div>
207
+
208
+ </div>
209
+ </main>
210
+ </div>