blacklight-spotlight 3.0.0.alpha.10 → 3.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/spotlight/admin/crop.es6 +6 -0
- data/app/assets/javascripts/spotlight/admin/sir-trevor/block_controls.js +21 -12
- data/app/assets/stylesheets/spotlight/_featured_browse_categories_block.scss +4 -4
- data/app/assets/stylesheets/spotlight/_item_text_block.scss +6 -0
- data/app/assets/stylesheets/spotlight/_report_a_problem.scss +5 -2
- data/app/controllers/spotlight/resources/csv_upload_controller.rb +1 -1
- data/app/jobs/spotlight/add_uploads_from_csv.rb +30 -5
- data/app/mailers/spotlight/indexing_complete_mailer.rb +3 -2
- data/app/models/spotlight/contact.rb +1 -1
- data/app/models/spotlight/custom_field.rb +3 -3
- data/app/models/spotlight/featured_image.rb +1 -1
- data/app/models/spotlight/page_configurations.rb +1 -0
- data/app/models/spotlight/page_content.rb +2 -0
- data/app/models/spotlight/resources/csv_upload.rb +2 -1
- data/app/models/spotlight/resources/iiif_manifest.rb +2 -0
- data/app/services/spotlight/solr_document_builder.rb +1 -0
- data/app/values/custom_field_name.rb +1 -0
- data/app/views/spotlight/indexing_complete_mailer/documents_indexed.html.erb +9 -0
- data/app/views/spotlight/pages/_form.html.erb +1 -1
- data/app/views/spotlight/shared/_honeypot_field.html.erb +4 -0
- data/app/views/spotlight/shared/_report_a_problem.html.erb +7 -10
- data/config/i18n-tasks.yml +2 -0
- data/config/locales/spotlight.ar.yml +22 -18
- data/config/locales/spotlight.en.yml +13 -6
- data/lib/generators/spotlight/install_generator.rb +22 -1
- data/lib/generators/spotlight/templates/config/initializers/sir_trevor_rails.rb +10 -0
- data/lib/generators/spotlight/templates/config/initializers/spotlight_initializer.rb +2 -0
- data/lib/spotlight/engine.rb +3 -0
- data/lib/spotlight/upload_field_config.rb +1 -0
- data/lib/spotlight/version.rb +1 -1
- data/spec/controllers/spotlight/browse_controller_spec.rb +1 -1
- data/spec/controllers/spotlight/resources/csv_upload_controller_spec.rb +4 -4
- data/spec/examples.txt +1410 -125
- data/spec/features/add_contacts_spec.rb +1 -1
- data/spec/features/browse_category_admin_spec.rb +2 -2
- data/spec/features/create_exhibit_spec.rb +5 -4
- data/spec/features/dashboard_spec.rb +5 -5
- data/spec/features/exhibits/administration_spec.rb +3 -3
- data/spec/features/exhibits/language_create_edit_spec.rb +3 -3
- data/spec/features/javascript/block_controls_spec.rb +2 -0
- data/spec/features/report_a_problem_spec.rb +5 -4
- data/spec/helpers/spotlight/pages_helper_spec.rb +2 -2
- data/spec/jobs/spotlight/add_uploads_from_csv_spec.rb +13 -1
- data/spec/mailers/spotlight/indexing_complete_mailer_spec.rb +11 -1
- data/spec/models/solr_document_spec.rb +2 -3
- data/spec/models/spotlight/access_controls_enforcement_search_builder_spec.rb +1 -0
- data/spec/models/spotlight/featured_image_spec.rb +0 -1
- data/spec/models/spotlight/role_spec.rb +2 -2
- data/spec/services/spotlight/exhibit_import_export_service_spec.rb +14 -2
- data/spec/services/spotlight/iiif_resource_resolver_spec.rb +1 -1
- data/spec/test_app_templates/Gemfile.extra +0 -3
- data/spec/views/spotlight/metadata_configurations/_metadata_field.html.erb_spec.rb +3 -3
- data/spec/views/spotlight/search_configurations/_sort.html.erb_spec.rb +7 -8
- data/vendor/assets/javascripts/leaflet-iiif.js +46 -21
- metadata +54 -24
@@ -17,7 +17,7 @@ describe 'Add a contact to an exhibit', type: :feature do
|
|
17
17
|
fill_in 'Location', with: 'Rome'
|
18
18
|
fill_in 'Telephone', with: '(555) 555-5555 ext. 12345 (mobile)'
|
19
19
|
|
20
|
-
|
20
|
+
find('input[name="commit"]').click
|
21
21
|
end
|
22
22
|
expect(page).to have_content 'The contact was created.'
|
23
23
|
|
@@ -21,7 +21,7 @@ describe 'Browse Category Administration', type: :feature do
|
|
21
21
|
expect(page).to have_css('#save-modal')
|
22
22
|
fill_in 'search_title', with: 'Some search'
|
23
23
|
expect do
|
24
|
-
|
24
|
+
find('input[name="commit"]').click
|
25
25
|
exhibit.searches.reload
|
26
26
|
end.to change { exhibit.searches.count }.by 1
|
27
27
|
expect(exhibit.searches.last.query_params).to eq 'q' => 'xyz'
|
@@ -32,7 +32,7 @@ describe 'Browse Category Administration', type: :feature do
|
|
32
32
|
click_button 'Save this search'
|
33
33
|
expect(page).to have_css('#save-modal')
|
34
34
|
select search.title, from: 'id'
|
35
|
-
|
35
|
+
find('input[name="commit"]').click
|
36
36
|
expect(search.reload.query_params).to eq 'q' => 'xyz'
|
37
37
|
end
|
38
38
|
end
|
@@ -24,7 +24,7 @@ describe 'Create a new exhibit', type: :feature do
|
|
24
24
|
|
25
25
|
fill_in 'Title', with: 'My exhibit title'
|
26
26
|
|
27
|
-
|
27
|
+
find('input[name="commit"]').click
|
28
28
|
|
29
29
|
expect(page).to have_content 'The exhibit was created.'
|
30
30
|
expect(Spotlight::Exhibit.last.slug).to eq 'my-exhibit-title'
|
@@ -39,7 +39,7 @@ describe 'Create a new exhibit', type: :feature do
|
|
39
39
|
fill_in 'Title', with: 'My exhibit title'
|
40
40
|
fill_in 'URL slug', with: 'custom-slug'
|
41
41
|
|
42
|
-
|
42
|
+
find('input[name="commit"]').click
|
43
43
|
|
44
44
|
expect(page).to have_content 'The exhibit was created.'
|
45
45
|
expect(Spotlight::Exhibit.last.slug).to eq 'custom-slug'
|
@@ -51,14 +51,15 @@ describe 'Create a new exhibit', type: :feature do
|
|
51
51
|
fill_in 'Title', with: 'My exhibit title'
|
52
52
|
fill_in 'URL slug', with: 'custom-slug'
|
53
53
|
|
54
|
-
|
54
|
+
find('input[name="commit"]').click
|
55
55
|
|
56
56
|
visit spotlight.new_exhibit_path
|
57
57
|
|
58
58
|
fill_in 'Title', with: 'My exhibit title'
|
59
59
|
fill_in 'URL slug', with: 'custom-slug'
|
60
60
|
|
61
|
-
|
61
|
+
find('input[name="commit"]').click
|
62
|
+
|
62
63
|
expect(page).to have_content 'has already been taken'
|
63
64
|
end
|
64
65
|
end
|
@@ -2,11 +2,6 @@
|
|
2
2
|
|
3
3
|
describe 'Dashboard', type: :feature do
|
4
4
|
let(:exhibit) { FactoryBot.create(:exhibit) }
|
5
|
-
let(:admin) { FactoryBot.create(:exhibit_admin, exhibit: exhibit) }
|
6
|
-
before do
|
7
|
-
login_as(admin)
|
8
|
-
end
|
9
|
-
|
10
5
|
let!(:parent_feature_page) do
|
11
6
|
FactoryBot.create(:feature_page, title: 'Parent Page', exhibit: exhibit)
|
12
7
|
end
|
@@ -18,6 +13,11 @@ describe 'Dashboard', type: :feature do
|
|
18
13
|
exhibit: exhibit
|
19
14
|
)
|
20
15
|
end
|
16
|
+
let(:admin) { FactoryBot.create(:exhibit_admin, exhibit: exhibit) }
|
17
|
+
|
18
|
+
before do
|
19
|
+
login_as(admin)
|
20
|
+
end
|
21
21
|
|
22
22
|
it 'includes a list of recently edited feature pages' do
|
23
23
|
visit spotlight.exhibit_dashboard_path(exhibit)
|
@@ -63,9 +63,9 @@ describe 'Exhibit Administration', type: :feature do
|
|
63
63
|
it 'updates the aria-labels properly', js: true do
|
64
64
|
visit spotlight.edit_exhibit_path(exhibit)
|
65
65
|
|
66
|
-
expect(find_field(email_id_0)['aria-label']).to eq '
|
66
|
+
expect(find_field(email_id_0)['aria-label']).to eq 'Recipient email 1'
|
67
67
|
find('#another-email').click
|
68
|
-
expect(find_field(email_id_1)['aria-label']).to eq '
|
68
|
+
expect(find_field(email_id_1)['aria-label']).to eq 'Recipient email 2'
|
69
69
|
end
|
70
70
|
|
71
71
|
it 'allows deletion of contact email addresses', js: true do
|
@@ -135,7 +135,7 @@ describe 'Exhibit Administration', type: :feature do
|
|
135
135
|
find_all('.contact-email-delete').first.click
|
136
136
|
end
|
137
137
|
|
138
|
-
expect(page).to have_css("##{hidden_input_id_0}~div span.contact-email-delete-error", text: 'Problem deleting
|
138
|
+
expect(page).to have_css("##{hidden_input_id_0}~div span.contact-email-delete-error", text: 'Problem deleting recipient: Not Found')
|
139
139
|
end
|
140
140
|
end
|
141
141
|
end
|
@@ -13,7 +13,7 @@ describe 'Language', type: :feature do
|
|
13
13
|
it 'successfully adds languages' do
|
14
14
|
within '#language' do
|
15
15
|
select 'Albanian'
|
16
|
-
|
16
|
+
find('input[name="commit"]').click
|
17
17
|
end
|
18
18
|
expect(page).to have_css '.flash_messages', text: 'The language was created.'
|
19
19
|
within '#language' do
|
@@ -27,7 +27,7 @@ describe 'Language', type: :feature do
|
|
27
27
|
it 'successfully updates the language' do
|
28
28
|
within '#language' do
|
29
29
|
select 'Albanian'
|
30
|
-
|
30
|
+
find('input[name="commit"]').click
|
31
31
|
end
|
32
32
|
expect(page).to have_css '.flash_messages', text: 'The language was created.'
|
33
33
|
within '#language' do
|
@@ -43,7 +43,7 @@ describe 'Language', type: :feature do
|
|
43
43
|
it 'successfully updates the language' do
|
44
44
|
within '#language' do
|
45
45
|
select 'Albanian'
|
46
|
-
|
46
|
+
find('input[name="commit"]').click
|
47
47
|
end
|
48
48
|
expect(page).to have_css '.flash_messages', text: 'The language was created.'
|
49
49
|
within '#language' do
|
@@ -27,10 +27,12 @@ describe 'Block controls' do
|
|
27
27
|
|
28
28
|
within('.spotlight-block-controls') do
|
29
29
|
expect(page).to have_css('.st-controls-group', count: 2)
|
30
|
+
|
30
31
|
within(first('.st-controls-group')) do
|
31
32
|
expect(page).to have_content 'Standard widgets'
|
32
33
|
expect(page).to have_css('.st-block-controls__button')
|
33
34
|
end
|
35
|
+
|
34
36
|
within(all('.st-controls-group').last) do
|
35
37
|
expect(page).to have_content 'Exhibit item widgets'
|
36
38
|
expect(page).to have_css('.st-block-controls__button')
|
@@ -33,9 +33,10 @@ describe 'Report a Problem', type: :feature do
|
|
33
33
|
it 'accepts a problem report', js: true do
|
34
34
|
visit spotlight.exhibit_solr_document_path(exhibit, id: 'dq287tq6352')
|
35
35
|
click_on 'Feedback'
|
36
|
+
expect(page).to have_css('.alert-primary', text: '/dq287tq6352')
|
36
37
|
expect(find('#contact_form_current_url', visible: false).value).to end_with spotlight.exhibit_solr_document_path(exhibit, id: 'dq287tq6352')
|
37
|
-
fill_in '
|
38
|
-
fill_in '
|
38
|
+
fill_in 'Your name', with: 'Some Body'
|
39
|
+
fill_in 'Your email', with: 'test@example.com'
|
39
40
|
fill_in 'Message', with: 'This is my problem report'
|
40
41
|
|
41
42
|
expect do
|
@@ -47,8 +48,8 @@ describe 'Report a Problem', type: :feature do
|
|
47
48
|
visit spotlight.exhibit_solr_document_path(exhibit, id: 'dq287tq6352')
|
48
49
|
click_on 'Feedback'
|
49
50
|
expect(find('#contact_form_current_url', visible: false).value).to end_with spotlight.exhibit_solr_document_path(exhibit, id: 'dq287tq6352')
|
50
|
-
fill_in '
|
51
|
-
fill_in '
|
51
|
+
fill_in 'Your name', with: 'Some Body'
|
52
|
+
fill_in 'Your email', with: 'test@example.com'
|
52
53
|
page.evaluate_script("$('#contact_form_#{honeypot_field_name}').val('possible_spam@spam.com')")
|
53
54
|
fill_in 'Message', with: 'This is my problem report'
|
54
55
|
|
@@ -109,13 +109,13 @@ describe Spotlight::PagesHelper, type: :helper do
|
|
109
109
|
end
|
110
110
|
|
111
111
|
describe '#content_editor_class' do
|
112
|
-
context '
|
112
|
+
context 'a sir-trevor backed page with a custom class' do
|
113
113
|
it 'has a custom class' do
|
114
114
|
expect(helper.content_editor_class(Spotlight::Page.new)).to eq 'js-st-instance'
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
118
|
-
context '
|
118
|
+
context 'a sir-trevor backed page with a derived class' do
|
119
119
|
it 'derives a css class name from the editor type' do
|
120
120
|
expect(helper.content_editor_class(Spotlight::Page.new(content_type: 'Something::Custom'))).to eq 'js-something-custom-instance'
|
121
121
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
describe Spotlight::
|
3
|
+
describe Spotlight::AddUploadsFromCsv do
|
4
4
|
subject(:job) { described_class.new(data, exhibit, user) }
|
5
5
|
|
6
6
|
let(:exhibit) { FactoryBot.create(:exhibit) }
|
@@ -40,4 +40,16 @@ describe Spotlight::AddUploadsFromCSV do
|
|
40
40
|
|
41
41
|
job.perform_now
|
42
42
|
end
|
43
|
+
|
44
|
+
context 'with errors' do
|
45
|
+
it 'collects errors uploaded resources for each row of data' do
|
46
|
+
allow(Spotlight::IndexingCompleteMailer).to receive(:documents_indexed).and_return(double(deliver_now: true))
|
47
|
+
job.perform_now
|
48
|
+
expect(Spotlight::IndexingCompleteMailer).to have_received(:documents_indexed).with(
|
49
|
+
data, exhibit, user,
|
50
|
+
indexed_count: 1,
|
51
|
+
errors: { 1 => array_including(match(/relative URI: x/)), 2 => array_including(match(/Upload is invalid/)) }
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|
43
55
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
describe Spotlight::IndexingCompleteMailer do
|
4
|
-
subject { described_class.documents_indexed [1, 2, 3], exhibit, user }
|
4
|
+
subject { described_class.documents_indexed [1, 2, 3], exhibit, user, indexed_count: 3 }
|
5
5
|
|
6
6
|
let(:user) { double(email: 'test@example.com') }
|
7
7
|
let(:exhibit) { double(title: 'Exhibit title') }
|
@@ -29,4 +29,14 @@ describe Spotlight::IndexingCompleteMailer do
|
|
29
29
|
it 'includes the exhibit title' do
|
30
30
|
expect(subject.body.encoded).to match exhibit.title
|
31
31
|
end
|
32
|
+
|
33
|
+
context 'with errors' do
|
34
|
+
subject { described_class.documents_indexed [], exhibit, user, indexed_count: 0, errors: { 1 => ['missing title'], 20 => ['whatever'] } }
|
35
|
+
|
36
|
+
it 'includes some errors' do
|
37
|
+
expect(subject.body.encoded).to match 'Errors'
|
38
|
+
expect(subject.body.encoded).to match 'Row 1: missing title'
|
39
|
+
expect(subject.body.encoded).to match 'Row 20: whatever'
|
40
|
+
end
|
41
|
+
end
|
32
42
|
end
|
@@ -4,14 +4,13 @@ describe SolrDocument, type: :model do
|
|
4
4
|
subject { document }
|
5
5
|
|
6
6
|
let(:document) { described_class.new(id: 'abcd123') }
|
7
|
+
let(:exhibit_alt) { FactoryBot.create(:exhibit) }
|
8
|
+
let(:exhibit) { FactoryBot.create(:exhibit) }
|
7
9
|
|
8
10
|
before do
|
9
11
|
allow(subject).to receive_messages(reindex: nil)
|
10
12
|
end
|
11
13
|
|
12
|
-
let(:exhibit_alt) { FactoryBot.create(:exhibit) }
|
13
|
-
let(:exhibit) { FactoryBot.create(:exhibit) }
|
14
|
-
|
15
14
|
its(:to_key) { is_expected.to eq ['abcd123'] }
|
16
15
|
its(:persisted?) { is_expected.to be_truthy }
|
17
16
|
|
@@ -37,10 +37,10 @@ describe Spotlight::Role, type: :model do
|
|
37
37
|
|
38
38
|
describe 'that points at a user with an existing role' do
|
39
39
|
let(:user) { FactoryBot.create(:user) }
|
40
|
-
before { described_class.create!(role: 'curator', user: user) }
|
41
|
-
|
42
40
|
let(:args) { { role: 'curator', user_key: user.email } }
|
43
41
|
|
42
|
+
before { described_class.create!(role: 'curator', user: user) }
|
43
|
+
|
44
44
|
it 'is valid' do
|
45
45
|
expect(subject).not_to be_valid
|
46
46
|
expect(subject.errors.messages).to eq(user_key: ['already a member of this exhibit'])
|
@@ -412,10 +412,22 @@ describe Spotlight::ExhibitImportExportService do
|
|
412
412
|
new_export = described_class.new(e).as_json
|
413
413
|
|
414
414
|
actual = _deep_transform_values_in_object(new_export) do |v|
|
415
|
-
v.
|
415
|
+
if DateTime.parse(v.to_s)
|
416
|
+
nil
|
417
|
+
else
|
418
|
+
v
|
419
|
+
end
|
420
|
+
rescue ArgumentError
|
421
|
+
nil
|
416
422
|
end
|
417
423
|
expected = _deep_transform_values_in_object(export) do |v|
|
418
|
-
v.
|
424
|
+
if DateTime.parse(v.to_s)
|
425
|
+
nil
|
426
|
+
else
|
427
|
+
v
|
428
|
+
end
|
429
|
+
rescue ArgumentError
|
430
|
+
nil
|
419
431
|
end
|
420
432
|
expect(actual).to include expected
|
421
433
|
end
|
@@ -68,7 +68,7 @@ describe Spotlight::IiifResourceResolver do
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
context 'when the stored
|
71
|
+
context 'when the stored image ID is not present' do
|
72
72
|
it 'raises a ManifestError' do
|
73
73
|
resource.iiif_image_id = 'not-a-real-image-id'
|
74
74
|
|
@@ -2,7 +2,10 @@
|
|
2
2
|
|
3
3
|
describe 'spotlight/metadata_configurations/_metadata_field', type: :view do
|
4
4
|
let(:exhibit) { FactoryBot.create(:exhibit) }
|
5
|
+
let(:field) { Blacklight::Configuration::Field.new immutable: OpenStruct.new(another_view_type: false) }
|
6
|
+
let(:builder) { ActionView::Helpers::FormBuilder.new 'z', nil, view, {} }
|
5
7
|
let(:p) { 'spotlight/metadata_configurations/metadata_field.html.erb' }
|
8
|
+
|
6
9
|
before do
|
7
10
|
assign(:exhibit, exhibit)
|
8
11
|
assign(:blacklight_configuration, exhibit.blacklight_configuration)
|
@@ -14,9 +17,6 @@ describe 'spotlight/metadata_configurations/_metadata_field', type: :view do
|
|
14
17
|
)
|
15
18
|
end
|
16
19
|
|
17
|
-
let(:field) { Blacklight::Configuration::Field.new immutable: OpenStruct.new(another_view_type: false) }
|
18
|
-
let(:builder) { ActionView::Helpers::FormBuilder.new 'z', nil, view, {} }
|
19
|
-
|
20
20
|
it 'uses the index_field_label helper to render the label' do
|
21
21
|
allow(view).to receive(:index_field_label).with(anything, 'some_key').and_return 'Some label'
|
22
22
|
render partial: p, locals: { key: 'some_key', config: field, f: builder }
|
@@ -2,6 +2,13 @@
|
|
2
2
|
|
3
3
|
describe 'spotlight/search_configurations/_sort', type: :view do
|
4
4
|
let(:exhibit) { FactoryBot.create(:exhibit) }
|
5
|
+
let(:f) do
|
6
|
+
form_helper = nil
|
7
|
+
controller.view_context.bootstrap_form_for(exhibit.blacklight_configuration, url: '/update') do |f|
|
8
|
+
form_helper = f
|
9
|
+
end
|
10
|
+
form_helper
|
11
|
+
end
|
5
12
|
|
6
13
|
before do
|
7
14
|
original_config = Spotlight::Engine.blacklight_config.deep_dup
|
@@ -16,14 +23,6 @@ describe 'spotlight/search_configurations/_sort', type: :view do
|
|
16
23
|
)
|
17
24
|
end
|
18
25
|
|
19
|
-
let(:f) do
|
20
|
-
form_helper = nil
|
21
|
-
controller.view_context.bootstrap_form_for(exhibit.blacklight_configuration, url: '/update') do |f|
|
22
|
-
form_helper = f
|
23
|
-
end
|
24
|
-
form_helper
|
25
|
-
end
|
26
|
-
|
27
26
|
it 'has a disabled relevance sort option' do
|
28
27
|
render partial: 'spotlight/search_configurations/sort', locals: { f: f }
|
29
28
|
expect(rendered).to have_selector "input[name='blacklight_configuration[sort_fields][relevance][enable]'][disabled='disabled']"
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Leaflet-IIIF
|
2
|
+
* Leaflet-IIIF 3.0.0
|
3
3
|
* IIIF Viewer for Leaflet
|
4
4
|
* by Jack Reed, @mejackreed
|
5
5
|
*/
|
@@ -32,7 +32,7 @@ L.TileLayer.Iiif = L.TileLayer.extend({
|
|
32
32
|
}
|
33
33
|
|
34
34
|
options = L.setOptions(this, options);
|
35
|
-
this.
|
35
|
+
this._infoPromise = null;
|
36
36
|
this._infoUrl = url;
|
37
37
|
this._baseUrl = this._templateUrl();
|
38
38
|
this._getInfo();
|
@@ -48,27 +48,39 @@ L.TileLayer.Iiif = L.TileLayer.extend({
|
|
48
48
|
miny = (y * tileBaseSize),
|
49
49
|
maxx = Math.min(minx + tileBaseSize, _this.x),
|
50
50
|
maxy = Math.min(miny + tileBaseSize, _this.y);
|
51
|
-
|
51
|
+
|
52
52
|
var xDiff = (maxx - minx);
|
53
53
|
var yDiff = (maxy - miny);
|
54
54
|
|
55
|
+
// Canonical URI Syntax for v2
|
56
|
+
var size = Math.ceil(xDiff / scale) + ',';
|
57
|
+
if (_this.type === 'ImageService3') {
|
58
|
+
// Cannonical URI Syntax for v3
|
59
|
+
size = size + Math.ceil(yDiff / scale);
|
60
|
+
}
|
61
|
+
|
55
62
|
return L.Util.template(this._baseUrl, L.extend({
|
56
63
|
format: _this.options.tileFormat,
|
57
64
|
quality: _this.quality,
|
58
65
|
region: [minx, miny, xDiff, yDiff].join(','),
|
59
66
|
rotation: 0,
|
60
|
-
size:
|
67
|
+
size: size
|
61
68
|
}, this.options));
|
62
69
|
},
|
63
70
|
onAdd: function(map) {
|
64
71
|
var _this = this;
|
65
72
|
|
66
|
-
// Wait for
|
67
|
-
|
73
|
+
// Wait for info.json fetch and parse to complete
|
74
|
+
Promise.all([_this._infoPromise]).then(function() {
|
75
|
+
// Store unmutated imageSizes
|
76
|
+
_this._imageSizesOriginal = _this._imageSizes.slice(0);
|
68
77
|
|
69
78
|
// Set maxZoom for map
|
70
79
|
map._layersMaxZoom = _this.maxZoom;
|
71
80
|
|
81
|
+
// Call add TileLayer
|
82
|
+
L.TileLayer.prototype.onAdd.call(_this, map);
|
83
|
+
|
72
84
|
// Set minZoom and minNativeZoom based on how the imageSizes match up
|
73
85
|
var smallestImage = _this._imageSizes[0];
|
74
86
|
var mapSize = _this._map.getSize();
|
@@ -88,9 +100,6 @@ L.TileLayer.Iiif = L.TileLayer.extend({
|
|
88
100
|
_this._prev_map_layersMinZoom = _this._map._layersMinZoom;
|
89
101
|
_this._map._layersMinZoom = newMinZoom;
|
90
102
|
|
91
|
-
// Call add TileLayer
|
92
|
-
L.TileLayer.prototype.onAdd.call(_this, map);
|
93
|
-
|
94
103
|
if (_this.options.fitBounds) {
|
95
104
|
_this._fitBounds();
|
96
105
|
}
|
@@ -112,12 +121,16 @@ L.TileLayer.Iiif = L.TileLayer.extend({
|
|
112
121
|
tile.tile.style.height = height + 'px';
|
113
122
|
|
114
123
|
});
|
124
|
+
})
|
125
|
+
.catch(function(err){
|
126
|
+
console.error(err);
|
115
127
|
});
|
116
128
|
},
|
117
129
|
onRemove: function(map) {
|
118
130
|
var _this = this;
|
119
|
-
|
131
|
+
|
120
132
|
map._layersMinZoom = _this._prev_map_layersMinZoom;
|
133
|
+
_this._imageSizes = _this._imageSizesOriginal;
|
121
134
|
|
122
135
|
// Remove maxBounds set for this image
|
123
136
|
if(_this.options.setMaxBounds) {
|
@@ -156,9 +169,14 @@ L.TileLayer.Iiif = L.TileLayer.extend({
|
|
156
169
|
_getInfo: function() {
|
157
170
|
var _this = this;
|
158
171
|
|
159
|
-
|
160
|
-
|
161
|
-
|
172
|
+
_this._infoPromise = fetch(_this._infoUrl)
|
173
|
+
.then(function(response) {
|
174
|
+
return response.json();
|
175
|
+
})
|
176
|
+
.catch(function(err){
|
177
|
+
console.error(err);
|
178
|
+
})
|
179
|
+
.then(function(data) {
|
162
180
|
_this.y = data.height;
|
163
181
|
_this.x = data.width;
|
164
182
|
|
@@ -176,6 +194,7 @@ L.TileLayer.Iiif = L.TileLayer.extend({
|
|
176
194
|
}else {
|
177
195
|
_this.profile = data.profile;
|
178
196
|
}
|
197
|
+
_this.type = data.type;
|
179
198
|
|
180
199
|
_this._setQuality();
|
181
200
|
|
@@ -197,10 +216,13 @@ L.TileLayer.Iiif = L.TileLayer.extend({
|
|
197
216
|
};
|
198
217
|
|
199
218
|
// Calculates maximum native zoom for the layer
|
200
|
-
_this.maxNativeZoom = Math.max(
|
201
|
-
ceilLog2(_this.
|
219
|
+
_this.maxNativeZoom = Math.max(
|
220
|
+
ceilLog2(_this.x / _this.options.tileSize),
|
221
|
+
ceilLog2(_this.y / _this.options.tileSize),
|
222
|
+
0
|
223
|
+
);
|
202
224
|
_this.options.maxNativeZoom = _this.maxNativeZoom;
|
203
|
-
|
225
|
+
|
204
226
|
// Enable zooming further than native if maxZoom option supplied
|
205
227
|
if (_this._customMaxZoom && _this.options.maxZoom > _this.maxNativeZoom) {
|
206
228
|
_this.maxZoom = _this.options.maxZoom;
|
@@ -208,7 +230,7 @@ L.TileLayer.Iiif = L.TileLayer.extend({
|
|
208
230
|
else {
|
209
231
|
_this.maxZoom = _this.maxNativeZoom;
|
210
232
|
}
|
211
|
-
|
233
|
+
|
212
234
|
for (var i = 0; i <= _this.maxZoom; i++) {
|
213
235
|
scale = Math.pow(2, _this.maxNativeZoom - i);
|
214
236
|
width_ = Math.ceil(_this.x / scale);
|
@@ -221,10 +243,11 @@ L.TileLayer.Iiif = L.TileLayer.extend({
|
|
221
243
|
|
222
244
|
_this._tierSizes = tierSizes;
|
223
245
|
_this._imageSizes = imageSizes;
|
224
|
-
|
225
|
-
|
226
|
-
|
246
|
+
})
|
247
|
+
.catch(function(err){
|
248
|
+
console.error(err);
|
227
249
|
});
|
250
|
+
|
228
251
|
},
|
229
252
|
|
230
253
|
_setQuality: function() {
|
@@ -259,7 +282,6 @@ L.TileLayer.Iiif = L.TileLayer.extend({
|
|
259
282
|
return this._infoToBaseUrl() + '{region}/{size}/{rotation}/{quality}.{format}';
|
260
283
|
},
|
261
284
|
_isValidTile: function(coords) {
|
262
|
-
var tileBounds = this._tileCoordsToBounds(coords);
|
263
285
|
var _this = this;
|
264
286
|
var zoom = _this._getZoomForUrl();
|
265
287
|
var sizes = _this._tierSizes[zoom];
|
@@ -276,6 +298,9 @@ L.TileLayer.Iiif = L.TileLayer.extend({
|
|
276
298
|
return true;
|
277
299
|
}
|
278
300
|
},
|
301
|
+
_tileShouldBeLoaded: function(coords) {
|
302
|
+
return this._isValidTile(coords);
|
303
|
+
},
|
279
304
|
_getInitialZoom: function (mapSize) {
|
280
305
|
var _this = this;
|
281
306
|
var tolerance = 0.8;
|