blacklight-gallery 2.0.0 → 3.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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +45 -0
  3. data/README.md +1 -1
  4. data/app/assets/javascripts/blacklight_gallery/default.js +0 -1
  5. data/app/assets/javascripts/blacklight_gallery/masonry.js +1 -1
  6. data/app/assets/javascripts/blacklight_gallery/osd_viewer.js +1 -1
  7. data/app/assets/javascripts/blacklight_gallery/slideshow.js +1 -2
  8. data/app/assets/stylesheets/blacklight_gallery/_gallery.scss +11 -17
  9. data/app/assets/stylesheets/blacklight_gallery/_masonry.scss +55 -24
  10. data/app/assets/stylesheets/blacklight_gallery/_slideshow.scss +5 -3
  11. data/app/components/blacklight/gallery/document_component.html.erb +21 -0
  12. data/app/components/blacklight/gallery/document_component.rb +11 -0
  13. data/app/components/blacklight/gallery/slideshow_component.html.erb +12 -0
  14. data/app/components/blacklight/gallery/slideshow_component.rb +40 -0
  15. data/app/components/blacklight/gallery/slideshow_preview_component.html.erb +5 -0
  16. data/app/components/blacklight/gallery/slideshow_preview_component.rb +28 -0
  17. data/app/helpers/blacklight/gallery_helper.rb +0 -38
  18. data/app/models/concerns/blacklight/gallery/openseadragon_solr_document.rb +1 -1
  19. data/app/views/catalog/_document_gallery.html.erb +4 -3
  20. data/app/views/catalog/_document_masonry.html.erb +2 -3
  21. data/app/views/catalog/_document_slideshow.html.erb +26 -5
  22. data/app/views/catalog/_slideshow_modal.html.erb +2 -3
  23. data/blacklight-gallery.gemspec +4 -4
  24. data/config/locales/blacklight-gallery.ar.yml +7 -4
  25. data/lib/blacklight/gallery/engine.rb +0 -1
  26. data/lib/blacklight/gallery/version.rb +1 -1
  27. data/lib/generators/blacklight_gallery/install_generator.rb +10 -3
  28. data/lib/generators/blacklight_gallery/templates/blacklight_gallery.js +2 -1
  29. data/spec/components/blacklight/gallery/document_component_spec.rb +46 -0
  30. data/spec/components/blacklight/gallery/slideshow_component_spec.rb +67 -0
  31. data/spec/features/gallery_spec.rb +3 -4
  32. data/spec/features/masonry_spec.rb +2 -3
  33. data/spec/features/slideshow_spec.rb +0 -2
  34. data/spec/models/concerns/openseadragon_solr_document_spec.rb +1 -1
  35. data/spec/spec_helper.rb +4 -11
  36. data/spec/views/catalog/_document_slideshow.html.erb_spec.rb +15 -5
  37. metadata +43 -39
  38. data/.travis.yml +0 -21
  39. data/app/views/catalog/_grid_slideshow.html.erb +0 -11
  40. data/app/views/catalog/_index_gallery.html.erb +0 -14
  41. data/app/views/catalog/_index_masonry.html.erb +0 -8
  42. data/app/views/catalog/_index_masonry_default.html.erb +0 -1
  43. data/app/views/catalog/_index_slideshow.html.erb +0 -11
  44. data/app/views/catalog/_slideshow.html.erb +0 -23
  45. data/spec/helpers/blacklight/gallery_helper_spec.rb +0 -110
  46. data/spec/views/catalog/_index_gallery.html.erb_spec.rb +0 -22
  47. data/spec/views/catalog/_index_masonry.html.erb_spec.rb +0 -34
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa60fe858f02cf0e8ad35e15410446d6cfdf10d27a2ce2a1fc4f7e76da748b18
4
- data.tar.gz: ab1a86345f1f78c5b24ac90b5ad9d8d5f3d63b69f0366daa1a59ab68ed5d3768
3
+ metadata.gz: 6ec7eb8df1dac5b37f61ab01b6ab16d5a42e9b40692f86286a1a3480041f0633
4
+ data.tar.gz: 8f15749eee6522bf77e3b8406c845fdf2ffa220249c6f2054a0053389d68ba75
5
5
  SHA512:
6
- metadata.gz: c28c9ab1878442fdfce7988a43cb17e4f5890bcb015d7f3e46e7d2a542432d715de5f29eb885ec2d94aa04aee7fc6d290165db08ed28438ae511fb54edd4e576
7
- data.tar.gz: a0f0f5a415e6e7c44fa71d48cc24922548c65bc7de08be422924ff7aba431cb3e315d7ee9774aeecaec0c761596ca73266a7b625be0fd206418f3308a735e2c0
6
+ metadata.gz: 6a740861b723008f04f1cb80c1705c040727ba4a732484f4035493a5ecb5ccb0b3a012ceaa555245c895d3775a5539610855e5df826400a70f785e96e1ab3ed5
7
+ data.tar.gz: 4785d69541407fb35631d8db774369527494ff5e03acd04357ea5565ea1be9a691b012df67b9c430e8fb697461abf3b15706985b3690f889495b65f626616877
@@ -0,0 +1,45 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ rails_version: [6.1.1]
15
+ ruby: [2.7, 3.0]
16
+ env:
17
+ RAILS_VERSION: ${{ matrix.rails_version }}
18
+ steps:
19
+ - uses: actions/checkout@v2
20
+ - name: Set up Ruby ${{ matrix.ruby }}
21
+ uses: ruby/setup-ruby@v1
22
+ with:
23
+ ruby-version: ${{ matrix.ruby }}
24
+ - name: Install dependencies with Rails ${{ matrix.rails_version }}
25
+ run: bundle install
26
+ - name: Run tests
27
+ run: bundle exec rake
28
+ test_rails52:
29
+ runs-on: ubuntu-latest
30
+ strategy:
31
+ matrix:
32
+ rails_version: [5.2.4.4, 6.0.3.4]
33
+ ruby: [2.7]
34
+ env:
35
+ RAILS_VERSION: ${{ matrix.rails_version }}
36
+ steps:
37
+ - uses: actions/checkout@v2
38
+ - name: Set up Ruby ${{ matrix.ruby }}
39
+ uses: ruby/setup-ruby@v1
40
+ with:
41
+ ruby-version: ${{ matrix.ruby }}
42
+ - name: Install dependencies with Rails ${{ matrix.rails_version }}
43
+ run: bundle install
44
+ - name: Run tests
45
+ run: bundle exec rake
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Blacklight::Gallery
2
- [![Gem Version](https://badge.fury.io/rb/blacklight-gallery.svg)](http://badge.fury.io/rb/blacklight-gallery)
2
+ [![Gem Version](https://badge.fury.io/rb/blacklight-gallery.svg)](http://badge.fury.io/rb/blacklight-gallery) [![Build Status](https://travis-ci.org/projectblacklight/blacklight-gallery.svg?branch=master)](https://travis-ci.org/projectblacklight/blacklight-gallery)
3
3
 
4
4
  Gallery views for Blacklight search results
5
5
 
@@ -1,5 +1,4 @@
1
1
  //= require imagesloaded.min.js
2
2
  //= require masonry.min.js
3
3
  //= require blacklight_gallery/slideshow
4
- //= require blacklight_gallery/osd_viewer
5
4
  //= require blacklight_gallery/masonry
@@ -10,5 +10,5 @@
10
10
  })(jQuery);
11
11
 
12
12
  Blacklight.onLoad(function() {
13
- $('[data-behavior="masonry-gallery"]').BlacklightMasonry();
13
+ $('.documents-masonry').BlacklightMasonry();
14
14
  });
@@ -1 +1 @@
1
- //= require openseadragon/rails
1
+ //= require openseadragon/rails
@@ -85,7 +85,6 @@
85
85
  });
86
86
 
87
87
  $(document).on('click', '[data-slide], [data-slide-to]', function(e) {
88
-
89
88
  e.preventDefault();
90
89
 
91
90
  pos = parseInt($(this).attr('data-slide-to'), 10) || $(this).attr('data-slide');
@@ -122,5 +121,5 @@
122
121
 
123
122
 
124
123
  Blacklight.onLoad(function() {
125
- $('#slideshow').slideshow();
124
+ $('.documents-slideshow').slideshow();
126
125
  });
@@ -1,21 +1,7 @@
1
- .gallery {
2
-
3
- display: -webkit-box;
4
- display: -moz-box;
5
- display: -ms-flexbox;
6
- display: -webkit-flex;
7
- display: flex;
8
- flex-flow: row wrap;
9
- -webkit-flex-wrap: wrap;
10
-
11
-
1
+ .documents-gallery {
12
2
  .document {
13
3
  border-bottom: none;
14
-
15
- -webkit-box-flex: 1;
16
- -moz-box-flex: 1;
17
- -ms-flex: 1;
18
- flex: 1;
4
+ display: flex;
19
5
 
20
6
  min-height: 250px;
21
7
  -webkit-flex: 1 0 250px;
@@ -39,12 +25,20 @@
39
25
 
40
26
  .document-metadata {
41
27
  dt, dd {
28
+ flex: 0 0 100%;
29
+ max-width: 100%;
30
+ padding-left: 0;
31
+ padding-right: 0;
42
32
  float: none;
43
33
  width: auto;
44
34
  clear: none;
45
35
  text-align: left;
46
36
  margin: 0;
47
37
  }
48
-
49
38
  }
50
39
  }
40
+
41
+ .documents-gallery, .documents-masonry, .documents-slideshow {
42
+ padding-bottom: $spacer;
43
+ border-bottom: $pagination-border-width solid $pagination-border-color
44
+ }
@@ -1,35 +1,66 @@
1
- .masonry {
2
- &.document {
3
- padding: 0;
4
- margin: 0 $spacer $spacer 0;
5
- border-bottom: 0;
6
- background-color: $gray-300;
7
- min-height: 70px;
1
+ .documents-masonry {
2
+ .document {
3
+ &:hover, &:focus {
4
+ .caption-area {
5
+ display: block;
6
+ }
7
+ }
8
8
 
9
- .img-thumbnail {
10
- border-radius: 0;
11
- padding: 0;
9
+ margin-bottom: $spacer;
10
+ position: relative;
11
+ width: auto;
12
+
13
+ .thumbnail-container {
14
+ position: relative;
15
+ min-height: 200px;
16
+ min-width: 200px;
12
17
  }
13
18
 
14
- .caption {
15
- &:first-child { display: block; } // To display captions when there is no image
16
- a {
17
- color: $gray-300;
19
+ .caption-area {
20
+ // styling for documents without thumbnails
21
+ &:first-child {
22
+ display: block;
23
+ max-height: 100%;
24
+ background-color: rgba(0,0,0,0.7) !important;
18
25
  }
19
- line-height: 17px;
20
- background-color: rgba(0,0,0,0.3);
21
- text-align: center;
26
+ @extend .bg-dark;
27
+ @extend .text-white;
28
+ display: none;
29
+ padding: 5px 7px;
30
+ background-color: rgba(0,0,0,0.5) !important;
22
31
  position: absolute;
23
32
  bottom: 0;
24
- right: 0;
25
- left: 0;
26
- width: 100%;
27
- padding: 5px 7px;
33
+ overflow-x: hidden;
34
+ overflow-y: scroll;
35
+ max-height: 75%;
36
+ }
37
+
38
+ .document-counter {
28
39
  display: none;
29
40
  }
30
- &:hover {
31
- .caption {
32
- display: block;
41
+
42
+ .index_title {
43
+ @extend .h6;
44
+ a, a:hover, a:visited, a:active {
45
+ @extend .stretched-link;
46
+ color: $gray-300
47
+ }
48
+ }
49
+
50
+ .document-metadata {
51
+ dt {
52
+ color: $gray-300;
53
+ }
54
+ dt, dd {
55
+ flex: 0 0 100%;
56
+ max-width: 100%;
57
+ padding-left: 0;
58
+ padding-right: 0;
59
+ float: none;
60
+ width: auto;
61
+ clear: none;
62
+ text-align: left;
63
+ margin: 0;
33
64
  }
34
65
  }
35
66
  }
@@ -101,7 +101,7 @@ $gray-dark: #343a40 !default;
101
101
  }
102
102
  }
103
103
 
104
- .slideshow-documents {
104
+ .documents-slideshow {
105
105
  margin: 0;
106
106
 
107
107
  .info {
@@ -120,10 +120,12 @@ $gray-dark: #343a40 !default;
120
120
  }
121
121
 
122
122
  .grid {
123
+ display: flex;
124
+ flex-wrap: wrap;
123
125
  $square-thumb-size: 100px;
124
126
 
125
127
  .document {
126
- float: left;
128
+ display: flex;
127
129
  margin-right: 20px;
128
130
  margin-top: 0;
129
131
  padding-top: 0;
@@ -140,7 +142,7 @@ $gray-dark: #343a40 !default;
140
142
  position: relative;
141
143
  width: $square-thumb-size;
142
144
 
143
- a > img {
145
+ img {
144
146
  height: $square-thumb-size;
145
147
  max-height: none;
146
148
  max-width: none;
@@ -0,0 +1,21 @@
1
+ <%= render(Blacklight::DocumentComponent.new(classes: 'col', component: :div, document: @document, counter: @counter)) do |component| %>
2
+ <% component.with(:body) do %>
3
+ <div class="thumbnail-container">
4
+ <% # Checking if #thumbnail takes any args before passing image_options. #thumbnail did not take any args in version 7.14.1 and earlier %>
5
+ <%= method(:thumbnail).arity.zero? ? thumbnail : thumbnail(class: 'img-thumbnail') %>
6
+
7
+ <div class="caption-area">
8
+ <div class="caption container">
9
+ <header class="documentHeader row">
10
+ <%= content_tag @title_component, class: 'index_title document-title-heading' do %>
11
+ <%= before_title %><%= title %><%= after_title %>
12
+ <% end %>
13
+ <%= actions %>
14
+ </header>
15
+ <%= content %>
16
+ <%= metadata %>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ <% end %>
21
+ <% end %>
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ module Gallery
5
+ class DocumentComponent < Blacklight::DocumentComponent
6
+ def render_document_class(*args)
7
+ @view_context.render_document_class(*args)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ <div class="item<%= ' active' if @counter == 1 %>">
2
+ <div class="frame">
3
+ <%= slideshow_tag %>
4
+ <div class="caption">
5
+ <%= presenter.heading %>
6
+ </div>
7
+
8
+ <span class="counter">
9
+ <%= t :'blacklight_gallery.catalog.modal_slideshow.counter', counter: @counter, count: count %>
10
+ </span>
11
+ </div>
12
+ </div>
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ module Gallery
5
+ class SlideshowComponent < Blacklight::DocumentComponent
6
+ def count
7
+ @document.response&.total
8
+ end
9
+
10
+ def render_document_class(*args)
11
+ @view_context.render_document_class(*args)
12
+ end
13
+
14
+ def presenter
15
+ @presenter ||= @view_context.document_presenter(@document)
16
+ end
17
+
18
+ def slideshow_tag(image_options = { alt: '' })
19
+ if view_config.slideshow_method
20
+ method_name = view_config.slideshow_method
21
+ @view_context.send(method_name, @document, image_options)
22
+ elsif view_config.slideshow_field
23
+ url = slideshow_image_url
24
+
25
+ image_tag url, image_options if url.present?
26
+ elsif presenter.thumbnail.exists?
27
+ presenter.thumbnail.thumbnail_tag(image_options, url_options.reverse_merge(suppress_link: true))
28
+ end
29
+ end
30
+
31
+ def slideshow_image_url
32
+ @document.first(view_config.slideshow_field) if @document.has? view_config.slideshow_field
33
+ end
34
+
35
+ def view_config
36
+ presenter.thumbnail.view_config
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,5 @@
1
+ <%= render(Blacklight::DocumentComponent.new(classes: 'slideshow-preview-thumbnail', component: :div, document: @document, counter: @counter)) do |component| %>
2
+ <% component.with(:body) do %>
3
+ <%= @view_context.link_to_document(@document, thumbnail, class: 'thumbnail', data: { 'context-href': nil, 'slide-to': @document_counter - 1, toggle: "modal", target: "#slideshow-modal" }) %>
4
+ <% end %>
5
+ <% end %>
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ module Gallery
5
+ class SlideshowPreviewComponent < Blacklight::DocumentComponent
6
+ with_collection_parameter :document
7
+
8
+ def initialize(document:, document_counter: nil, **args)
9
+ super(document: document, document_counter: document_counter, **args)
10
+ @document_counter = document_counter || @counter
11
+ end
12
+
13
+ def thumbnail
14
+ @thumbnail ||
15
+ (presenter.thumbnail.exists? && presenter.thumbnail.render({ alt: presenter.heading })) ||
16
+ content_tag(:div, t('.missing_image', scope: [:blacklight_gallery]), class: 'thumbnail thumbnail-placeholder')
17
+ end
18
+
19
+ def presenter
20
+ @presenter ||= @view_context.document_presenter(@document)
21
+ end
22
+
23
+ def render_document_class(*args)
24
+ @view_context.render_document_class(*args)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,42 +1,4 @@
1
1
  module Blacklight
2
2
  module GalleryHelper
3
- def render_gallery_collection documents
4
- index = -1
5
- documents.map do |object|
6
- index += 1
7
- template = gallery_wrapper_template(object)
8
- template.render(self, {document: object, document_counter: index}) if template
9
-
10
- end.join().html_safe
11
- end
12
-
13
- def render_slideshow_tag(document, image_options = {}, url_options = {})
14
- if blacklight_config.view_config(document_index_view_type).slideshow_method
15
- method_name = blacklight_config.view_config(document_index_view_type).slideshow_method
16
- send(method_name, document, image_options)
17
- elsif blacklight_config.view_config(document_index_view_type).slideshow_field
18
- url = slideshow_image_url(document)
19
-
20
- image_tag url, image_options if url.present?
21
- elsif has_thumbnail?(document)
22
- render_thumbnail_tag(document, image_options, url_options.reverse_merge(suppress_link: true))
23
- end
24
- end
25
-
26
- def slideshow_image_url(document)
27
- if document.has? blacklight_config.view_config(document_index_view_type).slideshow_field
28
- document.first(blacklight_config.view_config(document_index_view_type).slideshow_field)
29
- end
30
- end
31
-
32
- def gallery_wrapper_template(object)
33
- format = document_partial_name(object, nil)
34
- ['index_gallery_%{format}_wrapper', 'index_gallery'].each do |str|
35
- partial = str % { format: format }
36
- logger.debug "Looking for gallery document wrapper #{partial}"
37
- template = lookup_context.find_all(partial, lookup_context.prefixes, true, [:document, :document_counter], {}).first
38
- return template if template
39
- end
40
- end
41
3
  end
42
4
  end
@@ -1,6 +1,6 @@
1
1
  module Blacklight::Gallery::OpenseadragonSolrDocument
2
2
  def to_openseadragon(view_config = nil)
3
- return unless view_config.try(:tile_source_field) &&
3
+ return unless view_config&.tile_source_field &&
4
4
  fetch(view_config.tile_source_field, nil)
5
5
  Array(fetch(view_config.tile_source_field))
6
6
  end