blacklight-gallery 2.1.0 → 3.0.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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +45 -0
- data/app/assets/javascripts/blacklight_gallery/default.js +0 -1
- data/app/assets/javascripts/blacklight_gallery/masonry.js +1 -1
- data/app/assets/javascripts/blacklight_gallery/osd_viewer.js +1 -1
- data/app/assets/javascripts/blacklight_gallery/slideshow.js +1 -2
- data/app/assets/stylesheets/blacklight_gallery/_gallery.scss +8 -3
- data/app/assets/stylesheets/blacklight_gallery/_masonry.scss +55 -24
- data/app/assets/stylesheets/blacklight_gallery/_slideshow.scss +5 -3
- data/app/components/blacklight/gallery/document_component.html.erb +20 -0
- data/app/components/blacklight/gallery/document_component.rb +11 -0
- data/app/components/blacklight/gallery/slideshow_component.html.erb +12 -0
- data/app/components/blacklight/gallery/slideshow_component.rb +40 -0
- data/app/components/blacklight/gallery/slideshow_preview_component.html.erb +5 -0
- data/app/components/blacklight/gallery/slideshow_preview_component.rb +28 -0
- data/app/helpers/blacklight/gallery_helper.rb +0 -38
- data/app/models/concerns/blacklight/gallery/openseadragon_solr_document.rb +1 -1
- data/app/views/catalog/_document_gallery.html.erb +4 -3
- data/app/views/catalog/_document_masonry.html.erb +2 -3
- data/app/views/catalog/_document_slideshow.html.erb +26 -5
- data/app/views/catalog/_slideshow_modal.html.erb +2 -3
- data/blacklight-gallery.gemspec +3 -3
- data/lib/blacklight/gallery/engine.rb +0 -1
- data/lib/blacklight/gallery/version.rb +1 -1
- data/lib/generators/blacklight_gallery/install_generator.rb +9 -3
- data/lib/generators/blacklight_gallery/templates/blacklight_gallery.js +2 -1
- data/spec/components/blacklight/gallery/document_component_spec.rb +46 -0
- data/spec/components/blacklight/gallery/slideshow_component_spec.rb +67 -0
- data/spec/features/gallery_spec.rb +3 -4
- data/spec/features/masonry_spec.rb +2 -3
- data/spec/features/slideshow_spec.rb +0 -2
- data/spec/models/concerns/openseadragon_solr_document_spec.rb +1 -1
- data/spec/spec_helper.rb +4 -11
- data/spec/views/catalog/_document_slideshow.html.erb_spec.rb +15 -5
- metadata +35 -37
- data/.travis.yml +0 -38
- data/app/views/catalog/_grid_slideshow.html.erb +0 -11
- data/app/views/catalog/_index_gallery.html.erb +0 -14
- data/app/views/catalog/_index_masonry.html.erb +0 -8
- data/app/views/catalog/_index_masonry_default.html.erb +0 -1
- data/app/views/catalog/_index_slideshow.html.erb +0 -11
- data/app/views/catalog/_slideshow.html.erb +0 -23
- data/spec/helpers/blacklight/gallery_helper_spec.rb +0 -110
- data/spec/views/catalog/_index_gallery.html.erb_spec.rb +0 -22
- 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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 167f895cb50e7732ca7512b278aeacca04067b617da016f2a3b144c49a0fab53
|
4
|
+
data.tar.gz: e15f31f491f90153c9f4f90f0b124030e12c3e678bbcc2c448160bb55f403700
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d7a2c5179ad2a1d18aa23fd8207aa6198d7385d1f17860edfae67d6bd1afcc897482013f271e6a4cb3ce0e519923a85b9bbdbb99ae922f348047bfef627a3db
|
7
|
+
data.tar.gz: 34ab421a4cf0bd262eae19e95bfe014de1e7eaa39c1661e5a6a2afc612996e357a1fd1d7be2b0f0ac68e85700adca1974e46aecde4fda4ac5e72c1e83e2e43df
|
@@ -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
|
@@ -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
|
-
$('
|
124
|
+
$('.documents-slideshow').slideshow();
|
126
125
|
});
|
@@ -1,6 +1,7 @@
|
|
1
|
-
.gallery {
|
1
|
+
.documents-gallery {
|
2
2
|
.document {
|
3
3
|
border-bottom: none;
|
4
|
+
display: flex;
|
4
5
|
|
5
6
|
min-height: 250px;
|
6
7
|
-webkit-flex: 1 0 250px;
|
@@ -24,16 +25,20 @@
|
|
24
25
|
|
25
26
|
.document-metadata {
|
26
27
|
dt, dd {
|
28
|
+
flex: 0 0 100%;
|
29
|
+
max-width: 100%;
|
30
|
+
padding-left: 0;
|
31
|
+
padding-right: 0;
|
27
32
|
float: none;
|
28
33
|
width: auto;
|
29
34
|
clear: none;
|
30
35
|
text-align: left;
|
31
36
|
margin: 0;
|
32
37
|
}
|
33
|
-
|
34
38
|
}
|
35
39
|
}
|
36
40
|
|
37
|
-
|
41
|
+
.documents-gallery, .documents-masonry, .documents-slideshow {
|
42
|
+
padding-bottom: $spacer;
|
38
43
|
border-bottom: $pagination-border-width solid $pagination-border-color
|
39
44
|
}
|
@@ -1,35 +1,66 @@
|
|
1
|
-
.masonry {
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
.documents-masonry {
|
2
|
+
.document {
|
3
|
+
&:hover, &:focus {
|
4
|
+
.caption-area {
|
5
|
+
display: block;
|
6
|
+
}
|
7
|
+
}
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
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
|
-
|
16
|
-
|
17
|
-
|
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
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
33
|
+
overflow-x: hidden;
|
34
|
+
overflow-y: scroll;
|
35
|
+
max-height: 75%;
|
36
|
+
}
|
37
|
+
|
38
|
+
.document-counter {
|
28
39
|
display: none;
|
29
40
|
}
|
30
|
-
|
31
|
-
|
32
|
-
|
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
|
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
|
-
|
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
|
-
|
145
|
+
img {
|
144
146
|
height: $square-thumb-size;
|
145
147
|
max-height: none;
|
146
148
|
max-width: none;
|
@@ -0,0 +1,20 @@
|
|
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
|
+
<%= thumbnail %>
|
5
|
+
|
6
|
+
<div class="caption-area">
|
7
|
+
<div class="caption container">
|
8
|
+
<header class="documentHeader row">
|
9
|
+
<%= content_tag @title_component, class: 'index_title document-title-heading' do %>
|
10
|
+
<%= before_title %><%= title %><%= after_title %>
|
11
|
+
<% end %>
|
12
|
+
<%= actions %>
|
13
|
+
</header>
|
14
|
+
<%= content %>
|
15
|
+
<%= metadata %>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
<% end %>
|
20
|
+
<% 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
|
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
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
2
|
-
<div id="documents" class="
|
3
|
-
|
1
|
+
<div class="container">
|
2
|
+
<div id="documents" class="<%= (Array(blacklight_config.view_config(document_index_view_type).classes || 'row-cols-2 row-cols-md-3') + ["row documents-#{document_index_view_type}"]).join(' ') %>">
|
3
|
+
<%= render documents, as: :document %>
|
4
|
+
</div>
|
4
5
|
</div>
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
<%= render collection: documents, as: :document, partial: 'index_masonry', locals: {count: documents.count} %>
|
1
|
+
<div id="documents" class="<%= (Array(blacklight_config.view_config(document_index_view_type).classes) + ["documents-#{document_index_view_type}"]).join(' ') %>">
|
2
|
+
<%= render documents, as: :document %>
|
4
3
|
</div>
|
@@ -1,10 +1,31 @@
|
|
1
|
-
|
2
|
-
<div id="documents" class="row slideshow-documents">
|
1
|
+
<div id="documents" class="<%= (Array(blacklight_config.view_config(document_index_view_type).classes) + ["documents-#{document_index_view_type}"]).join(' ') %>">
|
3
2
|
<div class="grid">
|
4
|
-
<%= render
|
3
|
+
<%= render((blacklight_config.view_config(document_index_view_type).preview_component || Blacklight::Gallery::SlideshowPreviewComponent).with_collection(documents)) %>
|
5
4
|
</div>
|
6
5
|
|
7
|
-
<%= render layout: 'slideshow_modal'
|
8
|
-
|
6
|
+
<%= render layout: 'slideshow_modal' do %>
|
7
|
+
<div id="slideshow" class="slideshow-presenter">
|
8
|
+
<!-- Wrapper for slides -->
|
9
|
+
<div class="slideshow-inner">
|
10
|
+
<%= render documents, as: :document %>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<!-- Controls -->
|
14
|
+
<a class="left carousel-control prev" href="#slideshow" data-slide="prev">
|
15
|
+
<%= blacklight_icon 'chevron_left', { additional_options: { label_context: 'previous_image' }} %>
|
16
|
+
</a>
|
17
|
+
<a class="right carousel-control next" href="#slideshow" data-slide="next">
|
18
|
+
<%= blacklight_icon 'chevron_right', { additional_options: { label_context: 'next_image' }} %>
|
19
|
+
</a>
|
20
|
+
|
21
|
+
<div class="controls text-center">
|
22
|
+
<button class="btn btn-sm btn-link" data-behavior="pause-slideshow" aria-label="<%= t('blacklight_gallery.catalog.slideshow.pause') %>">
|
23
|
+
<%= blacklight_icon 'pause_slideshow' %>
|
24
|
+
</button>
|
25
|
+
<button class="btn btn-sm btn-link" data-behavior="start-slideshow" aria-label="<%= t('blacklight_gallery.catalog.slideshow.start') %>">
|
26
|
+
<%= blacklight_icon 'start_slideshow' %>
|
27
|
+
</button>
|
28
|
+
</div>
|
29
|
+
</div>
|
9
30
|
<% end %>
|
10
31
|
</div>
|