blacklight-gallery 2.0.0 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
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