blacklight-gallery 2.0.1 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) 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 +8 -18
  9. data/app/assets/stylesheets/blacklight_gallery/_masonry.scss +61 -21
  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/fixtures/sample_solr_documents.yml +2495 -0
  35. data/spec/models/concerns/openseadragon_solr_document_spec.rb +1 -1
  36. data/spec/spec_helper.rb +4 -11
  37. data/spec/views/catalog/_document_slideshow.html.erb_spec.rb +15 -5
  38. metadata +45 -39
  39. data/.travis.yml +0 -21
  40. data/app/views/catalog/_grid_slideshow.html.erb +0 -11
  41. data/app/views/catalog/_index_gallery.html.erb +0 -14
  42. data/app/views/catalog/_index_masonry.html.erb +0 -8
  43. data/app/views/catalog/_index_masonry_default.html.erb +0 -1
  44. data/app/views/catalog/_index_slideshow.html.erb +0 -11
  45. data/app/views/catalog/_slideshow.html.erb +0 -23
  46. data/spec/helpers/blacklight/gallery_helper_spec.rb +0 -110
  47. data/spec/views/catalog/_index_gallery.html.erb_spec.rb +0 -22
  48. 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: 65b060ce585a9a48514531e9b45d9a7dfa27da2afe2dc6590843f554a5b636ae
4
- data.tar.gz: 8563b48e338ee0c1f7dc8f76786da529d0503356e57256fd0e5c1af1d561be79
3
+ metadata.gz: 3139dbdcecabc780a4bdb03f4477325a69e289ca323e1d0cb10ea611da87ae58
4
+ data.tar.gz: 919879da25125a70cd46bb6343c04be75388ea9faa464ad53dfed32dc678775f
5
5
  SHA512:
6
- metadata.gz: d91c6ab608729eceda638985b87b44184e74af0992b064d5a354bb3a964873f13f1ba3bb37f22d91942ec7e2316841bdc6460a9a203f1e7df0e697d72af4b3f7
7
- data.tar.gz: bac396d723403aeef4c2e4fc5d0757a5a2ce77b89fd84dd0d67da699add3ec1f1e84d34c4912542e1853167d13df07a867b17fef14c3325fc94801ba923948fa
6
+ metadata.gz: bd79b771b4ffd243ebf25eac0c97693695fc86a8ec72d8eacce24929095a8e135808dd5ce0ff5a25c6b72cf51c89cd89579ede20323d21dab7b857a119360bf0
7
+ data.tar.gz: a667e4bed21e3e92736db8a8e607cb7367bc3d5021a6af38d14159cdbf562d3f0eef9d0b4555ba0e464afc3c999bc2a36e894ce353e9bf411f2230b2666f6df1
@@ -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,16 +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
  }
51
40
 
52
- #documents .gallery, .masonry-gallery, .slideshow-documents {
41
+ .documents-gallery, .documents-masonry, .documents-slideshow {
42
+ padding-bottom: $spacer;
53
43
  border-bottom: $pagination-border-width solid $pagination-border-color
54
44
  }
@@ -1,35 +1,75 @@
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
+ max-width: 25%;
4
+
5
+ &:hover, &:focus {
6
+ .caption-area {
7
+ display: block;
8
+ }
9
+ }
10
+
11
+ margin-bottom: $spacer;
12
+ position: relative;
13
+ width: auto;
14
+
15
+ .thumbnail-container {
16
+ position: relative;
17
+ min-height: 200px;
18
+ min-width: 200px;
19
+ background-color: $gray-300;
20
+ }
8
21
 
9
22
  .img-thumbnail {
10
- border-radius: 0;
11
23
  padding: 0;
24
+ border-radius: 0;
12
25
  }
13
26
 
14
- .caption {
15
- &:first-child { display: block; } // To display captions when there is no image
16
- a {
17
- color: $gray-300;
27
+ .caption-area {
28
+ // styling for documents without thumbnails
29
+ &:first-child {
30
+ display: block;
31
+ max-height: 100%;
32
+ background-color: rgba(0,0,0,0.7) !important;
18
33
  }
19
- line-height: 17px;
20
- background-color: rgba(0,0,0,0.3);
21
- text-align: center;
34
+ @extend .bg-dark;
35
+ @extend .text-white;
36
+ display: none;
37
+ padding: 5px 7px;
38
+ background-color: rgba(0,0,0,0.5) !important;
22
39
  position: absolute;
23
40
  bottom: 0;
24
- right: 0;
25
- left: 0;
41
+ overflow-x: hidden;
42
+ overflow-y: scroll;
43
+ max-height: 75%;
26
44
  width: 100%;
27
- padding: 5px 7px;
45
+ }
46
+
47
+ .document-counter {
28
48
  display: none;
29
49
  }
30
- &:hover {
31
- .caption {
32
- display: block;
50
+
51
+ .index_title {
52
+ @extend .h6;
53
+ a, a:hover, a:visited, a:active {
54
+ @extend .stretched-link;
55
+ color: $gray-300
56
+ }
57
+ }
58
+
59
+ .document-metadata {
60
+ dt {
61
+ color: $gray-300;
62
+ }
63
+ dt, dd {
64
+ flex: 0 0 100%;
65
+ max-width: 100%;
66
+ padding-left: 0;
67
+ padding-right: 0;
68
+ float: none;
69
+ width: auto;
70
+ clear: none;
71
+ text-align: left;
72
+ margin: 0;
33
73
  }
34
74
  }
35
75
  }
@@ -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